2

我正在尝试开发一个可以根据纬度/经度执行任务的 android 应用程序。这就像我在特定的郊区(假设我在澳大利亚首都领地的贝尔康宁,我想自动获取那个地方的详细信息)——如果我搬出贝尔康宁的边界,那么我必须展示一些其他细节.

如果您查看此谷歌地图链接: http: //goo.gl/4mItcF,您会看到红色边界仅是 belconnen 郊区。

我的问题是如何在我的应用程序中给出边界(意味着我如何告诉我的应用程序我现在在 ACT 的贝尔康宁?是通过沿边界获取纬度/经度将它们存储在数据库中并检查我是否在里面纬度/经度,如果是这种情况,DB 只会为 Belconnen 提供大量数字,对吗?

或者有没有更简单的方法来获得边界?

让我知道!

谢谢!

4

5 回答 5

1

据我了解,您想创建一个位置感知应用程序。

根据 Android 文档,Google Play 服务位置 API 优先于 Android 框架位置 API (android.location),作为向您的应用添加位置感知的一种方式。

第 1 步 - 了解用户的当前位置

Google 建议为此使用 FusionProvider API。它是 Google Play 服务中的位置 API 之一,您可以在其中指定高级别要求,例如高精度或低功耗。它还优化了设备对电池电量的使用。

https://developer.android.com/reference/com/google/android/gms/location/FusedLocationProviderApi.html

步骤 2 - 根据位置对象中检索到的纬度和经度信息,您可以使用以下Google 网络服务获取该位置的邮政编码

http://maps.googleapis.com/maps/api/geocode/json?latlng=lattitude,longitude&sensor=true

第 3 步 - 我们检索位置信息的频率

连续打开监听器会对设备电池造成很大影响。因此,为了避免这种情况,我们需要最小化检索位置信息的频率。

我建议测量用户行进的距离,并根据该距离设置下一个位置更新触发器。由于您只关心边界,我们可以根据设备加速度设置一个较高的值。有关如何有效实施此功能的更多详细信息,请参阅以下链接。 https://stackoverflow.com/a/11644809/623517

希望这可以帮助。

于 2015-01-05T22:31:51.940 回答
1

有一种方法,称为反向地理编码。您可以通过两种方式使用它:

1.使用GeocoderAndroid类-

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.2374551and lng = 149.0672515for Belconnen, ACT Australia。查看函数getFromLocation了解更多信息。

2. 使用谷歌 REST 网络服务:

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)

通过逗号分隔的纬度和经度,您将获得最精确的位置作为响应。在此处查找更多信息反向地理编码谷歌 API

一旦您离开澳大利亚首都领地的 Belconnen,响应的地址将不再包含此内容,您可以输入一些逻辑来获得您想要的行为。

于 2015-01-05T13:05:26.310 回答
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
于 2015-01-05T09:17:40.267 回答
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
}

我知道这种方法不能给出完美的结果,但它似乎比使用地理围栏更有效。

于 2015-01-01T12:17:57.257 回答
0

您可以从 lat long 获取完整地址,然后搜索您的城市或位置。这个答案解释了如何做到这一点:如何从纬度和经度中获取完整的地址?

如果您想要进一步的灵活性,您可以使用地理围栏:http: //developer.android.com/training/location/geofencing.html

于 2014-12-22T14:26:43.600 回答