我有一个简单的PHP函数,从给定的纬度和经度获得最近的城市:
function findCity($lat, $lng, $username) {
$json_url = "http://api.geonames.org/findNearbyPlaceNameJSON?lat=" . $lat . "&lng=" . $lng . "&username=" . $username;
$json = file_get_contents($json_url);
$json = str_replace('},
]', "}
]", $json);
$data = json_decode($json);
echo "<pre>";
print_r($data);
echo "</pre>";
}
此方法返回以下lat:51.992和long:4.89
stdClass Object
(
[geonames] => Array
(
[0] => stdClass Object
(
[countryName] => Netherlands
[adminCode1] => 11
[fclName] => city, village,...
[countryCode] => NL
[lng] => 4.876389
[fcodeName] => populated place
[distance] => 1.42349
[toponymName] => Langerak
[fcl] => P
[name] => Langerak
[fcode] => PPL
[geonameId] => 2751924
[lat] => 51.931667
[adminName1] => South Holland
[population] => 0
)
)
)
这将返回最近的城市,但我正在寻找像this这样的东西 . 只返回最近的大城市 . 这可能吗?或者还有其他替代方案来解决这个问题 . 我使用它,因为我们没有使用谷歌 Map 来显示结果 . (注意:地理编码API只能与Google Map 结合使用;禁止在 Map 上显示地理编码结果.Source)
我知道这不是一个真正的程序员问题,但由于地理位置论坛并不是真正活跃的,我想我会在这里发布 .
2 回答
你需要一份最大的城市名单 . 我没有找到关于geonames的api调用(也许试试freebase api for sorting by city relevance) . 因为您显示的示例列表是静态的,您可以硬编码吗?如果是这样,你可以使用下面显示的内容
对于那些在同样问题上苦苦挣扎的人,我制作了一些Java代码,用于从网站上删除各大洲,国家,城市,纬度和经度坐标 . 代码并不漂亮,因为我匆匆忙忙地做了它,但是它做了它应该做的事情:
我使用了Jsoup库 .
运行此代码需要一段时间(大约3分钟),它将返回许多行(粘贴在单词:146页)格式为:
continent|country|city|lat|long|
,因此很容易将它们插入数据库中 .干杯