700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 百度地图之自定义绘制功能

百度地图之自定义绘制功能

时间:2019-03-13 17:11:46

相关推荐

百度地图之自定义绘制功能

随时随地技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)

我们可以在地图上绘制各种自定义的图形,包括点、折线、圆、多边形等等,尤其绘制点和折线非常实用,点可以用来标识所处的位置,折线可以用来描述走过的轨迹,结合前面GPS定位功能可以做出一些非常有意思的应用,下面应用百度Demo实现绘制的基本功能,代码如下:

Activity:

package com.home;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.map.Geometry;import com.baidu.mapapi.map.Graphic;import com.baidu.mapapi.map.GraphicsOverlay;import com.baidu.mapapi.map.MapView;import com.baidu.mapapi.map.Symbol;import com.baidu.mapapi.map.TextItem;import com.baidu.mapapi.map.TextOverlay;import com.api.basestruct.GeoPoint;/*** 此demo用来展示如何在地图上用GraphicsOverlay添加点、线、多边形、圆 同时展示如何在地图上用TextOverlay添加文字* */public class GeometryActivity extends Activity implements OnClickListener {// 地图相关private MapView mMapView = null;private Button resetBtn = null;private Button clearBtn = null;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_geometry);CharSequence titleLable = "自定义绘制功能";setTitle(titleLable);// 初始化地图mMapView = (MapView) findViewById(R.id.bmapView);mMapView.getController().setZoom(12.5f);mMapView.getController().enableClick(true);// UI初始化clearBtn = (Button) findViewById(R.id.btn_clear);resetBtn = (Button) findViewById(R.id.btn_reset);clearBtn.setOnClickListener(this);resetBtn.setOnClickListener(this);resetBtn.setEnabled(false);// 界面加载时添加绘制图层addCustomElementsDemo();}@Overridepublic void onClick(View v) {if (v == clearBtn) {clearClick();clearBtn.setEnabled(false);resetBtn.setEnabled(true);}if (v == resetBtn) {resetClick();clearBtn.setEnabled(true);resetBtn.setEnabled(false);}}/*** 清除所有图层*/public void clearClick() {mMapView.getOverlays().clear();}/*** 添加绘制元素*/public void resetClick() {addCustomElementsDemo();}/*** 添加点、线、多边形、圆、文字*/public void addCustomElementsDemo() {GraphicsOverlay graphicsOverlay = new GraphicsOverlay(mMapView);mMapView.getOverlays().add(graphicsOverlay);// 添加点graphicsOverlay.setData(drawPoint());// 添加折线graphicsOverlay.setData(drawLine());// 添加多边形graphicsOverlay.setData(drawPolygon());// 添加圆graphicsOverlay.setData(drawCircle());// 绘制文字TextOverlay textOverlay = new TextOverlay(mMapView);mMapView.getOverlays().add(textOverlay);textOverlay.addText(drawText());// 执行地图刷新使生效mMapView.refresh();}/*** 绘制折线,该折线状态随地图状态变化* * @return 折线对象*/public 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 GeoPoint[3];linePoints[0] = pt1;linePoints[1] = pt2;linePoints[2] = 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;}/*** 绘制多边形,该多边形随地图状态变化* * @return 多边形对象*/public Graphic drawPolygon() {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);// 构建多边形Geometry polygonGeometry = new Geometry();// 设置多边形坐标GeoPoint[] polygonPoints = new GeoPoint[5];polygonPoints[0] = pt1;polygonPoints[1] = pt2;polygonPoints[2] = pt3;polygonPoints[3] = pt4;polygonPoints[4] = pt5;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;}/*** 绘制单点,该点状态不随地图状态变化而变化* * @return 点对象*/public Graphic drawPoint() {double mLat = 39.98923;double mLon = 116.397428;int lat = (int) (mLat * 1E6);int lon = (int) (mLon * 1E6);GeoPoint pt1 = new GeoPoint(lat, lon);// 构建点Geometry pointGeometry = new Geometry();// 设置坐标pointGeometry.setPoint(pt1, 10);// 设定样式Symbol pointSymbol = new Symbol();Symbol.Color pointColor = pointSymbol.new Color();pointColor.red = 0;pointColor.green = 126;pointColor.blue = 255;pointColor.alpha = 255;pointSymbol.setPointSymbol(pointColor);// 生成Graphic对象Graphic pointGraphic = new Graphic(pointGeometry, pointSymbol);return pointGraphic;}/*** 绘制圆,该圆随地图状态变化* * @return 圆对象*/public Graphic drawCircle() {double mLat = 39.90923;double mLon = 116.447428;int lat = (int) (mLat * 1E6);int lon = (int) (mLon * 1E6);GeoPoint pt1 = new GeoPoint(lat, lon);// 构建圆Geometry circleGeometry = new Geometry();// 设置圆中心点坐标和半径circleGeometry.setCircle(pt1, 2500);// 设置样式Symbol circleSymbol = new Symbol();Symbol.Color circleColor = circleSymbol.new Color();circleColor.red = 0;circleColor.green = 255;circleColor.blue = 0;circleColor.alpha = 126;circleSymbol.setSurface(circleColor, 1, 3);// 生成Graphic对象Graphic circleGraphic = new Graphic(circleGeometry, circleSymbol);return circleGraphic;}/*** 绘制文字,该文字随地图变化有透视效果* * @return 文字对象*/public TextItem drawText() {double mLat = 39.86923;double mLon = 116.397428;int lat = (int) (mLat * 1E6);int lon = (int) (mLon * 1E6);// 构建文字TextItem item = new TextItem();// 设置文字位置item.pt = new GeoPoint(lat, lon);// 设置文件内容item.text = "百度地图SDK";// 设文字大小item.fontSize = 40;Symbol symbol = new Symbol();Symbol.Color bgColor = symbol.new Color();// 设置文字背景色bgColor.red = 0;bgColor.blue = 0;bgColor.green = 255;bgColor.alpha = 50;Symbol.Color fontColor = symbol.new Color();// 设置文字着色fontColor.alpha = 255;fontColor.red = 0;fontColor.green = 0;fontColor.blue = 255;// 设置对齐方式item.align = TextItem.ALIGN_CENTER;// 设置文字颜色和背景颜色item.fontColor = fontColor;item.bgColor = bgColor;return item;}@Overrideprotected void onPause() {mMapView.onPause();super.onPause();}@Overrideprotected void onResume() {mMapView.onResume();super.onResume();}@Overrideprotected void onDestroy() {mMapView.destroy();super.onDestroy();}@Overrideprotected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);mMapView.onSaveInstanceState(outState);}@Overrideprotected void onRestoreInstanceState(Bundle savedInstanceState) {super.onRestoreInstanceState(savedInstanceState);mMapView.onRestoreInstanceState(savedInstanceState);}}

布局XMl:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal" ><Buttonandroid:id="@+id/btn_clear"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_margin="10dp"android:layout_weight="1.0"android:background="@drawable/button_style"android:text="清除(clear)" /><Buttonandroid:id="@+id/btn_reset"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_margin="10dp"android:layout_weight="1.0"android:background="@drawable/button_style"android:text="重置(reset)" /></LinearLayout><com.baidu.mapapi.map.MapViewandroid:id="@+id/bmapView"android:layout_width="match_parent"android:layout_height="match_parent"android:clickable="true" /></LinearLayout>

Manifest配置跟前面一样。

附上图片效果:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。