Grote geocoding batch
Zit met het volgende wil een grote geocoding batch uitvoeren. Hierbij wil ik gebruik maken van
The Google Geocoding API. Er is toegang tot een Google Business key.
Wil als output JSON gaan gebruiken.
Maak momenteel gebruik van de volgende code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
// zet adres in variable
$address = "Eindhovenstraat 1324 Almere";
// zet + sign in lege ruimte voor google
$address = str_replace(" ", "+", $address);
$address_url = "https://maps.googleapis.com/maps/api/geocode/json?address=$address&sensor=false";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $address_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_PROXYPORT, 3128);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$response = curl_exec($ch);
curl_close($ch);
$response_a = json_decode($response);
//print adres
echo $formatted_address = $response_a->results[0]->formatted_address.'<br />';
//print Latitude en Longitude van adres
echo $lat = $response_a->results[0]->geometry->location->lat.'<br />';
echo $long = $response_a->results[0]->geometry->location->lng;
?>
// zet adres in variable
$address = "Eindhovenstraat 1324 Almere";
// zet + sign in lege ruimte voor google
$address = str_replace(" ", "+", $address);
$address_url = "https://maps.googleapis.com/maps/api/geocode/json?address=$address&sensor=false";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $address_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_PROXYPORT, 3128);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$response = curl_exec($ch);
curl_close($ch);
$response_a = json_decode($response);
//print adres
echo $formatted_address = $response_a->results[0]->formatted_address.'<br />';
//print Latitude en Longitude van adres
echo $lat = $response_a->results[0]->geometry->location->lat.'<br />';
echo $long = $response_a->results[0]->geometry->location->lng;
?>
Nu zou ik dus willen dat ik in $address meerdere adressen kan zetten zodat er een batch gedaan kan worden. En er als output een JSON komt met daarin alle adressen.
Hoe zou ik dit het beste kunnen aanpakken?
Gewijzigd op 20/06/2014 00:20:10 door Johan Vels
Niet. Google accepteert bij mijn weten niet meerdere adressen per request. Je zal dus elk adres apart moeten doen.
Erwin H op 20/06/2014 07:55:47:
Niet. Google accepteert bij mijn weten niet meerdere adressen per request. Je zal dus elk adres apart moeten doen.
Hallo Erwin,
Bedankt voor je snelle duidelijke antwoord, helder. Zoiets dacht ik al.
Mijn vraag nu is hoe ik dit wel zou kunnen bereiken.
Dus dat hij de adressen één voor één queried denk uit bv een lokale database adressen. Of bv uit een lijst haalt denk CSV en in één bestand vervolgens output onder elkaar met Latitude en Longitude.
Ben opzoek gegaan naar een tutorial op internet hierover maar vond er geen.
Gewijzigd op 20/06/2014 15:57:23 door Johan Vels
Vraag is welke gegevens je al hebt (op welke manier dan ook) en welke gegevens je nodig hebt. Als je een lijst het met adressen en de coordinaten erbij nodig hebt, dan zal je via een for loop door die lijst moeten lopen en voor elk adres een call naar google moeten maken om de coordinaten te krijgen (let dan wel op het maximale aantal requests dat Google toestaat). Heb je dan alle coordinaten, dan kan je die wel weer gewoon met de hele lijst in 1 keer verwerken. Het gaat puur om de call naar Google waar je niet alles tegelijk kunt doen.
Straatnaam + Nummer + Stad
Gegevens die nodig zijn:
Latitude + Longitude.
Ah, een for loop zou je hierover kunen uitbreiden en wellicht een voorbeeld kunnen geven in vorm van code? Is het gemakkelijker om een for loop te doen met een CSV of database of bv platte html tekst?
Het aantal request waar toegang tot is zijn er 100,000 p.dag.
Bedankt voor het meedenken!
Code...? Pseudo code zou genoeg moeten zijn als je enige kennis van php hebt
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
$data = array( adresgegevens );
foreach element in data {
call google api
extract lat/long from results
save lat/long to database
}
foreach element in data {
call google api
extract lat/long from results
save lat/long to database
}
Als je een beetje php kennis hebt moet dit allemaal niet moeilijk in te vullen zijn.
Zorg dat je de gegevens in een database hebt zitten, kan je er veel meer mee dan in een csv of tekst bestand.
Heb ook een tutorial weten te vinden: http://imagine-it.org/google/articles/geocode.htm
Echter al wel uit 2007..