006 走上移动开发之安卓项目实战(百度地图:如何进行经纬度转换)
还请大家注意在文章进行转载的时候麻烦注明出处
《http://blog.csdn.net/shuaiyinoo》谢谢
今天是百度地图的最后一个博客的更新了,看了上面几篇博客不知道大家有没有感受或者有没有什么体会,基本上百度地图提供的查询的方法基本上都是异步调用的,通过异步调用显示在 MySearchListener implements MKSearchListener 实现了这个接口的各个方法当中
当然这次的经纬度查询和转换同样是在这里面有所体会,在进行经纬度转换的时候,只需要调用百度地图的下面两个方法,就可以成功的知道如何进行经纬度的转换了
总得来说百度地图做起来比Google地图的API做起来简单,原因可能就是应为百度地图的API是中文的,中国人开发的更加适合中国人的使用习惯等等,加油,成功是所于大家的,下面我就把这一几篇博客的核心代码贴出来,供大家参考参考
然后附上这几个博客的总体的项目,请大家笑纳......有很多不足的地方还请大家多多包含......
--->>>飞机直达源代码下载地
package com.shuaiyin.baidu;import java.util.ArrayList;import java.util.List;import android.content.Context; import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.Point;import android.graphics.drawable.Drawable;import android.os.Bundle;import android.widget.Toast;import com.baidu.mapapi.BMapManager;import com.baidu.mapapi.GeoPoint;import com.baidu.mapapi.ItemizedOverlay;import com.baidu.mapapi.MKAddrInfo;import com.baidu.mapapi.MKBusLineResult;import com.baidu.mapapi.MKDrivingRouteResult;import com.baidu.mapapi.MKGeneralListener;import com.baidu.mapapi.MKPlanNode;import com.baidu.mapapi.MKPoiInfo;import com.baidu.mapapi.MKPoiResult;import com.baidu.mapapi.MKSearch;import com.baidu.mapapi.MKSearchListener;import com.baidu.mapapi.MKSuggestionResult;import com.baidu.mapapi.MKTransitRouteResult;import com.baidu.mapapi.MKWalkingRouteResult;import com.baidu.mapapi.MapActivity;import com.baidu.mapapi.MapController;import com.baidu.mapapi.MapView;import com.baidu.mapapi.Overlay;import com.baidu.mapapi.OverlayItem;import com.baidu.mapapi.RouteOverlay;import com.baidu.mapapi.TransitOverlay;/** * 让百度地图继承MapActivity * @author shuaiyin * */public class BaiDu_SuYiActivity extends MapActivity {//添加百度地图的相关控件private MapView mapView;//加载百度地图的引起private BMapManager bMapManager;//定义百度地图的KEYprivate String key = "3DA88729DD94B0429A4BEE30797E04D91B0211C4";//在百度地图上添加相应的控件private MapController mapController;//定义搜索对象private MKSearch mkSearch ;//定义一个起点private MKPlanNode start;//定义一个终点private MKPlanNode end; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //首先实例化mapView mapView = (MapView) this.findViewById(R.id.bmapView); bMapManager = new BMapManager(BaiDu_SuYiActivity.this); //调用百度地图加载KEY bMapManager.init(key, new MKGeneralListener() {@Overridepublic void onGetPermissionState(int arg0) {if(arg0 == 300){Toast.makeText(BaiDu_SuYiActivity.this, "您输入的KEY有问题,请核实", 2).show();}}@Overridepublic void onGetNetworkState(int arg0) {}}); this.initMapActivity(bMapManager); //表示可以设置缩放功能 mapView.setBuiltInZoomControls(true); mapController = mapView.getController(); //V1.00 //在百度地图上标注一个中心点 //GeoPoint geoPoint = new GeoPoint((int)(39.915*1E6),(int)(116.404*1E6)); //给地图对象设置一个中心点 //mapController.setCenter(geoPoint); //设置地图的缩放级别 //mapController.setZoom(12); //显示交通地图 //mapView.setTraffic(true); //显示卫星地图 //mapView.setSatellite(true); //v2.00 //给地图对象设置标注物 //mapView.getOverlays().add(new MyOverlay()); //mapController.setZoom(12); //v3.00 //给地图设置多个标注物 //显示标注的图标 //Drawable drawable = getResources().getDrawable(R.drawable.iconmarka); //mapView.getOverlays().add(new MyOverLayItem(drawable)); //v4.00 //mapController.setZoom(14); //在地图范围内实现对物体的搜索 //mkSearch = new MKSearch(); //mkSearch.init(bMapManager, new MySearchListener()); //这个方法表示根据中心点搜索周边的内容 //mkSearch.poiSearchNearBy("厕所", new GeoPoint((int)(39.915*1E6),(int)(116.404*1E6)), 5000); //v5.00驾车路线的搜索 //mapController.setZoom(14); //在地图范围内实现对物体的搜索 //mkSearch = new MKSearch(); //mkSearch.init(bMapManager, new MySearchListener()); //给定第一个坐标 //start = new MKPlanNode(); //start.pt = new GeoPoint((int)(39.915*1E6),(int)(116.404*1E6)); //给定第二个坐标 //end = new MKPlanNode(); //end.pt = new GeoPoint(40057031,116307852); //路线的优先顺序 //mkSearch.setDrivingPolicy(MKSearch.EBUS_TIME_FIRST); //调用路线的回调方法 //mkSearch.drivingSearch(null, start, null, end); //6.0行走路线的搜索 //mapController.setZoom(12); //在地图范围内实现对物体的搜索 //mkSearch = new MKSearch(); //mkSearch.init(bMapManager, new MySearchListener()); //给定第一个坐标 //start = new MKPlanNode(); //start.pt = new GeoPoint((int)(39.915*1E6),(int)(116.404*1E6)); //给定第二个坐标 //end = new MKPlanNode(); //end.pt = new GeoPoint(40057031,116307852); //设置回调的行走路线的方法 //mkSearch.walkingSearch(null, start, null, end); //7.0公交换乘路线的搜索 //mapController.setZoom(12); //在地图范围内实现对物体的搜索 //mkSearch = new MKSearch(); //mkSearch.init(bMapManager, new MySearchListener()); //给定第一个坐标 //start = new MKPlanNode(); //start.pt = new GeoPoint((int)(39.915*1E6),(int)(116.404*1E6)); //给定第二个坐标 //end = new MKPlanNode(); //end.pt = new GeoPoint(40057031,116307852); //设置回调的行走路线的方法 //mkSearch.transitSearch("北京", start, end); //8.0公交详细路线的搜索 //mapController.setZoom(12); //在地图范围内实现对物体的搜索 //mkSearch = new MKSearch(); //mkSearch.init(bMapManager, new MySearchListener()); //设置回调的行走路线的方法 //mkSearch.poiSearchInCity("北京", "300"); //v9.00驾车路线多条搜索 mapController.setZoom(14); //在地图范围内实现对物体的搜索 mkSearch = new MKSearch(); mkSearch.init(bMapManager, new MySearchListener()); //给定第一个坐标 start = new MKPlanNode(); start.pt = new GeoPoint((int)(39.915*1E6),(int)(116.404*1E6)); //给定第二个坐标 end = new MKPlanNode(); end.pt = new GeoPoint(40057031,116307852); //调用路线的回调方法 mkSearch.transitSearch("北京", start, end); } //搜索对象的实现 public class MySearchListener implements MKSearchListener{ //根据名称获取经纬度@Overridepublic void onGetAddrResult(MKAddrInfo res, int error) {if(error != 0){Toast.makeText(BaiDu_SuYiActivity.this, "对不起,找不到您的结果", 2).show();return;}mapView.getController().animateTo(res.geoPt);String msg = String.valueOf(res.geoPt.getLatitudeE6()/1E6)+String.valueOf(res.geoPt.getLongitudeE6()/1E6);Drawable drawable = getResources().getDrawable(R.drawable.iconmarka);mapView.getOverlays().clear();}@Overridepublic void onGetBusDetailResult(MKBusLineResult result, int type) {if(result == null||type != 0){Toast.makeText(BaiDu_SuYiActivity.this, "对不起,找不到您的结果", 2).show();return;}RouteOverlay routeOverlay = new RouteOverlay(BaiDu_SuYiActivity.this, mapView);routeOverlay.setData(result.getBusRoute());//清空所有的公交信息mapView.getOverlays().clear();mapView.getOverlays().add(routeOverlay);mapView.invalidate();mapView.getController().animateTo(result.getBusRoute().getStart());}@Overridepublic void onGetDrivingRouteResult(MKDrivingRouteResult result, int type) {//对调用的搜索方法进行回调响应if(result == null){return;}RouteOverlay routeOverlay = new RouteOverlay(BaiDu_SuYiActivity.this, mapView);//里面的参赛之所以填0是应为我们只需要返回第一条线路routeOverlay.setData(result.getPlan(0).getRoute(0));mapView.getOverlays().add(routeOverlay);mapView.invalidate();}@Overridepublic void onGetPoiDetailSearchResult(int result, int type) {}@Overridepublic void onGetPoiResult(MKPoiResult result, int type, int iError) {//对调用的搜索方法进行回调响应//v3.00//if(result == null){//return;//}//PoiOverlay poiOverlay = new PoiOverlay(BaiDu_SuYiActivity.this, mapView);//poiOverlay.setData(result.getAllPoi());//mapView.getOverlays().add(poiOverlay);//mapView.invalidate();//v8.00if(result == null||iError != 0){Toast.makeText(BaiDu_SuYiActivity.this, "对不起,找不到您的结果", 2).show();return;}//定义一个公交线路图描述类MKPoiInfo mkPoiInfo = null;//获得公交线路图的总的站点int totalPoiNum = result.getNumPois();for(int i = 0;i<totalPoiNum;i++){mkPoiInfo = result.getPoi(i);if(mkPoiInfo.ePoiType == 2){break;//如果说返回的时候公交的线路图就返回}}mkSearch.busLineSearch("北京", mkPoiInfo.uid);}@Overridepublic void onGetRGCShareUrlResult(String arg0, int arg1) {}@Overridepublic void onGetSuggestionResult(MKSuggestionResult arg0, int arg1) {}@Overridepublic void onGetTransitRouteResult(MKTransitRouteResult result, int type) {//公交换乘的回调方法//v7.00//if(result == null){//return;//}//TransitOverlay transitOverlay = new TransitOverlay(BaiDu_SuYiActivity.this, mapView);//transitOverlay.setData(result.getPlan(0));//mapView.getOverlays().add(transitOverlay);//刷新地图//mapView.invalidate();//v9.00if(result == null){return;}//获得所有的驾车线路图int planNum = result.getNumPlan();for(int i = 0 ;i<planNum;i++){TransitOverlay transitOverlay = new TransitOverlay(BaiDu_SuYiActivity.this, mapView);transitOverlay.setData(result.getPlan(i));mapView.getOverlays().add(transitOverlay);}mapView.invalidate();mapView.getController().animateTo(result.getStart().pt);}@Overridepublic void onGetWalkingRouteResult(MKWalkingRouteResult result, int type) {//对调用的搜索方法进行回调响应if(result == null){return;}RouteOverlay routeOverlay = new RouteOverlay(BaiDu_SuYiActivity.this, mapView);routeOverlay.setData(result.getPlan(0).getRoute(0));mapView.getOverlays().add(routeOverlay);//刷新地图mapView.invalidate();} } //标注一个遮盖物 public class MyOverlay extends Overlay{ //声明一个地点 private GeoPoint geoPoint = new GeoPoint((int)(39.915*1E6),(int)(116.404*1E6)); //声明一个画笔工具 private Paint paint = new Paint(); @Override public void draw(Canvas arg0, MapView arg1, boolean arg2) { super.draw(arg0, arg1, arg2); Point point = mapView.getProjection().toPixels(geoPoint, null); arg0.drawText("这里是天安门", point.x,point.y,paint); } } //标注多个遮盖物 public class MyOverLayItem extends ItemizedOverlay<OverlayItem>{ private List<OverlayItem> overlayItem = new ArrayList<OverlayItem>(); //定义一组坐标 private double mLat1 = 39.90923;//经 private double mLot1 = 116.397428;//纬 private double mLat2 = 39.92923;//经 private double mLot2 = 116.377428;//纬 private double mLat3 = 39.94923;//经 private double mLot3 = 116.357428;//纬 private double mLat4 = 39.96923;//经 private double mLot4 = 116.337428;//纬 //用于在地图上标识坐标,用一个图片标注public MyOverLayItem(Drawable drawable) {super(drawable);GeoPoint geoPoint1 = new GeoPoint((int)(mLat1*1E6),(int)(mLot1*1E6));GeoPoint geoPoint2 = new GeoPoint((int)(mLat2*1E6),(int)(mLot2*1E6));GeoPoint geoPoint3 = new GeoPoint((int)(mLat3*1E6),(int)(mLot3*1E6));GeoPoint geoPoint4 = new GeoPoint((int)(mLat4*1E6),(int)(mLot4*1E6));overlayItem.add(new OverlayItem(geoPoint1, "A", "这是第一个"));overlayItem.add(new OverlayItem(geoPoint2, "B", "这是第二个"));overlayItem.add(new OverlayItem(geoPoint3, "C", "这是第三个"));overlayItem.add(new OverlayItem(geoPoint4, "D", "这是第四个"));//刷新地图populate();}//返回指定的List集合中每一个坐标@Overrideprotected OverlayItem createItem(int arg0) {return overlayItem.get(arg0);}@Overridepublic int size() {return overlayItem.size();} //当标注物被点击的时候@Overridepublic boolean onTap(int i) {Toast.makeText(BaiDu_SuYiActivity.this, overlayItem.get(i).getSnippet(), 2).show();return true;} } @Override protected void onDestroy() { super.onDestroy(); if(bMapManager != null){ bMapManager.destroy(); bMapManager = null; } } @Override protected void onResume() { super.onResume(); if(bMapManager != null){ bMapManager.start(); } } @Override protected void onPause() { super.onPause(); if(bMapManager != null){ bMapManager.stop(); } } @Overrideprotected boolean isRouteDisplayed() {return false;}}
- 1楼soonqian昨天 22:29
- 下次TX也通告下!
- Re: shuaiyinoo7小时前
- 回复soonqiann这是什么高级语言呀,我都听不懂