2014-12-22 183 views
2

我想开发一个可以根据lat/long做任务的android应用程序。这就像我特别是郊区一样(可以说我在澳大利亚首都澳大利亚的Belconnen,我想自动获得该地点的详细信息) - 如果我移出Belconnen的边界,那么我必须显示一些其他详细信息。找出经纬度

如果你检查这谷歌地图链接:http://goo.gl/4mItcF你会看到红色边界只是belconnen郊区。

我的问题是我如何给我的应用程序边框(意思是如何告诉我的应用程序,我现在在Belconnen,ACT?是通过沿边界获取纬度/长度将它们存储在数据库中,并检查是否我在里面需要纬度/长,如果是DB将有巨大的数字只对贝尔科的情况下,做对?

或者是有一个更简单的方式来获得的边界?

让我知道!

谢谢!

+0

请参阅此链接: http://www.tutorialspoint.com/android/android_location_based_services.htm –

+2

您检查了GeoFencing吗? –

+0

@MagicalPhoenixϡ我确实相信这需要互联网。我正在寻找脱机工作的解决方案,而不是通过互联网。 – TheDevMan

回答

0

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

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

+0

地址格式是已经实现的完美想法,但如果我没有互联网,我想显示有限的数据。 – TheDevMan

+0

对于地理围栏:我已经输入经纬度来比较我目前的纬度/经度,对于这个纬度/纬度我只有澳大利亚的海岸线才会有大量经纬度。 – TheDevMan

+0

在geofencing中,你基本上提供了一个圆圈,其余部分由android处理,你不必比较自己。对于脱机的东西,你必须尝试,因为我不知道。 – Karioki

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 
} 

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

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 
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澳大利亚。查看功能getFromLocation了解更多信息。

2.使用谷歌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)

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

一旦你离开Belconnen,澳大利亚首都地区,在回应的地址将不再包含这个,你可以把一些逻辑来获得你想要的行为。

+0

你的2点需要互联网。我正在寻找可以工作的解决方案,即使互联网无法正常工作。 – TheDevMan

+0

在这种情况下,您必须保存边界地理点。 –

1

据我所知,你想创建一个位置感知应用程序。

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

第1步 - 了解用户

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

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

步骤2 - 基于纬度和在该位置对象中检索经度的信息,您可以使用下面谷歌网络服务来获取位置的邮政编码。

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

第3步 - 我们如何可以频繁检索的位置信息

打开听众不断地将高度影响设备的电池。所以,为了避免这种情况,我们需要尽量减少检索位置信息的频率。

我会建议测量用户的距离,并根据设置下一个位置更新触发器。由于您只关注边界,因此可以根据设备加速度设置较高的值。 请参考下面的链接了解如何有效实现这一点的更多细节。 https://stackoverflow.com/a/11644809/623517

希望这会有所帮助。

+0

我总是不检查位置。这仅在用户打开我的APP时完成。我有几个重要的细节存储在本地数据库。我需要的只是当我根据位置打开APP时,我想放置细节并显示它。为此我需要知道位置和边界? GEO FENCING适用于小地方,但我怎样才能给它很大的地方? – TheDevMan