从纬度和经度中查找邮政编码



我知道有些web服务有这些信息,但它们可能仅限于每天的请求。我有大约114000张唱片需要邮政编码。我有一个装满邮政编码的数据库,里面有纬度和经度。然而,我不确定如何根据邮政编码lat和long计算给定的lat和long。

基本上,我需要将给定的地址lat和long与提供的邮政编码lat和long进行交叉引用。我可以使用PHP、Java或MySQL程序,也可以只是计算。

我可以给你一块垫脚石,但在这种情况下,仅此而已。

$distance = 10;
$latitude = 37.295092;
$longitude = -121.896490;
$sql = "SELECT loc.*, (((acos(sin(($latitude*pi()/180)) * sin((`latitude`*pi()/180))+cos(($latitude*pi()/180)) * cos((`latitude`*pi()/180)) * cos((($longitude - `longitude`)*pi()/180))))*180/pi())*60*1.1515) AS `distance` FROM table_with_lonlat_ref loc HAVING distance < $distance"

如果您创建一个查询,在您拥有的两个表之间执行JOIN,并将距离减少到1或2,那么在概念上,您可以获得所需的几乎所有lat/lon组合。或者,您还可以找到一个包含所有美国邮政编码的数据库,该数据库也包含lat/lon,然后根据匹配的邮政编码查询一个表以插入另一个表。我在某个地方有这样一个邮政编码数据库。

我也可以建议http://www.maxmind.com/app/geolite如果你不想为它买单,它永远不会完整,而且它每隔一段时间就会发生变化。从这一点上,你可以获得几乎所有可能的lat/lon组合,作为基于访问者IP的参考点(在某些情况下,它会稍微关闭,因为IP可能从一个城镇或两个城镇以外的中心流出。但它总比什么都没有好,只给你的服务器可以处理的限制,并且不必担心API限制超出了maxmind的使用条款。

总之,我已经在很多网站上使用这种组合有一段时间了,到目前为止还没有遇到很多问题。我知道这不是你问题的直接答案,但我希望它能让你找到一个解决方案

由于您已经有了一个lats和long的数据库,我假设它描述了一组从(latA,lonA)到(latB,lonB)的矩形区域,每个区域都有一个相关的邮政编码。我还假设(或建议)您已经为这四个字段编制了索引。

查询可以很容易地匹配坐标(coordA,coordB)是否适合描述该矩形的两个范围。

update coords set zip_code=(
  select zip_code from zip_codes 
  where coords.coordA >= zip_codes.latA 
    and coords.coordA <= zip_codes.latB
    and coords.coordB >= zip_codes.lonA
    and coords.coordB <= zip_codes.lonB
    limit 1
)

Caviat:您应该验证latA<latB和lonA<lonB,并验证您在两个表中使用的坐标系是否相同。您可能需要通过转换或适当更改运算符来进行调整。

最新更新