Leer 6PP te integreren in websites of applicaties
What is there to learn about a postcode?
Tutorial
Deze pagina bevat enkele eenvoudige voorbeelden om op te warmen. Voor wie meer functionaliteit nodig heeft zijn er geavanceerde voorbeelden en is de complete webservice gedocumenteerd.
Eenvoudige voorbeelden
Adres opvragen als XML
De eenvoudigste manier van communiceren met de 6PP webservices is via een HTTP GET. Standaard wordt XML data geretourneerd.
Gegeven een postcode (bijvoorbeeld: 5616JR) wordt het bijbehorende adres opgevraagd.
Voorbeeld: http://6pp.kvdb.net/services/lookup?postcode=5616JR.
Uitvoer:
<result>
<item>
<postcode>5616JR</postcode>
<street>Jacobus Deckersstraat</street>
<subtitle>Onderwijzer te strijp van 1797 tot 1849</subtitle>
<city>Eindhoven</city>
<province>Noord-Brabant</province>
<areacode>040</areacode>
<geo_precision>city</geo_precision>
<geo_lat>51.45000000</geo_lat>
<geo_long>5.46666700</geo_long>
</item>
</result>
Adres opvragen als JSON
In sommige talen (b.v. JavaScript) is JSON eenvoudiger te verwerken dan XML.
Dit formaat is te verkrijgen door het toevoegen van de parameter tg_format=json.
In het volgende voorbeeld wordt alleen het numerieke deel (4PP) van de postcode meegegeven, waardoor alleen de plaats, niet de straat bekend wordt.
Voorbeeld: http://6pp.kvdb.net/services/lookup?postcode=5408&tg_format=json.
Uitvoer:
{"result": [
{"city": "Volkel",
"street": "",
"subtitle": "",
"postcode": "5408",
"areacode": "0413",
"geo_precision": "city",
"geo_lat": "51.65000000",
"geo_long": "5.65000000"}
]}
Adres opvragen als SOAP
Een derde manier is het gebruik van SOAP. WSDL: http://6pp.kvdb.net/services/soap/api.wsdl
Dit PHP voorbeeld geeft het volgende resultaat:
stdClass Object
(
[result] => stdClass Object
(
[item] => stdClass Object
(
[city] => Hilversum
[postcode] => 1212AB
[street] => Oude Amersfoortseweg
)
)
)
Afstand tussen postcodes
Als opstapje naar de geavanceerde voorbeelden gebruiken we de distance API call om de afstand tussen postcodes of plaatsen tot op redelijke nauwkeurigheid te bepalen.
Er zijn vier gradaties in precisie. Namelijk:
- street (de meest nauwkeurige indicatie)
- postcode (indien geografische straatinformatie niet beschikbaar is)
- city (indien geografische postcodeinformatie niet beschikbaar is)
- country (indien geografisch stadsinformatie niet beschikbaar is)
Voorbeeld: http://6pp.kvdb.net/distance?start_postcode=5408&destination_postcodes=2987&tg_format=json
Uitvoer:
{"result": {
"distance": "76.4",
"unit": "km",
"distance_precision": "city",
"city": "Volkel",
"postcode": "5408",
"lat": 51.649999999999999,
"lng": 5.6500000000000004,
"precision": "city",
"city2": "Ridderkerk",
"postcode2": "2987",
"lat2": 51.866667,
"lng2": 4.5999999999999996,
"precision2": "city"}
}
Geavanceerde voorbeelden
Javascript en JSONP
Om 6PP gegevens direct in een Javascript website te integreren is het goed te weten dat de meeste browsers niet toestaan data op te halen van een ander domein (in dit geval 6pp.kvdb.net). De oplossing hiervoor is JSONP.
Deze methode wordt ook gebruikt in de javascript code zoals demonstreerd op de 6PP website.
Voorbeeld: http://6pp.kvdb.net/services/lookup?postcode=5408&tg_format=json&jsonp=myFunc.
Door gebruik de parameter jsonp=myFunc wordt de uitvoer 'gewrapt' in een functie aanroep welke direct door JavaScript wordt uitgevoerd. De functie 'myFunc' dient wel aanwezig en zelf geimplementeerd te zijn.
Uitvoer:
myFunc(
{"result": [
{"city": "Volkel",
"street": "",
"postcode": "5408",
"geo_precision": "city",
"geo_lat": "51.65000000",
"geo_long": "5.65000000"}
]}
);
Gedetaileerdere adres gegevens
Er zijn meer en gedetaileerdere adres gegevens uit 6PP op te vragen. Zoals de documentatie van getstreet vermeldt:
Voorbeeld: http://6pp.kvdb.net/services/getstreet?fourpp=1053&chars=XD&tg_format=json.
Uitvoer:
{"result": {
"total": 1,
"perpage": 1000,
"page": 1,
"pages": 1
"streets": [{
"id": 314,
"updated": 1237235684,
"created": 1237235684,
"source_id": 4,
"source": "Mijn NL <www.mijnnl.nl>",
"fourpp": 1053,
"lat": "52.35000000",
"lng": "4.91666700",
"precision": "city",
"street": "Da Costakade",
"even": true,
"low": 160,
"high": 160,
"lowcapped": null,
"highcapped": null,
"pobox": false,
"chars": "XD",
"postcode_id": 964,
"city_id": 634,
"city_name": "Amsterdam",
"province_id": 9,
"province_name": "Noord-Holland",
"country_id": 1,
"country_name": "Nederland",
}]
}}
Synchroniseren met een eigen database
Bij gebruik van een eigen database is het aan te raden regelmatig te synchroniseren met 6PP om de laatste wijzigingen te ontvangen.
Zoals uitgewerkt in dit voorbeeld begint het vullen van een initieel lege database met alle beschikbare plaatsen:
- http://6pp.kvdb.net/services/getcity
- http://6pp.kvdb.net/services/getcity?page=2
- ... herhaal zolang er meer pagina's zijn.
Om dagelijks te syncroniseren, gebruik de min_update_date parameter. Zo worden alleen plaatsen teruggegeven welke zijn toegevoegd of aangepast na de genoemde datum. De datum wordt genoteerd in "Unix time" formaat.
- http://6pp.kvdb.net/services/getcity?min_update_date=1237291276
- ... herhaal zolang er meer pagina's zijn.
Na de plaatsen kan een soortgelijke synchronisatie worden uitgevoerd voor postcodes en straten:
- http://6pp.kvdb.net/services/getpostcode?min_update_date=1237291276
- ... herhaal zolang er meer pagina's zijn.
- http://6pp.kvdb.net/services/getstreet?min_update_date=1237291276
- ... herhaal zolang er meer pagina's zijn.
Meer hulp nodig?
Stel een vraag in het forum of via dit reactieformulier (laat een e-mailadres achter).