導航:首頁 > 操作系統 > android經緯度轉換工具

android經緯度轉換工具

發布時間:2024-04-03 01:24:56

android 輸入一個地址 轉成經緯度 為什麼第二次就不進ongetaddrresult

如果打算寫一些LBS方面的的應用,可能用到地址與經緯度的互相轉換。android.location.Geocoder類提供了此功能。實際上,Geocoder既提供了前向轉換,也提供了後向轉換——它可以獲取地址並返回經緯度,也可以將經緯度對轉換為一組地址。

可以通過各種方式來描述位置。例如,getFromLocationName() 方法可以獲得地方的名稱、物理地址和機場編號,或者該位置的流行名稱。這些方法提供了一個地址列表(List<Address>),而不是一個地址。因為這些方法返回多個結果,官方建議最好提供1~5的maxResults 值來限制結果集,下面我們來看一個查詢地址的例子,和上次一樣我們得自己定義一個類繼承MapActivity。

我們可以試著寫一個輸入地名返回經緯度的程序。

在XML中定義一個輸入框,一個按鈕,一個MapView.

用戶輸入一個地名點擊按鈕,返回經緯度。

這是按鈕的OnCliclk方法,其他省略。

public void onClick(View v) {
try {
EditText loc = (EditText) findViewById(R.id.location);
String locationName = loc.getText().toString();
List<Address> addressList = geocoder.getFromLocationName(
locationName, 5);
if (addressList != null && addressList.size() > 0) {
int lat = (int) (addressList.get(0).getLatitude() * 1E6);
int lng = (int) (addressList.get(0).getLongitude() * 1E6);

GeoPoint pt = new GeoPoint(lat, lng);
mapView.getController().setZoom(15);
mapView.getController().setCenter(pt);
}
} catch (Exception e) {
e.printStackTrace();
}
}

這樣寫感覺是沒什麼錯,實際測試時發現,如果輸入「tian an men」就可以返回經緯度,但輸入「天安門」就會拋異常,說服務不可以用什麼的,網上也有遇到這問題的人,eoe上邊也有,但都不了了之了。國外也有輸入英文拋異常的,http://code.google.com/p/android/issues/detail?id=8816,

在21樓發現了新的方法,完全放棄了getFromLocationName方法,用的是The Google Geocoding API

這個API整合可以代替先前的方法,輸入地名返回JSON或者XML格式的文件,包含一對地址信息。

XML為http://maps.googleapis.com/maps/api/geocode/xml?address=北京交通大學&sensor=false

JSON為http://maps.googleapis.com/maps/api/geocode/json?address=北京交通大學&sensor=false

現在需要自己寫一個靜態方法去解析XML或者JSON,以JSON為例:

public class MapUtility {
public static JSONObject getLocationInfo(String address) {

HttpGet httpGet = new HttpGet("http://maps.google."

+ "com/maps/api/geocode/json?address=" + address

+ "&sensor=false");

HttpClient client = new DefaultHttpClient();

HttpResponse response;

StringBuilder stringBuilder = new StringBuilder();

try {

response = client.execute(httpGet);

HttpEntity entity = response.getEntity();

InputStream stream = entity.getContent();

int b;

while ((b = stream.read()) != -1) {

stringBuilder.append((char) b);

}

} catch (ClientProtocolException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

JSONObject jsonObject = new JSONObject();

try {

jsonObject = new JSONObject(stringBuilder.toString());

} catch (JSONException e) {

e.printStackTrace();

}

return jsonObject;

}

// converts JSONObject into a GeoPoint.

public static GeoPoint getGeoPoint(JSONObject jsonObject) {

Double lon = new Double(0);

Double lat = new Double(0);

try {

lon = ((JSONArray) jsonObject.get("results")).getJSONObject(0)

.getJSONObject("geometry").getJSONObject("location")

.getDouble("lng");

lat = ((JSONArray) jsonObject.get("results")).getJSONObject(0)

.getJSONObject("geometry").getJSONObject("location")

.getDouble("lat");

} catch (JSONException e) {

e.printStackTrace();

}

return new GeoPoint((int) (lat * 1E6), (int) (lon * 1E6));

}

}

第一個方法根據地址取得JSON,第二個方法從JSON提取坐標。

最後程序效果如下:

Android地址與經緯度轉換

最後,應該考慮在不同於UI線程的線程中執行地理編碼操作。很明顯:這項操作很耗時,而且你一定不希望UI在進行地理編碼時停頓,如果停頓會阻塞整個用戶界面。當在執行一些耗時的操作的時候,不能及時地分發 事件,包括用戶界面重繪事件。從用戶的角度來看,應用程序看上去像掛掉了。更糟糕的是,如果阻塞應用程序的時間過長,Android會向用戶提示 一些信息,即打開一個「應用程序沒有相應(application not responding)」 的對話框。

② 現時android平台上實現gps獲取經緯度有什麼好方法

GPS獲取經緯度可以參考以下方法:

  1. manifest中添加許可權:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>

2. 實例化一個locationmanager:

LocationManger
locationmanager=(LocationManager)this.getSystemService(Context.LOCATION_SERVICE);

3. 判斷GPS是否打開,未打開提示打開GPS:

if (!locationmanager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {

Toast.makeText(this, "請開啟GPS導航...", Toast.LENGTH_SHORT).show();

return;

}

4. 監聽位置信息變化:

private LocationListener locationListener=new LocationListener() {

/**

* 位置信息變化時觸發

*/

public void onLocationChanged(Location location) {

updateView(location);

Log.i(TAG, "時間:"+location.getTime());

Log.i(TAG, "經度:"+location.getLongitude());

Log.i(TAG, "緯度:"+location.getLatitude());

Log.i(TAG, "海拔:"+location.getAltitude());

}

5. 載入監聽器:

locationmanager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 1,
locationListener);

③ 安卓修改GPS經緯度

嘗試使用這款軟體吧!

《偽裝GPS Fake GPS
location》是一款能偽造你GPS定位的軟體。不想讓朋友知道你的位置嗎?或者在切克或者點評上發表你的文章時候,不想讓別人知道你在哪不。用這個軟體吧。可以偽造出你的GPS位置。明明你在上海,但軟體可以幫助顯示你在美國。

④ Android高德通過經緯度獲取地理位置

首先導入依賴:
首次導入依賴的過程可能有點慢

然後在需要用到逆地理編碼的類或彈窗或其他地方中實現 GeocodeSearch.OnGeocodeSearchListener
監聽
例子:

並實現其兩個方法:

通過經緯度逆地理編碼得到位置核心編碼

這樣我們就可以實現通過經緯度得到一個位置信息了

福利贈送~~~

1、繼承 OnGeocodeSearchListener 監聽。
2、構造 GeocodeSearch 對象,並設置監聽。

3、通過 GeocodeQuery(java.lang.String locationName, java.lang.String city) 設置查詢參數,調用 GeocodeSearch 的 getFromLocationNameAsyn(GeocodeQuery geocodeQuery) 方法發起請求。

4、通過回調介面 onGeocodeSearched 解析返回的結果。

說明:

1)可以在回調中解析result,獲取坐標信息。

2)返回結果成功或者失敗的響應碼。1000為成功,其他為失敗(詳細信息參見網站開發指南-實用工具-錯誤碼對照表)

閱讀全文

與android經緯度轉換工具相關的資料

熱點內容
java課表 瀏覽:555
如何在pdf裡面修改 瀏覽:929
橙光製作器檔案框在哪個文件夾 瀏覽:991
php如何抓取網頁數據 瀏覽:642
計數器單片機 瀏覽:966
游戲aoi演算法 瀏覽:844
phpmysqlint 瀏覽:912
怎麼從appstore商城買東西 瀏覽:184
大秀直播平台源碼 瀏覽:424
java視屏 瀏覽:934
電腦中如何給程序加密 瀏覽:240
java排序容器 瀏覽:942
職稱證書在哪個app下載 瀏覽:362
四九演算法算男女 瀏覽:659
javawindows8 瀏覽:497
2021世界程序員節 瀏覽:485
php翼支付 瀏覽:884
盈通伺服器ip地址 瀏覽:791
3des演算法的c語言實現 瀏覽:874
網上怎樣購買伺服器地址 瀏覽:815