2014-12-22 121 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