ProgramingTip

프로그래밍 방식으로 (법적으로) 거리 주소의 경도와 위도를 얻는 방법

bestdevel 2020. 10. 21. 21:14
반응형

프로그래밍 방식으로 (법적으로) 거리 주소의 경도와 위도를 얻는 방법


Google지도 또는 네이티브 서비스에서 아마도 수 있습니다. (미국 주소만으로 충분하지.)


귀하가 찾고있는 용어는 지오 코딩이며 Google 은이 서비스를 제공합니다.


앞서 언급 한 Google 지오 코딩 웹 서비스 외에도 Yahoo에서 제공 하는 경쟁 서비스 도 있습니다 . 사용자 상호 작용으로 지오 코딩이 수행되는 최근 프로젝트에서 두 가지 모두에 대한 지원을 포함했습니다. 그 이유는 특히 미국 이외의 지역에서 다루는 방식이 더 모호한 위치를 다루는 방식이 매우 다양하다는 것을 알게되었습니다. 거기에 Google이 최상의 답변을 제공 할 수 있고 그리고 Yahoo도 있습니다.

한 가지 알아 두어야 할 사항 : Google이 실제로 귀하의 장소가 어디에 있는지 모른다고 생각하면 실패를 602 오류를 반환합니다. 반면 야후는 잘못된 주소에서 위치시 /도 / 주 / 등을 떼어 낼 수있는 그 마을의 중심을 반환합니다. 따라서 원하는 결과가 선택할 것인지 선택 결과에주의를 선택합니다. 이에 대해 알려주는 일부 결과에는 보조 필드가 있습니다. 야후는이 필드를 "정확성"이라고 부르고 Google은 "정확성"이라고합니다.


서비스에 의존하지 않고 작업을 수행 하면 US Census에서 TIGER Shapefile 을 다운로드합니다 .

관심있는 거리를 검색하면 여러 구간이 있습니다. 각 세그먼트에는 시작 주소와 끝 주소가 있고 세그먼트를 따라 보간하여 집 번호가있는 세그먼트를 찾습니다.

이것은 당신에게 lon / lat 쌍을 제공 할 것입니다.

그러나 온라인 서비스는 많은 주소 확인 및 수정을 사용하여 좋은 결과를 얻으려면 복제해야합니다.

또한 무료 데이터 훌륭하지만 훌륭합니다. 최신 거리가 거기에 있지 않고 (Google에서 사용하는 데이터에있을 수 없음) 거리가 설문 조사의 부정확성으로 인해 실제 위치에서 어느 정도 수 있습니다. 그러나 지오 코딩 요구의 98 %는 완벽하게 작동하고 무료이며 모든 것을 제어 할 수 있습니다.

Openstreetmaps는 전 세계의 모든 것을 매핑하는 것을 목표로합니다.하지만 CC 라이선스에 따라 데이터를 제공하기 때문에 아직 확인하지 않습니다.

그러나 대부분의 대부분의 국가는 감당할 금액을 지불해야합니다. 많은 데이터를 지오 코딩 할 필요가없는 경우 Google, Yahoo 또는 기타 무료 전 세계 매핑 서비스를 사용하는 충분할 수 있습니다.

많은 데이터를 지오 코딩해야하는 경우 텔레 아틀라스와 같은 주요 공급자로부터지도 데이터를 임대하는 것이 가장 좋습니다.

-아담


또한 (잠재적으로) 전 세계에 대한 오픈 소스 위키와 거리 데이터가 포함 된 OpenStreetMap NameFinder를 볼 수도 있습니다 . NameFinder는 8 월 말에 더 이상 존재하지 않지만 Nominatim 이 대신합니다.


Google은 하루에 최대 2.5k (기존 25,000) HTTP 요청으로 데이터와 함께 Google지도를 표시하도록 요구합니다. 유용하지만 사용법을 지켜봐야합니다.

그들의 가지고있다

http://groups.google.com/group/Google-Maps-API/web/resources-non-google-geocoders

(Google은 이후이를 삭제했습니다. 또는 캐시가 보이면 링크하겠습니다.)

... 다운로드 가능한 db, 무료 웹 서비스 및 상용 웹 서비스가 모두있는 GeoNames찾았 습니다 .


Google의 서비스 약관을 통해 웹 사이트가 소비자가 무료로 사용할 수있는 경우 무료로 지오 코딩 API를 사용할 수 있습니다. 해당하는 경우 Enterprise Maps에 대한 라이선스를합니다.


Drupal 및 PHP와 함께 사용 (쉽게 수정) :

function get_lat_long($address) {
  $res = drupal_http_request('http://maps.googleapis.com/maps/api/geocode/json?address=' . $address .'&sensor=false');
  return json_decode($res->data)->results[0]->geometry->location;
}

여기에서 Google Maps API 문서를보고 이에 대해 시작할 수 있습니다.

http://code.google.com/apis/maps/documentation/services.html#Geocoding

또한 Live Maps를 사용하여 국제 주소에 대해 할 수있는 작업 인 것입니다.

http://virtualearth.spaces.live.com/blog/cns!2BBC66E99FDCDB98!1588.entry


Microsoft의 MapPoint 웹 서비스를 사용하여이 작업을 수행 할 수도 있습니다.

방법을 설명하는 블로그 게시물은 다음과 가변합니다. http://www.codestrider.com/BlogRead.aspx?b=b5e8e275-cd18-4c24-b321-0da26e01bec5


주소의 위 경도를 가져 오는 R 코드

# CODE TO GET THE LATITUDE AND LONGITUDE OF A STREET ADDRESS WITH GOOGLE API
addr <- '6th Main Rd, New Thippasandra, Bengaluru, Karnataka'  # set your address here
url = paste('http://maps.google.com/maps/api/geocode/xml?address=', addr,'&sensor=false',sep='')  # construct the URL
doc = xmlTreeParse(url) 
root = xmlRoot(doc) 
lat = xmlValue(root[['result']][['geometry']][['location']][['lat']]) 
long = xmlValue(root[['result']][['geometry']][['location']][['lng']]) 
lat
[1] "12.9725020"
long
[1] "77.6510688"

Python 에서이 작업을 수행하십시오 다음을 수행하십시오.

import json, urllib, urllib2

address = "Your address, New York, NY"

encodedAddress = urllib.quote_plus(address)
data = urllib2.urlopen("http://maps.googleapis.com/maps/api/geocode/json?address=" + encodedAddress + '&sensor=false').read()
location = json.loads(data)['results'][0]['geometry']['location']
lat = location['lat']
lng = location['lng']
print lat, lng

Google은 특정 양 이상이 표시되면 요청을 조절하는 것처럼 보라고 HTTP 요청에 API 키를 사용하고 싶습니다.


지오 코딩 할 레코드 100,000 개가 있고 Google API의 한도에 도달했습니다 (내부 앱을 것이 것이기 때문에 $ 10K 이상인 프리미엄 서비스로 업그레이드해야합니다).

그래서 대신에 사용했습니다 : http://geoservices.tamu.edu/Services/Geocode/BatchProcess/-API 도 있습니다. (총 비용은 약 200 $ 정도였습니다)


kohat 과 같은 도시의 JavaScript에서 시도 할 수 있습니다.

var geocoder = new google.maps.Geocoder();
var address = "kohat";
geocoder.geocode( { 'address': address}, function(results, status) {
var latitude = results[0].geometry.location.lat();
var longitude = results[0].geometry.location.lng();
alert(latitude+" and "+longitude);
  } 
});

여기에 이미지 설명 입력


위도, langitude, zipcode 등을 얻는 데 사용되는 geopy PyPI를 사용하는 용어에서 . 다음은 작동하는 샘플 코드입니다.

from geopy.geocoders import Nominatim

geolocator = Nominatim(user_agent="your-app-id")

location = geolocator.geocode("Your required address ")

if location:
    print('\n Nominatim ADDRESS :',location.address)
    print('\n Nominatim LATLANG :',(location.latitude, location.longitude))
    print('\n Nominatim FULL RESPONSE :',location.raw)
else:
   print('Cannot Find')

에서 Nominatim- 난 그냥 시도 때문에 일부 주소는 작동하지 않을 수 지도가 .
반환됩니다. Mapquest는 매월 15000 건의 무료 계획 트랜잭션을 제공합니다. 나 충분합니다.

샘플 코드 :

import geocoder
g = geocoder.mapquest("Your required address ",key='your-api-key')

for result in g:
   # print(result.address, result.latlng)
   print('\n mapquest ADDRESS :',result.address,result.city,result.state,result.country)
   print('\n mapquest LATLANG :', result.latlng)
   print('\n mapquest FULL RESPONSE :',result.raw)

도움이 되셨기를 바랍니다.


나는 나의 오래된 질문이라는 것을 알고 있습니다. Google은 많은 사람들로 위도와 경도를 얻는 방법을 변경합니다.

HTML 코드

<form>
    <input type="text" name="address" id="address" style="width:100%;">
    <input type="button" onclick="return getLatLong()" value="Get Lat Long" />
</form>
<div id="latlong">
    <p>Latitude: <input size="20" type="text" id="latbox" name="lat" ></p>
    <p>Longitude: <input size="20" type="text" id="lngbox" name="lng" ></p>
</div>

자바 펼쳐 코드

<script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap" async defer></script>

    <script>
    function getLatLong()
    {
        var address = document.getElementById("address").value;
        var geocoder = new google.maps.Geocoder();
        geocoder.geocode( { 'address': address}, function(results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
                var latitude = results[0].geometry.location.lat();
                document.getElementById("latbox").value=latitude;
                var longitude = results[0].geometry.location.lng();
                document.getElementById("lngbox").value=longitude;
            } 
        });
    }
    </script>

참고 URL : https://stackoverflow.com/questions/158474/how-to-obtain-longitude-and-latitude-for-a-street-address-programmatically-and

반응형