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 0276195e..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( /** @@ -67,6 +67,6 @@ open class TaskBean @JvmOverloads constructor( var message: String = "" ) : RealmObject() { fun getDownLoadUrl(): String { - return "${Constant.SERVER_ADDRESS}devcp/download?fileStr=$id" + return "${Constant.SERVER_ADDRESS}devcp/download?fileStr=26" } } \ No newline at end of file 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<List<TaskBean>>() @@ -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/LayerManagerHandler.kt b/collect-library/src/main/java/com/navinfo/collect/library/map/handler/LayerManagerHandler.kt index 7e5ab8b8..085a7766 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 @@ -108,6 +108,12 @@ class LayerManagerHandler(context: AppCompatActivity, mapView: NIMapView,tracePa } } + /** + * 初始化任务Link高亮的图层 + * */ + private fun initOMDBTaskVectorLayer() { + } + /** * 切换基础底图样式 */ 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 8d0af45a..d5d2145f 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 @@ -7,6 +7,7 @@ import androidx.annotation.RequiresApi import androidx.appcompat.app.AppCompatActivity import com.navinfo.collect.library.R import com.navinfo.collect.library.map.NIMapView +import com.navinfo.collect.library.map.layers.OmdbTaskLinkLayer import com.navinfo.collect.library.utils.GeometryTools import com.navinfo.collect.library.utils.StringUtil import org.locationtech.jts.geom.LineString @@ -21,10 +22,11 @@ import org.oscim.layers.marker.MarkerInterface import org.oscim.layers.marker.MarkerItem import org.oscim.layers.marker.MarkerSymbol import org.oscim.layers.vector.PathLayer +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 { @@ -57,6 +59,19 @@ 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 { mMapView.vtmMap.events.bind(this) 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<LineDrawable> 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<List<GeoPoint>> pointListList) { + if (pointListList == null || pointListList.isEmpty()) { + return; + } + for (List<GeoPoint> 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<GeoPoint> 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<GeoPoint> 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<GeoPoint> geoPointList = GeometryTools.getGeoPoints(lineString.toString()); + addPathDrawable(geoPointList); + } + + public List<LineString> getAllPathList() { + if (pathDrawableList != null && !pathDrawableList.isEmpty()) { + List<LineString> pathList = new ArrayList<>(); + for (LineDrawable pathDrawable : pathDrawableList) { + pathList.add((LineString) GeometryTools.createGeometry(pathDrawable.getGeometry().toString())); + } + return pathList; + } + return null; + } + + public List<List<GeoPoint>> getAllPathGeoPointList() { + List<LineString> pathList = getAllPathList(); + if (pathList != null) { + List<List<GeoPoint>> geopointList = new ArrayList<>(); + for (LineString path : pathList) { + geopointList.add(GeometryTools.getGeoPoints(path.toString())); + } + return geopointList; + } + return null; + } + + public List<LineDrawable> getPolygonDrawableList() { + return pathDrawableList; + } + + public void setPolygonDrawableList(List<LineDrawable> 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.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<String, Drawable>() + + 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<HadLinkDvoBean>, 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