From 58136320d46409f4873356612ec6c1a519dda14b Mon Sep 17 00:00:00 2001 From: xiaoyan Date: Thu, 27 Apr 2023 15:04:18 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=A2=9E=E5=8A=A0=E5=A4=9A=E7=BA=BF?= =?UTF-8?q?=E5=9B=BE=E5=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../map/handler/LayerManagerHandler.kt | 7 + .../library/map/layers/MultiPathLayer.java | 170 ++++++++++++++++++ .../library/map/layers/OmdbTaskLinkLayer.java | 17 ++ 3 files changed, 194 insertions(+) create mode 100644 collect-library/src/main/java/com/navinfo/collect/library/map/layers/MultiPathLayer.java create mode 100644 collect-library/src/main/java/com/navinfo/collect/library/map/layers/OmdbTaskLinkLayer.java diff --git a/collect-library/src/main/java/com/navinfo/collect/library/map/handler/LayerManagerHandler.kt b/collect-library/src/main/java/com/navinfo/collect/library/map/handler/LayerManagerHandler.kt index f3524706..f8a79584 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/map/handler/LayerManagerHandler.kt +++ b/collect-library/src/main/java/com/navinfo/collect/library/map/handler/LayerManagerHandler.kt @@ -41,6 +41,7 @@ import org.oscim.layers.tile.buildings.BuildingLayer import org.oscim.layers.tile.vector.VectorTileLayer import org.oscim.layers.tile.vector.labeling.LabelLayer import org.oscim.layers.tile.vector.labeling.LabelTileLoaderHook +import org.oscim.layers.vector.VectorLayer import org.oscim.map.Map import org.oscim.map.Map.UpdateListener import org.oscim.tiling.source.OkHttpEngine.OkHttpFactory @@ -142,6 +143,12 @@ open class LayerManagerHandler(context: AppCompatActivity, mapView: NIMapView,tr } } + /** + * 初始化任务Link高亮的图层 + * */ + private fun initOMDBTaskVectorLayer() { + } + /** * 切换基础底图样式 */ diff --git a/collect-library/src/main/java/com/navinfo/collect/library/map/layers/MultiPathLayer.java b/collect-library/src/main/java/com/navinfo/collect/library/map/layers/MultiPathLayer.java new file mode 100644 index 00000000..8f3efc9b --- /dev/null +++ b/collect-library/src/main/java/com/navinfo/collect/library/map/layers/MultiPathLayer.java @@ -0,0 +1,170 @@ +package com.navinfo.collect.library.map.layers; + +import com.navinfo.collect.library.utils.GeometryTools; +import org.locationtech.jts.geom.Geometry; +import org.locationtech.jts.geom.LineString; +import org.oscim.core.GeoPoint; +import org.oscim.layers.vector.PathLayer; +import org.oscim.layers.vector.geometries.LineDrawable; +import org.oscim.layers.vector.geometries.PolygonDrawable; +import org.oscim.layers.vector.geometries.Style; +import org.oscim.map.Map; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +/** + * Created by xiaoxiao on 2018/3/26. + */ + +public class MultiPathLayer extends PathLayer { + private List pathDrawableList; + + public MultiPathLayer(Map map, Style style) { + super(map, style); + mStyle = style; + pathDrawableList = new ArrayList<>(); + } + + public MultiPathLayer(Map map, Style style, String name) { + this(map, style); + } + + public MultiPathLayer(Map map, int lineColor, float lineWidth, int fillColor, float fillAlpha) { + this(map, Style.builder() + .stippleColor(lineColor) + .stipple(24) + .stippleWidth(lineWidth) + .strokeWidth(lineWidth) + .strokeColor(lineColor).fillColor(fillColor).fillAlpha(fillAlpha) + .fixed(true) + .randomOffset(false) + .build()); + } + + public MultiPathLayer(Map map, int lineColor, int fillColor, float fillAlpha) { + this(map, lineColor, 0.5f, fillColor, fillAlpha); + } + + /** + * 设置polygon的点位 + */ + public void setPathList(List> pointListList) { + if (pointListList == null || pointListList.isEmpty()) { + return; + } + for (List pointList : pointListList) { + if (pointList == null || pointList.size() < 2) { + return; + } + synchronized (this) { + LineDrawable lineDrawable = new LineDrawable(pointList, mStyle); + add(lineDrawable); + pathDrawableList.add(lineDrawable); + } + mWorker.submit(0); + update(); + } + } + + /** + * 移除正在绘制的polygon的图形 + */ + public void removePathDrawable(int i) { + if (pathDrawableList != null && pathDrawableList.size() > i) { + remove(pathDrawableList.get(i)); + update(); + } + } + + public void removePathDrawable(List geoPointList) { + LineString path = GeometryTools.getLineStrinGeo(geoPointList); + removePolygonDrawable(path); + } + + public void removePathDrawable(String pathStr) { + LineString path = (LineString) GeometryTools.createGeometry(pathStr); + removePolygonDrawable(path); + } + + public void removePolygonDrawable(Geometry path) { + if (pathDrawableList != null && !pathDrawableList.isEmpty()) { + Iterator iterator = pathDrawableList.iterator(); + while (iterator.hasNext()) { + LineDrawable lineDrawable = (LineDrawable) iterator.next(); + if (GeometryTools.createGeometry(lineDrawable.getGeometry().toString()).equals(path)) { + remove(lineDrawable); + iterator.remove(); + break; + } + } + mWorker.submit(0); + update(); + } + } + + public void addPathDrawable(List pointList) { + if (pathDrawableList != null) { + if (pointList == null || pointList.size() < 2) { + return; + } + synchronized (this) { + LineDrawable pathDrawable = new LineDrawable(pointList, mStyle); + add(pathDrawable); + pathDrawableList.add(pathDrawable); + } + mWorker.submit(0); + } + update(); + } + + public void addPathDrawable(LineString lineString) { + List geoPointList = GeometryTools.getGeoPoints(lineString.toString()); + addPathDrawable(geoPointList); + } + + public List getAllPathList() { + if (pathDrawableList != null && !pathDrawableList.isEmpty()) { + List pathList = new ArrayList<>(); + for (LineDrawable pathDrawable : pathDrawableList) { + pathList.add((LineString) GeometryTools.createGeometry(pathDrawable.getGeometry().toString())); + } + return pathList; + } + return null; + } + + public List> getAllPathGeoPointList() { + List pathList = getAllPathList(); + if (pathList != null) { + List> geopointList = new ArrayList<>(); + for (LineString path : pathList) { + geopointList.add(GeometryTools.getGeoPoints(path.toString())); + } + return geopointList; + } + return null; + } + + public List getPolygonDrawableList() { + return pathDrawableList; + } + + public void setPolygonDrawableList(List pathDrawableList) { + this.pathDrawableList = pathDrawableList; + } + + public void removeAllPathDrawable(){ + if (pathDrawableList != null && !pathDrawableList.isEmpty()) { + Iterator iterator = pathDrawableList.iterator(); + while (iterator.hasNext()) { + LineDrawable lineDrawable = (LineDrawable) iterator.next(); + remove(lineDrawable); + iterator.remove(); + } + mWorker.submit(0); + update(); + } + } +} diff --git a/collect-library/src/main/java/com/navinfo/collect/library/map/layers/OmdbTaskLinkLayer.java b/collect-library/src/main/java/com/navinfo/collect/library/map/layers/OmdbTaskLinkLayer.java new file mode 100644 index 00000000..d8d2a485 --- /dev/null +++ b/collect-library/src/main/java/com/navinfo/collect/library/map/layers/OmdbTaskLinkLayer.java @@ -0,0 +1,17 @@ +package com.navinfo.collect.library.map.layers; + +import org.oscim.layers.vector.VectorLayer; +import org.oscim.layers.vector.geometries.Drawable; +import org.oscim.map.Map; +import org.oscim.utils.SpatialIndex; + +public class OmdbTaskLinkLayer extends VectorLayer { + public OmdbTaskLinkLayer(Map map, SpatialIndex index) { + super(map, index); + } + + public OmdbTaskLinkLayer(Map map) { + super(map); + } + +}