From 58136320d46409f4873356612ec6c1a519dda14b Mon Sep 17 00:00:00 2001 From: xiaoyan Date: Thu, 27 Apr 2023 15:04:18 +0800 Subject: [PATCH 1/2] =?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); + } + +} From 3eed9bad33556432114cf7c2a79f6832313099a7 Mon Sep 17 00:00:00 2001 From: xiaoyan Date: Thu, 27 Apr 2023 17:16:53 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix:=20=E5=A2=9E=E5=8A=A0=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E9=AB=98=E4=BA=AE=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/navinfo/omqs/bean/TaskBean.kt | 2 +- .../java/com/navinfo/omqs/db/MyRealmModule.kt | 4 +- .../ui/fragment/tasklist/TaskListViewModel.kt | 13 ++++- .../library/data/entity}/HadLinkDvoBean.kt | 3 +- .../library/map/handler/LineHandler.kt | 12 ++++- .../library/map/layers/OmdbTaskLinkLayer.java | 22 -------- .../library/map/layers/OmdbTaskLinkLayer.kt | 54 +++++++++++++++++++ 7 files changed, 81 insertions(+), 29 deletions(-) rename {app/src/main/java/com/navinfo/omqs/bean => collect-library/src/main/java/com/navinfo/collect/library/data/entity}/HadLinkDvoBean.kt (80%) delete mode 100644 collect-library/src/main/java/com/navinfo/collect/library/map/layers/OmdbTaskLinkLayer.java create mode 100644 collect-library/src/main/java/com/navinfo/collect/library/map/layers/OmdbTaskLinkLayer.kt diff --git a/app/src/main/java/com/navinfo/omqs/bean/TaskBean.kt b/app/src/main/java/com/navinfo/omqs/bean/TaskBean.kt index 2f2f6566..d46f6a77 100644 --- a/app/src/main/java/com/navinfo/omqs/bean/TaskBean.kt +++ b/app/src/main/java/com/navinfo/omqs/bean/TaskBean.kt @@ -1,6 +1,7 @@ package com.navinfo.omqs.bean import com.google.gson.annotations.SerializedName +import com.navinfo.collect.library.data.entity.HadLinkDvoBean import com.navinfo.omqs.Constant import com.navinfo.omqs.tools.FileManager import com.navinfo.omqs.tools.FileManager.Companion.FileDownloadStatus @@ -8,7 +9,6 @@ import io.realm.RealmList import io.realm.RealmObject import io.realm.annotations.Ignore import io.realm.annotations.PrimaryKey -import io.realm.annotations.RealmClass open class TaskBean @JvmOverloads constructor( /** diff --git a/app/src/main/java/com/navinfo/omqs/db/MyRealmModule.kt b/app/src/main/java/com/navinfo/omqs/db/MyRealmModule.kt index cab1956b..deb0ee86 100644 --- a/app/src/main/java/com/navinfo/omqs/db/MyRealmModule.kt +++ b/app/src/main/java/com/navinfo/omqs/db/MyRealmModule.kt @@ -1,9 +1,9 @@ package com.navinfo.omqs.db -import com.navinfo.omqs.bean.HadLinkDvoBean +import com.navinfo.collect.library.data.entity.HadLinkDvoBean import com.navinfo.omqs.bean.TaskBean import io.realm.annotations.RealmModule -@RealmModule(classes = [TaskBean::class, HadLinkDvoBean::class]) +@RealmModule(classes = [TaskBean::class]) class MyRealmModule { } \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskListViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskListViewModel.kt index 53ee23dd..b9dd9165 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskListViewModel.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskListViewModel.kt @@ -1,11 +1,16 @@ package com.navinfo.omqs.ui.fragment.tasklist import android.content.Context +import android.graphics.Color +import android.os.Build import android.util.Log import android.widget.Toast +import androidx.annotation.RequiresApi +import androidx.core.graphics.toColor import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import com.navinfo.collect.library.map.NIMapController import com.navinfo.omqs.bean.TaskBean import com.navinfo.omqs.http.NetResult import com.navinfo.omqs.http.NetworkService @@ -19,7 +24,8 @@ import javax.inject.Inject @HiltViewModel class TaskListViewModel @Inject constructor( - private val networkService: NetworkService + private val networkService: NetworkService, + private val niMapController: NIMapController ) : ViewModel() { val liveDataTaskList = MutableLiveData>() @@ -70,6 +76,11 @@ class TaskListViewModel @Inject constructor( for (item in taskList) { FileManager.checkOMDBFileInfo(item) } +// niMapController.lineHandler.omdbTaskLinkLayer.setLineColor(Color.rgb(0, 255, 0).toColor()) +// taskList.forEach { +// niMapController.lineHandler.omdbTaskLinkLayer.addLineList(it.hadLinkDvoList) +// } +// niMapController.lineHandler.omdbTaskLinkLayer.update() liveDataTaskList.postValue(taskList) } diff --git a/app/src/main/java/com/navinfo/omqs/bean/HadLinkDvoBean.kt b/collect-library/src/main/java/com/navinfo/collect/library/data/entity/HadLinkDvoBean.kt similarity index 80% rename from app/src/main/java/com/navinfo/omqs/bean/HadLinkDvoBean.kt rename to collect-library/src/main/java/com/navinfo/collect/library/data/entity/HadLinkDvoBean.kt index 28373667..7430050d 100644 --- a/app/src/main/java/com/navinfo/omqs/bean/HadLinkDvoBean.kt +++ b/collect-library/src/main/java/com/navinfo/collect/library/data/entity/HadLinkDvoBean.kt @@ -1,7 +1,6 @@ -package com.navinfo.omqs.bean +package com.navinfo.collect.library.data.entity import io.realm.RealmObject -import io.realm.annotations.RealmClass open class HadLinkDvoBean @JvmOverloads constructor( /** diff --git a/collect-library/src/main/java/com/navinfo/collect/library/map/handler/LineHandler.kt b/collect-library/src/main/java/com/navinfo/collect/library/map/handler/LineHandler.kt index dd733b4d..1d39d1a6 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/map/handler/LineHandler.kt +++ b/collect-library/src/main/java/com/navinfo/collect/library/map/handler/LineHandler.kt @@ -26,7 +26,7 @@ import org.oscim.layers.vector.VectorLayer import org.oscim.layers.vector.geometries.Style import org.oscim.map.Map -@RequiresApi(Build.VERSION_CODES.M) +@RequiresApi(Build.VERSION_CODES.N) class LineHandler(context: AppCompatActivity, mapView: NIMapView) : BaseHandler(context, mapView), Map.UpdateListener { @@ -60,6 +60,16 @@ class LineHandler(context: AppCompatActivity, mapView: NIMapView) : BaseHandler( private val mDefaultPathLayer: PathLayer val omdbTaskLinkLayer by lazy { + val omdbTaskLinkLayer = OmdbTaskLinkLayer(mMapView.vtmMap, + Style.builder() +// .stippleColor(context.resources.getColor(R.color.draw_line_red_color, null)) + .fillColor(context.resources.getColor(R.color.draw_line_red_color, null)) + .fillAlpha(0.5f) + .strokeColor(context.resources.getColor(R.color.draw_line_red_color, null)) + .strokeWidth(4f) + .fixed(true).build()) + addLayer(omdbTaskLinkLayer, NIMapView.LAYER_GROUPS.VECTOR) + omdbTaskLinkLayer } init { 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 deleted file mode 100644 index 45a77707..00000000 --- a/collect-library/src/main/java/com/navinfo/collect/library/map/layers/OmdbTaskLinkLayer.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.navinfo.collect.library.map.layers; - -import org.locationtech.jts.geom.Geometry; -import org.locationtech.jts.geom.LineString; -import org.oscim.layers.vector.VectorLayer; -import org.oscim.layers.vector.geometries.Drawable; -import org.oscim.layers.vector.geometries.Style; -import org.oscim.map.Map; -import org.oscim.utils.SpatialIndex; - -import java.util.HashMap; -import java.util.List; - -public class OmdbTaskLinkLayer extends VectorLayer { - private java.util.Map lineList = new HashMap<>(); - private Style style; - public OmdbTaskLinkLayer(Map map) { - super(map); - } - - -} diff --git a/collect-library/src/main/java/com/navinfo/collect/library/map/layers/OmdbTaskLinkLayer.kt b/collect-library/src/main/java/com/navinfo/collect/library/map/layers/OmdbTaskLinkLayer.kt new file mode 100644 index 00000000..02de5184 --- /dev/null +++ b/collect-library/src/main/java/com/navinfo/collect/library/map/layers/OmdbTaskLinkLayer.kt @@ -0,0 +1,54 @@ +package com.navinfo.collect.library.map.layers + +import android.graphics.Color +import com.navinfo.collect.library.R +import com.navinfo.collect.library.data.entity.HadLinkDvoBean +import com.navinfo.collect.library.utils.GeometryTools +import org.locationtech.jts.geom.Geometry +import org.oscim.layers.vector.VectorLayer +import org.oscim.layers.vector.geometries.Drawable +import org.oscim.layers.vector.geometries.LineDrawable +import org.oscim.layers.vector.geometries.Style +import org.oscim.map.Map + +class OmdbTaskLinkLayer(map: Map, private var style: Style) : VectorLayer(map) { + private val lineMap = HashMap() + + fun addLine(hadLinkDvoBean: HadLinkDvoBean, style: Style = this.style) { + hadLinkDvoBean.let { + if (!lineMap.containsKey(it.linkPid)) { + // 添加geometry到图层上 + val lineDrawable = LineDrawable(GeometryTools.createGeometry(it.geometry), style) + super.add(lineDrawable) + lineMap[it.linkPid] = lineDrawable + } + } + } + + fun addLineList(hadLinkDvoBeanList: List, style: Style = this.style) { + hadLinkDvoBeanList.forEach { + addLine(it, style) + } + } + + fun removeLine(linkPid: String):Boolean { + if (lineMap.containsKey(linkPid)) { + super.remove(lineMap[linkPid]) + lineMap.remove(linkPid) + } + return false + } + + fun removeLine(geometry: Geometry) { + super.remove(geometry) + } + + fun setLineColor(color: Color) { + this.style = Style.builder() + .fillColor(color.toArgb()) + .fillAlpha(0.5f) + .strokeColor(color.toArgb()) + .strokeWidth(4f) + .fixed(true).build() + } +} \ No newline at end of file