Cityname到地理坐标PHP脚本?

时间:2010-07-11 15:57:10

标签: php mysql geolocation

我需要开发一个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

那么,使用这个数据库是一个好主意吗?有一个在线API可以做到这一点吗?我怎样才能将来自citiesXXXX的数据导入MySQL ?,对php脚本有什么建议吗?...谢谢!

2 个答案:

答案 0 :(得分:8)

我使用Google地图获取有关某个位置的所有信息: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或DOMDocument等函数来解析数据。如果您只想回显标签中支持的坐标,请使用以下代码:

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

我希望这就是你要找的东西。

答案 1 :(得分:0)

请参阅http://www.maxmind.com/app/geoip_resources以及底部的“MySQL”部分。他们会帮忙的。