我正在尝试开发一个可以根据lat / long执行任务的android应用程序。这就像我在特定的郊区(让我说我在Belconnen,ACT澳大利亚,我想自动得到那个地方的细节) - 如果我搬出belconnen的边界然后我必须显示一些其他细节
如果您查看此谷歌地图链接:http://goo.gl/4mItcF,您会看到红色边框仅为belconnen郊区。
我的问题是如何在我的应用程序中给出边框(这意味着我如何告诉我的应用程序我现在处于belconnen,ACT?是否通过沿着边界将lat / long存储在DB中并检查我是否在内部需要lat / long,如果是这样的情况,DB只会为Belconnen提供大量数字,ACT对吗?
或者有更简单的方法来获得边界?
让我知道!
谢谢!
答案 0 :(得分:1)
有一种方法,称为反向地理编码。您可以通过两种方式使用它:
<强> 1。使用Geocoder
类Android -
Geocoder gcd = new Geocoder(context, Locale.getDefault());
List<Address> addresses = gcd.getFromLocation(lat, lng, 1);
if (addresses.size() > 0)
System.out.println(addresses.get(0).getLocality());
您可以使用lat = -35.2374551
和lng = 149.0672515
代表澳大利亚ACT的Belconnen。有关详细信息,请查看函数getFromLocation。
<强> 2。使用Google REST Web服务:
https://maps.googleapis.com/maps/api/geocode/json?latlng=-35.2374551,149.0672515(JSON)
https://maps.googleapis.com/maps/api/geocode/xml?latlng=-35.2374551,149.0672515(XML)
以逗号分隔纬度和经度,你将获得最精确的响应位置。在Reverse Geocoding google API
中查找更多信息一旦你离开澳大利亚ACT的Belconnen,响应中的地址将不再包含这个,你可以用一些逻辑来达到理想的行为。
答案 1 :(得分:1)
据我了解,您希望创建一个位置感知应用程序。
根据Android文档,Google Play服务位置API优先于Android框架位置API(android.location),作为向您的应用添加位置感知的一种方式。
第1步 - 了解用户的当前位置
Google建议将FusionProvider API用于此目的。它是Google Play服务中的位置API之一,您可以在其中指定高级别的要求,例如高精度或低功耗。它还优化了设备对电池电量的使用。
第2步 - 根据位置对象中检索到的纬度和经度信息,您可以使用以下 Google网络服务获取该位置的邮政编码。
http://maps.googleapis.com/maps/api/geocode/json?latlng=lattitude,longitude&sensor=true
第3步 - 我们检索位置信息的频率如何
持续打开听众会严重影响设备电池。因此,为避免这种情况,我们需要尽量减少检索位置信息的频率。
我建议测量用户行进的距离,并根据该设置确定下一个位置更新触发器。由于您只关注边界,我们可以根据设备加速度设置一个较高的值。 有关如何有效实施此更多详细信息,请参阅以下链接。 https://stackoverflow.com/a/11644809/623517
希望这有帮助。
答案 2 :(得分:0)
您可以从lat long获取完整地址,然后搜索您的城市或位置。这个答案解释了如何做到这一点:How to get complete address from latitude and longitude?
如果您想要进一步的灵活性,可以使用地理围栏:http://developer.android.com/training/location/geofencing.html
答案 3 :(得分:0)
您可以使用LatLngBounds(com.google.android.gms.maps.model.LatLngBounds)来估算区域。 像这样使用它:
LatLngBounds.Builder builder = new Builder();
for (int i=0; i<points.length; i++) {
builder.include(points[i]);
}
LatLngBounds bounds = builder.build();
然后检查您的位置是否在其中:
if (bounds.contains(myLatLng)) {
//your implementation
}
我知道这种方法不能提供完美的结果,但它似乎比使用地理围栏更有效。
答案 4 :(得分:0)
LocationManager lm;
lm=(LocationManager)this.getSystemService(Context.LOCATION_SERVICE);
Criteria c=new Criteria();
String provider=lm.getBestProvider(c, false);
Location l=lm.getLastKnownLocation(provider);
double latitude = l.getLatitude(); // latitude
double longitude = l.getLongitude(); // longitude