2010-04-12 110 views
10

我有我的大的数据库,包含了像SL5 9JH值邮政编码传递到邮政编码maps.google.com,LU1 3TQ取纬度经度通过使用Javascript

现在,当我在上面粘贴到邮政编码maps.google.com它指向一个完美的位置..

我的要求就像我想通过邮政编码maps.google.com,它应该返回相关的纬度和经度的指出位置,我想存储在我的数据库中。

所以,最有可能应该有一些JavaScript为...如果任何人有关于该请提供它的另一个想法..

在此先感谢...

回答

10

您描述的过程的技术术语称为reverse geocoding。 Google提供 The Google Geocoding Web Service New working Google Geocoding Link,您可以在服务器端进行反向地理编码,而不是在客户端使用JavaScript。

例如,如果你尝试在浏览器下面的网址,你会回来的q参数传递的邮政编码的经度和纬度,以CSV格式:

http://maps.google.com/maps/geo?q=SL59JH,+UK&output=csv&sensor=false 

http://maps.google.com/maps/geo?q=LU13TQ,+UK&output=csv&sensor=false 

这是你会怎样能够反向地理您的邮政编码在PHP,例如:

$url = 'http://maps.google.com/maps/geo?q=SL59JH,+UK&output=csv&sensor=false'; 

$data = @file_get_contents($url); 

$result = explode(",", $data); 

echo $result[0]; // status code 
echo $result[1]; // accuracy 
echo $result[2]; // latitude 
echo $result[3]; // longitude 

注意,作为Pekka suggested in another answerGoogle Maps API Terms of Use似乎prohibit the storage of the results,除非店里充当数据的高速缓存将ü sed在谷歌地图。您可能希望与Google取得联系,并询问Google Maps API Premier有更灵活的地理编码要求条款。

+0

@Daniel ...非常感谢您的反馈..我会解决你的给定解决方案,并会回复你... – Nirmal 2010-04-12 12:26:47

+0

这是仍然工作,因为在我的浏览器中使用上述示例我回到610,0,0,0。无论我的邮政编码样本是什么,总是610,0,0,0? – QFDev 2013-10-10 08:39:34

+0

我认为这是因为这个答案中的例子使用了旧版本的maps API。一个新的例子会是这样的:http://maps.googleapis.com/maps/api/geocode/json?address=SL59JH,+UK&sensor=false。显然,提取lat/lng的查询将需要更改,因为输出现在返回JSON而不是CSV。 – Dan 2014-03-13 10:59:28

2

Google Geocoding API这样做,虽然如果我没有记错,他们的服务条款禁止本地存储地理编码结果。

+0

我做了一个基于这个应用程序,我不记得有这个限制。我认为反对逻辑不是为了保存结果,因为它们不会在时间上发生变化,从而为Google保留未来的ping。 – 2010-04-15 09:44:00

+0

@Elzo你是对的,如果在谷歌地图应用中使用它,它可以“暂时”缓存结果:10.3 http://code.google.com/intl/zh-CN/apis/maps/terms.html – 2010-04-15 09:46:07

+0

有没有人知道如果这是一个https版本,通过邮政编码获取长期和格子? – AngularM 2016-01-11 13:39:31

9

军械测量局在知识共享许可证(CC-BY v3,IIRC)上有released the postcode locations。相反,使用它会少很多麻烦(合法性更好)。

甚至还有用WGS84(又名GPS)版本协调由mySociety

+0

+1如果你有方便的话,一个到军械调查数据转储的链接也会很好。 – 2010-04-12 20:21:36

+0

它链接后的链接,不能看到它在第一页上承诺没有20mb zip文件。 5分钟后,我放弃了。 – brux 2014-05-01 15:12:31

+0

@brux从我给出的链接中,勾选“Code-Point®Open”产品的下载框,转到下一步,填写表单,然后等待带有下载链接的电子邮件。就那么简单。 – 2014-05-01 16:11:28

1

镜像我知道这是一个老问题,但只是小打小闹在这里与我如何设法达到同样的事情(在PHP中,但应相当简单):

  1. 我有一个数以千计不同格式的邮政编码的数据库。我打扫他们的了每一个,要均匀,用这个功能和批量更新:

    function clean_postcode($postcode) 
    { 
        $out = preg_replace("/[^a-zA-Z0-9]/", '',strtoupper($postcode)); 
    
        if(strlen($out)>3) 
        { 
         $out = substr($out, 0, (strlen($out) -3)).' '.substr($out, -3); 
        } 
    
        return $out; 
    } 
    
  2. 现在所有邮政编码是统一格式,我下载并导入地形测量局的代码点数据组(免费) - https://www.ordnancesurvey.co.uk/opendatadownload/products.html

  3. 我在一个单独的codepoint表中将其所有CSV导入到我的数据库中。从每个CSV导入邮政编码,以及Eastings和Northings值。

  4. 我在我的数据库中的所有Ordnance Survey数据上批量再次运行​​函数。大约50%的邮政编码有空格,50%的编码没有 - 之后,统一设置。

  5. 我跑了每个每个邮编在codepoint表下面的PHP脚本,并拯救了纬度和经度值返回到这个表:http://bramp.net/blog/os-easting-northing-to-lat-long

  6. 全部完成!您现在可以匹配并根据格式良好的邮政编码拉取Lat/Lon值。

延伸阅读:http://www.deepbluesky.com/blog/-/converting-os-coodinates-into-longitude-latitude_7/

13

快速注意那些找到这个苏答案。 Daniel Vassallo的答案使用了现在已被弃用的Google Geocoding API V2。新V3 API使用像这样的请求格式:

http://maps.googleapis.com/maps/api/geocode/output?parameters 

用于邮政编码查询的例子,JSON格式返回的数据是:

http://maps.googleapis.com/maps/api/geocode/json?address=SL59JH,+UK&sensor=false 

这将返回一个JSON阵列,其包括lat和长在结果>的几何性质 - >位置 - > lat和结果>的几何性质 - >位置 - > LNG

实施例响应:

{ 
"results" : [ 
    { 
    "address_components" : [ 
     { 
      "long_name" : "SL5 9JH", 
      "short_name" : "SL5 9JH", 
      "types" : [ "postal_code" ] 
     }, 
     { 
      "long_name" : "Windsor and Maidenhead", 
      "short_name" : "Windsor and Maidenhead", 
      "types" : [ "administrative_area_level_2", "political" ] 
     }, 
     { 
      "long_name" : "United Kingdom", 
      "short_name" : "GB", 
      "types" : [ "country", "political" ] 
     }, 
     { 
      "long_name" : "Ascot", 
      "short_name" : "Ascot", 
      "types" : [ "postal_town" ] 
     } 
    ], 
    "formatted_address" : "Ascot, Windsor and Maidenhead SL5 9JH, UK", 
    "geometry" : { 
     "bounds" : { 
      "northeast" : { 
       "lat" : 51.39655490000001, 
       "lng" : -0.66024660 
      }, 
      "southwest" : { 
       "lat" : 51.39457330, 
       "lng" : -0.6624574999999999 
      } 
     }, 
     "location" : { 
      "lat" : 51.39539040, 
      "lng" : -0.66096740 
     }, 
     "location_type" : "APPROXIMATE", 
     "viewport" : { 
      "northeast" : { 
       "lat" : 51.39691308029150, 
       "lng" : -0.6600030697084980 
      }, 
      "southwest" : { 
       "lat" : 51.39421511970851, 
       "lng" : -0.6627010302915021 
      } 
     } 
    }, 
    "types" : [ "postal_code" ] 
    } 
], 
"status" : "OK" 
} 

API规范可在这里:https://developers.google.com/maps/documentation/geocoding/

0

退房ALgolia地方here。超快速,开放源代码和麻省理工学院