關鍵代碼:
一、繞點環視
地圖選擇點:
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;
}