2010-04-12 7 views
10

내가 SL5 9JH 같은 값을 포함 내 큰 데이터베이스에서 우편 번호를을 사용하여 maps.google.com에 우편 번호를 전달하여 LU1 이제 3TQ, 자바 스크립트

를 위도 경도를 가져 오기 maps.google.com은 완벽한 위치를 가리키고 있습니다.

내 요구 사항은 maps.google.com에 게시물 코드를 전달하려는 것과 같으며 원하는 지적 위치의 관련 위도와 경도를 반환해야합니다. 내 데이터베이스에 저장합니다.

그래서, 대부분의 아마 일부 자바 스크립트가 있어야한다 ... 누구는 또 다른 아이디어를 제공하시기 바랍니다에 관한 .. 사전에

감사합니다 ...

답변

10

설명하는 프로세스의 전문 용어는 reverse geocoding입니다. Google은 The Google Geocoding Web Service New working Google Geocoding Link을 제공하며 클라이언트 측 JavaScript 대신 서버 측에서 역 지오 코딩을 수행 할 수 있습니다. 브라우저에서 다음 URL을 시도하는 경우

예를 들어, 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에서 우편 번호를 반전 할 수 : Pekka suggested in another answer 같이 Google Maps API Terms of Useprohibit the storage of the results에 보이는 것을

$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 

데이터를 캐시로 저장하는 행위를하지 않는 한이 유를 것 Google지도에서 sed. Google과 연락하여 Google Maps API Premier에 문의하면 지오 코딩 요구 사항에보다 유연한 이용 약관을 적용 할 수 있습니다.

+0

@ 대니얼 ... 의견을 보내 주셔서 대단히 감사합니다. .. 당신의 주어진 솔루션으로 해결할 것이고 당신에게 돌아갈 것입니다 ... – Nirmal

+0

이 브라우저는 위의 예제를 사용하여 여전히 610,0,0,0으로 돌아갑니다. 어떤 우편 번호라도 상관 없습니까, 항상 610,0,0,0입니까? – QFDev

+0

이 답변의 예는 맵 API의 이전 버전을 사용하기 때문입니다. 새로운 예가 http://maps.googleapis.com/maps/api/geocode/json?address=SL59JH,+UK&sensor=false와 같습니다. 분명히 lat/lng를 추출하는 쿼리는 출력이 CSV가 아닌 JSON을 반환 할 때 변경해야합니다. – Dan

2

Google Geocoding API이하는이있는 경우, 그 있지만, 올바르게 기억하면 서비스 약관에 따라 지오 코딩 결과의 로컬 저장이 금지됩니다.

+0

나는 한 번 응용 프로그램을 기반으로 한 것이므로이 제한이 있다는 것을 기억하지 못합니다. 내 생각에 시간이 지나면 바뀌지 않고 미래의 핑 (ping)을 Google에 저장하지 않기 때문에 결과를 저장하지 않는 것이 논리에 위배됩니다. –

+0

@ 엘조 당신 말이 맞아요, Google지도 앱에서 사용되는 경우 결과를 "임시로"캐시 할 수 있습니다 : 10.3 http://code.google.com/intl/en-EN/apis/maps/terms.html –

+0

누구든지 게시물 코드에 의해 길고 latt지고 https 버전의 경우 알아? – AngularM

9

실연 조사는 Creative Commons 라이센스 (CC-BY v3, IIRC)에 released the postcode locations입니다. 그 대신에 번거롭게 (그리고 훨씬 더 명확하게 법적으로) 사용하게 될 것입니다.

WGS84 (일명 GPS)와 버전도있다는 나는이 오래된 질문이다 알지만, 그냥 PHP에서 (같은 일을 달성하기 위해 관리하는 방법을 여기에서 치핑,하지만해야 mySociety

+0

+1 당신이 편리하게 사용할 수 있다면 무장 조사 데이터 덤프에 대한 링크도 좋을 것입니다. –

+0

링크 후 링크 후 링크, 첫 페이지에 약속하지 않은 20mb zip 파일을 볼 수 없습니다. 5 분 후에 나는 포기했다. – brux

+0

@ brux에서 제공 한 링크에서 "Code-Point® Open"제품 다운로드 상자를 체크하고 다음으로 이동하여 양식을 작성하고 다운로드 링크가있는 이메일을 기다립니다. 그처럼 간단합니다. –

1

에 의해 미러링 좌표 상당히 간단 함) :

  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. 모든 CSV를 내 데이터베이스에 별도의 codepoint 테이블로 가져 왔습니다. 각 CSV에서 우편 번호와 Eastings 및 Northings 값을 가져 왔습니다.

  4. clean_postcode() 함수를 데이터베이스의 모든 인스 트림 조사 데이터에서 일괄 적으로 실행했습니다. 엽서의 약 50 %는 공백이 있고, 50 %는 그렇지 않습니다.

  5. 은 내가 codepoint 테이블의 각에서 다음 PHP 스크립트와 모든 우편 번호를 실행하고 찾기를 저장 및 경도 값이 테이블에 반환 http://bramp.net/blog/os-easting-northing-to-lat-long

  6. 모든 완료! 이제 잘 형식화 된 엽서를 기반으로 위도/경도 값을 일치시키고 가져올 수 있습니다.

추가 읽기 :이 SO 답을 찾는 사람들을 위해 http://www.deepbluesky.com/blog/-/converting-os-coodinates-into-longitude-latitude_7/

13

빠른 노트. Daniel Vassallo의 대답은 현재 사용되지 않는 Google 지오 코딩 API V2를 사용합니다. 새로운 V3의 API는 이와 같은 요구 포맷 사용 JSON 포맷으로 데이터를 리턴

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

우편 조회하기위한 예시이다

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

이는 위도 및 포함 된 JSON 배열을 반환 장기의 결과 -> geometry-> 위치 -> 위도 및 결과 -> geometry-> 위치 -> 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" 
} 
,745,

API 사양은 여기에서 확인할 수 있습니다. https://developers.google.com/maps/documentation/geocoding/

0

체크 아웃 ALgolia 장소 here. 초고속, 오픈 소스 및 MIT