我正在寻找能够让我找到我所在的县的任何网络API,给出一组lat / long。我知道它可以通过Android GeoCoder完成,但我对结果不满意,即使是在我位于城市的家乡,位置返回null,使用以下代码:
addresses = geocoder.getFromLocation(mLocation.getLatitude(), mLocation.getLongitude(), 1);
address=addresses.get(0);
Log.v(TAG,""+address.getSubAdminArea());
它找到了我的地址,我的州和我的城市,但不是我的县。
最终,我希望这可以在我可以远离铺平道路的情况下工作,但仍然知道我所在的县,我相信如果我甚至不知道我在哪里我在一个城市,我永远不会弄明白我在乡村环境中的位置。我宁愿不为这项服务付费,但如果服务足够好,我甚至愿意付钱。我想使用web api,我很明显地接受了我在远程位置需要上网的功能。
完美的应用程序将按优先顺序满足以下要求。
答案 0 :(得分:2)
我不确定Android GeoCoder是否使用Google GeoCoding api,但我刚用我的地址测试了这个API,它返回的地址包括类似县的地址。
你能用你的地址试试吗?
http://maps.googleapis.com/maps/api/geocode/json?latlng=37.6,125.961452&sensor=true
参考:
https://developers.google.com/maps/documentation/geocoding/#ReverseGeocoding https://developers.google.com/maps/documentation/geocoding/#Types
答案 1 :(得分:1)
您可以尝试Nominatim。它应该满足您的所有要求。它使用来自OpenStreetMap的数据,并且能够geocoding和reverse-geocoding。请参阅此示例反向地理编码查询:
如果修改format
参数,它也可以返回JSON而不是XML。
OSM的官方Nominatim实例有一个相当严格的usage policy因为它在捐赠的服务器上运行。但是有一些没有这种限制的替代实例,例如MapQuest提供的实例。当然,local installation也是可能的。
答案 2 :(得分:0)
我发现组合方法似乎最适合管理准确性和API调用。我已经做了一些工作,到目前为止我正在使用以下4项服务,按顺序排列:
仍然在研究其他人,但这些似乎适用于我迄今为止所输入的所有典型地址。
其中,Map Quest似乎整体效果最好,它会找出一个区域的邮政编码,也会找到该县。总的来说,我很满意。谷歌地图API失败了弗吉尼亚独立城市,如http://maps.googleapis.com/maps/api/geocode/json?latlng=38.7451,-77.478876&sensor=false,但我能够通过一些额外的代码使其工作。 GeoNames确实做过弗吉尼亚独立城市。事实上,GeoNames似乎是整体的赢家,除了它在美国境外不起作用,并且不像边缘情况那样有效。