vb代码将地址编码为latlong [英] vb code to geocode address into latlong

查看:69
本文介绍了vb代码将地址编码为latlong的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



我正在尝试使用代码眉,但我总是收到错误'远程服务器返回错误:(403)禁止。'在线'昏暗响应由于HttpWebResponse = request.GetResponse()'。

我用我的钥匙替换了[你的钥匙在这里]( - >是[]必要的吗?)。



任何人都可以提供帮助吗?



 私人  Sub  Geocode_Click( ByVal  sender  As  System。 对象 ByVal  e  As  System.EventArgs )句柄 Geocode.Click 
txtLatLon.Text = GetLatLon(txtAddress.Text)
结束 Sub





 公共 功能 GetLatLon( ByVal  addr  As  字符串作为 字符串 
Dim url 作为 字符串 = http://maps.google.com/maps/geo?output=csv&key= [你的钥匙在这里]& q =& addr
Dim request As System.Net.WebRequest = WebRequest.Create(url)
Dim 响应 As HttpWebResponse = request.GetResponse()
如果 response.StatusCode = HttpStatusCode.OK 那么
Dim ms 作为 System.IO.MemoryStream()
Dim responseStream As System.IO.Stream = response.GetResponseStream()
Dim buffer( 2048 作为 字节
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)
结束 while
responseStream.Close()
ms.Close()
Dim responseBytes()< span class =code-keyword> As Byte = ms.ToArray()
Dim encoding As New System.Text.ASCIIEncoding()
Dim coords As String = encoding.GetString(responseBytes)
Dim parts() As 字符串 = coords.Split(
返回 Convert.ToDouble(parts( 2 ))& Convert.ToDouble(parts( 3 ))
结束 如果
返回 没什么
结束 功能

解决方案

found这个(我自己)工作(不要忘记将语言设置'language = nl'改为你想要的那个;)):



 ' 请参阅解释: 
' https://developers.google.com/maps/documentation/geocoding/index
'
公开 功能 GetLatLon( ByVal addr 作为 字符串作为 < span class =code-keyword> String
尝试
Dim url 作为 字符串 = < span class =code-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 响应 As HttpWebResponse = request.GetResponse()
If response.StatusCode = HttpStatusCode.OK 然后
Dim ms As System.IO.MemoryStream()
Dim responseStream As System.IO.Stream = response.GetResponseStream()
Dim buffer( 2048 As 字节
Dim count 作为 Integer = responseStream.Read(buffer, 0 ,buffer.Length)
while 计数> 0
ms.Write(buffer, 0 ,count)
count = responseStream .Read(buffer, 0 ,buffer.Length)
结束 while
responseStream.Close()
ms.Close()
Dim responseBytes()< span class =code-keyword> As Byte = ms.ToArray()
Dim encoding As New System.Text.ASCIIEncoding()
Dim Resp As String = encoding.GetString(responseBytes)
Dim Pos 正如 整数 = InStr(Resp, < lat>) - 1
Dim Nb 作为 整数 = CharCount(Resp, < lat>
' response / x的结构时间< lat> 50.8469547< / lat> < lng> 3.6013676< / lng>
Dim Coords(Nb, 2 As String
Dim Counter As 整数 = 1
直到InStr(Pos,Resp, < lat>,CompareMethod.Text)= 0
Coords(计数器, 1 )= Mid(Resp,InStr(Pos,Resp, < lat>, CompareMethod.Text)+ 5 ,InStr(Pos,Resp, < / lat>,CompareMethod.Text) - (InStr(Pos,Resp, < lat>,CompareMethod.Text)+ 5 ))
Coords(计数器, 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
循环
Resp =
对于计数器= 1 Nb
Resp = Resp& Coords(计数器, 1 )& & Coords(计数器, 2 )& ;
下一页
返回 Resp
否则
MsgBox(response.StatusCode.ToString ,MsgBoxStyle.Exclamation, fout
返回
结束 如果
Catch ex 正如异常
MsgBox(ex.ToString)
返回
结束 尝试
结束 功能


什么是charcount fnction?

Hi ,
I'm trying to use the code brow but i'm always getting the error 'The remote server returned an error: (403) Forbidden.' on the line ' Dim response As HttpWebResponse = request.GetResponse()'.
I replaced [YOUR KEY GOES HERE] with my key (-> are the [ ] necessary?).

anyone can help?

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

解决方案

found this (myself) to be working (don't forget to change the language setting 'language=nl' to the one you want ;) ):

'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


what is the charcount fnction??


这篇关于vb代码将地址编码为latlong的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆