2010-07-11 58 views
3

我需要开发一个php脚本,请求一个城市名称并返回一个简单的回声与城市的地理坐标。城市名称到地理坐标PHP脚本?

输入数据:城市名或城市名,国家

我知道有一个叫GeoNames中,你可以下载谁包含此信息的数据库免费的数据库,但我真的不知道如何将这个数据库导出到我的MySQL服务器有3个文件谁可能是觉得我需要,但我不知道我需要选择:

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

所以,它是一个好主意,用这个数据的基础上?有一个在线美联社我要做到这一点?,我怎样才能将数据从citiesXXXX导入到MySQL?,任何关于php脚本的建议?...谢谢!

回答

8

我使用谷歌地图来获取有关位置的信息:http://code.google.com/apis/maps/index.html

它可以返回XML或JSON数据,因此您可以轻松地分析和保存数据。

下面是一个例子链接,华盛顿特区:http://maps.google.com/maps/geo?output=xml&oe=utf8&sensor=false&hl=en&q=washington%20dc

它会返回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> 

然后,您可以使用像SimpleXML的或DOM文档的功能来分析数据。如果你只是想呼应的坐标为标签简单的使用支持该代码:

$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; 

如果你想单坐标使用该数据在标签如:

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

我希望这是你在寻找什么。

相关问题