| | |
| | | import android.graphics.Color; |
| | | import android.os.Bundle; |
| | | |
| | | import android.os.Environment; |
| | | import android.os.Handler; |
| | | import android.os.Message; |
| | | import android.text.TextUtils; |
| | |
| | | import androidx.annotation.NonNull; |
| | | import androidx.annotation.Nullable; |
| | | |
| | | import com.anyun.basecommonlib.MyLog; |
| | | import com.esri.arcgisruntime.ArcGISRuntimeEnvironment; |
| | | import com.esri.arcgisruntime.arcgisservices.ArcGISMapServiceInfo; |
| | | import com.esri.arcgisruntime.concurrent.ListenableFuture; |
| | |
| | | import java.util.concurrent.ExecutorService; |
| | | import java.util.concurrent.Executors; |
| | | import java.util.concurrent.LinkedBlockingDeque; |
| | | import java.util.concurrent.LinkedBlockingQueue; |
| | | import java.util.concurrent.ScheduledExecutorService; |
| | | import java.util.concurrent.TimeUnit; |
| | | |
| | |
| | | |
| | | private static final String TAG = JiaXiaoFragment.class.getSimpleName(); |
| | | |
| | | |
| | | private LinkedBlockingQueue queue = new LinkedBlockingQueue(100); |
| | | private ExecutorService consumer = Executors.newSingleThreadExecutor(); |
| | | private ExecutorService producer = Executors.newSingleThreadExecutor(); |
| | | |
| | | private Gson gson = new Gson(); |
| | | private ICEventListener icEventListener = new ICEventListener() { |
| | | @Override |
| | | public void onCEvent(String topic, int msgCode, int resultCode, Object obj) { |
| | | |
| | | synchronized (JiaXiaoFragment.class){ |
| | | String json = (String)obj; |
| | | Log.i(TAG,String.format("当前线程号%d,json=%s",Thread.currentThread().getId(),json)); |
| | | RTKInfoBean rtkInfoBean = gson.fromJson(json,RTKInfoBean.class); |
| | | Log.i(TAG,String.format("CThreadPoolExecutor,当前线程号%d,Coord_x=%f,Coord_y=%f", |
| | | Thread.currentThread().getId(),rtkInfoBean.getCoord_x(),rtkInfoBean |
| | | .getCoord_y())); |
| | | yaw = rtkInfoBean.getHeading(); |
| | | startX = rtkInfoBean.getCoord_y(); |
| | | startY = rtkInfoBean.getCoord_x(); |
| | | addGraphicLayer(yaw,startX,startY); |
| | | } |
| | | |
| | | |
| | | |
| | | producer.execute(()->{ |
| | | String json = (String)obj; |
| | | Log.i(TAG,String.format("当前线程号%d,json=%s",Thread.currentThread().getId(),json)); |
| | | RTKInfoBean rtkInfoBean = gson.fromJson(json,RTKInfoBean.class); |
| | | queue.offer(rtkInfoBean); |
| | | }); |
| | | |
| | | // MyLog.i(TAG,"处理完11.时间="+Utils.formatTimeYYMMDDHHmmSSSSS(System.currentTimeMillis())); |
| | | |
| | | |
| | | } |
| | |
| | | View view = inflater.inflate(R.layout.layout_arc_gis,container,false); |
| | | mMapView = view.findViewById(R.id.mapView); |
| | | Log.i(TAG,String.format("当前线程号%d,json=%s",Thread.currentThread().getId(),"onCreateView")); |
| | | setupMap(); |
| | | addTrailheadsLayer(); |
| | | addGraphicLayer(0,startX,startY); |
| | | // setupMap(); |
| | | // addTrailheadsLayer(); |
| | | |
| | | addImageLayer(); |
| | | // addtiledLayer(); |
| | | |
| | | |
| | | // addGraphicLayer(0,startX,startY); |
| | | |
| | | // mHandler.sendEmptyMessageDelayed(MSG_CAR,1000); |
| | | |
| | | |
| | | // consumer.execute(new CalRunnable()); |
| | | return view; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | boolean flag = true; |
| | | class CalRunnable implements Runnable{ |
| | | |
| | | @Override |
| | | public void run() { |
| | | while (flag){ |
| | | |
| | | |
| | | RTKInfoBean rtkInfoBean = (RTKInfoBean) queue.poll(); |
| | | if (rtkInfoBean != null){ |
| | | Log.i(TAG,String.format("取出一个,queue.size=%d,rtkinfo=%s",queue.size(),rtkInfoBean.toString())); |
| | | yaw = rtkInfoBean.getHeading(); |
| | | startX = rtkInfoBean.getCoord_y(); |
| | | startY = rtkInfoBean.getCoord_x(); |
| | | addGraphicLayer(yaw,startX,startY); |
| | | }else{ |
| | | Log.i(TAG,String.format("取出一个为空,queue.size=%d",queue.size())); |
| | | } |
| | | |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | private SublayerList mSublayersList; |
| | | private void setupMap() { |
| | | if (mMapView != null) { |
| | |
| | | |
| | | //一定不能少了最后的 / |
| | | |
| | | 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/rest/services/%E5%9C%9F%E4%B8%BB%E8%80%83%E5%9C%BA/MapServer/"; |
| | | // String url = "http://192.168.0.47:6080/arcgis/rest/services/%E7%A7%91%E4%B8%89%E5%9C%B0%E5%9B%BE/MapServer/"; |
| | | String url = "http://192.168.0.47:6080/arcgis/rest/services/%E7%A7%91%E4%BA%8C%E5%9C%B0%E5%9B%BE/MapServer/"; |
| | | // String url = "http://192.168.0.47:6080/arcgis/rest/services/test/MapServer/"; |
| | | // String url = "http://192.168.0.47:6080/arcgis/rest/services/Testmap_3/MapServer/"; |
| | | ArcGISMapImageLayer arcGISMapImageLayer = new ArcGISMapImageLayer(url); |
| | |
| | | SublayerList tables = arcGISMapImageLayer.getSublayers(); |
| | | |
| | | Log.i(TAG,"ServiceFeatureTables size = "+tables.size()); |
| | | for (int i = tables.size()-1; i >= 0; i--) { |
| | | for (int i = tables.size()-1; i >=0; i--) { |
| | | // for (int i =0; i < tables.size(); i++) { |
| | | ServiceFeatureTable serviceFeatureTable = new ServiceFeatureTable(url+String.valueOf(i)); |
| | | |
| | | FeatureLayer featureLayer = new FeatureLayer(serviceFeatureTable); |
| | | ArcGISMap map = mMapView.getMap(); |
| | | map.getOperationalLayers().add(featureLayer); |
| | |
| | | }); |
| | | |
| | | |
| | | final ListenableFuture<Boolean> viewPointSetFuture = mMapView.setViewpointRotationAsync(90); |
| | | viewPointSetFuture.addDoneListener(() -> { |
| | | try{ |
| | | boolean completed = viewPointSetFuture.get(); |
| | | if (completed){ |
| | | Log.i(TAG,"Rotation completed successfully"); |
| | | } |
| | | }catch (InterruptedException e){ |
| | | Log.i(TAG,"Rotation Interrupted"); |
| | | }catch (ExecutionException e){ |
| | | |
| | | } |
| | | }); |
| | | //旋转90度 逆时针 |
| | | // final ListenableFuture<Boolean> viewPointSetFuture = mMapView.setViewpointRotationAsync(90); |
| | | // viewPointSetFuture.addDoneListener(() -> { |
| | | // try{ |
| | | // boolean completed = viewPointSetFuture.get(); |
| | | // if (completed){ |
| | | // Log.i(TAG,"Rotation completed successfully"); |
| | | // } |
| | | // }catch (InterruptedException e){ |
| | | // Log.i(TAG,"Rotation Interrupted"); |
| | | // }catch (ExecutionException e){ |
| | | // |
| | | // } |
| | | // }); |
| | | |
| | | |
| | | mMapView.setOnTouchListener(new MapSingleTapListener(getContext(),mMapView)); |
| | |
| | | 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)); |
| | | String carFilePath = ExamPlatformData.getInstance().getCarModelPath(); |
| | | String carFilePath = Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+_mActivity.getPackageName()+"/giscar.json"; |
| | | if (TextUtils.isEmpty(carFilePath)){ |
| | | Toast.makeText(_mActivity, "车辆模型文件不存在", Toast.LENGTH_SHORT).show(); |
| | | return; |
| | | } |
| | | CThreadPoolExecutor.runInBackground(new Runnable() { |
| | | @Override |
| | | public void run() { |
| | | |
| | | byte[] fileContentBytes=FileUtil.readFile(carFilePath); |
| | | String buffer= new String(fileContentBytes); |
| | | // Log.i(TAG,"giscar="+buffer); |
| | |
| | | List<safeluck.drive.evaluation.bean.Point> carNew=Utils.getCarPoint(0,yaw,new safeluck.drive.evaluation.bean.Point(x,y)); |
| | | 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()); |
| | | // 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()); |
| | | } |
| | | |
| | |
| | | }); |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | }); |
| | | |
| | | } |
| | | |
| | | private void drawPoint(Point point) { |
| | |
| | | Graphic graphic = new Graphic(point, simpleMarkerSymbol); |
| | | mGraphicsOverlay.getGraphics().add(graphic); |
| | | } |
| | | SimpleLineSymbol lineSymbolGls = new SimpleLineSymbol(SimpleLineSymbol.Style.SOLID, Color.BLACK, 0.5f); |
| | | |
| | | SimpleFillSymbol simpleFillSymbolGls = new SimpleFillSymbol(SimpleFillSymbol.Style.SOLID, Color.argb(255,0,0,0), lineSymbolGls); |
| | | PointCollection points = new PointCollection(SpatialReference.create(4544)); |
| | | |
| | | 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()); |
| | | drawGlses(carNew, simpleFillSymbolGls, points, gisCarModel.getRight_center_glass()); |
| | | drawGlses(carNew, simpleFillSymbolGls, 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); |
| | | drawGlses(carNew, simpleFillSymbolGls, points, frontCLs); |
| | | |
| | | frontCLs.clear(); |
| | | frontCLs.addAll(gisCarModel.getLeft_rear_glass()); |
| | | frontCLs.addAll(gisCarModel.getRight_rear_glass()); |
| | | drawGlses(carNew, simpleFillSymbol, points, frontCLs); |
| | | drawGlses(carNew, simpleFillSymbolGls, points, frontCLs); |
| | | |
| | | |
| | | } |
| | |
| | | } |
| | | |
| | | 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"; |
| | | 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(); |
| | |
| | | |
| | | 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"; |
| | | String url = "http://192.168.0.47:6080/arcgis/rest/services/%E7%A7%91%E4%BA%8C%E5%9C%B0%E5%9B%BE/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. |
| | |
| | | if (mMapView != null) { |
| | | mMapView.dispose(); |
| | | } |
| | | CEventCenter.onBindEvent(false,icEventListener, Constant.BIND_RTK_INFO_MAP); |
| | | // CEventCenter.onBindEvent(false,icEventListener, Constant.BIND_RTK_INFO_MAP); |
| | | producer.shutdown(); |
| | | consumer .shutdown(); |
| | | super.onDetach(); |
| | | } |
| | | |
| | | @Override |
| | | public void onAttach(Context context) { |
| | | super.onAttach(context); |
| | | CEventCenter.onBindEvent(true,icEventListener,Constant.BIND_RTK_INFO_MAP); |
| | | // CEventCenter.onBindEvent(true,icEventListener,Constant.BIND_RTK_INFO_MAP); |
| | | } |
| | | } |