通过网络API以稳固的方式获取县名

时间:2013-10-11 01:27:30

标签: android asp.net-web-api reverse-geocoding

我正在寻找能够让我找到我所在的县的任何网络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,我很明显地接受了我在远程位置需要上网的功能。

完美的应用程序将按优先顺序满足以下要求。

  1. 在任何地点工作,非常可靠,无需道路
  2. 在美国的职能。
  3. 在任何国家工作,与其相当于一个县,通过技术使用优先。
  4. 快速工作
  5. 每天最少可以免费拨打1000个电话。
  6. 还提取状态信息和邮政编码。
  7. 即使是在无人居住的小岛上工作,当然也可以上网。

3 个答案:

答案 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的数据,并且能够geocodingreverse-geocoding。请参阅此示例反向地理编码查询:

  

http://nominatim.openstreetmap.org/reverse?format=xml&lat=52.5487429714954&lon=-1.81602098644987&zoom=18&addressdetails=1

如果修改format参数,它也可以返回JSON而不是XML。

OSM的官方Nominatim实例有一个相当严格的usage policy因为它在捐赠的服务器上运行。但是有一些没有这种限制的替代实例,例如MapQuest提供的实例。当然,local installation也是可能的。

答案 2 :(得分:0)

我发现组合方法似乎最适合管理准确性和API调用。我已经做了一些工作,到目前为止我正在使用以下4项服务,按顺序排列:

  1. Android' Geocoder
  2. http://developer.mapquest.com/
  3. https://developers.google.com/maps/documentation/geocoding/#ReverseGeocoding
  4. http://www.geonames.org/maps/us-reverse-geocoder.html#findNearestAddress
  5. 仍然在研究其他人,但这些似乎适用于我迄今为止所输入的所有典型地址。

    其中,Map Quest似乎整体效果最好,它会找出一个区域的邮政编码,也会找到该县。总的来说,我很满意。谷歌地图API失败了弗吉尼亚独立城市,如http://maps.googleapis.com/maps/api/geocode/json?latlng=38.7451,-77.478876&sensor=false,但我能够通过一些额外的代码使其工作。 GeoNames确实做过弗吉尼亚独立城市。事实上,GeoNames似乎是整体的赢家,除了它在美国境外不起作用,并且不像边缘情况那样有效。