Rijks driehoek coordinaten omzetten naar map nummer

Status
Niet open voor verdere reacties.
input string is not in the right format.

Code:
Imports System.IO
Imports System.Net
Imports System.Web
Imports System.Collections.Generic
Imports System.ComponentModel
Public Class Form1
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    End Sub
    ''' <summary>
    ''' Call the GetLatLon method to geocode a physical address
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub btnGeocode_Click(sender As System.Object, e As System.EventArgs) Handles btnGeocode.Click



        'Dim link As String
        'Dim link2 As String
        'Dim adres As String
        'adres = txtAddress.Text
        'link = "https://maps.google.com/maps?q=" + adres
        'link2 = "http://maps.google.com/maps/geo?q=" + adres + "&output=csv&oe=utf8&sensor=false"

        ''WEB CLIENT IS NEEDED TO DO THE DOWNLOAD
        'Dim MyWebClient As New System.Net.WebClient

        ''BYTE ARRAY HOLDS THE DATA
        'Dim ImageInBytes() As Byte = MyWebClient.DownloadData(link2)

        ''CREATE A MEMORY STREAM USING THE BYTES
        'Dim ImageStream As New IO.MemoryStream(ImageInBytes)

        ''CREATE A BITMAP FROM THE MEMORY STREAM
        'Form2.Show()
        'Form2.WebBrowser1.Navigate(link2)

        'Dim address As String
        'address = txtAddress.Text
        'System.Diagnostics.Process.Start("https://maps.google.com/maps?q=" + address)

        Try
            Dim ll As New LatLon()
            Dim test
            ll = GetLatLon(txtAddress.Text)
            'txtLatLon.Text = test.ToString()
            txtLatLon.Text = ll.Latitude.ToString() & ", " & ll.Longitude.ToString()
        Catch ex As Exception
            MessageBox.Show(ex.Message, "An error has occurred")
        End Try
    End Sub
    ''' <summary>
    ''' This function makes a call using the Google Maps API to geocode a physical
    ''' address and report the
    ''' latitude and longitude of the address
    '''
    ''' You will need to obtain a Google Maps API key and plug it into the url string the
    ''' space indicated in order for this
    ''' code to execute properly
    '''
    ''' The code could be useful to you if you need to geocode some addresses in order to
    ''' display them on a map, for example if
    ''' your site had a store locator, this code could be used to find the lat/lon of
    ''' each store.  I would recommend obtaining the
    ''' addresses and keeping them in a database table rather than querying Google maps
    ''' for the lat/lon of the address each time it
    ''' is needed.  Google does have limitations upon the number of free queries it will
    ''' support, at that, it might be useful to just
    ''' write an application to loop through all of the addresses, geocode each address,
    ''' and then write those captured lat/lon values
    ''' into your table.
    '''
    ''' Whilst useful, there is nothing particulary interesting about this code; I think
    ''' it is pretty well covered in the Google Maps API documentation
    ''' </summary>
    ''' <param name="addr"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function GetLatLon(ByVal addr As String) As LatLon
        Dim url As String = "http://maps.googleapis.com/maps/api/geocode/xml?sensor=false&address=" & 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 New LatLon(Convert.ToDouble(parts(2)), Convert.ToDouble(parts(3)))
        End If
        Return Nothing
    End Function
End Class
 
en met die code die je had gevonden komt niet het goede coördinaat eruit:
mijninput was 5205366 / 506609
de output zou moeten zijn: 136013 / 455723
maar er komt 2732210 / -3343125 uit
 
De response is XML. en je kunt het gewoon uitlezen met een XML lezer. Deze hele code kan in principe weg en vervangen worden door 4 regels code :)

Jouw oude code is blijkbaar een oude API en wordt niet meer ondersteund door google.

Hier is een interessante link over hoe het kan:

http://stackoverflow.com/questions/16550617/parse-google-geocode-xml-in-vb-net

Ik heb vandaag geen tijd meer, maar jij wil de node: geometry - location - lat en lng
 
en met die code die je had gevonden komt niet het goede coördinaat eruit:
mijninput was 5205366 / 506609
de output zou moeten zijn: 136013 / 455723
maar er komt 2732210 / -3343125 uit

mijn code verwacht input met een punt of komma:

52,334546 en 4,85734 bijvoorbeeld. De code is in N E GPS coordinaten

N52 05 366 E4 55 723

vertaald naar:

52.089433 5.11015

Als ik dat in mijn code invul = 136012 455722
 
Laatst bewerkt:
mijn code verwacht input met een punt of komma:

52,334546 en 4,85734 bijvoorbeeld. De code is in N E GPS coordinaten

N52 05 366 E4 55 723

vertaald naar:

52.089433 5.11015

Als ik dat in mijn code invul = 136012 455722

Als ik hem aanpas met een komma (,) dan zit hij er nog naast: mijneind coördinaat is 132975 / 451754
 
Heb je de vertaalde coordinaat ingegeven?

dus 52,08 en 5,11 ? zie ook de informatie die in je quote staat :P
 
waarmee heb je die coordinaten vertaald. De coordinaten die ik opgeef (N52 05.366 E005 06.609) hoort bij RD 136013 / 455723
 
De metrische variant.

Je mag WGS op 2 manieren opschrijven:

graden minuten seconden: 52 03 366
of in decimalen
graden.deelgraden: 52.089433

mijn code gebruik decimale WGS notatie

Je coordinaten zijn utrecht CS?
 
de coordinaten zijnidd van utrecht cs. Deze kwam uit een voorbeeld qua rd coordinaten, die heb ik met een code omgezet naar WGS84hddd mm.mmm en ik wil dus met die notatie een eventueel adres opvragen.
Hetlukt mij trouwens niet om met die xml aan de slag tegaan.Of je moet even opweg helpen een deze dagen hoe ik die geometry/location/lat lng kan gebruiken. want hij geeft een error bij mij als ik hem invoer. Ik geef dan in de url address=rijksmuseum,amsterdam in.
 
omzetten is heel eenvoudig hoor:

schrijf het minuten deel "05 366" als 5.366 en deel door 60: 5.366 / 60 = 0,089433
voor de E: "06 609" -> 6.609 / 60 = 0.11015
 
ik heb nog even naar die XML gekeken:

Code:
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim URLString As String = "http://maps.googleapis.com/maps/api/geocode/xml?address=rijksmuseum,amsterdam&sensor=false"
        Dim reader As System.Xml.XmlTextReader = New System.Xml.XmlTextReader(URLString)
        Dim XMLdoc As New System.Xml.XmlDocument
        XMLdoc.Load(reader)
        Dim m_nodelist As System.Xml.XmlNodeList

        m_nodelist = XMLdoc.SelectNodes("//GeocodeResponse/result/geometry/location/lat")
        Dim lat As Double = Val(m_nodelist(0).InnerText)
        m_nodelist = XMLdoc.SelectNodes("//GeocodeResponse/result/geometry/location/lng")
        Dim lng As Double = Val(m_nodelist(0).InnerText)

    End Sub

Deze code haalt de lat en lng van het rijksmuseum in amsterdam. Let op: het resultaat is in het decimale WGS formaat (dus bruikbaar om direct met die andere functie om te zetten in rijksdriehoek).

Als je het resultaat om wil zetten naar minuten zou ik dat alleen doen naar de userinterface, want de decimale versie is eenvoudig in een double op te slaan. Een conversiefunctie kan zijn:

Code:
    Function formatNE(ByVal input As Double) As String
        Dim a As Long
        Dim b As Double
        a = Math.Truncate(input)
        b = (input - a) * 60
        Return a & " " & FormatNumber(b, 3, TriState.True, TriState.False, TriState.False)
    End Function
 
ik probeer het te snappen met die xml file, alleen het volgende lukt niet:

Code:
m_nodelist = XMLdoc.SelectNodes("//GeocodeResponse/result/address_component/type/postal_code")
        Dim postal_code As Double = Val(m_nodelist(0).InnerText)

wat gaat er fout om die postcode op te vragen.
 
twee dingen:

- je probeert een postcode in double op te slaan. dat gaat iig niet werken omdat een postcode letters bevat. Je krijgt hoogstens het gebied op deze manier
- postcode is een childnode van een groep

Code:
m_nodelist = XMLdoc.SelectNodes("//GeocodeResponse/result/address_component")

vervolgens moet je door deze nodelist lopen totdat je type postcode tegenkomt. Ik heb geen VB nu, maar het wordt zoiets (in pseudocode dus niet echte geteste code)

Code:
m_nodelist = XMLdoc.SelectNodes("//GeocodeResponse/result/address_component")

for each zoeken as system.xml.xmlnode in m_nodelist
  'dit stuk weet ik echt niet uit mijn hoofd
  'if type = postcode
  'etc.
next zoeken

Misschien kan ik er morgen eens naar kijken maar het is zoiets
 
Ik heb nog even gekeken naar mijn code, maar het kan nog eenvoudiger (xpath is krachtiger dan ik dacht):

Code:
        Dim URLString As String = "http://maps.googleapis.com/maps/api/geocode/xml?address=rijksmuseum,amsterdam&sensor=false"
        Dim reader As System.Xml.XmlTextReader = New System.Xml.XmlTextReader(URLString)
        Dim mydoc As New System.Xml.XmlDocument

        mydoc.Load(reader)
        Dim postcode As String = mydoc.SelectSingleNode("//GeocodeResponse/result/address_component[type='postal_code']/long_name").InnerText

        Dim lat As Double = Val(mydoc.SelectSingleNode("//GeocodeResponse/result/geometry/location/lat").InnerText)
        Dim lng As Double = Val(mydoc.SelectSingleNode("//GeocodeResponse/result/geometry/location/lng").InnerText)

Even getest met mijn eigen adres en dat lijkt goed te kloppen
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan