Rijks driehoek coordinaten omzetten naar map nummer

Status
Niet open voor verdere reacties.
vond dit in een andere post:
Code:
        Dim WebC As New System.Net.WebClient
        Dim WebpaginaInhoud As String = WebC.DownloadString("www.jouwwebadres.com")

Daar zul je dan handmatig de graphics uit moeten halen. Zoals ik al aangaf heb ik er persoonlijk nooit mee gewerkt, maar het kan dus wel.

Mogelijk zijn er kan en klare mods voor die dit al voor je kunnen doen. Als je eenmaal de juiste images hebt kun je die met een zelfde soort code ook op je scherm laden.

Dus, het is mogelijk, maar ik heb daar zelf geen kant en klare oplossing voor. Ik kan met een gegeven URL van een plaatje dat plaatje in een imagebox krijgen maar daar houd mijn kennis op ;)
 
Oké, toch bedankt Wampier. Ik ga wat proberen met mijn huidige code's en die van jou,om alles werkend te krijgen.
Btw. is het mogelijk om in die coords (dat stuk code) een extra stukje toe te voegen waarin de bestandslocatie wordt aangewezen, zodat ik daarna de bijbehorende bestanden kan openen???
 
Ja hoor. Je kunt natuurlijk ook "mapname" vullen met het volledige pad.
 
ik wil mapname behouden, zodat je als gebruiker weet welke map geopend gaat worden.
Maar waar en hoe voeg ik hem toe, en hoe zorg ik er dan voor dat het bestand geopend word.
 
Let op dit is even uit de losse pols (geen editor beschikbaar) dus mogelijk type / spellingsfouten

Code:
Public Class coords
    Dim x1 As ULong
    Dim x2 As ULong
    Dim y1 As ULong
    Dim y2 As ULong
    Dim mapname As String
    Dim BL as String
    Sub New(ByVal xi1 As ULong, ByVal xi2 As ULong, ByVal yi1 As ULong, ByVal yi2 As ULong, ByVal mapn As String, Byval bestand As String)
        Me.x1 = xi1
        Me.x2 = xi2
        Me.y1 = yi1
        Me.y2 = yi2
        Me.mapname = mapn
        Me.BL = bestand
    End Sub

    Public Function isin(ByVal xi As ULong, ByVal yi As ULong) As String
        If (xi >= Me.x1 And xi < Me.x2 And yi >= Me.y1 And yi < Me.y2) Then
            Return Me.mapname
        Else
            Return ""
        End If
    End Function

    Public Function locatie() As String
        return Me.BL
    End Function
End Class

De nieuwe aanmaak wordt dan:
Code:
opslag(0) = New coords(0, 10, 0, 10, "henk","C:\mappen\henk.jpg")

Terughalen kan via:
Code:
        For Each zoeken In opslag
            If zoeken.isin(xi, yi) <> "" Then
                MessageBox.Show(zoeken.isin(xi, yi))
                ' bestand te vinden met:
                ' image.open(zoeken.locatie())
            End If
        Next
 
kan je me helpen met het volgende misschien:

ik heb nu de conversie van RD to WSG84, maar ik wil ook andersom,
heb de volgende code gevonden, maar hij loopt daarop vast.

Code:
Public Sub WSGtoRD(ByVal dblLatitude As Double, ByVal dblLongitude As Double, ByRef iX As Long, ByRef iY As Long)

        Const Lat0 As Double = 52.1551744
        Const Long0 As Double = 5.38720621
        Const x0 = 155000
        Const y0 = 463000

        iX = 0
        iY = 0

        ' Transformation parameters
        Dim Rp(8) : Rp(0) = 0 : Rp(1) = 1 : Rp(2) = 2 : Rp(3) = 0 : Rp(4) = 1 : Rp(5) = 3 : Rp(6) = 1 : Rp(7) = 0 : Rp(8) = 2
        Dim Rq(8) : Rq(0) = 1 : Rq(1) = 1 : Rq(2) = 1 : Rq(3) = 3 : Rq(4) = 0 : Rq(5) = 1 : Rq(6) = 3 : Rq(7) = 2 : Rq(8) = 3
        Dim Rpq(8) : Rpq(0) = 190094.945 : Rpq(1) = -11832.228 : Rpq(2) = -114.221 : Rpq(3) = -32.391 : Rpq(4) = -0.705 : Rpq(5) = -2.34 : Rpq(6) = -0.608 : Rpq(7) = -0.008 : Rpq(8) = 0.148


        Dim Sp(9) : Sp(0) = 1 : Sp(1) = 0 : Sp(2) = 2 : Sp(3) = 1 : Sp(4) = 3 : Sp(5) = 0 : Sp(6) = 2 : Sp(7) = 1 : Sp(8) = 0 : Sp(9) = 1
        Dim Sq(9) : Sq(0) = 0 : Sq(1) = 2 : Sq(2) = 0 : Sq(3) = 2 : Sq(4) = 0 : Sq(5) = 1 : Sq(6) = 2 : Sq(7) = 1 : Sq(8) = 4 : Sq(9) = 4
        Dim Spq(9) : Spq(0) = 309056.544 : Spq(1) = 3638.893 : Spq(2) = 73.077 : Spq(3) = -157.984 : Spq(4) = 59.788 : Spq(5) = 0.433 : Spq(6) = -6.439 : Spq(7) = -0.032 : Spq(8) = 0.092 : Spq(9) = -0.054

        Dim dLat As Double : dLat = 0.36 * (dblLatitude - Lat0)
        Dim dLong As Double : dLong = 0.36 * (dblLongitude - Long0)

        Dim i As Integer
        Dim dx As Double
        Dim dy As Double

        For i = 0 To 8
            dx = dx + Rpq(i) * Pow(dLat, Rp(i)) * Pow(dLong, Rq(i))
            'dx = Rpq(I) * Pow(dLat, Rp(I)) * Pow(dLong, Rq(I))
        Next

        For i = 0 To 9
            dy = dy + Spq(i) * Pow(dLat, Sp(i)) * Pow(dLong, Sq(i))
        Next



        iX = x0 + Int(Math.Round(dx, 2))
        iY = y0 + Int(Math.Round(dy, 2))

        lblOutLatitude.Text = iX
        lblOutLongitude.Text = iY

    End Sub

    Private Function Pow(ByVal D As Double, ByVal P As Integer)
        Dim dRet As Double : dRet = 1
        Dim i As Integer
        For i = 0 To P - 1
            dRet = dRet * D
        Next
        Pow = dRet
    End Function
Hij loopt vastop:

Code:
iX = x0 + Int(Math.Round(dx, 2))
        iY = y0 + Int(Math.Round(dy, 2))
[\code]

Wat kan ik er aan doen, of heb je een andere code voor mij die werkt.
 
Je doet iX als een "ByRef as long". Ik weet niet welke error je krijgt maar ik gok zo even dat hier een conversie probleem zit. De code is ook wel een beetje raar: je rondt het eerst af op 2 decimalen en vervolgens haal je het door de INT functie?
 
dit is een code die ik van internet ophaal. wat moet ik aanpassen dan om hem goed werkend te krijgen??? want dat ik iX en iY moet meegeven als ik de functie aanroep vond ik ookalvreemd, want die worden gedeclareerd in de functie zelf als 0
 
Ze zijn "ByRef". dat betekend dat de origine variabele die je meestuurt direct worden aangepast in je onderliggende code.

byval voorbeeld (pseudocode):

Code:
a=5
b=3

sub byval a,b
 a=a+b
end sub

print a
print b

uitkomst: a=5, b=3

byref:


Code:
a=5
b=3

sub byref a,b
 a=a+b
end sub

print a
print b

uitkomst: a=8, b=3

byref heeft als groot voordeel dat je dus dingen direct in het hoofdprogramma aan kan passen. Het nadeel is dat validatie dus moeilijk wordt

Krijg je een specifieke foutmelding of crash error?
 
hij expecting iets. weet alleen niet meer wat, ben namelijk mijn code aan het opschonen, zodat ik alles geordend weg kanz etten.
 
waarschijnlijk wel ja, maar hoe kan ik dat aanpassen, moet ik dan gewoon de declaratie in de functie weghalen,zodat ze standaard 0 zijn??
 
heb decode als volgt in mijn programma gezet, alleen krijg nu deze error: Arithmetic operation resulted in an overflow.

Code:
Public Class Form1

    Private Property iX As Integer
    Private Property iY As Integer

    Public Sub WSGtoRD(ByVal dblLatitude As Double, ByVal dblLongitude As Double)

        Const Lat0 As Double = 52.1551744
        Const Long0 As Double = 5.38720621
        Const x0 = 155000
        Const y0 = 463000

        iX = 0
        iY = 0

        ' Transformation parameters
        Dim Rp(8) : Rp(0) = 0 : Rp(1) = 1 : Rp(2) = 2 : Rp(3) = 0 : Rp(4) = 1 : Rp(5) = 3 : Rp(6) = 1 : Rp(7) = 0 : Rp(8) = 2
        Dim Rq(8) : Rq(0) = 1 : Rq(1) = 1 : Rq(2) = 1 : Rq(3) = 3 : Rq(4) = 0 : Rq(5) = 1 : Rq(6) = 3 : Rq(7) = 2 : Rq(8) = 3
        Dim Rpq(8) : Rpq(0) = 190094.945 : Rpq(1) = -11832.228 : Rpq(2) = -114.221 : Rpq(3) = -32.391 : Rpq(4) = -0.705 : Rpq(5) = -2.34 : Rpq(6) = -0.608 : Rpq(7) = -0.008 : Rpq(8) = 0.148


        Dim Sp(9) : Sp(0) = 1 : Sp(1) = 0 : Sp(2) = 2 : Sp(3) = 1 : Sp(4) = 3 : Sp(5) = 0 : Sp(6) = 2 : Sp(7) = 1 : Sp(8) = 0 : Sp(9) = 1
        Dim Sq(9) : Sq(0) = 0 : Sq(1) = 2 : Sq(2) = 0 : Sq(3) = 2 : Sq(4) = 0 : Sq(5) = 1 : Sq(6) = 2 : Sq(7) = 1 : Sq(8) = 4 : Sq(9) = 4
        Dim Spq(9) : Spq(0) = 309056.544 : Spq(1) = 3638.893 : Spq(2) = 73.077 : Spq(3) = -157.984 : Spq(4) = 59.788 : Spq(5) = 0.433 : Spq(6) = -6.439 : Spq(7) = -0.032 : Spq(8) = 0.092 : Spq(9) = -0.054

        Dim dLat As Double : dLat = 0.36 * (dblLatitude - Lat0)
        Dim dLong As Double : dLong = 0.36 * (dblLongitude - Long0)

        Dim i As Integer
        Dim dx As Double
        Dim dy As Double

        For i = 0 To 8
            dx = dx + Rpq(i) * Pow(dLat, Rp(i)) * Pow(dLong, Rq(i))
            'dx = Rpq(I) * Pow(dLat, Rp(I)) * Pow(dLong, Rq(I))
        Next

        For i = 0 To 9
            dy = dy + Spq(i) * Pow(dLat, Sp(i)) * Pow(dLong, Sq(i))
        Next



        iX = x0 + Int(Math.Round(dx, 2))
        iY = y0 + Int(Math.Round(dy, 2))

        lblOutLatitude.Text = iX
        lblOutLongitude.Text = iY

    End Sub

    Private Function Pow(ByVal D As Double, ByVal P As Integer)
        Dim dRet As Double : dRet = 1
        Dim i As Integer
        For i = 0 To P - 1
            dRet = dRet * D
        Next
        Pow = dRet
    End Function

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        WSGtoRD(latitudeTxt.Text, longitudeTxt.Text)
    End Sub
End Class
 
Denk dat ergens de formule niet klopt. Die overflow wil zeggen dat de uitkomst niet in een "INT" past. Dat zijn getallen met meer dan 20 nullen of zo. Lijkt me niet de juiste uitkomst
 
en hoe kan ik dat verhelpen, met bovenstaande code. Kan namelijk geen andere WGS84 to RD code vinden
 
Er staan er verschillende online hoor. hier is er een die ik gejat heb en even getest (origineel werk Ejo Schrama)

Code:
        REM Fixed constants / coefficients
        Dim x0 As Double = 155000
        Dim y0 As Double = 463000
        Dim k As Double = 0.9999079
        Dim bigr As Double = 6382644.571
        Dim m As Double = 0.003773954
        Dim n As Double = 1.000475857
        Dim lambda0 As Double = 0.094032038
        Dim phi0 As Double = 0.910296727
        Dim l0 As Double = 0.094032038
        Dim b0 As Double = 0.909684757
        Dim ee As Double = 0.081696831
        Dim a As Double = 6377397.155
        Dim lat As Double = TextBox1.Text
        Dim lon As Double = TextBox2.Text

        REM wgs84 to bessel
        Dim dphi As Double = lat - 52
        Dim dlam As Double = lon - 5

        Dim phicor As Double = (-96.862 - dphi * 11.714 - dlam * 0.125) * 0.00001
        Dim lamcor As Double = (dphi * 0.329 - 37.902 - dlam * 14.667) * 0.00001

        Dim phibes As Double = lat - phicor
        Dim lambes As Double = lon - lamcor

        REM bessel to rd
        Dim phi As Double = phibes / 180 * Math.PI
        Dim lambda As Double = lambes / 180 * Math.PI
        Dim qprime As Double = Math.Log(Math.Tan(phi / 2 + Math.PI / 4))
        Dim dq As Double = ee / 2 * Math.Log((ee * Math.Sin(phi) + 1) / (1 - ee * Math.Sin(phi)))
        Dim q As Double = qprime - dq

        Dim w As Double = n * q + m
        Dim b As Double = Math.Atan(Math.Exp(w)) * 2 - Math.PI / 2
        Dim dl As Double = n * (lambda - lambda0)

        Dim d_1 As Double = Math.Sin((b - b0) / 2)
        Dim d_2 As Double = Math.Sin(dl / 2)

        Dim s2psihalf As Double = d_1 * d_1 + d_2 * d_2 * Math.Cos(b) * Math.Cos(b0)
        Dim cpsihalf As Double = Math.Sqrt(1 - s2psihalf)
        Dim spsihalf As Double = Math.Sqrt(s2psihalf)
        Dim tpsihalf As Double = spsihalf / cpsihalf

        Dim spsi As Double = spsihalf * 2 * cpsihalf
        Dim cpsi As Double = 1 - s2psihalf * 2

        Dim sa As Double = Math.Sin(dl) * Math.Cos(b) / spsi
        Dim ca As Double = (Math.Sin(b) - Math.Sin(b0) * cpsi) / (Math.Cos(b0) * spsi)

        Dim r As Double = k * 2 * bigr * tpsihalf
        Dim x As Double = r * sa + x0
        Dim y As Double = r * ca + y0

        Label1.Text = Math.Round(x)
        Label2.Text = Math.Round(y)
 
heb meeerdere geprobeerd, en ze werkten allemaal niet. Zal deze nog testen een deze dagen,

Terug komend op dat script wat ik had gepost van adres naar coordinaten (Geocode) hoe krijg ik die werkend, krijg nu steeds foutmeldeingen (Ik gok erop dat mijn api key niet goed is. Heb ook geen idee welke ik moet hebben...)
 
Ik begrijp nog steeds niet goed waarom je die wil hebben, omdat google ook met het adres om kan gaan. Ik ken de API verder niet, maar als je een sleutel wil hebben moet je die waarschijnlijk aanvragen bij google.
 
ik wil dat omdat ik in mijn programma het ook moet omzetten naar gps coordinaten. Bij google kan ik niet de juiste api key aanvragen, misschien dat jij nog iets kan vindne qua code. ik kan iig niks werkends vinden.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan