2010-07-11 5 views
3

J'ai besoin de développer un script php qui demande un nom de ville et renvoie un écho simple avec les coordonnées géographiques de la ville.Cityname aux coordonnées géographiques PHP script?

Données d'entrée: CityName OU CityName, Pays

Je sais qu'il ya une base de données gratuite appelée GeoNames été, vous pouvez télécharger une base de données qui contient ces informations, mais je ne sais pas vraiment comment exporter cette base de données sur mon serveur MySQL , il y a 3 fichiers qui peuvent être le ai besoin, mais je ne sais pas ce que je dois choisir:

cities1000.zip        11-Jul-2010 01:13 3.4M 
cities15000.zip       11-Jul-2010 01:13 1.1M 
cities5000.zip        11-Jul-2010 01:13 1.8M 

see were this files are

Ainsi, une bonne idée d'utiliser cette base de données ?, il y a une ligne AP Je fais cela ?, Comment puis-je importer les données de villesXXXX à MySQL ?, Toute suggestion pour le script php? ... Merci!

Répondre

8

utiliser Google Maps pour obtenir des informations sur un lieu: http://code.google.com/apis/maps/index.html

Il peut renvoyer les données en XML ou JSON afin que vous puissiez facilement analyser et enregistrer les données.

Voici un exemple de lien pour Washington DC: http://maps.google.com/maps/geo?output=xml&oe=utf8&sensor=false&hl=en&q=washington%20dc

Il retournera ces données XML:

<?xml version="1.0" encoding="UTF-8" ?> 
<kml xmlns="http://earth.google.com/kml/2.0"> 
    <Response> 
     <name>washington dc</name> 
     <Status> 
      <code>200</code> 
      <request>geocode</request> 
     </Status> 
     <Placemark id="p1"> 
      <address>Washington, DC, USA</address> 
      <AddressDetails Accuracy="4" xmlns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0"> 
       <Country> 
        <CountryNameCode>US</CountryNameCode> 
        <CountryName>USA</CountryName> 
        <AdministrativeArea> 
         <AdministrativeAreaName>DC</AdministrativeAreaName> 
         <SubAdministrativeArea> 
          <SubAdministrativeAreaName>District of Columbia</SubAdministrativeAreaName> 
          <Locality> 
           <LocalityName>Washington</LocalityName> 
          </Locality> 
         </SubAdministrativeArea> 
        </AdministrativeArea> 
       </Country> 
      </AddressDetails> 
      <ExtendedData> 
       <LatLonBox north="38.9645516" south="38.8256040" east="-76.9083064" west="-77.1644252" /> 
      </ExtendedData> 
      <Point> 
       <coordinates>-77.0363658,38.8951118,0</coordinates> 
      </Point> 
     </Placemark> 
    </Response> 
</kml> 

Vous pouvez alors utiliser une fonction comme SimpleXML ou DOMDocument pour analyser les données. Si vous voulez juste faire écho aux coordonnées comme pris en charge dans le simple balise utilisation de ce code:

$xml = simplexml_load_string(file_get_contents('http://maps.google.com/maps/geo?output=json&oe=utf8&sensor=false&hl=de&q='.urlencode($address))); 
echo (string)$xml->Placemark->Point->coordinates; 

Si vous voulez que les coordonnées individuelles utilisent les données dans l'étiquette, par exemple:

$coordinates = explode(',', $xml->Placemark->Point->coordinates); 
echo $coordinates[0]; 
echo $coordinates[1]; 

J'espère que est ce que vous cherchez.

Questions connexes