基于百度SDK的地图软件开发心得.docx_第1页
基于百度SDK的地图软件开发心得.docx_第2页
基于百度SDK的地图软件开发心得.docx_第3页
基于百度SDK的地图软件开发心得.docx_第4页
基于百度SDK的地图软件开发心得.docx_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于百度地图SDK 的地图软件开发中的问题与注意事项(一) 最近我在研究基于百度地图SDK的安卓手机地图软件的开发。在百度地图SDK 官网上学习在地图图层上画自定义的几何图形是,我复制了demo中关于画矩形的代码,运行结果报错。经过一番研究发现示例demo中用Geometry的对象画一个矩形区域的时候,用的方法是setEnvelope,然而官网提供的sample中用的方法是setPolygon,修改为setPolygon后完美运行。 我自己写了一个简单的示例demo,我的Activity中有三个按钮,思路是点击第一个按钮后画线,点击第二个按钮后画多边形,点击第三个按钮后清除所有图层。我按照百度示例demo的代码编写完毕后运行,点击第一个按钮时可以画线,但当点击第二个画多边形的按钮后没有任何反应,当我再次点击第一个画线按钮后程序报错强退。这时我就纳闷了,因为百度提供的sample中的demo的代码和我差不多,然后我又看了一下官网的介绍。官网上关于GraphicsOverlay的介绍中提到,Geometry、Symbol、Graphic对象都不可复用,但是没有说GraphicsOverlay的对象,因此GraphicsOverlay的对象是可以复用的,简单分析下就能想到,GraphicsOverlay相当于一个图层,这个图层原则上是可以画很多图形的,因此我在两个按钮的单击事件中用的是同一个GraphicsOverlay对象。但是程序竟然报错了。于是我在两个按钮的单击事件中分别定义GraphicsOverlay对象,然后给各自的GraphicsOverlay对象setData()。再运行程序,愉快的解决了问题。 我再重新总结了我的代码和百度sample中提供的demo的区别,原来人家百度提供的demo的思路是单击一个按钮同时画多边形,线,矩形,因此提供一个GraphicsOverlay的对象足矣。而我的思路是画多边形和画线是在两个不同的事件中,不同的事件需要不同的GraphicsOverlay对象。如果只用一个GraphicsOverlay对象,程序就无法分辨我想要的是哪个GraphicsOverlay对象。 这只是一个小问题,因为我也是初学者,写下这篇文章权当给自己做个笔记,也提醒自己以后在学习的过程中不能盲目照搬。(附代码)package com.baidu.demo;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import com.baidu.mapapi.BMapManager;import com.baidu.mapapi.map.Geometry;import com.baidu.mapapi.map.Graphic;import com.baidu.mapapi.map.GraphicsOverlay;import com.baidu.mapapi.map.MapController;import com.baidu.mapapi.map.MapView;import com.baidu.mapapi.map.Symbol;import com.baidu.mapapi.map.Symbol.Color;import api.basestruct.GeoPoint;public class Mydrawdemo extends Activity BMapManager mBMapMan = null;MapView mMapView = null;Button drawline, myclear, drawrec = null;Overrideprotected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);mBMapMan = new BMapManager(getApplication();mBMapMan.init(null);setContentView(R.layout.draw);mMapView = (MapView) findViewById(R.id.bmapView);mMapView.setBuiltInZoomControls(true);MapController mMapController = mMapView.getController();GeoPoint point = new GeoPoint(int) (39.915 * 1E6),(int) (116.404 * 1E6);mMapController.setCenter(point);mMapController.setZoom(12);drawline = (Button) findViewById(R.id.button2);myclear = (Button) findViewById(R.id.button1);drawrec = (Button) findViewById(R.id.button3);OnClickListener mylistener = new OnClickListener() Overridepublic void onClick(View v) / TODO Auto-generated method stubswitch (v.getId() case R.id.button3:GraphicsOverlay graphicsOverlay3 = new GraphicsOverlay(mMapView); mMapView.getOverlays().add(graphicsOverlay3);graphicsOverlay3.setData(drawrec();mMapView.refresh();break;case R.id.button2:GraphicsOverlay graphicsOverlay2 = new GraphicsOverlay(mMapView); mMapView.getOverlays().add(graphicsOverlay2);graphicsOverlay2.setData(drawline();mMapView.refresh();break;case R.id.button1:mMapView.getOverlays().clear();mMapView.refresh();break;drawline.setOnClickListener(mylistener);myclear.setOnClickListener(mylistener);drawrec.setOnClickListener(mylistener);protected Graphic drawrec() double mLat = 39.93923;double mLon = 116.357428;int lat = (int) (mLat * 1E6);int lon = (int) (mLon * 1E6);GeoPoint pt1 = new GeoPoint(lat, lon);mLat = 39.91923;mLon = 116.327428;lat = (int) (mLat * 1E6);lon = (int) (mLon * 1E6);GeoPoint pt2 = new GeoPoint(lat, lon);mLat = 39.89923;mLon = 116.347428;lat = (int) (mLat * 1E6);lon = (int) (mLon * 1E6);GeoPoint pt3 = new GeoPoint(lat, lon);mLat = 39.89923;mLon = 116.367428;lat = (int) (mLat * 1E6);lon = (int) (mLon * 1E6);GeoPoint pt4 = new GeoPoint(lat, lon);mLat = 39.91923;mLon = 116.387428;lat = (int) (mLat * 1E6);lon = (int) (mLon * 1E6);GeoPoint pt5 = new GeoPoint(lat, lon);GeoPoint polygonPoints = new GeoPoint5;polygonPoints0 = pt1;polygonPoints1 = pt2;polygonPoints2 = pt3;polygonPoints3 = pt4;polygonPoints4 = pt5;Geometry polygonGeometry = new Geometry();polygonGeometry.setPolygon(polygonPoints);Symbol polygonSymbol = new Symbol();Symbol.Color polygonColor = polygonSymbol.new Color();polygonColor.red = 0;polygonColor.green = 0;polygonColor.blue = 255;polygonColor.alpha = 126;polygonSymbol.setSurface(polygonColor, 1, 5);/ 生成Graphic对象Graphic polygonGraphic = new Graphic(polygonGeometry, polygonSymbol);return polygonGraphic;protected Graphic drawline() double mLat = 39.97923;double mLon = 116.357428;int lat = (int) (mLat * 1E6);int lon = (int) (mLon * 1E6);GeoPoint pt1 = new GeoPoint(lat, lon);mLat = 39.94923;mLon = 116.397428;lat = (int) (mLat * 1E6);lon = (int) (mLon * 1E6);GeoPoint pt2 = new GeoPoint(lat, lon);mLat = 39.97923;mLon = 116.437428;lat = (int) (mLat * 1E6);lon = (int) (mLon * 1E6);GeoPoint pt3 = new GeoPoint(lat, lon);/ 构建线Geometry lineGeometry = new Geometry();/ 设定折线点坐标GeoPoint linePoints = new GeoPoint3;linePoints0 = pt1;linePoints1 = pt2;linePoints2 = pt3;lineGeometry.setPolyLine(linePoints);/ 设定样式Symbol lineSymbol = new Symbol();Symbol.Color lineColor = lineSymbol.new Color();lineColor.red = 255;lineColor.green = 0;lineColor.blue = 0;lineColor.alpha = 255;lineSymbol.setLineSymbol(lineColor, 10);/ 生成Graphic对象Graphic lineGraphic = new Graphic(lineGeometry, lineSymbol);return lineGraphic;Overrideprotected void onPause() mMapView.onPause();super.onPause();Overrideprotected void onResume() mMapView.onResume();super.onResume();Overrideprotected void onDestroy() mMapView.destroy();super.onDestroy();Overrideprotected void onSaveI

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论