繁体   English   中英

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

[英]Find ZIP Code from Latitude and Longitude

我知道有一些提供这些信息的Web服务,但是它们可以限于每天的请求。 我有大约114,000条记录,需要邮政编码。 我有一个充满邮政编码的数据库,上面有经纬度。 但是我不确定如何根据邮政编码lat和long计算给定的lat和long。

基本上,我需要对照提供的邮政编码lat和long交叉引用给定的地址lat和long。 我可以使用PHP,Java或MySQL Procedure或仅进行计算。

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

$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,则可以在概念上提出几乎所有需要的经纬度组合。 或者,您也可以找到一个包含所有美国邮政编码的数据库,该数据库也包含经纬度,然后根据匹配的邮政编码对一个表进行查询以插入到另一个表中。 我在某处有这样的邮政编码数据库。

也可能我建议http://www.maxmind.com/app/geolite它永远都不会比您想付出的要少,它每隔一段时间就会变化一次。 通过此操作,您几乎可以得到所有基于纬度的纬度/经度组合作为参考点(根据访问者的IP来作为参考点)(在某些情况下,由于IP可能从一个城镇或2个城市的枢纽中散发出来,因此略有不同)。总比没有好,它只给您服务器可以处理的限制,而且不用担心maxmind使用条款之外的API限制。

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

由于您已经有了纬度和经度的数据库,因此我假设它描述了一组从(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,并验证两个表中使用的坐标系是否相同。 您可能需要通过转换或适当地更改运算符来进行调整。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM