DretenX Ответов: 2

vb код для геокодирования адреса в latlong


Привет ,
Я пытаюсь использовать код brow, но всегда получаю ошибку "удаленный сервер вернул ошибку: (403) Forbidden. "в строке" Dim response As HttpWebResponse = request.GetResponse ()".
Я заменил [ваш ключ идет сюда] своим ключом (-> необходимы ли [ ]?).

кто-нибудь может помочь?

Private Sub Geocode_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Geocode.Click
       txtLatLon.Text = GetLatLon(txtAddress.Text)
End Sub


Public Function GetLatLon(ByVal addr As String) As String
        Dim url As String = "http://maps.google.com/maps/geo?output=csv&key=[YOUR KEY GOES HERE]&q=" & addr
        Dim request As System.Net.WebRequest = WebRequest.Create(url)
        Dim response As HttpWebResponse = request.GetResponse()
        If response.StatusCode = HttpStatusCode.OK Then
            Dim ms As New System.IO.MemoryStream()
            Dim responseStream As System.IO.Stream = response.GetResponseStream()
            Dim buffer(2048) As Byte
            Dim count As Integer = responseStream.Read(buffer, 0, buffer.Length)
            While count > 0
                ms.Write(buffer, 0, count)
                count = responseStream.Read(buffer, 0, buffer.Length)
            End While
            responseStream.Close()
            ms.Close()
            Dim responseBytes() As Byte = ms.ToArray()
            Dim encoding As New System.Text.ASCIIEncoding()
            Dim coords As String = encoding.GetString(responseBytes)
            Dim parts() As String = coords.Split(",")
            Return Convert.ToDouble(parts(2)) & Convert.ToDouble(parts(3))
        End If
        Return Nothing
    End Function

2 Ответов

Рейтинг:
19

DretenX

я обнаружил, что это (сам) работает (не забудьте изменить языковую настройку 'language=nl' на ту, которую вы хотите ;) ):

'see explanation on:
   'https://developers.google.com/maps/documentation/geocoding/index
   '
   Public Function GetLatLon(ByVal addr As String) As String
       Try
           Dim url As String = "http://maps.googleapis.com/maps/api/geocode/xml?address=" & addr & "&sensor=false&language=nl"
           Dim request As System.Net.WebRequest = WebRequest.Create(url)
           Dim response As HttpWebResponse = request.GetResponse()
           If response.StatusCode = HttpStatusCode.OK Then
               Dim ms As New System.IO.MemoryStream()
               Dim responseStream As System.IO.Stream = response.GetResponseStream()
               Dim buffer(2048) As Byte
               Dim count As Integer = responseStream.Read(buffer, 0, buffer.Length)
               While count > 0
                   ms.Write(buffer, 0, count)
                   count = responseStream.Read(buffer, 0, buffer.Length)
               End While
               responseStream.Close()
               ms.Close()
               Dim responseBytes() As Byte = ms.ToArray()
               Dim encoding As New System.Text.ASCIIEncoding()
               Dim Resp As String = encoding.GetString(responseBytes)
               Dim Pos As Integer = InStr(Resp, "<lat>") - 1
               Dim Nb As Integer = CharCount(Resp, "<lat>")
               'structure of response = x times  <lat>50.8469547</lat>   <lng>3.6013676</lng>
               Dim Coords(Nb, 2) As String
               Dim Counter As Integer = 1
               Do Until InStr(Pos, Resp, "<lat>", CompareMethod.Text) = 0
                   Coords(Counter, 1) = Mid(Resp, InStr(Pos, Resp, "<lat>", CompareMethod.Text) + 5, InStr(Pos, Resp, "</lat>", CompareMethod.Text) - (InStr(Pos, Resp, "<lat>", CompareMethod.Text) + 5))
                   Coords(Counter, 2) = Mid(Resp, InStr(Pos, Resp, "<lng>", CompareMethod.Text) + 5, InStr(Pos, Resp, "</lng>", CompareMethod.Text) - (InStr(Pos, Resp, "<lng>", CompareMethod.Text) + 5))
                   Pos = InStr(Pos, Resp, "</lng>", CompareMethod.Text) + 5
                   Counter = Counter + 1
               Loop
               Resp = ""
               For Counter = 1 To Nb
                   Resp = Resp & Coords(Counter, 1) & "," & Coords(Counter, 2) & ";"
               Next
               Return Resp
           Else
               MsgBox(response.StatusCode.ToString, MsgBoxStyle.Exclamation, "fout")
               Return ""
           End If
       Catch ex As Exception
           MsgBox(ex.ToString)
           Return ""
       End Try
   End Function


Рейтинг:
1

Member 13929771

что такое charcount fnction??


Richard Deeming

Если вы хотите задать вопрос о решении, нажмите кнопку "есть вопрос или комментарий?" кнопка под этим решением.

НЕ оставьте свой комментарий, используя поле "Добавить свое решение здесь"!

Member 14513101

Вот что мне хотелось бы знать.

Richard Deeming

Так почему же вы спрашиваете меня, а не публикуете комментарий к решению 1?!