- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于百度地图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;
@Override
protected 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 mMapControll
文档评论(0)