【发布时间】:2012-01-10 12:09:07
【问题描述】:
我在 MySQL 数据库中保存了一系列区域(城市、地区等)。目前,这些仅包含人类可读的名称。
如何选择包含特定纬度/经度点的所有记录?如何保存区域信息?是否可以与 Google Maps API 搭配使用?
(是的,不幸的是,我一直使用 MySQL。)
【问题讨论】:
标签: php mysql google-maps geocoding
我在 MySQL 数据库中保存了一系列区域(城市、地区等)。目前,这些仅包含人类可读的名称。
如何选择包含特定纬度/经度点的所有记录?如何保存区域信息?是否可以与 Google Maps API 搭配使用?
(是的,不幸的是,我一直使用 MySQL。)
【问题讨论】:
标签: php mysql google-maps geocoding
这在普通 MySQL 中并不容易。大多数时候,人们通过将 GIS 扩展用于他们的数据库引擎来解决这个问题,让您存储您正在寻找的“区域”信息的类型。 MySQL 有 Spatial Extensions 应该可以解决问题,您可能正在寻找的确切功能,如 ST_Contains 已列出 here。
注意:您需要 MySQL >= 5.6.1 才能从 contains 函数中获得预期的行为,否则它们只是基于哑矩形的操作。
【讨论】:
您最好做一些事情,例如使用 Google API 收集给定邮政编码的纬度和经度(假设您有邮政编码)并构建所有纬度/经度/邮政编码的对象,然后编写 PHP 脚本/函数只需循环通过带有新纬度和经度的邮政编码更新您的数据库记录的数组
例如:
$data = array ( array ( 'e11', '0.01111', '5.313133' ), array ( 'e11', '0.01111', '5.313133' ) );
foreach ( $data as $p )
{
query ( 'UPDATE table SET lat = "' . $p['lat'] . '", lng = "' . $p['long'] . '" WHERE postcode = "' . $p['postcode'] . '" );
}
然后将所有这些长背心都收集起来并放入一个真正循环的格式。
【讨论】: