遇到一需求:在高德地图上绘制多边形区域
还能咋样,翻一翻 高德地图sdk参考手册,发现了这样一个方法:【addPolygon(PolygonOptions options)】
public final Polygon addPolygon(PolygonOptions options)
在地图上添加一个多边形(polygon)对象。
对主要类进行了解:【PolygonOptions】
com.amap.api.maps.model
类 PolygonOptions
java.lang.Object
com.amap.api.maps.model.PolygonOptions
所有已实现的接口:
android.os.Parcelable
public final class PolygonOptions
extends java.lang.Object
implements android.os.Parcelable
多边形覆盖物选项类
// 模拟数据
private void initLatLngData() {
mLatLnglist = new ArrayList<>();
mLatLnglist.add(new LatLng(23.103171, 113.232999));
mLatLnglist.add(new LatLng(23.095631, 113.224331));
mLatLnglist.add(new LatLng(23.091131, 113.240166));
mLatLnglist.add(new LatLng(23.099539, 113.241797));
}
// 绘制区域
private void addArea(int strokeColor, int fillColor, List<LatLng> latLnglist) {
// 定义多边形的属性信息
PolygonOptions polygonOptions = new PolygonOptions();
// 添加多个多边形边框的顶点
for (LatLng latLng : latLnglist) {
polygonOptions.add(latLng);
}
// 设置多边形的边框颜色,32位 ARGB格式,默认为黑色
polygonOptions.strokeColor(strokeColor);
// 设置多边形的边框宽度,单位:像素
polygonOptions.strokeWidth(10);
// 设置多边形的填充颜色,32位ARGB格式
polygonOptions.fillColor(fillColor); // 注意要加前两位的透明度
// 在地图上添加一个多边形(polygon)对象
mAmap.addPolygon(polygonOptions);
}
期间遇到一个问题:默认定位为紫禁城,加上如果定位到区域的某一地点,又不能完全显示整块区域,所以找到了这么一个方法【addMarkers(java.util.ArrayList options, boolean moveToCenter】
public final java.util.ArrayList<Marker> addMarkers
(java.util.ArrayList<MarkerOptions> options, boolean moveToCenter)
在地图上添一组图片标记(marker)对象,
并设置是否改变地图状态以至于所有的marker对象都在当前地图可视区域范围内显示。
参数:
options - 多个markerOptions对象,它们分别定义了对应marker的属性信息。
moveToCenter - 是否改变地图状态,默认为false。
对主要类进行了解:【MarkerOptions】
com.amap.api.maps.model
类 MarkerOptions
java.lang.Object
com.amap.api.maps.model.MarkerOptions
所有已实现的接口:
android.os.Parcelable
private void addMarker(boolean visible, List<LatLng> latLnglist) {
ArrayList<MarkerOptions> options = new ArrayList<>();
for (LatLng latLng : latLnglist) {
// 在地图上添一组图片标记(marker)对象,并设置是否改变地图状态以至于所有的marker对象都在当前地图可视区域范围内显示
MarkerOptions markerOptions = new MarkerOptions();
// 设置Marker覆盖物的位置坐标。Marker经纬度坐标不能为Null,坐标无默认值
markerOptions.position(latLng);
// 设置Marker覆盖物是否可见
markerOptions.visible(visible);
// 设置Marker覆盖物是否可拖拽
markerOptions.draggable(visible);
options.add(markerOptions);
}
// 在地图上添一组图片标记(marker)对象,并设置是否改变地图状态以至于所有的marker对象都在当前地图可视区域范围内显示
mAmap.addMarkers(options, true);
}
最终代码:
/**
* @author 小侨
* @time 2018/1/31 16:17
* @desc 区域绘制图
*/
public class RegionalDrawingActivity extends AppCompatActivity {
private MapView mMapView;
private AMap mAmap;
private List<LatLng> mLatLnglist1;
private List<LatLng> mLatLnglist2;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_regionaldrawing);
//获取地图控件引用
mMapView = (MapView) findViewById(R.id.regional_drawing_map);
//在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),创建地图
mMapView.onCreate(savedInstanceState);// 此方法须覆写,虚拟机需要在很多情况下保存地图绘制的当前状态。
//初始化地图控制器对象
if (mAmap == null) {
mAmap = mMapView.getMap();
}
initLatLngData1();
initLatLngData2();
addArea(Color.parseColor("#050505"), Color.parseColor("#55FBEFDD"), mLatLnglist1);
addArea(Color.parseColor("#00ff00"), Color.parseColor("#5500EFDD"), mLatLnglist2);
addMarker(false,mLatLnglist1);
}
private void initLatLngData1() {
mLatLnglist1 = new ArrayList<>();
mLatLnglist1.add(new LatLng(23.103171, 113.232999));
mLatLnglist1.add(new LatLng(23.095631, 113.224331));
mLatLnglist1.add(new LatLng(23.091131, 113.240166));
mLatLnglist1.add(new LatLng(23.099539, 113.241797));
}
private void initLatLngData2() {
mLatLnglist2 = new ArrayList<>();
mLatLnglist2.add(new LatLng(23.104197, 113.223386));
mLatLnglist2.add(new LatLng(23.091526, 113.220854));
mLatLnglist2.add(new LatLng(23.094013, 113.251195));
mLatLnglist2.add(new LatLng(23.105066, 113.247762));
}
private void addArea(int strokeColor, int fillColor, List<LatLng> latLnglist) {
// 定义多边形的属性信息
PolygonOptions polygonOptions = new PolygonOptions();
// 添加多个多边形边框的顶点
for (LatLng latLng : latLnglist) {
polygonOptions.add(latLng);
}
// 设置多边形的边框颜色,32位 ARGB格式,默认为黑色
polygonOptions.strokeColor(strokeColor);
// 设置多边形的边框宽度,单位:像素
polygonOptions.strokeWidth(10);
// 设置多边形的填充颜色,32位ARGB格式
polygonOptions.fillColor(fillColor); // 注意要加前两位的透明度
// 在地图上添加一个多边形(polygon)对象
mAmap.addPolygon(polygonOptions);
}
private void addMarker(boolean visible, List<LatLng> latLnglist) {
ArrayList<MarkerOptions> options = new ArrayList<>();
for (LatLng latLng : latLnglist) {
// 在地图上添一组图片标记(marker)对象,并设置是否改变地图状态以至于所有的marker对象都在当前地图可视区域范围内显示
MarkerOptions markerOptions = new MarkerOptions();
// 设置Marker覆盖物的位置坐标。Marker经纬度坐标不能为Null,坐标无默认值
markerOptions.position(latLng);
// 设置Marker覆盖物是否可见
markerOptions.visible(visible);
// 设置Marker覆盖物是否可拖拽
markerOptions.draggable(visible);
options.add(markerOptions);
}
// 在地图上添一组图片标记(marker)对象,并设置是否改变地图状态以至于所有的marker对象都在当前地图可视区域范围内显示
mAmap.addMarkers(options, true);
}
@Override
protected void onDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图
mMapView.onDestroy();
}
@Override
protected void onResume() {
super.onResume();
//在activity执行onResume时执行mMapView.onResume (),重新绘制加载地图
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
//在activity执行onPause时执行mMapView.onPause (),暂停地图的绘制
mMapView.onPause();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
//在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),保存地图当前的状态
mMapView.onSaveInstanceState(outState);
}
}
概览 http://a.amap.com/lbs/static/unzip/Android_Map_Doc/index.html
ZhangZeQiao/DemoApp · GitHub