2009-11-12 2 views
1

우편 주소에서 좌표 (경도, 위도)를 가져오고 싶습니다.Google 어스를 사용하여 지오 코딩

Excel 통합 문서에서 VBA를 코딩하고 있습니다. Google 어스가 설치되어 있고 COM 서버로 등록되어 있다고 가정 할 수 있습니다. 따라서 나는 이것을 달성하기 위해 Google Earth COM API를 사용하는 방법을 찾고 있었지만 아무 것도 찾을 수 없었습니다.

웹에서 발견 된 대부분의 히트는 웹 프로그래머를위한 것이고 JavaScript 인 "Google geocoding API"를 사용하고 있습니다. 제 생각에는 실현 가능하지 않습니다.

(업데이트 : 수십 또는 수백 개의 주소에 대한 일괄 작업으로 수행되었습니다. rjmunro가 지적했듯이 비공개이며 Google 이용 약관에 위배되므로 다른 서비스를 찾아야했습니다.)

답변

2

왜 Google 어스를 사용 하시겠습니까? 컴퓨터가 온라인 상태가 아닌 경우 지오 코딩 할 수없고 온라인 상태 인 경우 웹 api를 직접 사용할 수도 있습니다. Google 및 다른 제공 업체 (Bing, Yahoo 등)와 함께 웹에서 지오 코딩 API에 액세스하기 위해 VBA를 사용하는 lots of examples이 있습니다.

누군가가 다운로드 할 수있는 것이 아니라 비공개 애플리케이션을위한 것이라면 Google 서비스 약관에 위배 될 수 있으며 다른 제공 업체를 사용해야 할 수도 있습니다. Google의 FAQ에서 this question을 참조하십시오. 나는 세포에서 (주소 정보를 복용하여 시작 : 나는 구글 어스 API를 사용 (지구 1.0 형식 라이브러리 참조)

:

0

실제로 VBA에서 이런 짓을 한, 나는 당신에게 내 솔루션을주지 Tools.Range (rngGeocoderAddress)). 포인트에 대한 KML 데이터를 구성하고 Google 어스 (아마도 필요하지 않음)로 전송 한 다음 주소 정보에 대한 검색을 실행합니다. 이렇게하면 결과 위치를 확대하기 시작합니다.

Google 어스를 주기적으로 모니터링하여 새로운 위치로 확대/축소하는 중인지 확인합니다. 이동이 멈 추면 검색 결과가 확대 된 것을 알았고 GetPointOnTerrainFromScreenCoords (0,0)를 사용하여 Lat Long을 캡처 할 수 있습니다.

Google 어스를 사용하여 주소를 지오 코딩했습니다. 여기

Public Sub LookUpAddress_Click() 
    Dim GEI As ApplicationGE 
    Dim PointOnTerrain As PointOnTerrainGE 
    Dim Search As SearchControllerGE 
    Dim KMLData As String 
    Dim row As Long 

    'Get the row of the location selected to look up' 
    With ddGeocoderID() 
     If .listCount <= 1 Then Exit Sub 
     row = .ListIndex + 1 
    End With 

    Set GEI = GEInit() 
    If GEI Is Nothing Then Exit Sub 

    KMLData = "<?xml version=""1.0"" encoding=""UTF-8""?>" & _ 
      "<kml xmlns=""http://www.opengis.net/kml/2.2"">" & _ 
      "<Placemark>" & _ 
       "<name>" & ddGeocoderID().List(ddGeocoderID().ListIndex) & "</name>" & _ 
       "<visibility>1</visibility>" & _ 
       "<open>1</open>" & _ 
       "<description>" & "<![CDATA[" & Tools.Range(rngGeocoderDescription) & "]]></description>" & _ 
       "<address>" & Tools.Range(rngGeocoderAddress) & "</address>" & _ 
      "</Placemark>" & _ 
      "</kml>" 
    GEI.LoadKmlData KMLData 

    Set Search = GEI.SearchController() 
    Call Search.Search(Tools.Range(rngGeocoderAddress)) 
    Dim resul As Variant 
    Set resul = Search.GetResults() 
    Dim lat As Double, lon As Double, prevlat As Double, prevlon As Double, checkChange As Double 
    Dim steady As Boolean 
    steady = False: checkChange = -1 
    lat = 0: lon = 0: prevlat = -1: prevlon = -1 
    While Not steady 
     Set PointOnTerrain = GEI.GetPointOnTerrainFromScreenCoords(0, 0) 
     lat = PointOnTerrain.Latitude 
     lon = PointOnTerrain.Longitude 
     lblGeoedLat().Caption = sigFigs(lat, 8) 
     lblGeoedLong().Caption = sigFigs(lon, 8) 
     DoEvents 
     If (checkChange = 100) Then 
      If (lat = prevlat And lon = prevlon) Then steady = True 
      prevlat = lat: prevlon = lon 
      checkChange = -1 
     End If 
     checkChange = checkChange + 1 
     Sleep 10 
    Wend 
End Sub 

나는 그것이 UI 작업을 만든 방법을 보여 일부 스크린 샷입니다 : 입력을

이미지 1은 주소를 enter image description here

2 클릭 지오 코드가 확대 기다립니다 이미지 중지 할 enter image description here

mage 3 코드는 만족스러운 경우 최종 위도/경도, 사용자 클릭 기록을 기록합니다.

많은 위치를 프로그래밍 방식으로 지오 코딩하도록 코드를 반복 해 보았습니다. Google 지구의 확대/축소 속도가 매우 빠르지 만 (순간적이 아님)

+0

감사합니다. 내 질문을 업데이트했습니다. 불행히도 rjmunro가 지적했듯이 여전히 사용 조건에 위배됩니다. 또한 일괄 작업에이 작업이 필요했기 때문에 Google 어스가 각 항목을 확대 할 때까지 기다리지 않아도됩니다. 어쨌든 웹에 연결해야하는 경우 웹 서비스를 직접 사용하는 것이 더 합리적이라는 사실은 사실입니다. – chiccodoro

0

귀하의 요청 사항을 해결하기 위해 this Excel addin을 개발했습니다. 유용하다고 생각됩니다.

물론 Google의 서비스 약관을 존중해야합니다.

(추가 기능은 해당 문서에 명시된대로 Google 요금 제한을 적용합니다).