关键代码:
一、绕点环视
地图选择点:
sceneControl.addTrackingListener(mTracking3dListener);
sceneControl.setAction(Action3D.CREATEPOINT3D); //set screen click,get the x/y of the point
GeoPoint3D geometry = new GeoPoint3D(x, y, z);
sceneControl.getScene().flyCircle(geometry, 10);
取两位小数:
double bx = new BigDecimal(x).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue();
double by = new BigDecimal(y).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue();
double bz = new BigDecimal(z).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue();
设置点样式:
private String iconPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "icon_compass.png";
Point3D point3d = new Point3D(event.getX(), event.getY(), event.getZ());
geoPoint3D = new GeoPoint3D(point3d);
GeoStyle3D geoStyle3D = new GeoStyle3D();
geoStyle3D.setMarkerScale(2);
geoStyle3D.setMarkerFile(iconPath);
geoStyle3D.setMarkerColor(new Color(255, 0, 0));
geoStyle3D.setAltitudeMode(AltitudeMode.ABSOLUTE);
geoPoint3D.setStyle3D(geoStyle3D);
sceneControl.getScene().getTrackingLayer().add(geoPoint3D, "point");
二、飞行管理
绘制飞行路线:
sceneControl.setAction(Action3D.PANSELECT3D);
private Tracking3DListener mTracking3dListener = new Tracking3DListener() {
@Override
public void tracking(Tracking3DEvent event) {
initAnalySis(sceneControl, event);
}
};
private void initAnalySis(SceneControl sceneControl, Tracking3DEvent event) {
// 加点
Point3D point3d = new Point3D(event.getX(), event.getY(), event.getZ());
GeoPoint3D geoPoint3D = new GeoPoint3D(point3d);
GeoStyle3D geoStyle3D = new GeoStyle3D();
geoStyle3D.setMarkerScale(2);
geoStyle3D.setMarkerColor(new Color(255, 0, 0));
geoStyle3D.setAltitudeMode(AltitudeMode.ABSOLUTE);
geoStyle3D.setMarkerFile(iconPath);
geoPoint3D.setStyle3D(geoStyle3D);
point3DList.add(point3d); // the list of fly line point add a point3d
// sceneControl.getScene().getTrackingLayer().add(geoPoint3D, "point");
// point3dArr[numPoint] = point3d;
point3Ds.add(point3d);
geoStyle3D.setLineColor(new Color(255, 100, 0));
geoStyle3D.setLineWidth(5);
geoStyle3D.setLineSymbolID(3);
geoLine3D.setStyle3D(geoStyle3D);
if (numPoint > 2) {
geoLine3D.addPart(point3Ds);
sceneControl.getScene().getTrackingLayer().add(geoLine3D, "line");
}
numPoint = numPoint + 1;
}
飞行:
flyManager.getRoutes().clear();
Route route = new Route();
GeoLine3D geoLine3D = new GeoLine3D();
Point3Ds point3Ds = new Point3Ds();
for (int x = 0; x < point3DList.size(); x++) {
Point3D point3D = new Point3D();
point3D.setX(point3DList.get(x).getX());
point3D.setY(point3DList.get(x).getY());
point3D.setZ(point3DList.get(x).getZ() + 10);
point3Ds.add(point3D);
}
if (point3Ds.getCount() > 2) {
geoLine3D.addPart(point3Ds);
route.setFlyAlongTheRoute(true);
route.setSpeed(8);
route.setTiltFixed(false);
route.setHeadingFixed(true);
route.fromGeoLine3D(geoLine3D);
flyManager.getRoutes().add(route);
flyManager.play();
} else {
ToastUtils.showLongToast(getContext(), "请点选多于2个点");
}
}
场景出图:
Bitmap bitmap = sceneControl.getScene().outputSceneToBitmap();
saveBitmap(bitmap, "image01");
/**
* 保存方法
*/
@RequiresApi(api = Build.VERSION_CODES.N)
public int saveBitmap(Bitmap bmp, String picName) {
//生成路径
String root = Environment.getExternalStorageDirectory().getAbsolutePath() + "/SuperMap/";
String dirName = "bitmap";
File appDir = new File(root, dirName);
if (!appDir.exists()) {
appDir.mkdirs();
}
//文件名为时间
long timeStamp = System.currentTimeMillis();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String sd = sdf.format(new Date(timeStamp));
String fileName = sd + ".jpg";
//获取文件
File file = new File(appDir, fileName);
FileOutputStream fos = null;
try {
fos = new FileOutputStream(file);
bmp.compress(Bitmap.CompressFormat.JPEG, 100, fos);
fos.flush();
//通知系统相册刷新
getActivity().sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,
Uri.fromFile(new File(file.getPath()))));
ToastUtils.showLongToast(getContext(), "出图成功,请查看" + "/SuperMap/bitmap/" + fileName + "文件");
bitmap = bmp;
ivBitmap.setVisibility(View.VISIBLE);
ivBitmap.setImageBitmap(bmp);
return 2;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fos != null) {
fos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
ToastUtils.showLongToast(getContext(), "出图成功,请查看" + "/SuperMap/bitmap/" + fileName + "文件");
bitmap = bmp;
ivBitmap.setVisibility(View.VISIBLE);
ivBitmap.setImageBitmap(bmp);
return -1;
}