通过使用Javascript将邮政编码传递到maps.google.com来获取纬度经度

时间:2010-04-12 12:02:34

标签: asp.net javascript google-maps geolocation

我的大型数据库中有邮政编码,其中包含 SL5 9JH,LU1 3TQ 等值。

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

我的要求是,我想将邮政编码传递给maps.google.com,它应该返回该指向位置的相关纬度和经度,我想存储在我的数据库中。

所以,很可能应该有一些javascript ...如果有人对此有另一个想法请提供..

提前致谢...

6 个答案:

答案 0 :(得分:13)

发现这个SO答案的人的快速说明。 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和long in results-> geometry-> location-> lat和results-> geometry-> location-> 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/

答案 1 :(得分:11)

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

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

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,除非商店充当Google地图中使用的数据的缓存。您可能希望与Google取得联系并咨询Google Maps API Premier,以便为您的地理编码要求提供更灵活的使用条款。

答案 2 :(得分:9)

军械测量有released the postcode locations的知识共享许可证(CC-BY v3,IIRC)。

。使用它会减少麻烦(并且在法律上更清晰)。

甚至还有一个由mySociety镜像的WGS84(a.k.a.GPS)坐标的版本

答案 3 :(得分:2)

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

答案 4 :(得分: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数据上再次批量运行clean_postcode()功能。大约50%的邮政编码有空格,50%没有 - 在此之后统一设置。

  5. 我在codepoint表中的每个邮政编码上运行了以下PHP脚本,并保存了返回到此表中的纬度和经度值:http://bramp.net/blog/os-easting-northing-to-lat-long

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

  7. 进一步阅读:http://www.deepbluesky.com/blog/-/converting-os-coodinates-into-longitude-latitude_7/

答案 5 :(得分:-1)

查看ALgolia地点will hide。超快,开源和MIT