Hoe verkrijg ik de latitude/longitude uit tabel geo_adres?

515 views
Skip to first unread message

Jan

unread,
Nov 2, 2012, 6:58:56 AM11/2/12
to nlex...@googlegroups.com
Beste NLExtract/geodata specialisten,

Ik probeer de geografische data vanuit PostgreSQL over te zetten naar MySQL voor gebruik in een internet applicatie en wilde bij deze informeren of iemand mij zou kunnen helpen / adviseren hoe de latitude/longitude gegevens zijn te verkrijgen uit een 'geopunt' veld (geometry) van NLExtract v1.1.2 in specifiek de tabel geo_adres.

De volgende Query levert het volgende resultaat op:

SELECT straatnaam,ST_Y(geopunt) as y,ST_X(geopunt) as x FROM geo_adres

Resultaat: 

Novalaan 444531.679,192632.163
Dreef 444659.26,189110.977
Abdijhof 440588.072,192035.59
Putstraat 444348.326,191484.067
Stedumhof 440909.383,189938.078

Zijn deze gegevens correct en zo ja, hoe kan ik uit deze getallen de latitude en longitude herleiden? Ik heb reeds geprobeerd het getal door 10000 te delen maar kom dan uit in Polen.

Ik hoop dat iemand mij verder kan helpen!

Met vriendelijke groet,
Jan 

Just van den Broecke

unread,
Nov 2, 2012, 7:34:41 AM11/2/12
to nlex...@googlegroups.com
Beste Jan,

Hiervoor kun je de PostGIS functie ST_Transform() gebruiken.
Bijv.

SELECT straatnaam,ST_X(ST_Transform(geopunt, 4326)),
ST_Y(ST_Transform(geopunt,4326)) FROM geo_adres;

NLExtract gaat uit van het Nederlands coordinaten-stelsel (RD
http://nl.wikipedia.org/wiki/Rijksdriehoeksco%C3%B6rdinaten ) in meters
vanaf een nulpunt ergens bij Parijs. "lat/lon" zoals je bedoelt zijn zeg
maar ongeprojecteerde bolcoordinaten (graden).

Let wel op dat je PostGIS installatie de juiste transformatie parameters
bevat. Check:
select proj4text from spatial_ref_sys where srid = 28992;
moet dit opleveren:
+proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889
+k=0.9999079 +x_0=155000 +y_0=463000 +ellps=bessel
+towgs84=565.237,50.0087,465.658,-0.406857,0.350733,-1.87035,4.0812
+units=m +no_defs
(vooral to "towgs84" moet erin zitten)

De query kan evt slimmer omdat er boven per punt 2x ST_Transform() wordt
gedaan.

groeten,

Just


On 02-11-12 11:58, Jan wrote:
> Beste NLExtract/geodata specialisten,
>
> Ik probeer de geografische data vanuit PostgreSQL over te zetten naar
> MySQL voor gebruik in een internet applicatie en wilde bij deze
> informeren of iemand mij zou kunnen helpen / adviseren hoe de
> latitude/longitude gegevens zijn te verkrijgen uit een
> 'geopunt'veld (geometry) van NLExtract v1.1.2 in specifiek de tabel
> /geo_adres/.
>
> De volgende Query levert het volgende resultaat op:
>
> SELECT straatnaam,ST_Y(geopunt) as y,ST_X(geopunt) as x FROM geo_adres
>
>
> Resultaat:
>
> /Novalaan 444531.679,192632.163
> Dreef 444659.26,189110.977
> Abdijhof 440588.072,192035.59
> Putstraat 444348.326,191484.067
> Stedumhof 440909.383,189938.078/
>
>
> Zijn deze gegevens correct en zo ja, hoe kan ik uit deze getallen de
> latitude en longitude herleiden? Ik heb reeds geprobeerd het getal door
> 10000 te delen maar kom dan uit in Polen.
>
> Ik hoop dat iemand mij verder kan helpen!
>
> Met vriendelijke groet,
> Jan
>
> --
> Dit is een bericht van de Google Groups "nlextract" group.
> Home pagina: http://www.nlextract.nl
> Groep mailen: nlex...@googlegroups.com
> Afmelden: nlextract+...@googlegroups.com
> Meer opties: http://groups.google.com/group/nlextract?hl=en



Jan

unread,
Nov 2, 2012, 9:06:02 AM11/2/12
to nlex...@googlegroups.com
Beste Just,

Hartelijk dank voor het advies. Het is gelukt!

Ik heb veel bewondering voor het werk dat is verricht voor het toegankelijk maken van de gegevens in BAG via NLExtract. Het zou wellicht nog handig zijn indien jullie het systeem toegankelijk maken voor semi-leken (webapplicatie ontwikkelaars) zodat zij er eenvoudiger bruikbare internet toepassingen mee kunnen maken.

Het zou bijvoorbeeld handig zijn wanneer de functies en mogelijkheden van de Postgres database zouden zijn beschreven en via Google vindbaar zijn. Ik weet dat dit veel werk zou kosten, maar het maakt het werk mogelijk wel extra verdienstelijk doordat het sneller toepassingen zal vinden.

Met vriendelijke groet,
Jan 

Edward Mac Gillavry

unread,
Nov 3, 2012, 8:21:02 AM11/3/12
to nlex...@googlegroups.com

Ha Jan,

Gewoon even googlen op 'postgis documentation' levert je o.a. de link http://postgis.refractions.net/docs/ op. PostGIS is de geografische uitbreiding op Postgres. Om dit nog eens dunnetjes over te doen binnen NLExtract... Veel plezier er mee. Mocht je vragen hebben, dan kan je ons hier vinden!

Groet,

Edward

Op 2 nov. 2012 14:06 schreef "Jan" <ma...@ihvn.nl> het volgende:

Jan

unread,
Nov 3, 2012, 9:26:28 AM11/3/12
to nlex...@googlegroups.com
Hoi Edward,

Bedankt voor je reactie! Het kost veel zoek en studeerwerk om via de Postgis documentatie te achterhalen hoe je de latitude/longitude kunt verkrijgen. Voor een internet ontwikkelaar vormt dat een drempel en door het ontbreken van (snel) inzicht van de mogelijkheden zullen daardoor minder snel toepassingen ontstaan die de gegevens uit BAG benutten.

Indien het jullie bedoeling is dat internet ontwikkelaars de gegevens gaan benutten voor handige en innovatieve internet tools/diensten dan zou het wellicht handig zijn om basic informatie beschikbaar te maken (in het Nederlands/goed vindbaar in Google) voor bijvoorbeeld het verkrijgen van alle straten of postcodes uit de database met latitude/longitude gegevens en het converteren naar MySQL (omdat dit het meest wordt gebruikt).

In vergelijk met de ontwikkeling van NLExtract lijkt me dit een fractie van de energie en tijd te kosten terwijl het de toegang tot (het gebruik van) de gegevens door reguliere internet ontwikkelaars enorm kan verbeteren.

Met vriendelijke groet,
Jan

Albert Drenth

unread,
Feb 26, 2013, 4:52:11 AM2/26/13
to nlex...@googlegroups.com
Aangezien ik de functie die Just op 2 november aandroeg ook niet had gevonden heb ik het met een PHP functie gedaan. Aangezien ik per lookup maar 1 GPS coördinaat gebruik werkt dit prima.
Het was redelijk wat zoekwerk en gepuzzel..
De wgs2rd functie heb ik overgeschreven vanuit andere bronnen/talen met als hoofdreferentie de aangegeven pdf om de juistheid te controleren.

Als iemand er nog een fout in spot hoor ik het graag.

function rd2wgs ($x, $y) {
// Calculate WGS84 coördinates
$dX = ($x - 155000) * pow(10, - 5);
$dY = ($y - 463000) * pow(10, - 5);
$SomN = (3235.65389 * $dY) + 
(- 32.58297 * pow($dX, 2)) + 
( - 0.24750 * pow($dY, 2)) +
( - 0.84978 * pow($dX, 2) * $dY) + 
( - 0.06550 * pow($dY, 3)) + 
( - 0.01709 * pow($dX, 2) * pow($dY, 2)) + 
( - 0.00738 * $dX) + 
(   0.00530 * pow($dX, 4)) + 
( - 0.00039 * pow($dX, 2) * pow($dY, 3)) + 
(   0.00033 * pow($dX, 4) * $dY) + 
( - 0.00012 * $dX * $dY);
$SomE = (5260.52916 * $dX) +
( 105.94684 * $dX * $dY) + 
(   2.45656 * $dX * pow($dY, 2)) + 
( - 0.81885 * pow($dX, 3)) + 
(   0.05594 * $dX * pow($dY, 3)) + 
( - 0.05607 * pow($dX, 3) * $dY) + 
(   0.01199 * $dY) + 
( - 0.00256 * pow($dX, 3) * pow($dY, 2)) + 
(   0.00128 * $dX * pow($dY, 4)) + 
(   0.00022 * pow($dY,2)) + 
( - 0.00022 * pow($dX, 2)) + 
(   0.00026 * pow($dX, 5));
 
$Latitude = 52.15517440 + ($SomN / 3600);
$Longitude = 5.38720621 + ($SomE / 3600);
 
return Array(
'lat' => $Latitude ,
'lon' => $Longitude);
}
function wgs2rd ($lat, $lon) {
$lat0 = 52.15517440;
$lon0 =  5.38720621;

$dF = 0.36 * ($lat - $lat0);
$dL = 0.36 * ($lon - $lon0);

$c01=190094.945; $d10=309056.544;
$c11=-11832.228; $d02=  3638.893;
$c21=  -114.221; $d20=    73.077;
$c03=   -32.391; $d12=  -157.984;
$c10=    -0.705; $d30=    59.788;
$c31=    -2.340; $d01=     0.433;
$c13=    -0.608; $d22=    -6.439;
$c02=    -0.008; $d11=    -0.032;
$c23=     0.148; $d04=     0.092;
$d14=    -0.054;

// Volgens "Benaderingsformules voor de transformatie, tussen RD- en WGS84-kaartcoördinate"
$SomX = ($c01 * $dL) + ($c11 * $dF * $dL) + ($c21 * pow($dF,2) * $dL) + ($c03 * pow($dL,3)) + ($c10 * $dF) + ($c31 * pow($dF,3) * $dL) + ($c13 * $dF * pow($dL,3)) + ($c02 * pow($dL,2)) + ($c23 * pow($dF,2) * pow($dL,3));
$SomY = ($d10 * $dF) + ($d02 * pow($dL,2)) + ($d20 * pow($dF,2)) + ($d12 * $dF * pow($dL,2)) + ($d30 * pow($dF,3)) + ($d01 * $dL) + ($d22 * pow($dF,2) * pow($dL,2)) + ($d11 * $dF * $dL) + ($d04 * pow($dL,4)) + ($d14 * $dF * pow($dL,4));
$x = 155000 + $SomX;
$y = 463000 + $SomY;
return Array(
'x' => $x ,
'y' => $y);
Reply all
Reply to author
Forward
0 new messages