From 413d11a504be1d79ece09e3007a0acb057cddcf0 Mon Sep 17 00:00:00 2001
From: lizhanwei <Dana_Lee1016@126.com>
Date: 星期一, 08 六月 2020 16:11:17 +0800
Subject: [PATCH] 增加ArcGis runtime for android sdk,完成车辆模型及地图绘制
---
app/src/main/java/safeluck/drive/evaluation/app.java | 3
app/src/main/java/safeluck/drive/evaluation/bean/GisCarModel.java | 146 ++++++++++++
app/src/main/java/safeluck/drive/evaluation/fragment/JiaXiaoFragment.java | 364 ++++++++++++++++++++++++++++++
app/src/main/res/values/app_settings.xml | 4
build.gradle | 4
app/src/main/AndroidManifest.xml | 4
app/src/main/java/safeluck/drive/evaluation/util/Utils.java | 83 ++++++
app/src/main/assets/giscar.json | 35 ++
app/src/main/res/layout/layout_arc_gis.xml | 14 +
app/src/main/java/safeluck/drive/evaluation/bean/CarModel.java | 43 +++
app/build.gradle | 3
11 files changed, 699 insertions(+), 4 deletions(-)
diff --git a/app/build.gradle b/app/build.gradle
index 85f7c62..c04999c 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -77,6 +77,9 @@
implementation "com.squareup.retrofit2:retrofit:$rootProject.retrofit_version"
implementation "com.google.zxing:core:$rootProject.qrcode_version"
implementation "com.squareup.picasso:picasso:2.5.2"
+ // *** ADD ***
+ implementation 'com.esri.arcgisruntime:arcgis-android:100.8.0'
+
}
repositories {
mavenCentral()
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3707f68..a865e76 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-android:sharedUserId="android.uid.system"
+ android:sharedUserId="android.uid.system"
package="safeluck.drive.evaluation">
<uses-permission android:name="android.permission.CAMERA" />
@@ -9,6 +9,8 @@
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.REBOOT"/>
+ <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
+ <uses-feature android:glEsVersion="0x00020000" android:required="true" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
diff --git a/app/src/main/assets/giscar.json b/app/src/main/assets/giscar.json
new file mode 100644
index 0000000..667ae34
--- /dev/null
+++ b/app/src/main/assets/giscar.json
@@ -0,0 +1,35 @@
+{
+ "axial": [0, 25],
+ "body": [0, 1, 2, 3, 4, 5, 6, 7, 25, 26, 27, 28,29,30,31,32],
+ "left_front_tire": [8, 9],
+ "left_rear_tire": [10, 11],
+ "main_ant": [-9151.5063, 13030.5118],
+ "point": [-9149.6063, 13033.0768, -9149.9978, 13033.3124, -9150.3258, 13033.3485, -9150.8341, 13032.8985, -9151.7318, 13031.6639, -9152.3573, 13030.83, -9152.5214, 13030.5639, -9152.602, 13030.3105,-9150.8053, 13032.8843,-9150.6537, 13032.7602,-9152.3352, 13030.8124, -9152.221, 13030.7008,
+
+ -9150.1005859,13032.423100000247000,-9150.8535156,13032.752900000662000,-9151.1162109,13032.073200000450000,-9150.5683594,13031.804300000891000,
+ -9151.5400391,13030.519500000402000,-9151.9570313,13030.962400000542000,-9152.3496094,13030.609099999070000,-9151.8574219,13030.100199999288000,
+
+ -9151.0009766,13032.559200000018000,-9152.1943359,13030.980799999088000,-9151.9980469,13031.044099999592000,-9151.8066406,13031.161399999633000,-9151.2636719,13031.880100000650000,
+
+
+ -9152.092, 13029.7892,
+
+
+ -9151.4638, 13029.4333, -9151.2111, 13029.568, -9150.9808, 13029.8341, -9150.3546, 13030.6796, -9149.458, 13031.8642,-9149.1611, 13032.4276,-9149.2827, 13032.7653,-9149.4842, 13031.8708, -9149.6176, 13031.9937, -9151.0011,13029.8717, -9151.1367, 13029.9878,
+
+
+ -9150.1621094,13031.346100000665000,-9149.5800781,13031.784299999475000,
+ -9151.2343750,13029.761800000444000,-9151.0019531,13030.236099999398000,
+
+ -9150.9208984,13030.012800000608000,-9149.7265625,13031.590900000185000,-9150.3085938,13031.153000000864000,-9150.8496094,13030.435100000352000,-9150.9160156,13030.213700000197000
+ ],
+ "right_front_tire": [33, 34],
+ "right_rear_tire": [35, 36],
+
+ "left_front_glass":[12,13,14,15],
+ "left_rear_glass":[16,17,18,19],
+ "left_center_glass":[20,21,22,23,24],
+ "right_front_glass":[37,38],
+ "right_rear_glass":[39,40],
+ "right_center_glass":[41,42,43,44,45]
+}
\ No newline at end of file
diff --git a/app/src/main/java/safeluck/drive/evaluation/app.java b/app/src/main/java/safeluck/drive/evaluation/app.java
index cef9ce9..bcdf1c1 100644
--- a/app/src/main/java/safeluck/drive/evaluation/app.java
+++ b/app/src/main/java/safeluck/drive/evaluation/app.java
@@ -98,7 +98,7 @@
//鑰冭瘯鐘舵�� 锛屼竴浜涘垵濮嬬姸鎬侊紝app涓�浜涚姸鎬佸簲璇ュ厛鍒濆鍖栦竴涓�
initData();
- QbSdk.initX5Environment(this,cb);
+// QbSdk.initX5Environment(this,cb);
}
@@ -150,7 +150,6 @@
@Override
public void callBackMsg(final int cmd, String json) {
String strConent = String.format("鏀跺埌鍛戒护[%d],Json鍐呭涓�%s", cmd, json);
- Log.i(TAG,strConent);
if (strConent.equalsIgnoreCase(lastStr)){
}else{
diff --git a/app/src/main/java/safeluck/drive/evaluation/bean/CarModel.java b/app/src/main/java/safeluck/drive/evaluation/bean/CarModel.java
new file mode 100644
index 0000000..1408276
--- /dev/null
+++ b/app/src/main/java/safeluck/drive/evaluation/bean/CarModel.java
@@ -0,0 +1,43 @@
+package safeluck.drive.evaluation.bean;
+
+/**
+ * @ProjectName: DriveJudge
+ * @Package: safeluck.drive.evaluation.bean
+ * @ClassName: CarModel
+ * @Description: java绫讳綔鐢ㄦ弿杩�
+ * @Author: 鏉庡崰浼�
+ * @CreateDate: 2020-06-03 15:22
+ * @UpdateUser: 鏇存柊鑰�
+ * @UpdateDate: 2020-06-03 15:22
+ * @UpdateRemark: 鏇存柊璇存槑
+ * @Version: 1.0
+ */
+
+public class CarModel {
+ private double distance;
+ private double angle;
+
+ public CarModel(double distance, double angle) {
+ this.distance = distance;
+ this.angle = angle;
+ }
+
+ public CarModel() {
+ }
+
+ public double getDistance() {
+ return distance;
+ }
+
+ public void setDistance(double distance) {
+ this.distance = distance;
+ }
+
+ public double getAngle() {
+ return angle;
+ }
+
+ public void setAngle(double angle) {
+ this.angle = angle;
+ }
+}
diff --git a/app/src/main/java/safeluck/drive/evaluation/bean/GisCarModel.java b/app/src/main/java/safeluck/drive/evaluation/bean/GisCarModel.java
new file mode 100644
index 0000000..0c0422c
--- /dev/null
+++ b/app/src/main/java/safeluck/drive/evaluation/bean/GisCarModel.java
@@ -0,0 +1,146 @@
+package safeluck.drive.evaluation.bean;
+
+import java.util.List;
+
+/**
+ * @ProjectName: DriveJudge
+ * @Package: safeluck.drive.evaluation.bean
+ * @ClassName: GisCarModel
+ * @Description: java绫讳綔鐢ㄦ弿杩�
+ * @Author: 鏉庡崰浼�
+ * @CreateDate: 2020-06-03 16:56
+ * @UpdateUser: 鏇存柊鑰�
+ * @UpdateDate: 2020-06-03 16:56
+ * @UpdateRemark: 鏇存柊璇存槑
+ * @Version: 1.0
+ */
+
+public class GisCarModel {
+
+ private List<Integer> axial;
+ private List<Integer> body;
+ private List<Integer> left_front_tire;
+ private List<Integer> left_rear_tire;
+ private List<Double> main_ant;
+ private List<Double> point;
+ private List<Integer> right_front_tire;
+ private List<Integer> right_rear_tire;
+ private List<Integer> left_front_glass;
+ private List<Integer> left_rear_glass;
+ private List<Integer> left_center_glass;
+ private List<Integer> right_front_glass;
+ private List<Integer> right_rear_glass;
+ private List<Integer> right_center_glass;
+
+ public List<Integer> getAxial() {
+ return axial;
+ }
+
+ public void setAxial(List<Integer> axial) {
+ this.axial = axial;
+ }
+
+ public List<Integer> getBody() {
+ return body;
+ }
+
+ public void setBody(List<Integer> body) {
+ this.body = body;
+ }
+
+ public List<Integer> getLeft_front_tire() {
+ return left_front_tire;
+ }
+
+ public void setLeft_front_tire(List<Integer> left_front_tire) {
+ this.left_front_tire = left_front_tire;
+ }
+
+ public List<Integer> getLeft_rear_tire() {
+ return left_rear_tire;
+ }
+
+ public void setLeft_rear_tire(List<Integer> left_rear_tire) {
+ this.left_rear_tire = left_rear_tire;
+ }
+
+ public List<Double> getMain_ant() {
+ return main_ant;
+ }
+
+ public void setMain_ant(List<Double> main_ant) {
+ this.main_ant = main_ant;
+ }
+
+ public List<Double> getPoint() {
+ return point;
+ }
+
+ public void setPoint(List<Double> point) {
+ this.point = point;
+ }
+
+ public List<Integer> getRight_front_tire() {
+ return right_front_tire;
+ }
+
+ public void setRight_front_tire(List<Integer> right_front_tire) {
+ this.right_front_tire = right_front_tire;
+ }
+
+ public List<Integer> getRight_rear_tire() {
+ return right_rear_tire;
+ }
+
+ public void setRight_rear_tire(List<Integer> right_rear_tire) {
+ this.right_rear_tire = right_rear_tire;
+ }
+
+ public List<Integer> getLeft_front_glass() {
+ return left_front_glass;
+ }
+
+ public void setLeft_front_glass(List<Integer> left_front_glass) {
+ this.left_front_glass = left_front_glass;
+ }
+
+ public List<Integer> getLeft_rear_glass() {
+ return left_rear_glass;
+ }
+
+ public void setLeft_rear_glass(List<Integer> left_rear_glass) {
+ this.left_rear_glass = left_rear_glass;
+ }
+
+ public List<Integer> getLeft_center_glass() {
+ return left_center_glass;
+ }
+
+ public void setLeft_center_glass(List<Integer> left_center_glass) {
+ this.left_center_glass = left_center_glass;
+ }
+
+ public List<Integer> getRight_front_glass() {
+ return right_front_glass;
+ }
+
+ public void setRight_front_glass(List<Integer> right_front_glass) {
+ this.right_front_glass = right_front_glass;
+ }
+
+ public List<Integer> getRight_rear_glass() {
+ return right_rear_glass;
+ }
+
+ public void setRight_rear_glass(List<Integer> right_rear_glass) {
+ this.right_rear_glass = right_rear_glass;
+ }
+
+ public List<Integer> getRight_center_glass() {
+ return right_center_glass;
+ }
+
+ public void setRight_center_glass(List<Integer> right_center_glass) {
+ this.right_center_glass = right_center_glass;
+ }
+}
diff --git a/app/src/main/java/safeluck/drive/evaluation/fragment/JiaXiaoFragment.java b/app/src/main/java/safeluck/drive/evaluation/fragment/JiaXiaoFragment.java
index 2c09199..36866fd 100644
--- a/app/src/main/java/safeluck/drive/evaluation/fragment/JiaXiaoFragment.java
+++ b/app/src/main/java/safeluck/drive/evaluation/fragment/JiaXiaoFragment.java
@@ -1,16 +1,66 @@
package safeluck.drive.evaluation.fragment;
+import android.graphics.Color;
import android.os.Bundle;
+import android.util.Log;
import android.view.LayoutInflater;
+import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import com.esri.arcgisruntime.ArcGISRuntimeEnvironment;
+import com.esri.arcgisruntime.arcgisservices.ArcGISMapServiceInfo;
+import com.esri.arcgisruntime.data.ServiceFeatureTable;
+import com.esri.arcgisruntime.geometry.Point;
+import com.esri.arcgisruntime.geometry.PointCollection;
+import com.esri.arcgisruntime.geometry.Polygon;
+import com.esri.arcgisruntime.geometry.Polyline;
+import com.esri.arcgisruntime.geometry.SpatialReference;
+import com.esri.arcgisruntime.geometry.SpatialReferences;
+import com.esri.arcgisruntime.layers.ArcGISMapImageLayer;
+import com.esri.arcgisruntime.layers.ArcGISMapImageSublayer;
+import com.esri.arcgisruntime.layers.ArcGISSublayer;
+import com.esri.arcgisruntime.layers.ArcGISTiledLayer;
+import com.esri.arcgisruntime.layers.ArcGISVectorTiledLayer;
+import com.esri.arcgisruntime.layers.FeatureLayer;
+import com.esri.arcgisruntime.layers.MobileBasemapLayer;
+import com.esri.arcgisruntime.layers.SublayerList;
+import com.esri.arcgisruntime.loadable.LoadStatus;
+import com.esri.arcgisruntime.loadable.LoadStatusChangedEvent;
+import com.esri.arcgisruntime.loadable.LoadStatusChangedListener;
+import com.esri.arcgisruntime.mapping.ArcGISMap;
+import com.esri.arcgisruntime.mapping.Basemap;
+import com.esri.arcgisruntime.mapping.Viewpoint;
+import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener;
+import com.esri.arcgisruntime.mapping.view.Graphic;
+import com.esri.arcgisruntime.mapping.view.GraphicsOverlay;
+import com.esri.arcgisruntime.mapping.view.MapView;
+import com.esri.arcgisruntime.portal.Portal;
+import com.esri.arcgisruntime.portal.PortalItem;
+import com.esri.arcgisruntime.symbology.LineSymbol;
+import com.esri.arcgisruntime.symbology.SimpleFillSymbol;
+import com.esri.arcgisruntime.symbology.SimpleLineSymbol;
+import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol;
+import com.esri.arcgisruntime.util.ListenableList;
+import com.google.gson.Gson;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+
import me.yokeyword.fragmentation.SupportFragment;
import safeluck.drive.evaluation.R;
+import safeluck.drive.evaluation.app;
+import safeluck.drive.evaluation.bean.GisCarModel;
+import safeluck.drive.evaluation.util.CThreadPoolExecutor;
+import safeluck.drive.evaluation.util.FileUtil;
+import safeluck.drive.evaluation.util.Utils;
/**椹炬牎淇℃伅UI
* MyApplication2
@@ -22,13 +72,325 @@
public static SupportFragment newInstance(){
return new JiaXiaoFragment();
}
+ private static final String TAG = JiaXiaoFragment.class.getSimpleName();
+
+ private MapView mMapView ;
+
+ GraphicsOverlay mGraphicsOverlay;
+
+ PointCollection mPointCollection = new PointCollection(SpatialReference.create(4544));
+
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
- View view = inflater.inflate(R.layout.layout_jiaxiao_info,container,false);
+ View view = inflater.inflate(R.layout.layout_arc_gis,container,false);
+ mMapView = view.findViewById(R.id.mapView);
+ setupMap();
+ addTrailheadsLayer();
+// addImageLayer();
+ addGraphicLayer();
+// drawPolygon();
return view;
}
+ private SublayerList mSublayersList;
+ private void setupMap() {
+ if (mMapView != null) {
+ ArcGISMap map = new ArcGISMap();
+ mMapView.setMap(map);
+
+ mGraphicsOverlay= new GraphicsOverlay();
+ mMapView.getGraphicsOverlays().add(mGraphicsOverlay);
+
+ }
+ }
+ private void addTrailheadsLayer() {
+
+
+
+ String url = "http://192.168.0.47:6080/arcgis/rest/services/%E5%9C%9F%E4%B8%BB%E8%80%83%E5%9C%BA/MapServer/";
+ ArcGISMapImageLayer arcGISMapImageLayer = new ArcGISMapImageLayer(url);
+ arcGISMapImageLayer.loadAsync();
+ arcGISMapImageLayer.addLoadStatusChangedListener(loadStatusChangedEvent -> {
+ if (loadStatusChangedEvent.getNewLoadStatus() == LoadStatus.LOADED){
+ SublayerList tables = arcGISMapImageLayer.getSublayers();
+
+ Log.i(TAG,"ServiceFeatureTables size = "+tables.size());
+ for (int i = tables.size()-1; i >= 0; i--) {
+ ServiceFeatureTable serviceFeatureTable = new ServiceFeatureTable(url+String.valueOf(i));
+
+ FeatureLayer featureLayer = new FeatureLayer(serviceFeatureTable);
+ ArcGISMap map = mMapView.getMap();
+ map.getOperationalLayers().add(featureLayer);
+ }
+ }
+ });
+
+
+
+ }
+
+ private void addGraphicLayer(){
+
+ SimpleLineSymbol lineSymbol = new SimpleLineSymbol(SimpleLineSymbol.Style.SOLID, Color.rgb(232,0,0), 0.5f);
+ SimpleFillSymbol simpleFillSymbol = new SimpleFillSymbol(SimpleFillSymbol.Style.SOLID, Color.argb(255,232,0,0), lineSymbol);
+ PointCollection points = new PointCollection(SpatialReference.create(4544));
+ CThreadPoolExecutor.runInBackground(new Runnable() {
+ @Override
+ public void run() {
+ StringBuffer buffer= FileUtil.readAssetTxtFile(app.getAppContext(),"giscar.json");
+ Log.i(TAG,"giscar="+buffer.toString());
+ GisCarModel gisCarModel= new Gson().fromJson(buffer.toString(),GisCarModel.class);
+// List<safeluck.drive.evaluation.bean.Point> carNew=Utils.getCarPoint(0,45,new safeluck.drive.evaluation.bean.Point(-8633.77199999988,14471.793700000271));
+ List<safeluck.drive.evaluation.bean.Point> carNew=Utils.getCarPoint(0,45,new safeluck.drive.evaluation.bean.Point(-8647.003,14590.7213));
+ List<Integer> bodys =gisCarModel.getBody();
+ for (int i = 0; i <bodys.size(); i++) {
+ Log.i(TAG,String.format("杞﹁韩鐐逛綅缃細%d",bodys.get(i)));
+ Log.i(TAG,"鏂板潗鏍�"+carNew.get(bodys.get(i)).getX()+" Y="+carNew.get(bodys.get(i)).getY());
+ points.add(carNew.get(bodys.get(i)).getX(),carNew.get(bodys.get(i)).getY());
+ }
+
+ CThreadPoolExecutor.runOnMainThread(new Runnable() {
+ @Override
+ public void run() {
+ Polygon polygon = new Polygon(points);
+
+ Graphic graphic = new Graphic(polygon,simpleFillSymbol);
+ mGraphicsOverlay.getGraphics().clear();
+ mGraphicsOverlay.getGraphics().add(graphic);
+
+ drawrightCenterGls(gisCarModel,carNew);
+
+ drawPoint(new Point(-8647.003,14590.7213));
+
+ }
+ });
+
+
+ }
+
+
+ });
+ }
+
+ private void drawPoint(Point point) {
+ SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.WHITE, 5);
+
+ Graphic graphic = new Graphic(point, simpleMarkerSymbol);
+ mGraphicsOverlay.getGraphics().add(graphic);
+ }
+
+ private void drawrightCenterGls(GisCarModel gisCarModel, List<safeluck.drive.evaluation.bean.Point> carNew) {
+
+ SimpleLineSymbol lineSymbol = new SimpleLineSymbol(SimpleLineSymbol.Style.SOLID, Color.BLACK, 0.5f);
+ SimpleFillSymbol simpleFillSymbol = new SimpleFillSymbol(SimpleFillSymbol.Style.SOLID, Color.argb(255,0,0,0), lineSymbol);
+ PointCollection points = new PointCollection(SpatialReference.create(4544));
+
+ drawGlses(carNew, simpleFillSymbol, points, gisCarModel.getRight_center_glass());
+ drawGlses(carNew, simpleFillSymbol, points, gisCarModel.getLeft_center_glass());
+
+ List<Integer> frontCLs = new ArrayList<>();
+ frontCLs.addAll(gisCarModel.getLeft_front_glass());
+ frontCLs.addAll(gisCarModel.getRight_front_glass());
+ drawGlses(carNew, simpleFillSymbol, points, frontCLs);
+
+ frontCLs.clear();
+ frontCLs.addAll(gisCarModel.getLeft_rear_glass());
+ frontCLs.addAll(gisCarModel.getRight_rear_glass());
+ drawGlses(carNew, simpleFillSymbol, points, frontCLs);
+
+
+ }
+
+ private void drawGlses(List<safeluck.drive.evaluation.bean.Point> carNew, SimpleFillSymbol simpleFillSymbol, PointCollection points, List<Integer> left_center_glass) {
+ List<Integer> leftCenterGls = left_center_glass;
+ points.clear();
+ for (int i = 0; i < leftCenterGls.size(); i++) {
+ int pos = leftCenterGls.get(i);
+ points.add(carNew.get(pos).getX(), carNew.get(pos).getY());
+
+ }
+
+ Polygon polygon1 = new Polygon(points);
+ Graphic graphic1 = new Graphic(polygon1, simpleFillSymbol);
+ mGraphicsOverlay.getGraphics().add(graphic1);
+ }
+
+ /**
+ * 缁樺埗闈�
+ */
+ private void drawPolygon() {
+// List<Point> points = new ArrayList<>();
+// points.add(new Point(21.21,21.32, SpatialReference.create("4544")));
+// PointCollection pointCollection = new PointCollection(points);
+
+ mMapView.setOnTouchListener(new DefaultMapViewOnTouchListener(_mActivity, mMapView) {
+ @Override
+ public boolean onSingleTapConfirmed(MotionEvent e) {
+
+ mGraphicsOverlay.getGraphics().clear();
+ Point point = mMapView.screenToLocation(new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())));
+ mPointCollection.add(point);
+
+ Polygon polygon = new Polygon(mPointCollection);
+
+ if (mPointCollection.size() == 1) {
+ SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 10);
+ Graphic pointGraphic = new Graphic(point, simpleMarkerSymbol);
+ mGraphicsOverlay.getGraphics().add(pointGraphic);
+ }
+
+ SimpleLineSymbol lineSymbol = new SimpleLineSymbol(SimpleLineSymbol.Style.SOLID, Color.GREEN, 3.0f);
+ SimpleFillSymbol simpleFillSymbol = new SimpleFillSymbol(SimpleFillSymbol.Style.SOLID, Color.parseColor("#33e97676"), lineSymbol);
+ Graphic graphic = new Graphic(polygon, simpleFillSymbol);
+ mGraphicsOverlay.getGraphics().add(graphic);
+
+ return super.onSingleTapConfirmed(e);
+ }
+ });
+ }
+
+ /**
+ * 缁樺埗鐐�
+ */
+ private void drawPoint() {
+ mMapView.setOnTouchListener(new DefaultMapViewOnTouchListener(_mActivity, mMapView) {
+ @Override
+ public boolean onSingleTapConfirmed(MotionEvent e) {
+ Point clickPoint = mMapView.screenToLocation(new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())));
+ SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 20);
+ Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol);
+ //娓呴櫎涓婁竴涓偣
+ mGraphicsOverlay.getGraphics().clear();
+ mGraphicsOverlay.getGraphics().add(graphic);
+
+ //浣跨敤娓叉煋鍣�
+ // Graphic graphic1 = new Graphic(clickPoint);
+ // SimpleRenderer simpleRenderer = new SimpleRenderer(simpleMarkerSymbol);
+ // mGraphicsOverlay.setRenderer(simpleRenderer);
+ // mGraphicsOverlay.getGraphics().clear();
+ // mGraphicsOverlay.getGraphics().add(graphic1);
+
+ return super.onSingleTapConfirmed(e);
+ }
+ });
+ }
+
+ /**
+ * 缁樺埗绾�
+ */
+ private void drawPolyline() {
+ mMapView.setOnTouchListener(new DefaultMapViewOnTouchListener(_mActivity, mMapView) {
+ @Override
+ public boolean onSingleTapConfirmed(MotionEvent e) {
+ Point point = mMapView.screenToLocation(new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())));
+ mPointCollection.add(point);
+
+ Polyline polyline = new Polyline(mPointCollection);
+
+ //鐐�
+ SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 10);
+ Graphic pointGraphic = new Graphic(point, simpleMarkerSymbol);
+ mGraphicsOverlay.getGraphics().add(pointGraphic);
+
+ //绾�
+ SimpleLineSymbol simpleLineSymbol = new SimpleLineSymbol(SimpleLineSymbol.Style.SOLID, Color.parseColor("#FC8145"), 3);
+ Graphic graphic = new Graphic(polyline, simpleLineSymbol);
+ mGraphicsOverlay.getGraphics().add(graphic);
+
+ return super.onSingleTapConfirmed(e);
+ }
+ });
+ }
+
+private void addImageLayer(){
+ String url = "http://192.168.0.47:6080/arcgis/rest/services/%E5%9C%9F%E4%B8%BB%E8%80%83%E5%9C%BA/MobileServer";
+ // create a MapImageLayer with dynamically generated map images
+ final ArcGISMapImageLayer mapImageLayer = new ArcGISMapImageLayer(url);
+// mapImageLayer.loadAsync();
+ // Add a listener that is invoked when layer loading has completed.
+ mapImageLayer.addDoneLoadingListener(() -> {
+ if (mapImageLayer.getLoadStatus() == LoadStatus.LOADED) {
+ ArcGISMapServiceInfo mapServiceInfo = mapImageLayer.getMapServiceInfo();
+
+ Log.i(TAG, "addImageLayer: 鍔犺浇瀹屾垚銆傘�傘��");
+
+ // work with map service info here
+ }
+ });
+ // create an empty map instance
+ ArcGISMap map = new ArcGISMap();
+ // add map image layer as operational layer
+ map.getOperationalLayers().add(mapImageLayer);
+ // set the map to be displayed in this view
+ mMapView.setMap(map);
+}
+
+private void addtiledLayer(){
+// String url = "http://192.168.0.47:6080/arcgis/rest/services/%E5%9C%9F%E4%B8%BB%E8%80%83%E5%9C%BA/MapServer";
+ String url = "http://192.168.0.47:6080/arcgis/manager/service.html?name=SampleWorldCities.MapServer";
+ // create a MapImageLayer with dynamically generated map images
+ final ArcGISTiledLayer arcGISTiledLayer = new ArcGISTiledLayer(url);
+ // Add a listener that is invoked when layer loading has completed.
+ arcGISTiledLayer.addDoneLoadingListener(() -> {
+ if (arcGISTiledLayer.getLoadStatus() == LoadStatus.LOADED) {
+ // work with map service info here
+ Log.i(TAG,"ArcGISTiledLayer鍔犺浇瀹屾垚");
+ }
+ });
+ Basemap basemap = new Basemap(arcGISTiledLayer);
+ // create a map with the basemap
+ ArcGISMap arcGISMap = new ArcGISMap(basemap);
+ // set the map to be displayed in this view
+ mMapView.setMap(arcGISMap);
+
+}
+private void addVectorTiledLayer(){
+ String url = "http://192.168.0.47:6080/arcgis/rest/services/%E5%9C%9F%E4%B8%BB%E8%80%83%E5%9C%BA/MapServer";
+ // create a MapImageLayer with dynamically generated map images
+ final ArcGISVectorTiledLayer mVectorTiledLayer = new ArcGISVectorTiledLayer(url);
+ // Add a listener that is invoked when layer loading has completed.
+ mVectorTiledLayer.addDoneLoadingListener(() -> {
+ if (mVectorTiledLayer.getLoadStatus() == LoadStatus.LOADED) {
+ // work with map service info here
+ Log.i(TAG,"ArcGISTiledLayer鍔犺浇瀹屾垚");
+ }
+ });
+ Basemap basemap = new Basemap(mVectorTiledLayer);
+ // create a map with the basemap
+ ArcGISMap arcGISMap = new ArcGISMap(basemap);
+
+ Viewpoint vp = new Viewpoint(47.606726, -122.335564, 72223.819286);
+ arcGISMap.setInitialViewpoint(vp);
+
+ // set the map to be displayed in this view
+ mMapView.setMap(arcGISMap);
+
+}
+
+ @Override
+ public void onPause() {
+ if (mMapView != null) {
+ mMapView.pause();
+ }
+ super.onPause();
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ if (mMapView != null) {
+ mMapView.resume();
+ }
+ }
+
+ @Override
+ public void onDetach() {
+ if (mMapView != null) {
+ mMapView.dispose();
+ }
+ super.onDetach();
+ }
}
diff --git a/app/src/main/java/safeluck/drive/evaluation/util/Utils.java b/app/src/main/java/safeluck/drive/evaluation/util/Utils.java
index b7e43f5..81a5347 100644
--- a/app/src/main/java/safeluck/drive/evaluation/util/Utils.java
+++ b/app/src/main/java/safeluck/drive/evaluation/util/Utils.java
@@ -8,6 +8,7 @@
import com.anyun.exam.lib.MyLog;
import com.anyun.exam.lib.util.ByteUtil;
+import com.google.gson.Gson;
import com.safeluck.aykj.utils.BytesUtils;
import java.io.File;
@@ -37,7 +38,11 @@
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.IvParameterSpec;
+import safeluck.drive.evaluation.app;
+import safeluck.drive.evaluation.bean.CarModel;
+import safeluck.drive.evaluation.bean.GisCarModel;
import safeluck.drive.evaluation.bean.Point;
+import safeluck.drive.evaluation.httpmodule.GsonConverterFactory;
import static java.lang.Math.cos;
import static java.lang.Math.pow;
@@ -656,4 +661,82 @@
}
}
+
+
+ public static List<CarModel> getCarModelData(Point basePoint, List<Integer> axial, List<Point> car){
+ List<CarModel> carModelList = new ArrayList<>();
+ double C02= (car.get(0).getX()-basePoint.getX())*(car.get(0).getX()-basePoint.getX()) + (car.get(0).getY()-basePoint.getY())*(car.get(0).getY()-basePoint.getY());
+ double c0 = Math.sqrt(C02);
+ CarModel carModel = new CarModel();
+ carModel.setDistance(c0);
+ carModel.setAngle(0.0);
+ carModelList.add(carModel);
+
+ for (int i = 1; i < car.size(); ++i) {
+ double dis2 = (car.get(i).getX()-basePoint.getX())*(car.get(i).getX()-basePoint.getX()) + (car.get(i).getY()-basePoint.getY())*(car.get(i).getY()-basePoint.getY());
+ double dis = Math.sqrt(dis2);
+
+ CarModel c =new CarModel();
+ c.setDistance(dis);
+
+ c.setAngle(180 * Math.acos((dis2 + C02 - ((car.get(i).getX()-car.get(0).getX())*(car.get(i).getX()-car.get(0).getX()) +
+ (car.get(i).getY()-car.get(0).getY())*(car.get(i).getY()-car.get(0).getY())))/(2*c0*dis)) / Math.PI);
+
+ if (i > axial.get(1)){
+ c.setAngle( 360.0 - c.getAngle());
+ }
+ carModelList.add(c);
+ }
+ return carModelList;
+ }
+
+ public static List<Point> getCarPoint(double pitch,double yaw,Point point){
+ pitch = 0;
+ yaw = 45;
+ Point main_ant = point;
+ List<Point> carNew = new ArrayList<>();
+ StringBuffer buffer=FileUtil.readAssetTxtFile(app.getAppContext(),"giscar.json");
+ Log.i(TAG,"giscar="+buffer.toString());
+ GisCarModel gisCarModel= new Gson().fromJson(buffer.toString(),GisCarModel.class);
+ List<Point> pointList = new ArrayList<Point>() ;
+ for (int i = 0; i < gisCarModel.getPoint().size(); i++) {
+ double x= gisCarModel.getPoint().get(i);
+ i++;
+ double y= gisCarModel.getPoint().get(i);
+ pointList.add(new Point(x,y));
+
+
+
+ }
+ List<CarModel> carModels = getCarModelData(new Point(-9151.5063, 13030.5118),gisCarModel.getAxial(),pointList);
+ if (carModels != null && carModels.size()>0){
+
+ for (int i = 0; i < carModels.size(); ++i) {
+ Log.i(TAG,String.format("浣嶇疆[%d],distance=%f,angle=%f",i,carModels.get(i).getDistance(),carModels.get(i).getAngle()));
+ double qrx = carModels.get(i).getDistance() * Math.sin(carModels.get(i).getAngle() * Math.PI / 180);
+ double qry = carModels.get(i).getDistance() * Math.cos(carModels.get(i).getAngle() * Math.PI / 180) * Math.cos(pitch * Math.PI / 180);
+
+ double projectDistance = Math.sqrt(Math.pow(qrx, 2) + Math.pow(qry, 2));
+ double projectAngle = Math.acos(qry / projectDistance) * 180 / Math.PI;
+
+ if (carModels.get(i).getAngle() > 180) {
+ projectAngle = 360 - projectAngle;
+ }
+
+ double X =
+ projectDistance * Math.sin(yaw * Math.PI / 180) * Math.cos(projectAngle * Math.PI / 180) -
+ projectDistance * Math.cos(yaw * Math.PI / 180) * Math.sin(projectAngle * Math.PI / 180) +
+ main_ant.getX();
+ double Y =
+ projectDistance * Math.sin(yaw * Math.PI / 180) * Math.sin(projectAngle * Math.PI / 180) +
+ projectDistance * Math.cos(yaw * Math.PI / 180) * Math.cos(projectAngle * Math.PI / 180) +
+ main_ant.getY();
+ carNew.add(new Point(X,Y));
+
+ }
+ }
+ return carNew;
+
+
+ }
}
diff --git a/app/src/main/res/layout/layout_arc_gis.xml b/app/src/main/res/layout/layout_arc_gis.xml
new file mode 100644
index 0000000..8f56f7d
--- /dev/null
+++ b/app/src/main/res/layout/layout_arc_gis.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:id="@+id/activity_main"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ >
+
+ <com.esri.arcgisruntime.mapping.view.MapView
+ android:id="@+id/mapView"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" >
+ </com.esri.arcgisruntime.mapping.view.MapView>
+</RelativeLayout>
\ No newline at end of file
diff --git a/app/src/main/res/values/app_settings.xml b/app/src/main/res/values/app_settings.xml
new file mode 100644
index 0000000..9a8f887
--- /dev/null
+++ b/app/src/main/res/values/app_settings.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <string name="arcgis_license_key">YOUR_LICENSE_KEY</string>
+</resources>
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
index 5a5a0d6..ee4e1c6 100644
--- a/build.gradle
+++ b/build.gradle
@@ -7,6 +7,7 @@
jcenter()
}
+
ext{
roomVersion ='2.2.1'
workVersion ='2.2.0'
@@ -28,6 +29,9 @@
repositories {
google()
jcenter()
+ maven {
+ url 'https://esri.bintray.com/arcgis'
+ }
}
}
--
Gitblit v1.8.0