use of com.amap.api.maps.model.Polyline in project uav_mobile_app by jiushuokj.
the class MainActivity method startRecordingTrace.
private void startRecordingTrace() {
if (makeTraceDisposable != null && !makeTraceDisposable.isDisposed()) {
return;
}
Log.i(TAG, "startRecordingTrace: " + "开始记录航线");
makeTraceDisposable = Observable.interval(500, TimeUnit.MILLISECONDS).observeOn(AndroidSchedulers.mainThread()).subscribe(new Consumer<Long>() {
@Override
public void accept(Long aLong) throws Exception {
if (!DoubleComparer.considerEqual(droneLocationLatForTrace, mFlightController.getState().getAircraftLocation().getLatitude(), DELTA) || !DoubleComparer.considerEqual(droneLocationLngForTrace, mFlightController.getState().getAircraftLocation().getLongitude(), DELTA)) {
// 坐标转换
// final LatLng oldLatlng = new LatLng(droneLocationLatForTrace, droneLocationLngForTrace);
final LatLng oldLatlng = CoordinateTransUtils.getGDLatLng(droneLocationLatForTrace, droneLocationLngForTrace);
droneLocationLatForTrace = mFlightController.getState().getAircraftLocation().getLatitude();
droneLocationLngForTrace = mFlightController.getState().getAircraftLocation().getLongitude();
// 坐标转换
// final LatLng newLatlng = new LatLng(droneLocationLatForTrace, droneLocationLngForTrace);
final LatLng newLatlng = CoordinateTransUtils.getGDLatLng(droneLocationLatForTrace, droneLocationLngForTrace);
Polyline polyline = aMap.addPolyline(new PolylineOptions().addAll(Arrays.asList(oldLatlng, newLatlng)).width(4).color(Color.argb(255, 255, 1, 1)));
mTracePolylines.put(mTracePolylines.size(), polyline);
Log.d(TAG, "startRecordingTrace: " + mTracePolylines.size() + "次轨迹");
}
}
});
}
use of com.amap.api.maps.model.Polyline in project uav_mobile_app by jiushuokj.
the class MainActivity method markWaypoint.
private void markWaypoint(final LatLng point) {
// Create MarkerOptions object
MarkerOptions markerOptions = new MarkerOptions();
markerOptions.position(point);
markerOptions.draggable(true);
markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE));
Marker marker = aMap.addMarker(markerOptions);
// 画线
List<LatLng> latLngs = new ArrayList<LatLng>();
if (mMarkers.size() == 0) {
LatLng homeLatLng = getHomeLatLng();
Log.i(TAG, "home坐标:" + homeLatLng.latitude + "---" + homeLatLng.longitude);
latLngs.add(homeLatLng);
} else {
latLngs.add(mMarkers.get(mMarkers.size() - 1).getPosition());
}
latLngs.add(marker.getPosition());
for (LatLng latLng : latLngs) {
Log.i(TAG, "画线坐标: " + latLng);
}
Polyline polyline = aMap.addPolyline((new PolylineOptions()).add(latLngs.get(0), latLngs.get(1)).width(5).setDottedLine(// 虚线
true).color(Color.BLUE));
mMarkers.put(mMarkers.size(), marker);
mPolylines.put(mPolylines.size(), polyline);
setSelectedMarker(marker);
}
use of com.amap.api.maps.model.Polyline in project uav_mobile_app by jiushuokj.
the class MainActivity method initMap.
private void initMap(Bundle savedInstanceState) {
// 获取地图控件引用
aMapView = (MapView) findViewById(R.id.main_left_bottom_map);
// 在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),创建地图
aMapView.onCreate(savedInstanceState);
aMapView.setOnClickListener(this);
if (aMap == null) {
aMap = aMapView.getMap();
// add the listener for click for amap object
aMap.setOnMapClickListener(this);
}
// 初始化定位蓝点样式类myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)如果不设置myLocationType,默认也会执行此种模式。
MyLocationStyle myLocationStyle = new MyLocationStyle();
myLocationStyle.strokeWidth(0);
myLocationStyle.showMyLocation(true);
// 连续定位、蓝点不会移动到地图中心点,并且蓝点会跟随设备移动。
myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_FOLLOW_NO_CENTER);
// 设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。
myLocationStyle.interval(2000);
// myLocationStyle.myLocationIcon(BitmapDescriptorFactory.fromResource(R.drawable.pad));
// 设置定位蓝点的Style
aMap.setMyLocationStyle(myLocationStyle);
// 设置默认定位按钮是否显示,非必需设置。
aMap.getUiSettings().setMyLocationButtonEnabled(true);
// 设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。
aMap.setMyLocationEnabled(true);
aMap.moveCamera(CameraUpdateFactory.zoomTo(18));
// 默认使用卫星图
aMap.setMapType(AMap.MAP_TYPE_SATELLITE);
// 绑定 Marker 被点击事件
aMap.setOnMarkerClickListener(new AMap.OnMarkerClickListener() {
// marker 对象被点击时回调的接口
// 返回 true 则表示接口已响应事件,否则返回false
@Override
public boolean onMarkerClick(Marker marker) {
if (getKey(mMarkers, marker) >= 0) {
setResultToToast("第" + getKey(mMarkers, marker) + "坐标" + marker.getPosition());
setSelectedMarker(marker);
return true;
}
return false;
}
});
// 绑定marker拖拽事件
aMap.setOnMarkerDragListener(new AMap.OnMarkerDragListener() {
@Override
public void onMarkerDragStart(Marker arg0) {
setResultToToast("开始拖动:" + "第" + getKey(mMarkers, arg0) + "坐标");
}
@Override
public void onMarkerDragEnd(Marker arg0) {
setResultToToast("结束拖动:" + "第" + getKey(mMarkers, arg0) + "坐标");
Integer index = getKey(mMarkers, arg0);
if (index < 0) {
return;
}
Log.i(TAG, "onMarkerDrag: ---" + index + "---" + arg0.getPosition());
// 以该标记作为终点的线
Polyline oldPolyline1 = mPolylines.get(index);
Polyline newPolyline1 = aMap.addPolyline((new PolylineOptions()).add(oldPolyline1.getPoints().get(0), arg0.getPosition()).width(5).setDottedLine(// 虚线
true).color(Color.BLUE));
mPolylines.put(index, newPolyline1);
oldPolyline1.remove();
// 以该标记作为起点的线
Polyline oldPolyline2 = mPolylines.get(index + 1);
Polyline newPolyline2 = aMap.addPolyline((new PolylineOptions()).add(arg0.getPosition(), oldPolyline2.getPoints().get(1)).width(5).setDottedLine(// 虚线
true).color(Color.BLUE));
mPolylines.put(index + 1, newPolyline2);
oldPolyline2.remove();
}
@Override
public void onMarkerDrag(Marker arg0) {
}
});
// 显示指南针
aMap.getUiSettings().setCompassEnabled(true);
// 显示比例尺
aMap.getUiSettings().setScaleControlsEnabled(true);
setHomeMarker();
updateDroneLocation();
cameraUpdate();
}
use of com.amap.api.maps.model.Polyline in project uav_mobile_app by jiushuokj.
the class MainActivity method deleteSelectedMarker.
/**
* 删除地图上当前选定的标记
* 1.mMarkers中删除该点,地图上删除点,并且在mMarkers中将其后面的点往前移动
* 2.mPolyLines中删除该点有关的两条线,地图也删除,并且将其前后两点相连
* 3.选中改点的下一点为当前标记
*/
private void deleteSelectedMarker() {
if (selectedMarker == null) {
setResultToToast("当前没有选中标记");
return;
}
if (mMarkers.size() == 0) {
setResultToToast("当前地图上没有标记");
return;
}
final Integer selectedIndex = getKey(mMarkers, selectedMarker);
if (selectedIndex < 0) {
setResultToToast("选中的标记不在mMarker中");
return;
}
selectedMarker.remove();
for (int i = selectedIndex; i < mMarkers.size() - 1; i++) {
mMarkers.put(i, mMarkers.get(i + 1));
}
mMarkers.remove(mMarkers.size() - 1);
if (mPolylines.size() == 0) {
setResultToToast("当前地图上没有连线");
} else if (mPolylines.size() == 1) {
// 只有一个点
for (Integer integer : mPolylines.keySet()) {
mPolylines.get(integer).remove();
mPolylines.remove(integer);
}
} else if (selectedIndex == mPolylines.size() - 1) {
// 最后一个点
mPolylines.get(selectedIndex).remove();
mPolylines.remove(selectedIndex);
setSelectedMarker(mMarkers.get(selectedIndex - 1));
} else {
LatLng homeLatLng = getHomeLatLng();
Polyline newPolyline = aMap.addPolyline((new PolylineOptions()).add(selectedIndex == 0 ? homeLatLng : mMarkers.get(selectedIndex - 1).getPosition(), mMarkers.get(selectedIndex).getPosition()).width(5).setDottedLine(// 虚线
true).color(Color.BLUE));
Polyline selectedPolyline = mPolylines.get(selectedIndex);
selectedPolyline.remove();
Polyline nextSelectedPolyline = mPolylines.get(selectedIndex + 1);
nextSelectedPolyline.remove();
mPolylines.put(selectedIndex, newPolyline);
for (int i = selectedIndex + 1; i < mPolylines.size() - 1; i++) {
mPolylines.put(i, mPolylines.get(i + 1));
}
mPolylines.remove(mPolylines.size() - 1);
setSelectedMarker(mMarkers.get(selectedIndex));
}
for (Integer integer : mMarkers.keySet()) {
Log.i(TAG, "deleteSelectedMarker: 第" + integer + "个标记" + mMarkers.get(integer).getPosition());
}
for (Integer integer : mPolylines.keySet()) {
Log.i(TAG, "deleteSelectedMarker: 第" + integer + "条线" + mPolylines.get(integer).getPoints());
}
}
Aggregations