web-dev-qa-db-ja.com

住所の緯度と経度を取得するにはどうすればよいですか?

私は現在データリストを扱っていますが、データの列の1つはリストのアドレスです。それぞれの住所をGoogleマップにプロットする予定ですが、パラメータを取得するために手動で住所をGoogleに貼り付ける必要はありません。経度、緯度が必要です。私のExcelシート(またはGoogleドキュメントスプレッドシートにあります)には、約500のアドレスが含まれています。

だから私はそれを自動的に行う方法があることを望んでいましたか?

5
Narasimha

この素晴らしい投稿の礼儀 http://policeanalyst.com/using-the-google-geocoding-api-in-Excel/

Function GoogleGeocode(address As String) As String
Dim strAddress As String
Dim strQuery As String
Dim strLatitude As String
Dim strLongitude As String

strAddress = URLEncode(address)

'Assemble the query string
strQuery = "http://maps.googleapis.com/maps/api/geocode/xml?"
strQuery = strQuery & "address=" & strAddress 
strQuery = strQuery & "&sensor=false"

'define XML and HTTP components
Dim googleResult As New MSXML2.DOMDocument
Dim googleService As New MSXML2.XMLHTTP
Dim oNodes As MSXML2.IXMLDOMNodeList
Dim oNode As MSXML2.IXMLDOMNode

'create HTTP request to query URL - make sure to have
'that last "False" there for synchronous operation

googleService.Open "GET", strQuery, False
googleService.send
googleResult.LoadXML (googleService.responseText)

Set oNodes = googleResult.getElementsByTagName("geometry")

If oNodes.Length = 1 Then
For Each oNode In oNodes
  strLatitude = oNode.ChildNodes(0).ChildNodes(0).Text
  strLongitude = oNode.ChildNodes(0).ChildNodes(1).Text
  GoogleGeocode = strLatitude & "," & strLongitude
 Next oNode
 Else
 GoogleGeocode = "Not Found (try again, you may have done too many too fast)"
 End If
 End Function


Public Function URLEncode(StringVal As String, Optional SpaceAsPlus As Boolean = False) As String
Dim StringLen As Long: StringLen = Len(StringVal)

If StringLen>0 Then
ReDim result(StringLen) As String
Dim i As Long, CharCode As Integer
Dim Char As String, Space As String

If SpaceAsPlus Then Space = "+" Else Space = "%20"

For i = 1 To StringLen
  Char = Mid$(StringVal, i, 1)  
  CharCode = Asc(Char)

  Select Case CharCode
  Case 97 To 122, 65 To 90, 48 To 57, 45, 46, 95, 126
    result(i) = Char
  Case 32
    result(i) = Space
  Case 0 To 15
    result(i) = "%0" & Hex(CharCode)
  Case Else
    result(i) = "%" & Hex(CharCode)
  End Select
Next i
URLEncode = Join(result, "")
End If
End Function
10
Chris

あなたはそれがあなたのために仕事をするようにあなたのグーグルスプレッドシートに小さなgooglアプリスクリプトを加えることができます。 ここ デモ(住所を追加すると、ジオコーディングされます)。
そして、ジオコーディングを実行するためのコードの下:

function getLatLong(adress) {
  try{
    if(adress=="")return("");
    var geo = Maps.newGeocoder().geocode(adress);
    if(geo.status=="OK"){
      var lng = geo.results[0].geometry.viewport.southwest.lng;
      var lat = geo.results[0].geometry.viewport.southwest.lat;
      return([lat,lng]);
    }
    else{
      return("error");
    }
  }
  catch(err){
    return(err);
  }
}
6
Harold

SmartyStreets 米国および国際住所のジオコーディングを提供します。使い方はとても簡単です。リストをWebツールに貼り付けると、緯度と経度が数秒で返されます。同様の方法でlat/longデータを返すことができる他のサービスがあります。私はそこで働いているので、SmartyStreetsに最も精通しています。

また、Googleはアドレスを最初に検証しないため、アドレスをGoogleマップに貼り付けても必ずしも正確な情報が得られるとは限らないことに注意してください。 SmartyStreetsはそうします。これにより、Googleの最善の推測ではなく、実際の場所に関するデータを確実に取得できます。

あなたがチェックしたいと思うかもしれない他の解決策: AddressDoctorLoqate 、または他の「国際住所ジオコーディング」プロバイダー(グーグルですばやく検索するといくつかの素晴らしいオプションが見つかります)。

1
Michelle

コードを挿入するのではなく、データをGoogleスプレッドシートに転送し、すばらしいテーブルアドオンでジオコードを含めることをお勧めします。その時点から、住所を1つの列に配置し、住所列を選択してジオコーディングするだけです。

0
Lawrence Chang