找出纬度和经度

时间:2014-12-22 13:57:38

标签: android google-maps geolocation location-services

我正在尝试开发一个可以根据lat / long执行任务的android应用程序。这就像我在特定的郊区(让我说我在Belconnen,ACT澳大利亚,我想自动得到那个地方的细节) - 如果我搬出belconnen的边界然后我必须显示一些其他细节

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

我的问题是如何在我的应用程序中给出边框(这意味着我如何告诉我的应用程序我现在处于belconnen,ACT?是否通过沿着边界将lat / long存储在DB中并检查我是否在内部需要lat / long,如果是这样的情况,DB只会为Belconnen提供大量数字,ACT对吗?

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

让我知道!

谢谢!

5 个答案:

答案 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.2374551lng = 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之一,您可以在其中指定高级别的要求,例如高精度或低功耗。它还优化了设备对电池电量的使用。

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

希望这有帮助。

答案 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