[PHP] Latitude & longitude bepalen met de Google API

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • bartosiej
  • Registratie: Juli 2005
  • Laatst online: 27-09 09:40
Ik ben bezig met het schrijven van een cronjob die elke nacht gerunned zal worden.

Ik haal hiermee van verschillende XML feeds het adres, land op en converteer deze op de volgende manier naar een latitude/longitude:
code:
1
2
3
4
5
6
$adres = urlencode($country.", ".$city);
$json_data = file_get_contents("http://maps.google.com/maps/geo?q=".$adres."&output=json&oe=utf8&sensor=true_or_false&key=".$api_key."");
$array_data = json_decode($json_data);

$longitude = $array_data->Placemark[0]->Point->coordinates[0];
$latitude = $array_data->Placemark[0]->Point->coordinates[1];

Dit gaat prima als het voor 1 adres gebeurt, maar bij het verwerken van 1000+ adressen krijg ik de volgende foutmelding:
code:
1
Warning: file_get_contents(http://maps.google.com/maps/geo?q=FR%2C+Messanges&output=json&oe=utf8&sensor=true_or_false&key=APIKEY) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden in C:\xampp\htdocs\blabla.php on line 41

Google staat het blijkbaar niet toe om zoveel requests te plaatsen in zulke korte tijd..

Weet iemand misschien hoe dit kan worden voorkomen? Of is er eventueel een efficientere/snellere manier om de latitude/longitude te bepalen?

Alvast bedankt,

Bart

Acties:
  • 0 Henk 'm!

  • glashio
  • Registratie: Oktober 2001
  • Laatst online: 24-09 11:05

glashio

C64 > AMIGA > PC

Ter info omtrent regels bij Google i.v.m. Geocoderen

http://code.google.com/apis/maps/faq.html#geocoder_limit

> Google Certified Searcher
> Make users so committed to Google that it would be painful to leave
> C64 Gospel
> [SjoQ] = SjoQing


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 01:40

MueR

Admin Tweakers Discord

is niet lief

Wat zegt de documentatie van de Google Maps API over dit soort dingen? Kan me namelijk niet voorstellen dat er geen functie voor is. Ook daarbij zit je uiteraard wel vast aan wat Google toestaat.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • Kaasplank
  • Registratie: Februari 2001
  • Niet online
Ik weet niet of het je probleem oplost maar ik heb wel eens gebruik gemaakt van geonames.org voor dit soort dingen. Je mag er 50.000x per dag een request doen.

http://www.geonames.org/p...talcode=1000AA&country=NL

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Nu online

Janoz

Moderator Devschuur®

!litemod

Aangezien het om country, city gaat lijkt het me handig om zelf een database aan te leggen met geodata. Je hoeft dan alleen maar de locaties die je nog neit weet op te halen. Dat zullen er aan het begin nog wel veel zijn (en dan zul je daar gewoon een limiet op moeten zetten), maar na een tijdje zul je steeds meer locaties al in je eigen database hebben.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

JSON heeft hier niets mee te maken dus ik pas je titel even aan.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Mental
  • Registratie: Maart 2000
  • Laatst online: 20-10-2020
http://code.google.com/in...s/faq.html#geocoder_limit
If more than 15,000 geocode requests in a 24 hour period are received from a single IP address, or geocode requests are submitted from a single IP address at too fast a rate, the Google Maps API geocoder will begin responding with a status code of 620. This article explains how to time geocode requests from PHP and provides sample code for doing so. If excessive geocoder usage continues, access to the Google Maps API geocoder from this IP address may be blocked permanently.

[ Voor 76% gewijzigd door Mental op 27-02-2010 20:10 ]


Acties:
  • 0 Henk 'm!

  • bartosiej
  • Registratie: Juli 2005
  • Laatst online: 27-09 09:40
Kaasplank schreef op zaterdag 27 februari 2010 @ 19:48:
Ik weet niet of het je probleem oplost maar ik heb wel eens gebruik gemaakt van geonames.org voor dit soort dingen. Je mag er 50.000x per dag een request doen.

http://www.geonames.org/p...talcode=1000AA&country=NL
Top werkt perfect!, komt alleen wel iets vaker zonder resultaat terug, maar dat heb ik gefixed door in dat geval alsnog google te gebruiken!

Acties:
  • 0 Henk 'm!

  • afraca
  • Registratie: April 2009
  • Laatst online: 13-08 16:46

afraca

Open Source!

Ik dacht ook gelijk aan wat Janoz zei. Je zult in het begin wellicht heel wat requests moeten doen, maar als je eenmaal de meesten in je database hebt staan, zal je nog maar enkel request naar de API moeten doen als je een onbekende locatie hebt.

IMDB vote history | Next-gen OS, audio en video player, search engine en Movie DB


Acties:
  • 0 Henk 'm!

  • Ras
  • Registratie: December 2004
  • Niet online

Ras

Ik zie dat je al een oplossing hebt gevonden. Toch nog even mijn verhaaltje, misschien voor anderen.

Zelf heb ik een script gemaakt dat de longitude/latitude van klanten van een verhuurbedrijfje opzoekt, en vervolgens middels een kaartje met pinnetjes in het cms van de website toont. Ik had ook het probleem dat niet meer dan 25 à 50 locaties in één keer opgehaald konden worden. Toen eerst geprobeerd om met een time-out te werken, maar naast dat dat veel tijd kostte ging ook dat niet altijd goed. Wel gebruikt voor de eerste paar 100 klanten, omdat die al in het systeem stonden.

De uiteindelijke oplossing voor mij was, net als hier boven al min of meer aangedragen is, telkens als een nieuwe klant word toegevoegd gelijk de longitude/latitude erbij zoeken en in een database zetten. Op die manier hoefde ik de geolocatie van maar 1 klant tegelijk op te zoeken.

[ Voor 6% gewijzigd door Ras op 28-02-2010 14:14 ]

Antec Fusion Black, Intel e8400, EAH3450 512MB, 2x2GB pc6400 kingston, p5e-vm hdmi, 1x1TB 1x500GB


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Volgens mij is het bij de Google Maps API echter niet toegestaan om de data op te slaan en moet je officieel de kaart tonen op de pagina die erbij hoort (Maps).

Acties:
  • 0 Henk 'm!

  • Ras
  • Registratie: December 2004
  • Niet online

Ras

Heb je daar een bron bij? Zonder bron kan ik ook 'volgens mij' beweringen doen. Ik wil je best geloven, maar je bericht heeft nu weinig meerwaarde voor het topic.

Hoe dan ook, zonder opslaan van de longitude/latitude kon ik niet mijn gewenste effect bereiken. Ik toon het vervolgens wel weer op een google maps kaartje.

Antec Fusion Black, Intel e8400, EAH3450 512MB, 2x2GB pc6400 kingston, p5e-vm hdmi, 1x1TB 1x500GB


Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 21-08 17:09
Het idee is gewoon dat dit soort services hun geldt kosten en dus voor jou ook niet gratis zijn. Dus als je dit voor een 'klant' gebruikt kun je gewoon postcodetabellen e.d. kopen.

https://niels.nu


Acties:
  • 0 Henk 'm!

  • swtimmer
  • Registratie: Augustus 2006
  • Laatst online: 24-09 15:24

swtimmer

Ontrafelt het leven!

Ras schreef op zondag 28 februari 2010 @ 15:34:
Heb je daar een bron bij? Zonder bron kan ik ook 'volgens mij' beweringen doen. Ik wil je best geloven, maar je bericht heeft nu weinig meerwaarde voor het topic.

Hoe dan ook, zonder opslaan van de longitude/latitude kon ik niet mijn gewenste effect bereiken. Ik toon het vervolgens wel weer op een google maps kaartje.
http://code.google.com/ap...es.html#Geocoding_Caching
Developers are encouraged to build their own client-side caches. In this example, we construct a cache that contains pre-computed geocoder responses to six capital cities in countries covered by geocoding API. First, we build an array of geocode responses. Next, we create a custom cache that extends a standard GeocodeCache. Once the cache is defined, we call the setCache() method. There is no strict checking of objects stored in the cache, so you may store other information (such as population size) in the cache as well.
Als ik dat lees raden ze het zelfs aan om te doen. Ik doe dat zelf voor mijn eigen website ook (zoeken op locaties + straal is mogelijk). Nu zoeken veel mensen op dezelfde stad of postcode. Het zou toch zonde zijn telkens diezelfde data op te moeten vragen bij Google :S

/edit

Ook in de FAQ gewezen op server-side caching!

[ Voor 3% gewijzigd door swtimmer op 01-03-2010 13:45 ]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Nu online

Janoz

Moderator Devschuur®

!litemod

@Ras
Je zou natuurlijk zelf ook de voorwaarden door kunnen lezen toen je je api key aanvroeg ;). Op zich is daarin duidelijk te lezen dat je de gegevens alleen mag gebruiken voor sites of applicaties die publiekelijk toegankelijk zijn.Je kunt het dus gebruiken mits het gebruikte CMS niet achter een inlog zit en wel publiekelijk toegankelijk is. Ik denk echter niet dat dat het geval is.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Ik kan t ook niet meer echt terugvinden. Het enige dat ik me herinner is dat het voor de eindgebruiker duidelijk moet zijn dat de gegevens vanuit google maps verkregen worden en als je het alleen serverside toepast is dat niet zo. Wellicht is die voorwaarde inmiddels vervallen.

Acties:
  • 0 Henk 'm!

  • swtimmer
  • Registratie: Augustus 2006
  • Laatst online: 24-09 15:24

swtimmer

Ontrafelt het leven!

Cartman! schreef op maandag 01 maart 2010 @ 19:36:
Ik kan t ook niet meer echt terugvinden. Het enige dat ik me herinner is dat het voor de eindgebruiker duidelijk moet zijn dat de gegevens vanuit google maps verkregen worden en als je het alleen serverside toepast is dat niet zo. Wellicht is die voorwaarde inmiddels vervallen.
Ik heb het niet nagezocht, maar zou je dan niet gewoon kunnen vermelden dat je gebruik maakt van de maps API? Net zoals je bij de API's van Yahoo en Amazon moet doen?

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Dat zou denk ik dan voldoende zijn ja, maar zoals ik zei: ik kan niet meer terugvinden dat dit een vereiste is.
Pagina: 1