編輯:Android開發實例
場景:我知道某個城市名和這個城市裡的一個小地方的地址,我想知道哪這個城市裡這個小地方的GPS緯度、經度值。
例如:我想知道上海市,益江路盛夏路的GPS緯度、經度值是多少?
注:一些基本的概念什麼的就都不講了,前面已經講過了,想要了解的請查看:Android百度地圖SDK版本v2.0.0試用
一、假設基於百度地圖SDK,底圖(最基本的圖層)你已經實現了,並且設置顯示的地圖為上海市的。
二、獲取上海市,益江路盛夏路的GPS緯度、經度值:
1、創建MKSearch類的實例,並初始化。
- mMKSearch = new MKSearch();
- mMKSearch.init(mMapManager, new MKSearchListener(){
- @Override
- public void onGetAddrResult(MKAddrInfo result, int error) {
- }
- @Override
- public void onGetBusDetailResult(MKBusLineResult arg0, int arg1) {
- // TODO Auto-generated method stub
- }
- @Override
- public void onGetDrivingRouteResult(MKDrivingRouteResult result, int arg1) {
- }
- @Override
- public void onGetPoiDetailSearchResult(int arg0, int arg1) {
- // TODO Auto-generated method stub
- }
- @Override
- public void onGetPoiResult(MKPoiResult arg0, int arg1, int arg2) {
- // TODO Auto-generated method stub
- }
- @Override
- public void onGetSuggestionResult(MKSuggestionResult arg0, int arg1) {
- // TODO Auto-generated method stub
- }
- @Override
- public void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) {
- // TODO Auto-generated method stub
- }
- @Override
- public void onGetWalkingRouteResult(MKWalkingRouteResult arg0, int arg1) {
- // TODO Auto-generated method stub
- }
- });
2、調用 mMKSearch.geocode(String address, String city)方法,返回值是int類型的。
參數列表:某個城市中某個地方的地址,城市名。例如:陸家嘴,上海市
- mMKSearch.geocode("益江路盛夏路", "上海市");
3、在回調onGetAddrResult(MKAddrInfo result, int error)裡面處理查到的結果。
將得到的結果用兩種方式呈現:a. 以對話框的形式展現;b. 在地圖上標注出來。
- @Override
- public void onGetAddrResult(MKAddrInfo result, int error) {
- // error的含義: 錯誤號,0表示結果正確,result中有相關結果信息;
- // 100表示結果正確,result中無相關地址信息
- if(error != 0 || result == null){
- String str = String.format("錯誤號:%d", error);
- Toast.makeText(BaiduMapGeocodeActivity.this, str, Toast.LENGTH_LONG).show();
- return;
- }
- GeoPoint mPoint = result.geoPt;
- // 將得到的結果以對話框的形式展現
- showGeocode(result.strAddr, mPoint);
- // 將找到的位置設置為在手機屏幕內可見地圖的中心點
- mMapView.getController().animateTo(mPoint);
- // 得到需要標在地圖上的資源
- Drawable marker = getResources().getDrawable(R.drawable.icon_marka);
- // 為maker定義位置和邊界
- // marker.setBounds(0, 0, marker.getIntrinsicWidth(), marker.getIntrinsicHeight());
- mMapView.getOverlays().clear();
- mMapView.getOverlays().add(new MyOverlay(marker, mPoint, result.strAddr));
- mMapView.refresh();
- }
運行效果圖如下:
a. 對話框形式
b. 在地圖上標注
完整代碼:
- package com.android.baidu.map;
- import java.util.ArrayList;
- import android.app.Activity;
- import android.app.AlertDialog;
- import android.content.Context;
- import android.content.res.Configuration;
- import android.graphics.drawable.Drawable;
- import android.os.Bundle;
- import android.util.Log;
- import android.widget.Toast;
- import com.baidu.mapapi.BMapManager;
- import com.baidu.mapapi.MKGeneralListener;
- import com.baidu.mapapi.map.ItemizedOverlay;
- import com.baidu.mapapi.map.MKEvent;
- import com.baidu.mapapi.map.MapController;
- import com.baidu.mapapi.map.MapView;
- import com.baidu.mapapi.map.OverlayItem;
- import com.baidu.mapapi.search.MKAddrInfo;
- import com.baidu.mapapi.search.MKBusLineResult;
- import com.baidu.mapapi.search.MKDrivingRouteResult;
- import com.baidu.mapapi.search.MKPoiResult;
- import com.baidu.mapapi.search.MKSearch;
- import com.baidu.mapapi.search.MKSearchListener;
- import com.baidu.mapapi.search.MKSuggestionResult;
- import com.baidu.mapapi.search.MKTransitRouteResult;
- import com.baidu.mapapi.search.MKWalkingRouteResult;
- import com.baidu.platform.comapi.basestruct.GeoPoint;
- /**
- * 根據城市名,地址名獲取地址信息 (GPS緯度、經度值)
- * @author android_ls
- *
- */
- public class BaiduMapGeocodeActivity extends Activity {
- public static final String TAG = "BaiduMapGeocodeActivity";
- public static final String BAIDU_MAP_KEY = "07418AEC69BAAB7104C6230A6120C580DFFAEEBB";
- private BMapManager mMapManager = null;
- private MapView mMapView = null;
- private MKSearch mMKSearch = null;
- private Context mContext;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- mContext = BaiduMapGeocodeActivity.this.getApplicationContext();
- mMapManager = new BMapManager(getApplicationContext());
- mMapManager.init(BAIDU_MAP_KEY, new MKGeneralListener() {
- @Override
- public void onGetNetworkState(int errorCode) {
- if (errorCode == MKEvent.ERROR_NETWORK_CONNECT) {
- Toast.makeText(mContext, "您的網絡出錯啦!",
- Toast.LENGTH_LONG).show();
- }
- }
- @Override
- public void onGetPermissionState(int errorCode) {
- if (errorCode == MKEvent.ERROR_PERMISSION_DENIED) {
- // 授權Key錯誤:
- Toast.makeText(mContext,
- "請在 DemoApplication.java文件輸入正確的授權Key!",
- Toast.LENGTH_LONG).show();
- }
- }
- });
- setContentView(R.layout.main);
- mMapView = (MapView) this.findViewById(R.id.bmapsView);
- mMapView.setBuiltInZoomControls(true);
- MapController mMapController = mMapView.getController();
- // 上海市的GPS緯度經度值:31.232310,121.469160
- GeoPoint mGeoPoint = new GeoPoint(
- (int) (31.232310 * 1E6),
- (int) (121.469160 * 1E6)
- );
- mMapController.setCenter(mGeoPoint);
- mMapController.setZoom(18);
- mMKSearch = new MKSearch();
- mMKSearch.init(mMapManager, new MKSearchListener(){
- @Override
- public void onGetAddrResult(MKAddrInfo result, int error) {
- // error的含義: 錯誤號,0表示結果正確,result中有相關結果信息;
- // 100表示結果正確,result中無相關地址信息
- if(error != 0 || result == null){
- String str = String.format("錯誤號:%d", error);
- Toast.makeText(BaiduMapGeocodeActivity.this,
- str, Toast.LENGTH_LONG).show();
- return;
- }
- GeoPoint mPoint = result.geoPt;
- // 將得到的結果以對話框的形式展現
- showGeocode(result.strAddr, mPoint);
- // 將找到的位置設置為在手機屏幕內可見地圖的中心點
- mMapView.getController().animateTo(mPoint);
- // 得到需要標在地圖上的資源
- Drawable marker = getResources().getDrawable(R.drawable.icon_marka);
- // 為maker定義位置和邊界
- // marker.setBounds(0, 0, marker.getIntrinsicWidth(), marker.getIntrinsicHeight());
- mMapView.getOverlays().clear();
- mMapView.getOverlays().add(
- new MyOverlay(marker, mPoint, result.strAddr));
- mMapView.refresh();
- }
- @Override
- public void onGetBusDetailResult(MKBusLineResult arg0, int arg1) {
- // TODO Auto-generated method stub
- }
- @Override
- public void onGetDrivingRouteResult(MKDrivingRouteResult result, int arg1) {
- }
- @Override
- public void onGetPoiDetailSearchResult(int arg0, int arg1) {
- // TODO Auto-generated method stub
- }
- @Override
- public void onGetPoiResult(MKPoiResult arg0, int arg1, int arg2) {
- // TODO Auto-generated method stub
- }
- @Override
- public void onGetSuggestionResult(MKSuggestionResult arg0, int arg1) {
- // TODO Auto-generated method stub
- }
- @Override
- public void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) {
- // TODO Auto-generated method stub
- }
- @Override
- public void onGetWalkingRouteResult(MKWalkingRouteResult arg0, int arg1) {
- // TODO Auto-generated method stub
- }
- });
- // 根據地址名獲取地址信息 異步函數,返回結果在MKSearchListener裡的onGetAddrResult方法通知
- mMKSearch.geocode("益江路盛夏路", "上海市");
- // 測試:下面的都獲取不到GPS緯度、經度值。感慨:百度地圖這方面有待提高。
- // mMKSearch.geocode("浦東軟件園", "上海市");
- // mMKSearch.geocode("廣蘭路", "上海市");
- // mMKSearch.geocode("祖沖之路金科路", "上海市");
- // mMKSearch.geocode("陸家嘴", "上海市");
- }
- /**
- * 以Dialog的形式顯示查找結果
- * @param address 地址
- * @param mPoint 地理坐標點
- */
- private void showGeocode(String address, GeoPoint mPoint)
- {
- // 將以微度的整數形式存儲的地理坐標點轉換成GPS緯度經度值
- double latitude = mPoint.getLatitudeE6()/1E6; // 緯度
- double longitude = mPoint.getLongitudeE6()/1E6;// 經度
- Log.i(TAG, "latitude = " + latitude + "\t longitude = " + longitude);
- StringBuilder sb = new StringBuilder(address);
- sb.append("\n")
- .append("緯度:\t").append(latitude)
- .append("\n")
- .append("經度:\t").append(longitude);
- new AlertDialog.Builder(this)
- .setTitle("根據地址名獲取GPS緯度、經度值")
- .setMessage(sb)
- .show();
- }
- class MyOverlay extends ItemizedOverlay<OverlayItem>{
- private ArrayList<OverlayItem> overlayList = new ArrayList<OverlayItem>();
- public MyOverlay(Drawable drawable, GeoPoint point, String address) {
- super(drawable);
- overlayList.add(new OverlayItem(point, address, address));
- populate();
- }
- @Override
- protected OverlayItem createItem(int index) {
- return overlayList.get(index);
- }
- @Override
- public int size() {
- return overlayList.size();
- }
- }
- @Override
- public void onConfigurationChanged(Configuration newConfig) {
- super.onConfigurationChanged(newConfig);
- }
- @Override
- protected void onSaveInstanceState(Bundle outState) {
- super.onSaveInstanceState(outState);
- mMapView.onSaveInstanceState(outState);
- }
- @Override
- protected void onRestoreInstanceState(Bundle savedInstanceState) {
- super.onRestoreInstanceState(savedInstanceState);
- mMapView.onRestoreInstanceState(savedInstanceState);
- }
- @Override
- protected void onResume() {
- mMapView.onResume();
- if (mMapManager != null) {
- mMapManager.start();
- }
- super.onResume();
- }
- @Override
- protected void onPause() {
- mMapView.onPause();
- if (mMapManager != null) {
- mMapManager.stop();
- }
- super.onPause();
- }
- @Override
- protected void onDestroy() {
- mMapView.destroy();
- if (mMapManager != null) {
- mMapManager.destroy();
- mMapManager = null;
- }
- super.onDestroy();
- }
- }
轉自:http://blog.csdn.net/android_ls/article/details/8579695
ColaBox 登記收支記錄終於進入了復雜階段了。這個界面我也是查找了很多資料
可以顯示在的Android任務,通過加載進度條的進展。進度條有兩種形狀。加載欄和加載微調(spinner)。在本章中,我們將討論微調(spinner)。Spinner 用
(效果如上圖所示) 其實很簡單: 比方說上面的容器是一個ListView 代碼如下: <ListView android:id=@+id/listView
最近在做一個項目涉及到將包含圖片的簡單網頁下載到本地,方便離線時觀看,在這裡分享一下,大家做下簡單修改就可以用到自己的項目中了。(這裡用到了AQuery庫) 代