【问题标题】:Figure out Latitude and Longitude弄清楚纬度和经度
【发布时间】:2014-12-22 13:57:38
【问题描述】:

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

如果您查看此 google maps 链接:http://goo.gl/4mItcF,您会看到红色边框仅是 belconnen 郊区。

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

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

告诉我!

谢谢!

【问题讨论】:

标签: android google-maps geolocation location-services


【解决方案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.2374551lng = 149.0672515 表示澳大利亚首都领地的 Belconnen。查看函数getFromLocation了解更多信息。

2。使用 Google 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)

通过逗号分隔的纬度和经度,您将获得最精确的位置作为响应。在这里找到更多信息Reverse Geocoding google API

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

【讨论】:

  • 您的 2 点需要互联网。我正在寻找即使互联网不工作也能正常工作的解决方案。
【解决方案2】:

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

根据 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

希望这会有所帮助。

【讨论】:

  • 我并不总是检查位置。仅当用户打开我的 APP 时才会这样做。我几乎没有存储在本地数据库中的重要细节。我所需要的只是当我根据位置打开APP时,我想放置详细信息并显示它。我需要知道位置和边界? GEO FENCING 适用于小地方,但我怎样才能给它大地方?
【解决方案3】:

您可以从 lat long 获取完整地址,然后搜索您的城市或位置。这个答案解释了如何做到这一点:How to get complete address from latitude and longitude?

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

【讨论】:

  • 地址格式是一个完美的想法,已经实现了但是如果我没有互联网我想显示有限的数据。
  • 对于地理围栏:我已经提供纬度和经度来比较我当前的纬度/经度,我将有大量的纬度/经度集,仅适用于澳大利亚的贝尔康宁,对吧?
  • 在地理围栏中,您基本上提供了一个圆圈,其余部分由android处理,您不必自己比较。对于离线的东西,你必须尝试,因为我不知道。
【解决方案4】:

您可以使用 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
}

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

【讨论】:

    【解决方案5】:
            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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-09
      • 1970-01-01
      • 2013-02-21
      • 1970-01-01
      • 2019-03-25
      • 2016-09-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多