300,000 개의 주소를 즉시 지오 코딩하는 방법은 무엇입니까?

지도에 표시 할 주소가 300,000 개인 데이터베이스가 있습니다. 모든 주소를 지오 코딩하면 너무 비싸다는 것을 알고 있습니다. 그래서 사용자가 주소 (속성 주소)를 선택하면 데이터베이스를 검색 한 다음 주소를 지오 코딩 한 다음 매핑 할 주소를 실시간 / 실시간으로 지오 코딩 할 수 있는지 궁금합니다. 다른 속성.

코드, 개념 등을 공유 할 수 있다면 정말 좋을 것입니다. 그건 그렇고 내 백엔드는 Joomla가 지원하는 mysql에 있습니다.

댓글

  • 저는 일반적으로 ArcGIS 지오 코딩 기능을 사용하여 많은 수의 주소를 지오 코딩합니다. 또한 저는 ‘ 여기에 설명 된 프로세스에 정말 관심이 있습니다. 특히 Google을 사용하여 주소를 지오 코딩하는 Python 스크립트를 테스트 한 다음 내가 ‘ ArcGIS에서 가져 왔습니다. 안타깝게도 ‘ 다른 위치에있는 모든 관련 파일과 스크립트를 찾을 수없는 것 같습니다. 누군가가 하나의 zip 파일 또는 단계별 지침으로 모든 스크립트를 보내 주시면 감사하겠습니다. 저는 ‘ 사용하려고했지만 여러분에게 피드백을 받았지만 성공하지 못했습니다.

답변

Mehul, 저는 SmartyStreets라는 회사에서 주소 확인 업계에서 일했습니다. 많은 지오 코딩 서비스가 있지만 필요한 볼륨으로 일괄 처리를 지원하는 서비스는 거의 없습니다. (Google 및 기타 업체에서는 API의 대량 사용이나 결과 저장 / 캐싱을 허용하지 않습니다.)

MySQL 데이터베이스로 이동하여 주소가 포함 된 테이블 내보내기를 수행하는 경우 예를 들어 CSV 파일입니다. 그런 다음 목록 용 대량 주소 유효성 검사 도구 또는 명령 줄 도구를 사용하여 처리 할 수 있습니다. . 제가 말했듯이, 여러 서비스가 있지만 “주소의 존재를 확인하는 것 (따라서 지오 코딩의 이유)을 원할 것입니다. 주소가 잘못되었거나 불완전한 경우, 지오 코딩 결과도 마찬가지입니다. 소수의 서비스 만이이를 수행합니다.

LiveAddress는 USPS에서 CASS 인증 을받은 서비스입니다. 거기에 몇 가지가 있으므로 조사를 수행하지만 “즉석”/ 빠르고 저렴한 것을 원하므로 LiveAddress를 다시 권장합니다. “주소를 확인할뿐만 아니라 위도 / 경도 정보를 제공하고 지오 코딩 결과의 정밀도도 필요에 따라 수행합니다. 모두 웹 기반 수천만 개의 레코드를 즉시 처리합니다 (이 질문을 참조 참조).

추가 정보가있는 경우 사용자가 상호 작용할 때 주소를 지오 코딩해야하는 경우, US Street Address에는 거의 모든 것에 연결할 수있는 API 버전이 있으며, 온 더스에서 일괄 처리도 지원합니다. 비행이지만 일회성 결제가 아닌 구독으로 결제됩니다.

댓글

  • SmartyStreets에 익숙하지 않은 경우 유망 해 보입니다. 주의하세요.
  • LiveAddress API는 약 5 ~ 10 분 안에 300,000을 처리합니다. LiveAddress for Lists 서비스 (처리를 위해 목록 업로드)는 15-20 분 정도 걸립니다. 둘 다 꽤 빠릅니다. 목록 서비스를 사용하면 코드를 작성할 필요가 없습니다.
  • SmartyStreets는 미국 용 지오 코드 만 있습니까?
  • 싱가포르 용 데이터가 있습니다. 작동합니까? 방향이 없다면 ????
  • SmartyStreets는 현재 국제 주소 인증을 제공합니다. @ user1089553

답변

Python을 좋아한다면 GeoPy API , GDAL Python 바인딩 또는 Fiona a와 결합 >, 주소를 포인트 셰이프 파일로 변환하기위한 다음과 같은 매우 기본적인 스크립트를 만듭니다.

이렇게하면 “addresses_to_geocode”라는 파일의 위치가 지정되어 my_output 폴더에 “my_output.shp”라는 출력 셰이프 파일이 생성됩니다.

import os from geopy import geocoders from osgeo import ogr, osr def geocode(address): g = geocoders.GoogleV3() place, (lat, lng) = g.geocode(address) print "%s: %.5f, %.5f" % (place, lat, lng) return place, lat, lng def parse_file(filepath, output_shape): # create the shapefile drv = ogr.GetDriverByName("ESRI Shapefile") if os.path.exists(output_shape): drv.DeleteDataSource(output_shape) ds = drv.CreateDataSource(output_shape) # spatial reference sr = osr.SpatialReference() sr.ImportFromProj4("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs") lyr = ds.CreateLayer(output_shape, sr, ogr.wkbPoint) # fields featDefn = lyr.GetLayerDefn() fld_id = ogr.FieldDefn("id", ogr.OFTInteger) fld_address = ogr.FieldDefn("ADDRESS", ogr.OFTString) fld_address.SetWidth(255) lyr.CreateField(fld_id) lyr.CreateField(fld_address) print "Shapefile %s created..." % ds.name # read text addresses file i = 0 f = open(filepath, "r") for address in f: try: print "Geocoding %s" % address place, lat, lng = geocode(address) point = ogr.Geometry(ogr.wkbPoint) point.SetPoint(0, lng, lat) feat = ogr.Feature(lyr.GetLayerDefn()) feat.SetGeometry(point) feat.SetField("id", i) feat.SetField("ADDRESS", address) lyr.CreateFeature(feat) feat.Destroy() i = i + 1 except: print "Error, skipping address..." parse_file("addresses_to_geocode", "my_output") 

파일에는 다음과 같이 단일 주소에 대한 한 줄만 있어야합니다.

Via Benedetto Croce 112, Rome, Italy Via Aristide Leonori 46, Rome, Italy Viale Marconi 197, Rome, Italy 

여기에서는 Google API를 사용하고 있지만 GeoPy는 Yahoo !, GeoNames 또는 MapPoint와 같은 다른 API로 전환하는 데 매우 기본입니다. .

댓글

답변

문제를 해결하는 또 다른 옵션은 데이터 세트를 Fusion으로 가져 오는 것입니다. 테이블과 주소 필드를 위치로 설정합니다. 그런 다음 포인트를 자동으로 지오 코딩합니다. 완료되면 데이터를 KML로 내보낼 수 있습니다.

또는 .. 또는 php 스크립트를 작성하여 레코드가 50,000 개로 제한되는 yahoo 지오 코더를 사용할 수 있습니다. 모든 포인트를 데이터베이스에 지오 코딩 할 수 있습니다.

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

댓글

  • 타마에게 감사하지만 나는 kml을 얻고 거기에서 정보를 가져온 다음 m db로 가져오고 싶지 않습니다. 나는 yahoo 지오 코딩에 대한 아이디어를 좋아하지만 매핑에 yahoo를 사용한 적이 없기 때문에 정확성이 확실하지 않습니다. 대본이나 무언가가 있으면 알려주세요. 이것은 큰 도움이됩니다.
  • 자동 쿼리를 사용하거나지도를 표시하지 않고 Yahoo (또는 Google) 지오 코더를 사용하면 TOS를 위반하게됩니다 …
  • 지금까지 아시다시피지도에 출력물을 표시하는 것은 아닙니다. 내가 틀렸다면 정정 해주세요!
  • @Tamas Kind of. 그러나 다음을 참조하십시오. developers.google.com/maps/terms#section_10_1_3

답변

Google 지오 코딩 웹 서비스를 사용하는 geopy를 성공적으로 사용하고 있습니다. 24 시간당 최대 2,000 포인트까지 완벽하게 작동합니다.

답변

지금까지 사용한 가장 좋고 쉬운 지오 코더입니다. https://pypi.python.org/pypi/geocoder/1.8.0 bing지도, Google지도, OSM 등.

답변

귀하의 질문에 대한 최선의 답변은 아니지만 BatchGeo를 사용해 볼 수 있습니다. 무료 버전은 많은 고통을 겪을 수 있지만 여전히 제 작업에는 충분했습니다.하지만 우리는 프로 버전을 구입했습니다.

KML 파일에서 좌표를 얻는 비결은 파일을 가져 오는 것입니다. 나중에 ArcGIS에 추가 할 수 있습니다.

댓글

  • 감사합니다. BatchGeo를 수행하는 방법을 알려주시겠습니까? 무료 버전의 이름도 알고 계십니까? (Google Map api v3를 사용하려고했습니다.) 또한 이것은 매핑하려면 위도 / 경도 값을 데이터베이스에 저장해야합니다. 이것이 제가 처음에하려고했던 작업입니다.
  • BatchGeo를 사용하면 KML을 데이터베이스로 가져온 다음 좌표를 추출해야합니다. Google에서 좌표 제공을 금지하는 다른 방법은 없습니다. 야후에 대해 터키에 대한 나의 경험은 그리 밝지 않습니다. 대부분의 개발 도상국은 Yahoo ‘ 범위에서 제외됩니다. Anil.

Answer

Matej, Google API는 하루에 최대 2.5k를 가져올 수 있기 때문입니다.
Geo 솔루션에 대해 배치가 아직 지원되지 않습니다. “내가 geo python 코드를 검토 한 결과 새 좌표를 요청할 때마다 연결이 열리는 것처럼 보이므로 300k는 아마도 영원히 고정 될 것입니다. 오류 400).
Play with Poligons가 트릭을 수행해야하지만 1 개 국가 또는 n 개 국가 인 경우 “Play ground”영역이 무엇인지에 따라 다릅니다.
1 개 국가의 경우 다각형이 꽤 잘 작동합니다. .
n 개 국가의 경우 다른 국가를 추가 할 때마다 수집 시간이 더 오래 걸리므로 솔루션이 작동하지 않습니다.이를 수행하는 가장 좋은 방법은 지연로드입니다.
=> 다각형 아이디어부터 시작하여 다른 모든 것 country, 데이터를 보관할 큰 데이터베이스 테이블을 생성하면 결국 필요한 데이터가 보관됩니다.

Answer

PHP로 수행하려면-MySQL은 여기에 해결책이 있습니다. 나를 위해 rked :

<script type="text/javascript" charset="utf-8"> var customIcons = { restaurant: { icon: "http://labs.google.com/ridefinder/images/mm_20_blue.png", shadow: "http://labs.google.com/ridefinder/images/mm_20_shadow.png" }, bar: { icon: "http://labs.google.com/ridefinder/images/mm_20_red.png", shadow: "http://labs.google.com/ridefinder/images/mm_20_shadow.png" }, club: { icon: "http://labs.google.com/ridefinder/images/mm_20_yellow.png", shadow: "http://labs.google.com/ridefinder/images/mm_20_shadow.png" }, church: { icon: "http://labs.google.com/ridefinder/images/mm_20_green.png", shadow: "http://labs.google.com/ridefinder/images/mm_20_shadow.png" } }; function initialize() { var mapOptions = { center: new google.maps.LatLng(37.976178, 23.735881), zoom: 7, mapTypeId: google.maps.MapTypeId.roadmap }; var map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions); <?php header("content-type: text/html;charset=utf-8"); $getpoints = "SELECT lat, lng, name, address, type FROM markers"; $getpoints .= $filter; if(!$result = $con->query($getpoints)){ die("There was an error running the query [" . $con->error . "]"); } else { while ($row = $result->fetch_assoc()) { $thematic = ""$row[type]""; $name = ""$row[name]""; $map_address = "$row[address]"; $url = "http://maps.googleapis.com/maps/api/geocode/json?sensor=false&address=".urlencode($map_address); $lat_long = get_object_vars(json_decode(file_get_contents($url))); // pick out what we need (lat,lng) $lat_long = $lat_long["results"][0]->geometry->location->lat . "," . $lat_long["results"][0]->geometry->location->lng; echo "var myLatlng1 = new google.maps.LatLng($lat_long); var icon = customIcons[$thematic] || {}; var marker1 = new google.maps.Marker({ position: myLatlng1, map: map, icon: icon.icon, title: "$map_address" });"; } } ?> } google.maps.event.addDomListener(window, "load", initialize); </script> 

답변

해보기 지오 코딩 API . 적은 사용량에 대해서는 무료이지만 더 많이 원하면 비용을 지불해야합니다. 저렴하지만 그렇게 쉽게 처리 할 수 있습니다.이를 통해 한 달에 수백만 달러를 처리합니다.

Answer

지도 지정 도구 사용 (지도 지정 | 배치 지오 코딩 도구 ( http://www.mappointing.com/ ))이 도구에서는 Google지도 무료 API 키를 사용하여 데이터를 처리 할 수 있으며 또한이 도구는 거리 계산 & 장소 검색 도구를 제공합니다.

댓글

  • 왜 ‘이 작업이 언급 된 동일한 API 제한 OP에 도달하지 않습니까?

답변

데이터를 텍스트 파일 (한 줄에 하나의 레코드)로 저장 한 다음이 서비스를 사용하여 일괄 지오 코딩 할 수 있습니다. http://geocode.xyz/batch (대부분의 유럽 국가에서 작동)

또는 자체 코드를 작성하여 REST / JSON API : (무제한 조회시 무료)

댓글

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다