百度地图之地址信息和坐标的转换(一)

2014-11-24 09:21:49 · 作者: · 浏览: 0
在实际运用中,经常需要进行地理编码和地理反编码,即将地址信息转换成坐标和将坐标转换成地址信息,此demo就是用来展示如何进行地理编码搜索(用地址检索坐标)、反地理编码搜索(用坐标检索地址)以及展示如何使用ItemizedOverlay在地图上标注结果点,代码原型来自百度Demo,代码如下:
Activity:
package com.home;  
  
import android.app.Activity;  
import android.graphics.drawable.Drawable;  
import android.os.Bundle;  
import android.view.View;  
import android.view.View.OnClickListener;  
import android.widget.Button;  
import android.widget.EditText;  
import android.widget.Toast;  
  
import com.baidu.mapapi.map.ItemizedOverlay;  
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.MKShareUrlResult;  
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;  
  
public class GeoCoderActivity extends Activity implements OnClickListener {  
    // UI相关  
    private Button mBtnReverseGeoCode = null; // 将坐标反编码为地址  
    private Button mBtnGeoCode = null; // 将地址编码为坐标  
    private EditText lat = null;  
    private EditText lon = null;  
    private EditText editCity = null;  
    private EditText editGeoCodeKey = null;  
    // 地图相关  
    private MapView mMapView = null; // 地图View  
    // 搜索相关  
    private MKSearch mSearch = null; // 搜索模块,也可去掉地图模块独立使用  
  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        DemoApplication app 
= (DemoApplication) this.getApplication(); setContentView(R.layout.geocoder); CharSequence titleLable = "地理编码功能"; setTitle(titleLable); // 地图初始化 mMapView = (MapView) findViewById(R.id.geocoder_bmapView); mMapView.getController().enableClick(true); mMapView.getController().setZoom(12); // UI初始化 lat = (EditText) findViewById(R.id.geocoder_et_lat); lon = (EditText) findViewById(R.id.geocoder_et_lon); editCity = (EditText) findViewById(R.id.geocoder_et_city); editGeoCodeKey = (EditText) findViewById(R.id.geocoder_et_geocodekey); mBtnReverseGeoCode = (Button) findViewById(R.id.geocoder_btn_reversegeocode); mBtnGeoCode = (Button) findViewById(R.id.geocoder_btn_geocode); mBtnReverseGeoCode.setOnClickListener(this); mBtnGeoCode.setOnClickListener(this); // 初始化搜索模块,注册事件监听 mSearch = new MKSearch(); mSearch.init(app.mBMapManager, new MKSearchListener() { @Override public void onGetPoiDetailSearchResult(int type, int error) { } public void onGetAddrResult(MKAddrInfo res, int error) { if (error != 0) { String str = String.format("错误号:%d", error); Toast.makeText(GeoCoderActivity.this, str, Toast.LENGTH_LONG).show(); return; } // 地图移动到该点 mMapView.getController().animateTo(res.geoPt); if (res.type == MKAddrInfo.MK_GEOCODE) { // 地理编码:通过地址检索坐标点 String strInfo = String.format("纬度:%f 经度:%f", res.geoPt.getLatitudeE6() / 1e6, res.geoPt.getLongitudeE6() / 1e6); Toast.makeText(GeoCoderActivity.this, strInfo, Toa