邮政编码查询

时间:2011-01-17 17:53:33

标签: php mysql google-maps-api-3 postal-code

客户希望在其网站上有一个页面,用户可以在该页面中搜索其产品系列的库存商。他们想要的是能够进入英国邮政编码以及他们的库存商列表以最接近的顺序出现。

有没有办法利用Google地图来确定最近的供应商?

我有一个PHP MySQL数据库,包含所有供应商的邮政编码和详细信息,我也会使用该用户的邮政编码。

5 个答案:

答案 0 :(得分:3)

我认为您需要使用Ordnance Survey CodePoint数据将您的邮政编码映射到经度和纬度。 Codepoint以commercial product提供,或者还有Codepoint Open

一旦获得纬度和经度,就可以使用像Haversine或Vincenty这样的标准算法来计算点之间的距离

修改

可以找到CodePoint Open CSV文件的结构here。请注意,位置保持为Northings和Esatings而不是Longitude和Latitude,因此需要转换。网上有很多关于此的文章,例如

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 Northings / Eastings是基于Airy 1830椭球而不是谷歌地图(和大多数GSM系统)使用的WGS84模型。不允许这种差异可以让你在康沃尔和东安格利亚之间的70-120米之间。

您还可以在Movable Type站点找到PHP函数进行此转换(任何PHP开发人员的基本读物,使用GeoData。我建议在您的stockist数据库中添加几列关于经度和纬度的列,以及使用Codepoint数据更新所有现有数据的一次性脚本,然后修改库存商的插入/更新例程以使此信息保持最新。 使用PHP,此转换的另一个解决方案是Jonathan Stott的PHPCoord

为了在数据库查询中获得更高的性能,请在计算距离之前在“边界框”上查找lat / long。我已经解释了如何回应similar query

答案 1 :(得分:0)

我认为你需要更多的数据。我建议你需要存储每个英国邮政编码的纬度和经度以及邮政编码本身。我认为这些数据可以从皇家邮政获得,但是我还记得在某个地方阅读它也将在公共领域提供。让用户输入他们的邮政编码,在数据库中查找他们的经度和经度,然后使用它来执行另一个计算最近供应商的查询,可能在一定的英里数内。您可以创建一个存储过程来在db上执行所有这些操作。 This post似乎有一些关于如何执行此操作的详细信息。

答案 2 :(得分:0)

如果您希望它快速,那么预先计算彼此之间某个半径范围内的邮政编码之间的距离 - 请参阅以下内容:

Calculate distance between zip codes and users

除非您认为用户愿意旅行超过100英里才能购买产品,否则这种情况应该可以正常使用吗?

答案 3 :(得分:0)

此开放式邮政编码geocoding API可能对您有用,而非Google地图。正如其他人所提到的,一旦你对两个点都有很长的时间,你就可以使用标准的算法找到距离。 previous question包含有关如何在SQL中直接执行此操作的一些信息。

答案 4 :(得分:0)

您可能会发现此网站有用:SQL/CSV Postcode Database

我之前用过这个来从邮政编码“outcode”中查找long / lat。

还有一个PHP脚本(我没有测试过),它可以计算两个邮政编码之间的距离。