본 글에서는 물류산업을 예로 들어 물류산업에서의 PostgreSQL과 Greenplum의 활용 방법을 지리적 위치정보 처리, 최적경로 알고리즘, 머신러닝 측면에서 분석한다. 주소를 좌표로 변환하는 문제에 대해 언급했는데, 더 전문적인 용어는 "지오코딩"입니다. 즉, 베이징 하이뎬 구 상디 10번가 10번지와 같은 주소를 알고 해당 경도와 위도를 얻는 방법입니다. 위치 정보(40,116) 또는 그 반대.
지오코딩 개념
많은 지도 관련 업체에서 관련 API를 제공하고 있으며, 우리는 이러한 API를 직접 사용하여 해당 정보를 얻을 수 있습니다. 예를 들어 Baidu의 Geocoding API가 있습니다.
Geocoding API는 주소에서 경도 및 위도 좌표로 또는 경도 및 위도 좌표에서 주소로 변환 서비스를 제공하는 데 사용되는 인터페이스 유형입니다. 사용자는 C#, C++, Java 및 기타 개발 언어를 사용하여 보낼 수 있습니다. JSON, XML 반환 데이터를 요청하고 수신합니다. Geocoding API에는 지오코딩 및 역 지오코딩 기능이 포함되어 있습니다.
ESRI 문서에서 보다 직관적인 그림 가져오기
지오코딩 : 즉, 주소 확인입니다. 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 마스터는 이러한 다양한 제조업체의 서비스를 통합하고 통합하기 위해 특별한 지오코딩 도구인 지오코더를 만들었습니다.
지오코딩 도구 지오코더
먼저 어떤 회사의 지오코딩 서비스를 지원하는지 살펴보겠습니다.
설치
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='reverse') 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
g = geocoder.arcgis([40.050934, 116.30079], method='reverse') print g.address print g.city print g.state print g.country
None 北京市 北京市 CHN
g = geocoder.ip('199.7.157.0') print g.latlng print g.city g = geocoder.ip('me') print g.latlng print g.city
[43.6934, -79.4857] Toronto [51.05, 13.75] Dresden
g = geocoder.arcgis(u"山东") g.bbox
{'northeast': [38.976997, 121.976998], 'southwest': [33.022997, 116.022998]}
공간정보는 행정구역, 물리적 지리적 영역 등의 텍스트 정보로 기술할 수도 있고, 좌표계와 숫자(우편번호 등)로 식별할 수도 있습니다. 지오코딩 기술은 공간정보의 지리적 위치 요소를 해당 텍스트 정보와 연관시키는 데 사용될 수 있습니다. 이 기사에서는 지도 및 기타 관련 제조업체에서 제공하는 지오코딩 서비스를 편리하고 신속하게 사용하여 텍스트에 설명된 위치를 지도의 경도와 위도로 변환하거나 지도의 특정 위치를 통해 해당 좌표를 얻을 수 있는 지오코더 지오코딩 도구를 주로 소개합니다. 지도 위치 정보에 대한 텍스트 설명입니다.