From 791fe30bf4b3251f8a80b51e525ef6ba5aee9d6a Mon Sep 17 00:00:00 2001 From: qiji4215 Date: Thu, 9 Nov 2023 15:13:22 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=BD=A6=E4=BF=A1?= =?UTF-8?q?=E8=A7=A3=E6=9E=90=E9=94=99=E8=AF=AF=E5=B9=B6=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E4=B8=BB=E7=82=B9=E4=BD=8D=E6=8D=95=E6=8D=89=E4=B8=9A=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/navinfo/omqs/bean/ImportConfig.kt | 5 ++ .../com/navinfo/omqs/db/ImportPreProcess.kt | 24 ++++-- .../com/navinfo/omqs/db/RealmOperateHelper.kt | 3 +- .../omqs/ui/activity/map/MainActivity.kt | 25 ++++-- .../main/res/menu/personal_center_menu.xml | 2 +- .../library/data/entity/ReferenceEntity.kt | 12 +-- .../library/data/entity/RenderEntity.kt | 9 +- .../collect/library/enums/DataCodeEnum.kt | 2 + .../collect/library/utils/GeometryTools.java | 83 ++++++++++++++++--- vtm | 2 +- 10 files changed, 130 insertions(+), 37 deletions(-) diff --git a/app/src/main/java/com/navinfo/omqs/bean/ImportConfig.kt b/app/src/main/java/com/navinfo/omqs/bean/ImportConfig.kt index 6e07e485..a93f0de0 100644 --- a/app/src/main/java/com/navinfo/omqs/bean/ImportConfig.kt +++ b/app/src/main/java/com/navinfo/omqs/bean/ImportConfig.kt @@ -3,6 +3,7 @@ package com.navinfo.omqs.bean import android.util.Log import com.google.gson.annotations.Expose import com.navinfo.collect.library.data.entity.RenderEntity +import com.navinfo.collect.library.enums.DataCodeEnum import com.navinfo.omqs.db.ImportPreProcess import io.realm.Realm import kotlin.reflect.KFunction @@ -26,6 +27,10 @@ class ImportConfig { if (transformList.isNullOrEmpty()) { return renderEntity } + if(renderEntity.code==DataCodeEnum.OMDB_LANEINFO.code){ + Log.e("车信","====车信") + } + for (transform in transformList) { // 开始执行转换 val key: String = transform.k diff --git a/app/src/main/java/com/navinfo/omqs/db/ImportPreProcess.kt b/app/src/main/java/com/navinfo/omqs/db/ImportPreProcess.kt index ba296f44..53cdfb0f 100644 --- a/app/src/main/java/com/navinfo/omqs/db/ImportPreProcess.kt +++ b/app/src/main/java/com/navinfo/omqs/db/ImportPreProcess.kt @@ -125,8 +125,7 @@ class ImportPreProcess { ) * Math.sin(radian) // 计算偏移后的点 - val coord = - Coordinate(point.getX() + dy, point.getY() - dx) + val coord = Coordinate(point.getX() + dy, point.getY() - dx) // 记录偏移后的点位或线数据,如果数据为线时,记录的偏移后数据为最后一个点右移后,方向与线的最后两个点平行同向的单位向量 if (Geometry.TYPENAME_POINT == geometry?.geometryType) { @@ -193,12 +192,11 @@ class ImportPreProcess { ) * Math.sin(radian) // 计算偏移后的点 - val coord = - Coordinate(point.getX() - dx, point.getY() - dy) + val coord = Coordinate(point.getX() - dx, point.getY() - dy) // 将这个点记录在数据中 - val geometryTranslate: Geometry = - GeometryTools.createGeometry(doubleArrayOf(coord.x, coord.y)) + val geometryTranslate: Geometry = GeometryTools.createGeometry(doubleArrayOf(coord.x, coord.y)) + renderEntity.geometry = geometryTranslate.toString() } @@ -654,10 +652,20 @@ class ImportPreProcess { Log.d("unpackingLaneInfo", referenceEntity.properties["symbol"].toString()) referenceEntity.propertiesDb = DeflaterUtil.zipString(JSON.toJSONString(referenceEntity.properties)) renderEntity.referenceEntitys?.add(referenceEntity) - //listResult.add(referenceEntity) + Log.e("qj", "车信===插入车信箭头") + //listResult.add(referenceEntity) } //insertData(listResult) } + //将主表线转化为单个点,按点要素实现捕捉 + if (Geometry.TYPENAME_LINESTRING == renderEntity.wkt?.geometryType) { + var coordinates = renderEntity.wkt?.coordinates + if(coordinates!=null){ + val p1: Coordinate = coordinates[0] + renderEntity.geometry = GeometryTools.createGeometry(GeoPoint(p1.y,p1.x)).toString() + } + } + } } @@ -1217,7 +1225,7 @@ class ImportPreProcess { private fun createZLevelReference(renderEntity: RenderEntity): ReferenceEntity { val zLevelReference = ReferenceEntity() - zLevelReference.renderEntityId = renderEntity.id + //zLevelReference.renderEntityId = renderEntity.id zLevelReference.name = "${renderEntity.name}参考点" zLevelReference.code = renderEntity.code zLevelReference.table = renderEntity.table diff --git a/app/src/main/java/com/navinfo/omqs/db/RealmOperateHelper.kt b/app/src/main/java/com/navinfo/omqs/db/RealmOperateHelper.kt index 97f81dd7..c3b62325 100644 --- a/app/src/main/java/com/navinfo/omqs/db/RealmOperateHelper.kt +++ b/app/src/main/java/com/navinfo/omqs/db/RealmOperateHelper.kt @@ -306,7 +306,8 @@ class RealmOperateHelper() { .equals("LINESTRING") || it.wkt?.geometryType?.uppercase().equals("POLYGON") } else { polygon.intersects(it.wkt) && it.wkt?.geometryType?.uppercase() - .equals("POINT") || it.wkt?.geometryType?.uppercase().equals("POLYGON") + .equals("POINT") || it.wkt?.geometryType?.uppercase() + .equals("LINESTRING") || it.wkt?.geometryType?.uppercase().equals("POLYGON") } }?.toList() queryResult?.let { diff --git a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainActivity.kt b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainActivity.kt index e3cc8287..624d1354 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainActivity.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainActivity.kt @@ -16,8 +16,6 @@ import androidx.activity.viewModels import androidx.databinding.DataBindingUtil import androidx.fragment.app.Fragment import androidx.lifecycle.lifecycleScope -import androidx.lifecycle.viewModelScope -import androidx.navigation.Navigation import androidx.navigation.findNavController import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView @@ -48,17 +46,13 @@ import com.navinfo.omqs.ui.other.BaseToast import com.navinfo.omqs.ui.widget.RecyclerViewSpacesItemDecoration import com.navinfo.omqs.util.FlowEventBus import com.navinfo.omqs.util.NaviStatus -import com.navinfo.omqs.util.SignUtil import com.navinfo.omqs.util.SpeakMode import dagger.hilt.android.AndroidEntryPoint -import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.launch import org.oscim.core.GeoPoint import org.oscim.renderer.GLViewport import org.videolan.vlc.Util -import sun.misc.BASE64Decoder -import sun.misc.BASE64Encoder import java.math.BigDecimal import java.math.RoundingMode import javax.inject.Inject @@ -824,6 +818,25 @@ class MainActivity : BaseActivity() { * zoomOut */ fun zoomOutOnclick(view: View) { + val result = mutableListOf() + for (i in 0 until 10) { + var renderEntity: RenderEntity = RenderEntity() + renderEntity.geometry = "POINT(116.2694${i}13016946 40.0844${i}5791644373 0)" + result.add(renderEntity) + } + //计算后 + var index = 0 + Log.e("qj","====计算开始") + var lastRender:RenderEntity = RenderEntity() + GeometryTools.groupByDistance(result, 5.0)?.forEach { + if(lastRender!=null&&lastRender.geometry!=null&& lastRender.geometry != ""){ + if(it.geometry!=lastRender.geometry){ + Log.e("qj","${index++}====计算后"+it.geometry) + } + } + lastRender = it + } + Log.e("qj","====计算结束") mapController.animationHandler.zoomOut() } diff --git a/app/src/main/res/menu/personal_center_menu.xml b/app/src/main/res/menu/personal_center_menu.xml index 0b568fcd..eddd9ad9 100644 --- a/app/src/main/res/menu/personal_center_menu.xml +++ b/app/src/main/res/menu/personal_center_menu.xml @@ -64,7 +64,7 @@ + android:title="版本:23QE4_V1.5.8_20231103_A" /> diff --git a/collect-library/src/main/java/com/navinfo/collect/library/data/entity/ReferenceEntity.kt b/collect-library/src/main/java/com/navinfo/collect/library/data/entity/ReferenceEntity.kt index 415ad9c1..4bf9b066 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/data/entity/ReferenceEntity.kt +++ b/collect-library/src/main/java/com/navinfo/collect/library/data/entity/ReferenceEntity.kt @@ -1,5 +1,6 @@ package com.navinfo.collect.library.data.entity +import android.os.Parcelable import android.util.Log import com.google.gson.Gson import com.google.gson.reflect.TypeToken @@ -12,26 +13,25 @@ import io.realm.RealmObject import io.realm.RealmSet import io.realm.annotations.Ignore import io.realm.annotations.PrimaryKey +import kotlinx.parcelize.Parcelize import org.locationtech.jts.geom.Geometry import java.util.* /** * 渲染要素对应的实体 * */ -open class ReferenceEntity() : RealmObject() { - // @PrimaryKey -// var id: Int = 0 // id -// var renderEntityId: Int = 0 // 参考的renderEntity的Id +@Parcelize +open class ReferenceEntity() : RealmObject(), Parcelable { + @PrimaryKey + var id: String = UUID.randomUUID().toString() // id @Ignore lateinit var name: String //要素名 lateinit var table: String //要素表名 var propertiesDb: String = "" var code: String = "0" // 要素编码 - @Ignore var zoomMin: Int = 18 //显示最小级别 - @Ignore var zoomMax: Int = 23 //显示最大级别 var taskId: Int = 0 //任务ID var enable: Int = 0 // 默认0不是显示 1为渲染显示 diff --git a/collect-library/src/main/java/com/navinfo/collect/library/data/entity/RenderEntity.kt b/collect-library/src/main/java/com/navinfo/collect/library/data/entity/RenderEntity.kt index 44a5940e..96de1505 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/data/entity/RenderEntity.kt +++ b/collect-library/src/main/java/com/navinfo/collect/library/data/entity/RenderEntity.kt @@ -10,20 +10,23 @@ import com.navinfo.collect.library.utils.GeometryTools import com.navinfo.collect.library.utils.GeometryToolsKt import com.navinfo.collect.library.utils.StrZipUtil import io.realm.RealmDictionary +import io.realm.RealmList import io.realm.RealmObject import io.realm.RealmSet import io.realm.annotations.Ignore import io.realm.annotations.Index +import io.realm.annotations.PrimaryKey import kotlinx.parcelize.Parcelize import org.locationtech.jts.geom.Geometry +import java.util.UUID /** * 渲染要素对应的实体 * */ @Parcelize open class RenderEntity() : RealmObject(), Parcelable { - // @PrimaryKey -// var id: String = UUID.randomUUID().toString() // id + @PrimaryKey + var id: String = UUID.randomUUID().toString() // id lateinit var name: String //要素名 lateinit var table: String //要素表名 var code: String = "0" // 要素编码 @@ -108,7 +111,7 @@ open class RenderEntity() : RealmObject(), Parcelable { @Index var linkPid: String = "" // RenderEntity关联的linkPid集合(可能会关联多个) var linkRelation: LinkRelation? = null - var referenceEntitys: RealmSet? = RealmSet()// + var referenceEntitys: RealmList = RealmList()// constructor(name: String) : this() { this.name = name diff --git a/collect-library/src/main/java/com/navinfo/collect/library/enums/DataCodeEnum.kt b/collect-library/src/main/java/com/navinfo/collect/library/enums/DataCodeEnum.kt index 68d28973..81eb8526 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/enums/DataCodeEnum.kt +++ b/collect-library/src/main/java/com/navinfo/collect/library/enums/DataCodeEnum.kt @@ -33,6 +33,7 @@ enum class DataCodeEnum(var tableName: String, var code: String) { OMDB_RAMP_7("高速直连出口匝道高速出入口匝道", "2037-7"), OMDB_MULTI_DIGITIZED("上下线分离", "2040"), OMDB_LANE_NUM("车道数", "2041"), + OMDB_LANE_TYPE_ACCESS("车道类型", "2092"), OMDB_PHY_LANENUM("物理车道数", "2097"), OMDB_VIADUCT("高架", "2043"), OMDB_RDBOUND_BOUNDARYTYPE("道路边界类型", "2083"), @@ -61,6 +62,7 @@ enum class DataCodeEnum(var tableName: String, var code: String) { OMDB_LINK_FORM2_11("风景路线", "2206-11"), OMDB_LINK_FORM2_12("车辆测试路段", "2206-12"), OMDB_LINK_FORM2_13("驾照考试路段", "2206-13"), + OMDB_LANE_ACCESS("通行车辆类型Lane", "2638"), OMDB_OBJECT_OH_STRUCT("上方障碍物","3001"), OMDB_OBJECT_TEXT("文字", "3002"), OMDB_OBJECT_SYMBOL("符号", "3003"), diff --git a/collect-library/src/main/java/com/navinfo/collect/library/utils/GeometryTools.java b/collect-library/src/main/java/com/navinfo/collect/library/utils/GeometryTools.java index a512c6ec..56ba3839 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/utils/GeometryTools.java +++ b/collect-library/src/main/java/com/navinfo/collect/library/utils/GeometryTools.java @@ -5,6 +5,8 @@ import android.os.Build; import android.text.TextUtils; import android.util.Log; +import com.navinfo.collect.library.data.entity.RenderEntity; + import org.locationtech.jts.geom.Coordinate; import org.locationtech.jts.geom.Geometry; import org.locationtech.jts.geom.GeometryFactory; @@ -1452,6 +1454,7 @@ public class GeometryTools { /** * 距离转米 + * * @param distance * @param latitude * @return @@ -1463,10 +1466,12 @@ public class GeometryTools { double radianDegree = 2 * Math.asin(Math.sin(radianDistance / 2) / Math.cos(radianLatitude)); return Math.toDegrees(radianDegree); } + /** * 获取指定tile对应的polygon面 + * * @param tile vtm中的瓦片 - * */ + */ public static Polygon getTilePolygon(Tile tile) { // 获取当前tile的起点坐标 double startLongitude = MercatorProjection.tileXToLongitude(tile.tileX, tile.zoomLevel); @@ -1476,6 +1481,7 @@ public class GeometryTools { return GeometryTools.createPolygonFromCoords(new Coordinate[]{new Coordinate(startLongitude, startLatitude), new Coordinate(endLongitude, startLatitude), new Coordinate(endLongitude, endLatitude), new Coordinate(startLongitude, endLatitude), new Coordinate(startLongitude, startLatitude)}); } + /** * 经纬度转墨卡托 */ @@ -1509,13 +1515,13 @@ public class GeometryTools { /** - * @param distLeft 0.00001为一米 + * @param distLeft 0.00001为一米 * @param distRight 单位km - * @param wkt 几何 + * @param wkt 几何 * @return */ - public static String computeLine(Double distLeft,Double distRight,String wkt){ - if(!TextUtils.isEmpty(wkt)){ + public static String computeLine(Double distLeft, Double distRight, String wkt) { + if (!TextUtils.isEmpty(wkt)) { Geometry lineString1 = GeometryTools.createGeometry(wkt); BufferParameters parameters1 = new BufferParameters(); parameters1.setJoinStyle(BufferParameters.DEFAULT_QUADRANT_SEGMENTS); @@ -1525,7 +1531,7 @@ public class GeometryTools { Geometry buffer = BufferOp.bufferOp(lineString1, distLeft, parameters1); Geometry buffer2 = BufferOp.bufferOp(lineString1, -distRight, parameters1); String bufferWkt = buffer.union(buffer2).toString(); - Log.e("qj",bufferWkt); + Log.e("qj", bufferWkt); return bufferWkt; } return ""; @@ -1536,8 +1542,8 @@ public class GeometryTools { * @param wkt 几何 * @return */ - public static String computeLine(Double dist,String wkt){ - if(!TextUtils.isEmpty(wkt)){ + public static String computeLine(Double dist, String wkt) { + if (!TextUtils.isEmpty(wkt)) { Geometry lineString1 = GeometryTools.createGeometry(wkt); BufferParameters parameters1 = new BufferParameters(); parameters1.setJoinStyle(BufferParameters.CAP_FLAT); @@ -1547,8 +1553,8 @@ public class GeometryTools { Geometry buffer = BufferOp.bufferOp(lineString1, dist, parameters1); int coorsLength = lineString1.getCoordinates().length; List list = new ArrayList<>(); - for (int i = coorsLength; i < buffer.getCoordinates().length-1; i++) { - list.add(buffer.getCoordinates()[i]); + for (int i = coorsLength; i < buffer.getCoordinates().length - 1; i++) { + list.add(buffer.getCoordinates()[i]); } Coordinate[] coordinates = new Coordinate[list.size()]; for (int i = 0; i < list.size(); i++) { @@ -1564,8 +1570,63 @@ public class GeometryTools { //定义垂线 FootAndDistance pointPairDistance = new FootAndDistance(point); Coordinate coordinate = new Coordinate(point.getLongitude(), point.getLatitude()); - pointPairDistance.computeDistance(geometry,coordinate); + pointPairDistance.computeDistance(geometry, coordinate); return pointPairDistance; } + + /** + * 按距离分组 + * + * @param list + * @return + */ + public static List groupByDistance(List list, double disance) { + + if (list == null || disance <= 0) { + return null; + } + + List listReslut = new ArrayList<>(); + + java.util.Map calcMap = new HashMap<>(); + + int count = 0; + //遍历开始 + for (RenderEntity renderEntity : list) { + + if (!calcMap.containsKey(renderEntity.getId())) { + + //跟要素遍历对比,如果统一个点直接标记计算并记录在内,已经计算过不在二次计算 + for (RenderEntity renderEntityTemp : list) { + + if (!calcMap.containsKey(renderEntity.getId())) { + if (renderEntity.getId().equals(renderEntityTemp.getId())) { + listReslut.add(renderEntityTemp); + count++; + calcMap.put(renderEntityTemp.getId(), renderEntityTemp); + } else { + GeoPoint geoPoint = createGeoPoint(renderEntity.getGeometry()); + GeoPoint geoPoint1 = createGeoPoint(renderEntityTemp.getGeometry()); + double dis = getDistance(geoPoint.getLatitude(), geoPoint.getLongitude(), geoPoint1.getLatitude(), geoPoint1.getLongitude()); + Log.e("qj", "====计算间距" + dis); + if (geoPoint != null && geoPoint1 != null && dis <= disance) { + //只取第一个坐标 + renderEntityTemp.setGeometry(renderEntity.getGeometry()); + //renderEntity.setProperties(renderEntity.getProperties()); + calcMap.put(renderEntityTemp.getId(), renderEntityTemp); + listReslut.add(renderEntityTemp); + } + + } + } + } + + } + } + + Log.e("qj", "====计算间距====" + count); + + return listReslut; + } } diff --git a/vtm b/vtm index ee88167c..9e0cc6dc 160000 --- a/vtm +++ b/vtm @@ -1 +1 @@ -Subproject commit ee88167c7de989b3f7c71ae00d9580ff91fd3bf6 +Subproject commit 9e0cc6dcdce04d1082ed6459e8810d6329e8cfdc From e4aff19599c5618454cc654191e4ab1687acadde Mon Sep 17 00:00:00 2001 From: qiji4215 Date: Thu, 9 Nov 2023 16:14:31 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=A4=E9=80=9A?= =?UTF-8?q?=E6=A0=87=E7=89=8C=E5=90=8C=E7=82=B9=E4=BD=8D=E5=9D=90=E6=A0=87?= =?UTF-8?q?=E8=BD=AC=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/omdb_config.json | 2 +- .../java/com/navinfo/omqs/db/RealmOperateHelper.kt | 3 +-- .../com/navinfo/omqs/ui/activity/map/MainActivity.kt | 3 ++- collect-library/src/main/assets/editormarker.xml | 2 +- .../collect/library/map/source/OMDBDataDecoder.java | 4 +++- .../navinfo/collect/library/utils/GeometryTools.java | 10 ++++++++-- 6 files changed, 16 insertions(+), 8 deletions(-) diff --git a/app/src/main/assets/omdb_config.json b/app/src/main/assets/omdb_config.json index 0a684a78..c190b36a 100644 --- a/app/src/main/assets/omdb_config.json +++ b/app/src/main/assets/omdb_config.json @@ -615,7 +615,7 @@ "table": "OMDB_LANE_LINK_LG", "code": 5001, "name": "车道中心线", - "catch": true, + "catch": false, "isDependOnOtherTable": false, "checkLinkId": false, "zoomMin": 18, diff --git a/app/src/main/java/com/navinfo/omqs/db/RealmOperateHelper.kt b/app/src/main/java/com/navinfo/omqs/db/RealmOperateHelper.kt index 009dd84d..6bff40d4 100644 --- a/app/src/main/java/com/navinfo/omqs/db/RealmOperateHelper.kt +++ b/app/src/main/java/com/navinfo/omqs/db/RealmOperateHelper.kt @@ -306,8 +306,7 @@ class RealmOperateHelper() { .equals("LINESTRING") || it.wkt?.geometryType?.uppercase().equals("POLYGON") } else { polygon.intersects(it.wkt) && it.wkt?.geometryType?.uppercase() - .equals("POINT") || it.wkt?.geometryType?.uppercase() - .equals("LINESTRING") || it.wkt?.geometryType?.uppercase().equals("POLYGON") + .equals("POINT") || it.wkt?.geometryType?.uppercase().equals("POLYGON") } }?.toList() queryResult?.let { diff --git a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainActivity.kt b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainActivity.kt index 624d1354..365bb182 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainActivity.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainActivity.kt @@ -23,6 +23,7 @@ import com.blankj.utilcode.util.ClipboardUtils import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.tabs.TabLayout import com.navinfo.collect.library.data.entity.RenderEntity +import com.navinfo.collect.library.enums.DataCodeEnum import com.navinfo.collect.library.map.NIMapController import com.navinfo.collect.library.map.handler.MeasureLayerHandler import com.navinfo.collect.library.utils.DeflaterUtil @@ -828,7 +829,7 @@ class MainActivity : BaseActivity() { var index = 0 Log.e("qj","====计算开始") var lastRender:RenderEntity = RenderEntity() - GeometryTools.groupByDistance(result, 5.0)?.forEach { + GeometryTools.groupByDistance(DataCodeEnum.OMDB_TRAFFIC_SIGN.code,result, 5.0)?.forEach { if(lastRender!=null&&lastRender.geometry!=null&& lastRender.geometry != ""){ if(it.geometry!=lastRender.geometry){ Log.e("qj","${index++}====计算后"+it.geometry) diff --git a/collect-library/src/main/assets/editormarker.xml b/collect-library/src/main/assets/editormarker.xml index f3e26dc5..069d9a1a 100644 --- a/collect-library/src/main/assets/editormarker.xml +++ b/collect-library/src/main/assets/editormarker.xml @@ -2022,7 +2022,7 @@ - + diff --git a/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBDataDecoder.java b/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBDataDecoder.java index 95b92fc2..bba003e7 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBDataDecoder.java +++ b/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBDataDecoder.java @@ -70,7 +70,9 @@ public class OMDBDataDecoder extends TileDecoder { mTileY = tile.tileY / mTileScale; mTileScale *= Tile.SIZE; - listResult.stream().iterator().forEachRemaining(new Consumer() { + List list = GeometryTools.groupByDistance(DataCodeEnum.OMDB_TRAFFIC_SIGN.code,listResult,5.0); + + list.stream().iterator().forEachRemaining(new Consumer() { @Override public void accept(RenderEntity renderEntity) { diff --git a/collect-library/src/main/java/com/navinfo/collect/library/utils/GeometryTools.java b/collect-library/src/main/java/com/navinfo/collect/library/utils/GeometryTools.java index 56ba3839..c3ee4fe1 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/utils/GeometryTools.java +++ b/collect-library/src/main/java/com/navinfo/collect/library/utils/GeometryTools.java @@ -1581,7 +1581,7 @@ public class GeometryTools { * @param list * @return */ - public static List groupByDistance(List list, double disance) { + public static List groupByDistance(String code,List list, double disance) { if (list == null || disance <= 0) { return null; @@ -1595,6 +1595,12 @@ public class GeometryTools { //遍历开始 for (RenderEntity renderEntity : list) { + if(!TextUtils.isEmpty(code)&&renderEntity.getCode()!=code){ + listReslut.add(renderEntity); + calcMap.put(renderEntity.getId(),renderEntity); + continue; + } + if (!calcMap.containsKey(renderEntity.getId())) { //跟要素遍历对比,如果统一个点直接标记计算并记录在内,已经计算过不在二次计算 @@ -1625,7 +1631,7 @@ public class GeometryTools { } } - Log.e("qj", "====计算间距====" + count); + Log.e("qj", "====计算间距====" + listReslut.size()+"==判断后=="+list.size()); return listReslut; } From b123fa543f63f26d6829e8752566215c391968a2 Mon Sep 17 00:00:00 2001 From: qiji4215 Date: Thu, 9 Nov 2023 17:25:25 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=A4=E9=80=9A?= =?UTF-8?q?=E6=A0=87=E7=89=8C=E4=B8=BA=E5=90=8C=E7=82=B9=E4=BD=8D=E8=81=9A?= =?UTF-8?q?=E5=90=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- collect-library/resources/rendertheme.xsd | 2 +- .../src/main/assets/editormarker.xml | 6 ++--- .../collect/library/enums/DataCodeEnum.kt | 2 +- .../library/map/source/OMDBDataDecoder.java | 26 ++++++------------- .../map/source/OMDBReferenceDecoder.java | 15 +++-------- .../map/source/OMDBTileDataSource.java | 9 +++++-- .../collect/library/utils/GeometryTools.java | 6 +++-- vtm | 2 +- 8 files changed, 29 insertions(+), 39 deletions(-) diff --git a/collect-library/resources/rendertheme.xsd b/collect-library/resources/rendertheme.xsd index fa7348c9..150d511c 100644 --- a/collect-library/resources/rendertheme.xsd +++ b/collect-library/resources/rendertheme.xsd @@ -257,7 +257,7 @@ - + diff --git a/collect-library/src/main/assets/editormarker.xml b/collect-library/src/main/assets/editormarker.xml index 069d9a1a..7e721c3d 100644 --- a/collect-library/src/main/assets/editormarker.xml +++ b/collect-library/src/main/assets/editormarker.xml @@ -1565,7 +1565,7 @@ - @@ -1847,12 +1847,12 @@ - + - + diff --git a/collect-library/src/main/java/com/navinfo/collect/library/enums/DataCodeEnum.kt b/collect-library/src/main/java/com/navinfo/collect/library/enums/DataCodeEnum.kt index 81eb8526..bbb8ddd5 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/enums/DataCodeEnum.kt +++ b/collect-library/src/main/java/com/navinfo/collect/library/enums/DataCodeEnum.kt @@ -3,7 +3,7 @@ package com.navinfo.collect.library.enums /* * 要素枚举定义 * */ -enum class DataCodeEnum(var tableName: String, var code: String) { +public enum class DataCodeEnum(var tableName: String, var code: String) { OMDB_NODE_FORM("点形态", "1007-6"), OMDB_NODE_PA("点形态PA", "1007-6"), OMDB_CHECKPOINT("检查点", "1012"), diff --git a/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBDataDecoder.java b/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBDataDecoder.java index bba003e7..d7505186 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBDataDecoder.java +++ b/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBDataDecoder.java @@ -63,24 +63,21 @@ public class OMDBDataDecoder extends TileDecoder { } @RequiresApi(api = Build.VERSION_CODES.N) - public boolean decode(int mapLevel,Tile tile, ITileDataSink sink, List listResult) { + public boolean decode(int mapLevel, Tile tile, ITileDataSink sink, List listResult) { mTileDataSink = sink; mTileScale = 1 << tile.zoomLevel; mTileX = tile.tileX / mTileScale; mTileY = tile.tileY / mTileScale; mTileScale *= Tile.SIZE; - - List list = GeometryTools.groupByDistance(DataCodeEnum.OMDB_TRAFFIC_SIGN.code,listResult,5.0); - - list.stream().iterator().forEachRemaining(new Consumer() { + listResult.stream().iterator().forEachRemaining(new Consumer() { @Override public void accept(RenderEntity renderEntity) { - if(!(mapLevelrenderEntity.getZoomMax())){ - Map properties= new HashMap<>(renderEntity.getProperties().size()); + if (!(mapLevel < renderEntity.getZoomMin() || mapLevel > renderEntity.getZoomMax())) { + Map properties = new HashMap<>(renderEntity.getProperties().size()); properties.putAll(renderEntity.getProperties()); parseGeometry(renderEntity.getTable(), renderEntity.getWkt(), properties); - }else{ + } else { // Log.e("qj","render"+renderEntity.name+"=="+renderEntity.getZoomMin()+"==="+renderEntity.getZoomMax()+"==="+renderEntity.getEnable()); } } @@ -108,14 +105,7 @@ public class OMDBDataDecoder extends TileDecoder { processCoordinateArray(multiPoint.getGeometryN(i).getCoordinates(), false); } } else if (geometry instanceof LineString) { - //将车道中心进行转化面渲染 - if(layerName!=null&&layerName.equals(DataCodeEnum.OMDB_LANE_LINK_LG.name())){ - Log.e("qj","车道中心线转化开始"); - processPolygon((Polygon) GeometryTools.createGeometry(GeometryTools.computeLine(0.000035,0.000035,geometry.toString()))); - Log.e("qj","车道中心线转化结束"); - }else{ - processLineString((LineString) geometry); - } + processLineString((LineString) geometry); } else if (geometry instanceof MultiLineString) { MultiLineString multiLineString = (MultiLineString) geometry; for (int i = 0; i < multiLineString.getNumGeometries(); i++) { @@ -201,8 +191,8 @@ public class OMDBDataDecoder extends TileDecoder { mMapElement.tags.add(new Tag(Tag.KEY_NAME, fallbackName, false)); } - public void clean(){ - if(mTileDataSink!=null){ + public void clean() { + if (mTileDataSink != null) { mTileDataSink.notifyAll(); } } diff --git a/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBReferenceDecoder.java b/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBReferenceDecoder.java index a0b9e2e7..f6c73934 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBReferenceDecoder.java +++ b/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBReferenceDecoder.java @@ -63,7 +63,7 @@ public class OMDBReferenceDecoder extends TileDecoder { } @RequiresApi(api = Build.VERSION_CODES.N) - public boolean decode(int mapLevel,Tile tile, ITileDataSink sink, List listResult) { + public boolean decode(int mapLevel, Tile tile, ITileDataSink sink, List listResult) { mTileDataSink = sink; mTileScale = 1 << tile.zoomLevel; mTileX = tile.tileX / mTileScale; @@ -73,8 +73,8 @@ public class OMDBReferenceDecoder extends TileDecoder { listResult.stream().iterator().forEachRemaining(new Consumer() { @Override public void accept(ReferenceEntity renderEntity) { - if(!(mapLevelrenderEntity.getZoomMax())){ - Map properties= new HashMap<>(renderEntity.getProperties().size()); + if (!(mapLevel < renderEntity.getZoomMin() || mapLevel > renderEntity.getZoomMax())) { + Map properties = new HashMap<>(renderEntity.getProperties().size()); properties.putAll(renderEntity.getProperties()); parseGeometry(renderEntity.getTable(), renderEntity.getWkt(), properties); } @@ -103,14 +103,7 @@ public class OMDBReferenceDecoder extends TileDecoder { processCoordinateArray(multiPoint.getGeometryN(i).getCoordinates(), false); } } else if (geometry instanceof LineString) { - //将车道中心进行转化面渲染 - if(layerName!=null&&layerName.equals(DataCodeEnum.OMDB_LANE_LINK_LG.name())){ - Log.e("qj","车道中心线转化开始"); - processPolygon((Polygon)GeometryTools.createGeometry(GeometryTools.computeLine(0.000035,0.000035,geometry.toString()))); - Log.e("qj","车道中心线转化结束"); - }else{ - processLineString((LineString) geometry); - } + processLineString((LineString) geometry); } else if (geometry instanceof MultiLineString) { MultiLineString multiLineString = (MultiLineString) geometry; for (int i = 0; i < multiLineString.getNumGeometries(); i++) { diff --git a/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBTileDataSource.java b/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBTileDataSource.java index 49112267..0130d367 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBTileDataSource.java +++ b/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBTileDataSource.java @@ -129,7 +129,7 @@ public class OMDBTileDataSource implements ITileDataSource { realmQuery.endGroup(); } long time = System.currentTimeMillis(); - List listResult = realmQuery.findAll(); + List listResult = realm.copyFromRealm(realmQuery.findAll()); long newTime = System.currentTimeMillis() - time; // Log.e("jingo", "当前OMDBTileDataSource " + Thread.currentThread().hashCode() + " 当前realm " + realm.hashCode() + " 查询耗时" + newTime + " 条数" + listResult.size()); @@ -142,8 +142,13 @@ public class OMDBTileDataSource implements ITileDataSource { /*过滤数据,只有最小x(屏幕的最小x或数据的最小x会被渲染,跨Tile的其他数据不再重复渲染)*/ // .filter((RenderEntity renderEntity) -> MercatorProjection.longitudeToTileX(viewport.fromScreenPoint(0,0).getLongitude(), (byte) Constant.DATA_ZOOM) == currentTileX || renderEntity.getTileX().stream().min(Integer::compare).get() == currentTileX) .collect(Collectors.toList()); - mThreadLocalDecoders.get().decode(tile.zoomLevel, tile, mapDataSink, listResult); + + List list = GeometryTools.groupByDistance("3005", listResult, 5.0); + + mThreadLocalDecoders.get().decode(tile.zoomLevel, tile, mapDataSink, list); + mapDataSink.completed(QueryResult.SUCCESS); + } else { mapDataSink.completed(QueryResult.SUCCESS); } diff --git a/collect-library/src/main/java/com/navinfo/collect/library/utils/GeometryTools.java b/collect-library/src/main/java/com/navinfo/collect/library/utils/GeometryTools.java index c3ee4fe1..1a660a89 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/utils/GeometryTools.java +++ b/collect-library/src/main/java/com/navinfo/collect/library/utils/GeometryTools.java @@ -1592,10 +1592,11 @@ public class GeometryTools { java.util.Map calcMap = new HashMap<>(); int count = 0; + //遍历开始 for (RenderEntity renderEntity : list) { - if(!TextUtils.isEmpty(code)&&renderEntity.getCode()!=code){ + if(!TextUtils.isEmpty(code)&&!renderEntity.getCode().equals(code)){ listReslut.add(renderEntity); calcMap.put(renderEntity.getId(),renderEntity); continue; @@ -1610,6 +1611,7 @@ public class GeometryTools { if (renderEntity.getId().equals(renderEntityTemp.getId())) { listReslut.add(renderEntityTemp); count++; + Log.e("qj", "====计算间距" + count); calcMap.put(renderEntityTemp.getId(), renderEntityTemp); } else { GeoPoint geoPoint = createGeoPoint(renderEntity.getGeometry()); @@ -1631,7 +1633,7 @@ public class GeometryTools { } } - Log.e("qj", "====计算间距====" + listReslut.size()+"==判断后=="+list.size()); + Log.e("qj", listReslut.size()+"==判断后=="+list.size()+"==="+calcMap.size()); return listReslut; } diff --git a/vtm b/vtm index 9e0cc6dc..a6787549 160000 --- a/vtm +++ b/vtm @@ -1 +1 @@ -Subproject commit 9e0cc6dcdce04d1082ed6459e8810d6329e8cfdc +Subproject commit a6787549efde8f445965faf41c17c9b58ddbd578