Autom. Koordinatenfindung (Google Maps) aufgrund Ortsnamen mit MySQL Eintrag möglich?

preko

Erfahrenes Mitglied
Hi,

nach umfangreicher Suche im Internet stehe ich nach wie vor ziemlich ratlos da. Ich benötige für ziemlich viele Städte auf der Welt die Koordinaten, die später auch von Google Maps interpretiert werden können (z. B. im so ähnlichen Format: (Lat) 51.191261, (Long) 6.442066).

Das ganze soll aber anhand einer MySQL Tabelle (ts_geocoding) erfolgen, in der zunächst nur folgende Einträge vorhanden sind:

PHP:
id | city        | federal_state | country |        lat          |      long     |
----------------------------------------------------------------------------------
1  | Aachen      | NRW           | de      |                     |               | 
2  | Krefeld     | NRW           | de      |                     |               |
...

Ich stelle mir ein PHP Script vor (da ich keine Ahnung habe von JavaScript), welches sich den Stadtnamen und das Länderkürzel aus der MySQL Datenbanktabelle zieht, diese per Google Maps API (oder Alternativquelle falls möglich) in Koordinaten umwandelt und dann entsprechend die Einträge passend zur Stadt in der Tabelle einträgt.

Es soll praktisch ein Tool sein, welches mir die Koordinaten "beschafft" und in der Tabelle ergänzt, da ich diese Koordinaten für ein Projekt benötige.

Hat jemand ein Tutorial, Link oder Tipp, wie das per PHP zu lösen sein könnte, oder muss ich wirklich ausschließlich per JavaScript an die Sache ran? :confused:


Beste Grüße,
preko
 
Zuletzt bearbeitet:
Ich habe jetzt einfach mal rumgespielt mit Google, folgendes habe ich herausgefunden.
Man kann sich die Infos von einem Ort direkt als KML (also ein XML Format) herunterladen.

Bsp für Krefeld
http://maps.google.com/maps?f=q&hl=en&geocode=&q=krefeld&output=kml

Dann kriegst du sowas zurück wie
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.0">
<Placemark>
<name>Krefeld, Germany</name>
<address>Krefeld, Germany</address>
<styleUrl>root://styleMaps#default+nicon=0x304+hicon=0x314</styleUrl>
<Point>
<coordinates>6.559343,51.331702,0</coordinates>
</Point>
<LookAt>
<longitude>6.559343</longitude>
<latitude>51.331702</latitude>
<range>17564.443359</range>
</LookAt>
</Placemark>
</kml>
Damit kannst du dann, via SimpleXML oder DOM, die Infos rausholen.

Hier habe ich mal eben ein kleines Script gebastelt, was bei mir funktioniert hat und mir Long und Lat ausgespuckt hat.
Nicht schön, aber in wenigen Sek. fertig gewesen ;)

PHP:
<?php

$ort = 'Krefeld';

$host = 'maps.google.com';
$port = 80;
$url  = '/maps?f=q&hl=en&geocode=&output=kml&q=';


$fsock = fsockopen($host, $port);
fwrite($fsock, "GET " . $url . $ort . "\r\nHost: " . $host . "\r\nConnection: Close\r\n\r\n");

$data = '';
WHILE(!feof($fsock)) {
    $data .= fgets($fsock, 4096) . "\n";
}

$sxml = simplexml_load_string($data);
echo "Long: " . $sxml->Placemark->LookAt->longitude . "\n";
echo "Lat   " . $sxml->Placemark->LookAt->latitude . "\n";

?>
 
@ Mairhofer:

erst einmal herzlichen Dank für den Tipp. Funktioniert soweit 1a :)

Jetzt habe ich folgendes Script "zusammengezimmert", bekomme aber nachfolgend abgebildete Fehlermeldung:

PHP:
<?php
include("class.inc.php");

    $db = @mysql_connect($host1,$user,$password)
        or die ("Verbindung mit Datenbankserver fehlgeschlagen!");
    @mysql_select_db($database,$db)
        or die ("Verbindung mit Datenbank fehlgeschlagen!");
    $sql_query = "SELECT
                          *
                  FROM
                          `ts_geocoding`
                  "; 
    $result = mysql_query($sql_query);          
    while( $row = mysql_fetch_array($result,MYSQL_ASSOC) ) {
      $ort = $row['city'];      
      $host = 'maps.google.com';
      $port = 80;
      $url  = '/maps?f=q&hl=en&geocode=&output=kml&q=';    
      
      $fsock = fsockopen($host, $port);
      fwrite($fsock, "GET " . $url . $ort . "\r\nHost: " . $host . "\r\nConnection: Close\r\n\r\n");      
      $data = '';
      
        while(!feof($fsock)) {
            $data .= fgets($fsock, 4096) . "\n";
        }
      
      $sxml = simplexml_load_string($data);
      $lat = $sxml->Placemark->LookAt->latitude;
      $long = $sxml->Placemark->LookAt->longitude;
      echo $ort . " " . $lat . ", " . $long . "\n";
      $id_unique = $row['id'];  
      $sql_query = "UPDATE
                          `ts_geocoding`
                    SET
                          `lat` = '$lat',
						              `long` = '$long'				  
                    WHERE
                          `id` = '$id_unique'
                    LIMIT
                          1    
                  ";
      $result = mysql_query($sql_query);
      }
?>
Hier die Fehlermeldung:
Krefeld 51.331702, 6.559343
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in .../google_geo.php on line 14
Damit ist folgende Codezeile gemeint:
PHP:
...
    while( $row = mysql_fetch_array($result,MYSQL_ASSOC) ) {
...
Hat jemand eine Ahnung. Bei mir flimmerts vor Augen vor lauter Programmiererei heute! :eek:

Beste Grüße,
preko
 
Zurück