Geocacher
Auteur: BramBo - 15 augustus 2007 - 13:50 - Gekeurd door: Stijn - Hits: 4612 - Aantal punten: 4.50 (2 stemmen)
Als je net als mij een aantal grote adresbestanden hebt en geen zin om een vermogen uit te geven aan een coördinaten bestand (λ, φ) dan is dit de oplossing voor jou ;)
Het script werkt vrij straight to the point:
- Ophalen adressen bestand (vanuit je eigen database)
- Via Google maps Api (Geocoder) Latitude&Longitude ophalen
- Vast leggen in 'n array
- Posten dmv AJAX
- Array met gegevens opslaan in db
Alles wat je nodig hebt is:
- een MySQL database
- PHP (5)
- Google maps api key ( http://www.google.com/apis/maps/signup.html )
- Een flink adressen bestand ;)
- JSON Libaries; PHP&JS (aanwezig in het zip bestand)
(simpele) Voorbeeld database:
Table: adressen
| id | naam | straat | huisnr | woonplaats |
Table: Coords
| id | long | lati |
CREATE TABLE `coords` (
`id` int(8) NOT NULL default '0',
`long` double NOT NULL default '0',
`lati` double NOT NULL default '0',
PRIMARY KEY (`id`)
);
CREATE TABLE `coordsFailed` (
`id` int(6) NOT NULL default '0',
`attempts` tinyint(2) NOT NULL default '0',
PRIMARY KEY (`id`)
);
CREATE TABLE `coords` ( `id` int(8) NOT NULL default '0', `long` double NOT NULL default '0', `lati` double NOT NULL default '0', ); CREATE TABLE `coordsFailed` ( `id` int(6) NOT NULL default '0', `attempts` tinyint(2) NOT NULL default '0', );
Hieronder staat de configuratie variabelen die te vinden zijn in het kopje van het script. Het enige verschil is dat ik hier wat extra commentaar bij heb gezet. (sorry dat alles in 't engels is zo werk ik nu eenmaal in mijn eigen bestanden)
Voordelen van 't script ? Simpel.. Snellere mapping met google. En natuurlijk alle wiskundige voordelen. Denk aan afstanden berekenen(voorbeeld volgt) Een scope berekenen en alles betrekken wat hier binnen valt(Ook hiervoor heb ik een script mocht je intresse hierin hebben laat t me even weten dan zullen we het erover hebben). And so on..
Afstanden tussen 2 coördinaten, maakt gebruik van de haversine formule ( http://en.wikipedia.org/wiki/Haversine_formula )
print haversine(53.062605, 5.521006, 53.20298, 5.798562);
function haversine($lati1, $long1, $lati2, $long2) {
$pi = M_PI / 180;
$lati1 *= $pi;
$long1 *= $pi;
$lati2 *= $pi;
$long2 *= $pi;
$a = sin(($lati2 - $lati1) / 2) * sin(($lati2 - $lati1) / 2) + cos($lati1) * cos($lati2) * sin(($long2 - $long1) / 2) * sin(($long2 - $long1) / 2);
$c = 2 * atan2(sqrt($a), sqrt(1 - $a));
return Round(6372.797 * $c, 2);
}
print haversine (53.062605, 5.521006, 53.20298, 5.798562); function haversine($lati1, $long1, $lati2, $long2) { $pi = M_PI / 180; $lati1 *= $pi; $long1 *= $pi; $lati2 *= $pi; $long2 *= $pi; $a = sin(($lati2 - $lati1) / 2) * sin(($lati2 - $lati1) / 2) + cos($lati1) * cos($lati2) * sin(($long2 - $long1) / 2) * sin(($long2 - $long1) / 2); return Round(6372.797 * $c, 2); }
|
Code: |
// Root Directory && Script
define('root' , './'); //path to ur JSON.php include dir
$script = 'index.php'; // Scriptname (of this script)
// See query below for explantion of these variables
$limitStart = 0; // Where to start with fetching
$limitTotal = 50; // Total amount of records to fetch
// Query to fetch addresses
// The order needs to be as following :
// ID -> Street -> StreetNumber -> City
$qry = "SELECT id, straat, huisnr, woonplaats FROM adressen ORDER BY id ASC LIMIT {$limitStart}, {$limitTotal}";
$addDB = preg_replace("/.*FROM ([\w\d_]+) ORDER.*/i","\\1", $qry);
// Query to save coords ( keep the #xxx# in it !)
$save = "INSERT INTO coords VALUES(#ID#, #LONG#, #LAT#)";
// Query to save the FAILED coords ( keep the #xxx# in it !)
$saveFail = "INSERT INTO coordsFailed VALUES(#ID#, ATTEMPTS+1)";
$failDB = preg_replace("/.*INTO ([\w\d_]+) VALUES.*/i","\\1", $saveFail);
// Query to retry failed addresses
$retry = "SELECT a.id, a.straat, a.huisnr, a.woonplaats, f.attempts FROM {$failDB} AS f JOIN {$addDB} AS a ON a.id=f.id";
// Google Maps
$key = "KEY";
$countryCode = "nl"; // nl = Netherlands; be= belguim; de = germany etc.
// Database
$DBHost = "localhost";
$DBUser = "USERNAME";
$DBPass = "PASSWORD";
$Dbase = "DATABASE";
$cid = ""; // Empty, just initializing
// Visuals
$barWidth = 200;
$barColor = "00FF00"; // Without # !
$contColor = "d9ff9d";
$contBorder = "416900";
// Root Directory && Script define('root' , './'); //path to ur JSON.php include dir $script = 'index.php'; // Scriptname (of this script) // See query below for explantion of these variables $limitStart = 0; // Where to start with fetching $limitTotal = 50; // Total amount of records to fetch // Query to fetch addresses // The order needs to be as following : // ID -> Street -> StreetNumber -> City $qry = "SELECT id, straat, huisnr, woonplaats FROM adressen ORDER BY id ASC LIMIT {$limitStart}, {$limitTotal}"; $addDB = preg_replace("/.*FROM ([\w\d_]+) ORDER.*/i","\\1", $qry); // Query to save coords ( keep the #xxx# in it !) $save = "INSERT INTO coords VALUES(#ID#, #LONG#, #LAT#)"; // Query to save the FAILED coords ( keep the #xxx# in it !) $saveFail = "INSERT INTO coordsFailed VALUES(#ID#, ATTEMPTS+1)"; $failDB = preg_replace("/.*INTO ([\w\d_]+) VALUES.*/i","\\1", $saveFail); // Query to retry failed addresses $retry = "SELECT a.id, a.straat, a.huisnr, a.woonplaats, f.attempts FROM {$failDB} AS f JOIN {$addDB} AS a ON a.id=f.id"; // Google Maps $key = "KEY"; $countryCode = "nl"; // nl = Netherlands; be= belguim; de = germany etc. // Database $DBHost = "localhost"; $DBUser = "USERNAME"; $DBPass = "PASSWORD"; $Dbase = "DATABASE"; $cid = ""; // Empty, just initializing // Visuals $barWidth = 200; $barColor = "00FF00"; // Without # ! $contColor = "d9ff9d"; $contBorder = "416900";
Download code (.txt)
|
|
|
Stemmen |
Niet ingelogd. |
|