客户希望在其网站上有一个页面,用户可以在其中搜索其产品系列的库存商。他们想要的是能够输入英国邮政编码并让库存商列表以最接近的顺序显示。
有没有办法利用 Google map 来确定最近的供应商?
我有一个 PHP MySQL 数据库,其中包含所有供应商的邮政编码和详细信息,我还将拥有要使用的用户的邮政编码。
最佳答案
我认为您需要 Ordnance Survey CodePoint 数据将邮政编码映射到经度和纬度。代码点可用作 commercial product ,或者还有Codepoint Open
一旦获得了纬度和经度,就可以使用标准算法(例如 Haversine 或 Vincenty)来计算点之间的距离
编辑
CodePoint 的结构可以打开 CSV 文件 here 。请注意,位置以北距和东距而不是经度和纬度保存,因此需要转换。网上有很多关于此的文章,例如
http://www.deepbluesky.com/blog/-/converting-os-coodinates-into-longitude-latitude_7/
http://mediakey.dk/~cc/convert-northing-and-easting-utm-to-longitude-and-latitude/
但您需要注意,OS 北距/东距基于 Airy 1830 椭球体,而不是 Google map (以及大多数 GSM 系统)使用的 WGS84 模型。如果不考虑这种差异,康沃尔郡和东安格利亚之间的距离可能会相差 70-120m。
您还可以在 Movable Type 找到执行此转换的 PHP 函数。站点(对于任何使用 GeoData 的 PHP 开发人员来说都是必备读物。我建议在您的库存数据库中添加几列用于经度和纬度,以及一个一次性脚本来使用代码点数据更新所有现有数据,然后修改您的为库存商插入/更新例程以保持此信息最新。 使用 PHP,此转换的另一个解决方案是 PHPCoord作者:乔纳森·斯托特
为了提高数据库查询的性能,请在计算距离之前根据“边界框”查找纬度/经度。我已经解释了如何执行此操作以响应 similar query .
关于php - 邮政编码查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4716183/