> 백엔드 개발 > 파이썬 튜토리얼 > Python으로 지오코딩을 구현하는 방법

Python으로 지오코딩을 구현하는 방법

高洛峰
풀어 주다: 2016-11-21 17:52:25
원래의
2711명이 탐색했습니다.

본 글에서는 물류산업을 예로 들어 물류산업에서의 PostgreSQL과 Greenplum의 활용 방법을 지리적 위치정보 처리, 최적경로 알고리즘, 머신러닝 측면에서 분석한다. 주소를 좌표로 변환하는 문제에 대해 언급했는데, 더 전문적인 용어는 "지오코딩"입니다. 즉, 베이징 하이뎬 구 상디 10번가 ​​10번지와 같은 주소를 알고 해당 경도와 위도를 얻는 방법입니다. 위치 정보(40,116) 또는 그 반대.

지오코딩 개념

많은 지도 관련 업체에서 관련 API를 제공하고 있으며, 우리는 이러한 API를 직접 사용하여 해당 정보를 얻을 수 있습니다. 예를 들어 Baidu의 Geocoding API가 있습니다.

Geocoding API는 주소에서 경도 및 위도 좌표로 또는 경도 및 위도 좌표에서 주소로 변환 서비스를 제공하는 데 사용되는 인터페이스 유형입니다. 사용자는 C#, C++, Java 및 기타 개발 언어를 사용하여 보낼 수 있습니다. JSON, XML 반환 데이터를 요청하고 수신합니다. Geocoding API에는 지오코딩 및 역 지오코딩 기능이 포함되어 있습니다.

Python으로 지오코딩을 구현하는 방법

ESRI 문서에서 보다 직관적인 그림 가져오기

Python으로 지오코딩을 구현하는 방법

지오코딩 : 즉, 주소 확인입니다. Baidu 경도 및 위도 정보는 거리에 대한 상세한 구조화된 주소에서 얻을 수 있습니다. 예: "No. 27, Zhongguancun South Street, Haidian District, Beijing" 주소 확인 결과는 "lng: 116.31985,lat:39.959836". 동시에 지오코딩은 Baidu 위도 및 경도를 반환하기 위해 관심 장소 및 랜드마크 건물의 이름을 직접 구문 분석하는 기능도 지원합니다. 예를 들어 "Baidu Building"의 주소 구문 분석 결과는 "lng:116.30815,lat:40.056885"입니다. .

역지오코딩: 즉, Baidu 경도 및 위도 정보에서 구조화된 주소 정보를 얻는 역지오코딩입니다. 예: "lat:31.325152,lng:120.558957" 역지오코딩 결과는 "Huqiu District, Suzhou"입니다. 시, 장쑤성 No. 318 Tayuan Road".

단, 한 가지 설명해야 할 점은 Baidu의 API를 사용하려면 Baidu 계정이 있어야 하고 해당 Key를 신청해야 한다는 것입니다. 실제로 Baidu 외에도 Google, ESRI, Microsoft의 Bing 등은 모두 유사한 지오코딩 서비스를 제공합니다. 그러나 이러한 서비스의 대부분에는 Python 전용 라이브러리가 없으며 Json 구조가 서로 일치하지 않습니다. 따라서 불만 처리를 전문으로 하는 Python 마스터는 이러한 다양한 제조업체의 서비스를 통합하고 통합하기 위해 특별한 지오코딩 도구인 지오코더를 만들었습니다.

지오코딩 도구 지오코더

먼저 어떤 회사의 지오코딩 서비스를 지원하는지 살펴보겠습니다.

Python으로 지오코딩을 구현하는 방법

설치

pip install geocoder
로그인 후 복사

지오코딩

import geocoder
g = geocoder.google("1403 Washington Ave, New Orleans, LA 70130")
g = geocoder.arcgis(u"北京市海淀区上地十街10号")
g.latlng
로그인 후 복사

출력은

[29.9287839, -90.08421849999999]
로그인 후 복사

전체 geojson을 볼 수도 있습니다

g.geojson
로그인 후 복사

출력은

{'bbox': [-90.0855674802915,
  29.9274349197085,
  -90.0828695197085,
  29.9301328802915],
 'geometry': {'coordinates': [-90.08421849999999, 29.9287839],
  'type': 'Point'},
 'properties': {'accuracy': u'ROOFTOP',
  'address': u'1403 Washington Ave, New Orleans, LA 70130, USA',
  'bbox': [-90.0855674802915,
   29.9274349197085,
   -90.0828695197085,
   29.9301328802915],
  'city': u'New Orleans',
  'confidence': 9,
  'country': u'US',
  'county': u'Orleans Parish',
  'encoding': 'utf-8',
  'housenumber': u'1403',
  'lat': 29.9287839,
  'lng': -90.08421849999999,
  'location': '1403 Washington Ave, New Orleans, LA 70130',
  'neighborhood': u'Garden District',
  'ok': True,
  'place': u'ChIJGyFHWc2lIIYRYSoneaXAUiw',
  'postal': u'70130',
  'provider': 'google',
  'quality': u'street_address',
  'state': u'LA',
  'status': 'OK',
  'status_code': 200,
  'street': u'Washington Ave'},
 'type': 'Feature'}
로그인 후 복사

구글을 이용해서 중국 주소를 직접 조회하려고 했더니 실패

g = geocoder.google(u"北京市海淀区上地十街10号")
g.ok
로그인 후 복사

가 나오더니

False
로그인 후 복사

바이두를 이용하면 괜찮을 텐데 그랬어요. 해당 키에는 적용되지 않습니다. arcgis로 전환하여

g = geocoder.arcgis(u"北京市海淀区上地十街10号")
g.latlng
로그인 후 복사

을 성공적으로 인코딩할 수 있었고 출력은

[40.050934, 116.30079]
로그인 후 복사

역지오코딩

g = geocoder.google([29.9287839, -90.08421849999999], method='reverse')

print g.address
print g.city
print g.state
print g.country
로그인 후 복사

이었고 출력은

<이었습니다. 🎜>
1403 Washington Ave, New Orleans, LA 70115, USA
New Orleans
LA
US
로그인 후 복사
중국 주소

g = geocoder.google([40.050934, 116.30079], method=&#39;reverse&#39;)
print g.address
print g.city
print g.state
print g.country
로그인 후 복사
로 변경하면 출력은

Bai Du Da Sha, Haidian Qu, Beijing Shi, China, 100193
Beijing
Beijing Shi
CN
로그인 후 복사
arcgis 서비스를 사용해 보세요

g = geocoder.arcgis([40.050934, 116.30079], method=&#39;reverse&#39;)
print g.address
print g.city
print g.state
print g.country
로그인 후 복사
출력은

None
北京市
北京市
CHN
로그인 후 복사
구글에서 영어로 변환해 주는데 주소가 비교적 완전하네요. arcgis는 중국어로 되어 있지만 실제로는 상세 주소가 None으로 출력되어 유용합니다.

기타

지오코더의 기능은 그 이상이며 IP(자신의 IP 포함)도 확인할 수 있습니다.

g = geocoder.ip(&#39;199.7.157.0&#39;)
print g.latlng
print g.city
g = geocoder.ip(&#39;me&#39;)
print g.latlng
print g.city
로그인 후 복사
출력은

[43.6934, -79.4857]
Toronto
[51.05, 13.75]
Dresden
로그인 후 복사
도시의 공간 경계 상자 쿼리

g = geocoder.arcgis(u"山东")
g.bbox
로그인 후 복사
출력은

{&#39;northeast&#39;: [38.976997, 121.976998], &#39;southwest&#39;: [33.022997, 116.022998]}
로그인 후 복사
입니다. 요약

공간정보는 행정구역, 물리적 지리적 영역 등의 텍스트 정보로 기술할 수도 있고, 좌표계와 숫자(우편번호 등)로 식별할 수도 있습니다. 지오코딩 기술은 공간정보의 지리적 위치 요소를 해당 텍스트 정보와 연관시키는 데 사용될 수 있습니다. 이 기사에서는 지도 및 기타 관련 제조업체에서 제공하는 지오코딩 서비스를 편리하고 신속하게 사용하여 텍스트에 설명된 위치를 지도의 경도와 위도로 변환하거나 지도의 특정 위치를 통해 해당 좌표를 얻을 수 있는 지오코더 지오코딩 도구를 주로 소개합니다. 지도 위치 정보에 대한 텍스트 설명입니다.


관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿