Afstand berekenen d.m.v. postcodes

Door Dummy User, 12 jaar geleden, 21.029x bekeken

Door middel van deze code is het mogelijk om de afstand tussen 2 adressen te berekenen. Om de afstand te berekenen is naast het postcode ook de woonplaats en het land nodig anders zal er in sommige gevallen een error ontstaan (http response code 400)

Het voorbeeld onder de functie is echt voor beginners aangezien ik het voor iedereen duidelijk wou maken :) Ik heb er maar een functie van gemaakt om het voor de beginners ook gewoon makkelijk te gebruiken (geld tevens voor de join() optie om het niet al te lang te maken qua regels).

Update: Gebruik gemaakt van Curl. + voor diegene die niet snappen dat php niet afgesloten hoeft te worden ?> toegevoegd.

Gesponsorde koppelingen

PHP script bestanden

  1. afstand-berekenen-dmv-postcodes

 

Er zijn 42 reacties op 'Afstand berekenen dmv postcodes'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Rick
Rick
12 jaar geleden
 
0 +1 -0 -1
Mooi gemaakt!
Mr.Ark
Mr.Ark
12 jaar geleden
 
0 +1 -0 -1
Quote:
Mooi gemaakt!


Hoe weet je dat nou?, je eigen code is niet eens goed gescript hoe kan je nou zeggen dat dit een goede code is?

@ Niels

Misschien toch cURL gaan gebruiken?, is namelijk een stuk sneller, daarbij kunnen mensen je vast en zeker ook wel helpen om de output goed te krijgen.
Bas IJzelendoorn
Bas IJzelendoorn
12 jaar geleden
 
0 +1 -0 -1
Begin is goed maar het einde ontbreekt het een en ander. Ik mis in elk geval de afsluiting van php!

Offtopic:

typische een rick reactie. :F
Steen
steen
12 jaar geleden
 
0 +1 -0 -1
@nimtex: waarom zou je php afsluiten? wat is het voordeel? ik kan alleen met nadelen komen:
- de uitvoering is (hoewel bijna niet merkbaar) trager
- het kost je onnodig typwerk
Harmen
Harmen
12 jaar geleden
 
0 +1 -0 -1
Je kunt ook wel gl=nl toevoegen, dan hoef je niet telkens het land in te vullen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$data
= array (
    'key=' . $key,
    'output=json',
    'gl=nl',
    'q=' . urlencode('from: '.$from.' to: '.$to)
  );

?>
Dummy User
Dummy User
12 jaar geleden
 
0 +1 -0 -1
Ik heb dit gemaakt omdat het anders via javascript berekent moest worden. Dit heeft als gevolg dat er data gemanipuleerd kan worden ;)

Bij Curl liep ik tegen het vreemde probleem aan de json output d.m.v. json_decode niet omgetoverd werd tot een Array.

@harmen
Bedankt voor de tip in ieder geval. Maar het kan natuurlijk zijn dat er een adres buiten Nederland is.
Karl Karl
Karl Karl
12 jaar geleden
 
0 +1 -1 -1
Quote:
Niels schreef op 18.12.2009 15:56
Bij Curl liep ik tegen het vreemde probleem aan de json output d.m.v. json_decode niet omgetoverd werd tot een Array.

Dan kijk je even bij json_decode en dan zie je dat de tweede parameter even een ééntje moet zijn.
Klaar.
Pfft. Troep.
Dummy User
Dummy User
12 jaar geleden
 
0 +1 -0 -1
@Karl
Had ik al geprobeerd. Ben niet echt een leek ofzo wat jij misschien wel denkt aan je laatste zinnetje te zien.
Karl Karl
Karl Karl
12 jaar geleden
 
0 +1 -1 -1
Quote:
Niels schreef op 18.12.2009 16:17
@Karl
Had ik al geprobeerd. Ben niet echt een leek ofzo wat jij misschien wel denkt aan je laatste zinnetje te zien.

Lijkt mij toch dat jij dan iets fout doet, als ik deze beschrijving lees (en ken):
Quote:
assoc

When TRUE, returned objects will be converted into associative arrays.

....

Edit: En je json_decode geeft nu ook geen array, maar een object.
Ivo K
Ivo K
12 jaar geleden
 
0 +1 -0 -1
@Niels
Als je er nu nog niet achter bent dat Karl, angstaanjagend vaak terecht als je het mij vraagt, erg kritisch is dan ben je nogal traag van begrip. Als je het wel begrijpt, waarom kan je dan niet begrijpen dat Karl helemaal niet zegt dat jij een loser bent? Hij zegt alleen dat het script (erg) slecht is. Spring dus niet in de verdediging maar vraag hem of anderen om hulp om het script te verbeteren.

Verder is het aan te raden om cURL te gebruiken, zoals eerder vermeld.
Dummy User
Dummy User
12 jaar geleden
 
0 +1 -0 -1
Heb het script btw geupdate. Het maakt nu gebruik van curl en heb tevens na aanleiding van Harmen gl=nl toegevoegd :)
Karl Karl
Karl Karl
12 jaar geleden
 
0 +1 -1 -1
Ziet er nu er nu goed uit.
Mooie aanwinst voor de scriptlib.
Johan M
Johan M
12 jaar geleden
 
0 +1 -0 -1
Hallo Niels,

Lijkt mij een nuttig script, kan nog eens van pas komen!
Ik heb API-keys gegenereerd op http://code.google.com/intl/nl/apis/maps/signup.html , echter krijg ik lokaal:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
Notice: Trying to get property of non-object


en op mijn server:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
Afstand: 0 km
Tijdsduur: ~0 minuten


Ik heb bestaande postcodes en plaatsen ingevuld.

Is er een oplossing voor om het werken te krijgen of ligt dit aan mijn servers?
Dummy User
Dummy User
12 jaar geleden
 
0 +1 -0 -1
@Johan
Stuur mij even via een pm de gegevens die je hebt ingevoerd (van en naar).

Maak tevens even een dump van de output van de zipcodeCalc() anders kan ik nog weinig.
Mui ter
Mui ter
12 jaar geleden
 
0 +1 -0 -1
Lijkt mij een leuk script. Niels kun je een note plaatsen hoe de url moet zijn opgebouwd?
Michael -
Michael -
12 jaar geleden
 
0 +1 -0 -1
Zelfde hier als bij Johan. Blijft gewoon altijd 0. Graag de oplossing hier plaatsen.
Johan M
Johan M
12 jaar geleden
 
0 +1 -0 -1
In overleg via de PM zijn er een aantal aanpassingen in het bovenstaande script gekomen, lokaal zijn de notices niet alleen weg, daar werkt ie ook perfect! Maarrrr; op mijn server blijft hij nog steeds 0...?

De dump van $fetch levert slechts '1'.
Nathaniel
Nathaniel
12 jaar geleden
 
0 +1 -0 -1
Bij mij is de uitkomst ook steeds 0
Hoe kan dat?
Mike Molenkamp
Mike Molenkamp
12 jaar geleden
 
0 +1 -0 -1
Ook ik ben een beginner in de PHP wereld maar ben er toch mee aan de slag gegaan. Ik heb een postcode afstand tabel nodig van mijn regio, binnen een applicatie die geen netwerk verbinning heeft. Ik heb dit script gebruikt, maar ook enigzins aangepast. Ik had de beschikking in mijn applicatie over alle ontbrekende postcodes in een flat file CSV tabel. Deze tabel heb ik in dit script in gelezen en een nieuwe flat file CSV aangemaakt.
Alles lijkt mooi alleen ik krijg tientallen malen " Notice: Trying to get property of non-object in C:\wamp\www\MyPHP\FILECalc2.php on line 63" terug.
Ik heb inmiddels 35.000 combinaties goed binnen en er ontbreken er nog 2500 (allemaal ongeveer).
Verder als een postcode over meerdere straatnamen loopt krijg je niets terug wanneer je alleen de postcode meegeeft.

Naar mate ik mijn scipt vaker draaide komt de fout boudschap steeds vaker voor, nu krijg ik er geen goed antwoord meer uit, antwoord altijd 0,0 met genoemde fout message.
Kennelijk ben ik nu zo vaak bij de google maps API geweest dat ik het niet meer mag dat is is mijn idee, maar kan iemand dat ook bevestigen ?
Het zou ook kunnen dat de postcode te nieuw zijn of niet unique genoeg (een postcode die over een gemeente grens heen loopt).
Alleen blijft het wel vreemd dat de ANWB of de TNT site wel de goede antwoorden geeft.
Ik weet het niet meer ? # @


ER WORDT DOOR GOOGLE EEN LIMIT GESTELD VAN 15.000 CALL'S PER DAG.

Ik heb verder veel fouten gevonden in de schrijfwijze van straatnamen en huisnummers, een huisnummer als 25c wordt niet herkend en 25 wel.
Straat namen met een schrijfwijze van huijsmanstraat of huysmanstraat daar kan hij de een wel vinden en de andere dus niet. Het zelfde geld voor gemeente namen. Nieuwe kerk aan de IJsel is ook al zo'n probleen, hier geld meer de trial en error procedure. Ik gebruik nu de meest uitgebreide omschrijving van postcode gemeente straat met juisnummer zonder toeoeging. Dit geeft nog het beste resultaat.
Suc6 Mike

Voor belangstellenden kan ik mijn aangepaste PHP-Script hier wel publiceren.
Luuk de Bresser
Luuk de Bresser
12 jaar geleden
 
0 +1 -0 -1
als ik
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
  $key
= 'ABQIAAAA-nKtsRGkx3v-DG-Qrk4_wxRmsHJPUl38O590MVz81erApZSxAhTAnNfAGTtSbz3_HwTBmAVD2fYaUQ';
  $from = '5062 LM, Oisterwijk, Nederland';
  $to = '5038 DC, Tilburg, Nederland';
?>

invoer krijg ik als output.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
Afstand: 14.02 km
Tijdsduur: ~22 minuten


maar van mijn adres naar mijn werk is het maar 9,3 km en ~ 17 min
Johan Dam
Johan Dam
12 jaar geleden
 
0 +1 -0 -1
Ziet er leuk uit, alleen is er hier ook een variant op mogelijk die zonder de json functie werkt?

(we draaien hier php 5.1nogwat, die heeft json niet inbegrepen helaas)
Richard van Velzen
Richard van Velzen
12 jaar geleden
 
0 +1 -0 -1
@nosferatu: Tijd om te upgraden dus.
Jelmer -
Jelmer -
12 jaar geleden
 
0 +1 -0 -1
output=json veranderen in output=xml (?) zou wat kunnen helpen, maar dan moet je alsnog XML parsen.

Of je pakt een in PHP gescreven JSON parser, zoals Services_JSON die in PEAR zit.
Johan Dam
Johan Dam
12 jaar geleden
 
0 +1 -0 -1
@Richard, dat is aan mijn baas om te bepalen,

@Jelmer, output=xml werkt niet, ik zit nu ook te twijfelen hoe belangrijk die output waarde is, wat ik er ook invul ik krijg precies hetzelfde terug.

@Niels, mooi stukje werk (thuis werkt het fantastisch) lekker kort, duidelijk en vooral, effectief (voor zover ik heb kunnen meten in elk geval)
Richard van Velzen
Richard van Velzen
12 jaar geleden
 
Als je baas niet wil upgraden is het een idioot.
Harm Jan van Kammen
Harm Jan van Kammen
11 jaar geleden
 
0 +1 -0 -1
Kan iemand mij hier mee helpen ?
F Loogman
F Loogman
11 jaar geleden
 
0 +1 -0 -1
Mogelijk mag je Google's direction services niet gebruiken zonder ze bij een map te tonen.
Harm Jan van Kammen
Harm Jan van Kammen
11 jaar geleden
 
0 +1 -0 -1
Ok .... weet iemand anders nog een manier om dit te doen ??
Vincent Huisman
Vincent Huisman
11 jaar geleden
 
0 +1 -0 -1
vraag even op het forum
F Loogman
F Loogman
11 jaar geleden
 
0 +1 -0 -1
Google even op 'haversine formula'. Daarmee kun je de afstand, in vogelvlucht, tussen twee coordinaten op een (aard)bol berekenen. Dan heb je echter geen reistijd, maar vliegafstand. Voor wegafstand zijn er, zover ik weet, geen gratis en onbeperkte oplossingen.
Jean de la Bruyere
Jean de la Bruyere
11 jaar geleden
 
0 +1 -0 -1
beste allemaal.

voor mij is dit nieuw, maar zou wel graag dit script op mijn website willen gebruiken. echter als ik de stappen volg lukt het niet om het werkend te krijgen. kan iemand mij verder helpen?

zie nu alleen het volgende:
Afstand: 0 km
Tijdsduur: 0 minuten

ook de invulvelden voor de postcodes verschijnen niet.

alvast dank!
Jordi Kroon
Jordi Kroon
11 jaar geleden
 
0 +1 -0 -1
Maak hier even een appart topic voor ;)
Oxl Rose
Oxl Rose
11 jaar geleden
 
0 +1 -0 -1
Script werkt niet door 301 redirect
Oplossing:
Plak dit boven het script:

function get_furl($url)
{
$furl = false;

// First check response headers
$headers = get_headers($url);

// Test for 301 or 302
if(preg_match('/^HTTP\/\d\.\d\s+(301|302)/',$headers[0]))
{
foreach($headers as $value)
{
if(substr(strtolower($value), 0, 9) == 'location:')
{
$furl = trim(substr($value, 9, strlen($value)));
}
}
}
// Set final URL
$furl = ($furl) ? $furl : $url;

return $furl;
}

vervang:
$url = 'http://google.com/maps/nav?' . join( '&', $data);
door:
$url = get_furl('http://google.com/maps/nav?' . join( '&', $data));

nu zou het moeten werken...
Oxl Rose
Oxl Rose
11 jaar geleden
 
Sebastiaan Blaas
Sebastiaan Blaas
11 jaar geleden
 
0 +1 -0 -1
als ik mij niet vergis. stelt google wel als vereiste dat je ook de google maps public beschikbaar steld daar waar je gebruik maakt van deze API.
Oxl Rose
Oxl Rose
11 jaar geleden
 
0 +1 -0 -1
@ Sebastiaan Blaas: klopt. ben benieuwd hoe google dat dacht te checken... vervelender is dat het aantal requests bij standaard-api is gelimiteerd tot 2500 (overigens geinig en totally off-topic: de geluidsman van mijn band heet Sebastiaan. De band heet Blaas Of Glory...)
Sebastiaan Blaas
Sebastiaan Blaas
11 jaar geleden
 
@Oxl Klinkt mij iig als een enorm goede band :P
Oxl Rose
Oxl Rose
11 jaar geleden
 
@Sebastiaan: daar heb je een punt...
ScrapZz nl
ScrapZz nl
11 jaar geleden
 
Doe google nou al het denk werk ;D ik zie nergens berekeningen of kijk ik verkeerd?
- Ariën -
- Ariën -
11 jaar geleden
 
0 +1 -0 -1
Dat klopt....
Oxl Rose
Oxl Rose
11 jaar geleden
 
0 +1 -0 -1
Wat niet klopt: Vlieland is onbekend... probeer maar 's postcode 8899, of typ Vlieland... Raarrr
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Johan kammen
johan kammen
10 jaar geleden
 
0 +1 -0 -1
Ik gebruik dit script naar tevredenheid, maar sinds 24-08-2011 werkt het niet meer. weet iemand wat hier van de oorzaak is?

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. afstand-berekenen-dmv-postcodes

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.