Google API
http://www.phpinsider.com/php/code/GoogleMapAPI/
Met dit schript wil ik aan de hand van een volledig adres een marker plaatsen. Waar die de coordinaten vandaan haalt, denk van Google maar waarom dat CVS bestand?
Hoe werkt dit, SSH ofzo?
ANONYMOUS CVS: (leave password empty)
cvs -d :pserver:[email protected]:/export/CVS login
cvs -d :pserver:[email protected]:/export/CVS checkout GoogleMapAPI
Waar laat ik de database naam als naam van tabel GEOCODES is?
// setup database for geocode caching
$map->setDSN('mysql://USER:PASS@localhost/GEOCODES');
Dat met die DSN is een beetje onduidelijk. Maar als je in de code kijkt zie je dat GEOCODES de databasenaam is. De tabelnaam zit in de klasse zelf als $this->_db_cache_table, standaard ook GEOCODES. Je hebt trouwens wel PEAR::DB nodig.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function show_address (address) {
var geocoder = new GClientGeocoder ();
if (geocoder) {
geocoder.getLatLng (address, function(point) {
if (!point) {
// alert(address + " niet gevonden op de kaart");
map.setCenter(new GLatLng(52.638063, 4.817505), 8);
}
else {
map.setCenter (point, 13);
var marker = new GMarker (point);
map.addOverlay (marker);
// alert (marker.getLatLng ());
var ll = marker.getLatLng ();
}
});
}
}
var geocoder = new GClientGeocoder ();
if (geocoder) {
geocoder.getLatLng (address, function(point) {
if (!point) {
// alert(address + " niet gevonden op de kaart");
map.setCenter(new GLatLng(52.638063, 4.817505), 8);
}
else {
map.setCenter (point, 13);
var marker = new GMarker (point);
map.addOverlay (marker);
// alert (marker.getLatLng ());
var ll = marker.getLatLng ();
}
});
}
}
http://code.google.com/support/bin/answer.py?answer=80200&topic=11364
Inmiddels heb ik de Google Maps API aan de praat
Echter blijkt dat de lat en lng die google aangeeft op basis van het adres* niet 100% te kloppen? Alsof die ze niet herkent terwilj zoeken met hetzelfde adres http://maps.google.nl/ staat die wel op juiste plek
* straat nr postcode plaats
Verder gezocht:
Coordinaten worden geplit mbv onderstaande code uit een gegenereerde URL zie onderaan
http://maps.google.com/maps/geo?output=xml&key=ABQIAAAAXF3KQ_dxQMzJAGf66qqC7xTTnVMZl1-jekZ9pm9ROI2cVKeP0hS0oXJHhtdpfUx5Iq5_JrFPkP2L2w&q=Eemnesserweg+1+1+1221CS+Hilversum
resultaat:
Eemnesserweg 1 1 1221CS Hilversum200geocodeEemnesserweg 1, 1221 Hilversum, Hilversum (Noord-Holland), NetherlandsNLNoord-HollandHilversumHilversumEemnesserweg 112215.184314,52.227788,0
Uitgelicht: (dit moet dus gesplitst worden)
112215.184314,52.227788,0
1 huisnr
1221 postcode
5.184314 lng
52.227788 lat
Inmiddels heb ik de Google Maps API aan de praat
Echter blijkt dat de lat en lng die google aangeeft op basis van het adres* niet 100% te kloppen? Alsof die ze niet herkent terwilj zoeken met hetzelfde adres http://maps.google.nl/ staat die wel op juiste plek
* straat nr postcode plaats
Verder gezocht:
Coordinaten worden geplit mbv onderstaande code uit een gegenereerde URL zie onderaan
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
$base_url = "http://" . MAPS_HOST . "/maps/geo?output=xml" . "&key=" . KEY;
// Iterate through the rows, geocoding each address
while ($row = @mysql_fetch_assoc($result)) {
$geocode_pending = true;
while ($geocode_pending) {
$address = $row['adres'].' '.$row['postcode'].' '.$row['plaats'].' Nederland';
$id = $row["id"];
$request_url = $base_url . "&q=" . urlencode($address);
$xml = simplexml_load_file($request_url) or die("url not loading");
$status = $xml->Response->Status->code;
if (strcmp($status, "200") == 0) {
// Successful geocode
$geocode_pending = false;
$coordinates = $xml->Response->Placemark->Point->coordinates;
$coordinatesSplit = split(",", $coordinates);
// Format: Longitude, Latitude, Altitude
$lat = $coordinatesSplit[1];
$lng = $coordinatesSplit[0];
?>
$base_url = "http://" . MAPS_HOST . "/maps/geo?output=xml" . "&key=" . KEY;
// Iterate through the rows, geocoding each address
while ($row = @mysql_fetch_assoc($result)) {
$geocode_pending = true;
while ($geocode_pending) {
$address = $row['adres'].' '.$row['postcode'].' '.$row['plaats'].' Nederland';
$id = $row["id"];
$request_url = $base_url . "&q=" . urlencode($address);
$xml = simplexml_load_file($request_url) or die("url not loading");
$status = $xml->Response->Status->code;
if (strcmp($status, "200") == 0) {
// Successful geocode
$geocode_pending = false;
$coordinates = $xml->Response->Placemark->Point->coordinates;
$coordinatesSplit = split(",", $coordinates);
// Format: Longitude, Latitude, Altitude
$lat = $coordinatesSplit[1];
$lng = $coordinatesSplit[0];
?>
http://maps.google.com/maps/geo?output=xml&key=ABQIAAAAXF3KQ_dxQMzJAGf66qqC7xTTnVMZl1-jekZ9pm9ROI2cVKeP0hS0oXJHhtdpfUx5Iq5_JrFPkP2L2w&q=Eemnesserweg+1+1+1221CS+Hilversum
resultaat:
Eemnesserweg 1 1 1221CS Hilversum200geocodeEemnesserweg 1, 1221 Hilversum, Hilversum (Noord-Holland), NetherlandsNLNoord-HollandHilversumHilversumEemnesserweg 112215.184314,52.227788,0
Uitgelicht: (dit moet dus gesplitst worden)
112215.184314,52.227788,0
1 huisnr
1221 postcode
5.184314 lng
52.227788 lat
Gewijzigd op 01/01/1970 01:00:00 door sander hueting