地理编码使用谷歌地球
-
19-09-2019 - |
题
我想从邮政地址得到一对坐标(经度,纬度)的
我在Excel工作簿编码VBA。我认为谷歌地球已安装并注册为COM服务器。因此,我一直在寻找一种方式来使用谷歌地球COM API来实现这一点,但是我还没有设法找到任何东西。
大多数我发现在网络上的点击率是网站程序员和是关于使用“谷歌的地理编码API”,这是JavaScript的,我认为这是不是我的情况下是可行的。
(更新:这是要做为几十/上百个地址的批处理作业作为rjmunro指出的那样,它是私有的,因此对使用的谷歌而言,让我不得不去寻找不同的服务。)
其他提示
其实我已经在VBA这样做,我给你我的解决方案:
我使用谷歌地球API(参考:地球1.0类型库) 我采取的地址信息(从细胞Tools.Range(rngGeocoderAddress))开始。我构建KML数据点,并将其发送给谷歌地球(可能没有必要),然后我执行上的地址信息的搜索。这将触发谷歌开始缩放到所得位置。
在一个循环中,我周期性地监视谷歌地球看它是否仍处于变焦到新位置的过程。一旦停止移动时,我知道这已经放大到搜索结果中,我可以使用纬度长GetPointOnTerrainFromScreenCoords捕捉(0,0)
在最终的结果是我已经使用谷歌地球进行地理编码的地址。
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 输入的地址
图片2 点击地理编码,代码等待变焦停止
图片3 强>代码记录了最后的纬度/经度,用户点击记录,如果它们是满足。
我试图循环代码以编程地理编码的许多位置。它的工作原理最好的,如果你配置谷歌地球的变焦速度要为相当快的(但不是即时)
不隶属于 StackOverflow