我想能够从经度/纬度反向地理定位到一个特定级别(最好是城市名),以便在搜索结果中,可以像这样列出位置:“Providence,RI,距离10英里”,“Providence,RI,距离5英里”,“Cranston,RI,距离16英里”。
是否有一种方法可以反向地理编码为城市?我看到许多示例可以将其反向地理编码为最近的可寻址位置,但没有控制级别的方法。
希望这清楚明白!如有需要澄清的任何问题,请随时发表评论。
免费资源(例如创意共用)
Geonames
如果您正在寻找自由(作为自由权利)的资源,可以使用Geonames API findNearbyPlaceName。
例如,以下命令返回最近的地名:
http://api.geonames.org/findNearbyPlaceName?lat=47.3&lng=9&username=demo
更多信息可在此处获取:
http://www.geonames.org/export/web-services.html#findNearbyPlaceName
Freebase
它需要一个有界框而不是单个点。调用示例:
Geocoder.ca
北美地址的反向地理编码。
Map Quest API
使用Open Street Map nominatim服务:
http://open.mapquestapi.com/nominatim/v1/search?q=50.4,30.4&format=json
非免费来源
Yahoo PlaceFinder
文档:http://developer.yahoo.com/geo/placefinder/
示例调用:
http://where.yahooapis.com/geocode?q=38.898717,+-77.035974&gflags=R&appid=[yourappidhere]
Google Maps API
文档:
http://code.google.com/apis/maps/documentation/geocoding/#ReverseGeocoding
你不能只是对完整地址进行处理,然后删除街道和号码吗?
我认为使用完整地址更有价值,这样能获得更精确的距离(即使只显示城市,州)。
编辑:如果你确实这样做了,至少它应该以标准形式返回,这样你就可以轻松地从中提取所需数据。
我正在寻找一个将经纬度转换为城市的API。似乎这也是本主题的最初问题。
我在另一个stackoverflow主题上看到了数据“http://download.geonames.org/export/dump/”,该主题是“给定经纬度坐标,如何找出城市/国家?”,并实现了自己的Web服务。
您可以在http://scatter-otl.rhcloud.com/location?lat=36&long=-78.9上运行它。只需更改您位置的纬度和经度即可。
它部署在OpenShift(RedHat平台)上。长时间空闲后的第一次调用可能需要一些时间,但通常性能令人满意。随意使用此服务...
此外,您还可以在https://github.com/turgos/Location中找到项目源代码。
反向地理编码服务(如Google、Yahoo和GeoNames)可以很好地完成这个任务,但需要注意以下几点:
我运营一个网站,提供多个商业地理Web API,并销售我们构建用于支持这些API的Java库。其中一个(仅覆盖美国)使用美国城镇的正确多边形地图来返回包含您的查询点的结果。它准确且快速,因此如果这是您系统中至关重要的组件,则建议访问我们的网站:
查找经纬度对应城市的页面是:
Html5地理定位需要用户许可。如果您不想使用此行为,可以选择像https://geolocation-db.com这样的外部提供商。他们提供基于IP地址的免费地理定位服务。
尝试这个例子:
<!DOCTYPE html>
<html>
<head>
<title>Geolocation DB - jQuery example</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
</head>
<body>
<div>Country: <span id="country"></span>
<div>State: <span id="state"></span>
<div>City: <span id="city"></span>
<div>Latitude: <span id="latitude"></span>
<div>Longitude: <span id="longitude"></span>
<div>IP: <span id="IPv4"></span>
<script>
$.ajax({
url: "https://geolocation-db.com/jsonp",
jsonpCallback: "callback",
dataType: "jsonp",
success: function( location ) {
$('#country').html(location.country_name);
$('#state').html(location.state);
$('#city').html(location.city);
$('#latitude').html(location.latitude);
$('#longitude').html(location.longitude);
$('#ip').html(location.IPv4);
}
});
</script>
</body>
</html>