基於SuperMap的iMobile 3D總結(二)

關鍵代碼:

一、繞點環視

地圖選擇點:

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;
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章