From 0f5c9bfb8d7ad9f7c988859e758c62b4e6d68615 Mon Sep 17 00:00:00 2001 From: xiaoyan Date: Mon, 25 Sep 2023 14:56:02 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E8=B7=AF?= =?UTF-8?q?=E5=8F=A3=E5=86=85=E4=BA=A4=E9=80=9A=E5=B2=9B=E3=80=81=E4=B8=8A?= =?UTF-8?q?=E6=96=B9=E9=9A=9C=E7=A2=8D=E7=89=A9=E7=9A=84=E6=B8=B2=E6=9F=93?= =?UTF-8?q?=EF=BC=8C=E4=BF=AE=E6=94=B9=E7=AC=A6=E5=8F=B7=E3=80=81=E6=96=87?= =?UTF-8?q?=E5=AD=97=E9=A2=9C=E8=89=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/omdb_config.json | 26 ++++++++++++ .../main/java/com/navinfo/omqs/Constant.kt | 5 --- .../com/navinfo/omqs/db/ImportPreProcess.kt | 40 ++++++++++++++++++- .../omqs/ui/activity/map/MainActivity.kt | 2 +- .../personalcenter/PersonalCenterFragment.kt | 2 +- .../src/main/assets/editormarker.xml | 29 +++++++++++--- .../src/main/assets/omdb/icon_3001_0.svg | 1 + .../main/assets/omdb/object_symbol_3003_0.svg | 1 + .../main/assets/omdb/object_symbol_3003_1.svg | 2 +- .../main/assets/omdb/object_symbol_3003_2.svg | 2 +- .../main/assets/omdb/object_symbol_3003_3.svg | 2 +- .../main/assets/omdb/object_symbol_3003_4.svg | 2 +- .../main/assets/omdb/object_symbol_3003_9.svg | 2 +- .../map/source/OMDBReferenceDataSource.java | 18 ++++++--- .../map/source/OMDBReferenceTileSource.java | 8 +--- .../map/source/OMDBTileDataSource.java | 18 ++++++--- .../library/map/source/OMDBTileSource.java | 3 +- .../collect/library/system/Constant.java | 11 +++-- .../collect/library/utils/GeometryToolsKt.kt | 8 ++-- 19 files changed, 133 insertions(+), 49 deletions(-) create mode 100644 collect-library/src/main/assets/omdb/icon_3001_0.svg create mode 100644 collect-library/src/main/assets/omdb/object_symbol_3003_0.svg diff --git a/app/src/main/assets/omdb_config.json b/app/src/main/assets/omdb_config.json index 5335a0d4..1886c190 100644 --- a/app/src/main/assets/omdb_config.json +++ b/app/src/main/assets/omdb_config.json @@ -178,6 +178,23 @@ } ] }, + "3001":{ + "table": "OMDB_OBJECT_OH_STRUCT", + "code": 3001, + "name": "上方障碍物", + "zoomMin": 15, + "zoomMax": 20, + "catch":true, + "checkLinkId": false, + "transformer": [ + { + "k": "geometry", + "v": "~", + "klib": "geometry", + "vlib": "getPolygonCenterPoint()" + } + ] + }, "3002":{ "table": "OMDB_OBJECT_TEXT", "code": 3002, @@ -276,6 +293,15 @@ "catch":true, "zoomMax": 20 }, + "3027":{ + "table": "OMDB_OBJECT_REFUGE_ISLAND", + "code": 3027, + "name": "路口内交通岛", + "catch":true, + "checkLinkId": false, + "zoomMin": 18, + "zoomMax": 20 + }, "4001": { "table": "OMDB_INTERSECTION", "code": 4001, diff --git a/app/src/main/java/com/navinfo/omqs/Constant.kt b/app/src/main/java/com/navinfo/omqs/Constant.kt index 1d9dbd16..a5bad759 100644 --- a/app/src/main/java/com/navinfo/omqs/Constant.kt +++ b/app/src/main/java/com/navinfo/omqs/Constant.kt @@ -93,11 +93,6 @@ class Constant { const val DEBUG = true - /** - * 地图最多缩放级别20 - */ - const val MAX_ZOOM = 20 - /** * 是否自动定位 */ 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 4281b648..f7674f30 100644 --- a/app/src/main/java/com/navinfo/omqs/db/ImportPreProcess.kt +++ b/app/src/main/java/com/navinfo/omqs/db/ImportPreProcess.kt @@ -845,8 +845,46 @@ class ImportPreProcess { val listResult = mutableListOf() val coorEnd = Coordinate(pointStart.getX() + dx, pointStart.getY() + dy, pointStart.z) - renderEntity.geometry = WKTWriter(3).write(GeometryTools.createLineString(arrayOf(pointStart, coorEnd))) +// renderEntity.geometry = WKTWriter(3).write(GeometryTools.createLineString(arrayOf(pointStart, coorEnd))) + renderEntity.geometry = GeometryTools.createGeometry(GeoPoint(centerPoint!!.y, centerPoint.x)).toString() val code = renderEntity.properties["signType"] renderEntity.properties["src"] = "assets:omdb/appendix/1105_${code}_0.svg" } + + /** + * 获取上方障碍物中心点坐标 + * + * */ + fun getPolygonCenterPoint(renderEntity: RenderEntity, containsDirect: Boolean = false) { + // 获取中心坐标点,将中心坐标作为数据的新的geometry位置 + val centerPoint = renderEntity.wkt?.centroid + if (containsDirect) { + // 根据heading方向自动生成新的Geometry + var radian = 0.0 + val pointStart = Coordinate(centerPoint!!.x, centerPoint.y) + var angle = + if (renderEntity?.properties?.get("heading") == null) 0.0 else renderEntity?.properties?.get( + "heading" + )?.toDouble()!! + // angle角度为与正北方向的顺时针夹角,将其转换为与X轴正方向的逆时针夹角,即为正东方向的夹角 + angle = ((450 - angle) % 360) + radian = Math.toRadians(angle) + + // 计算偏移距离 + var dx: Double = GeometryTools.convertDistanceToDegree( + defaultTranslateDistance, + centerPoint.y + ) * Math.cos(radian) + var dy: Double = GeometryTools.convertDistanceToDegree( + defaultTranslateDistance, + centerPoint.y + ) * Math.sin(radian) + val listResult = mutableListOf() + + val coorEnd = Coordinate(pointStart.getX() + dx, pointStart.getY() + dy, pointStart.z) + renderEntity.geometry = WKTWriter(3).write(GeometryTools.createLineString(arrayOf(pointStart, coorEnd))) + } else { + renderEntity.geometry = GeometryTools.createGeometry(GeoPoint(centerPoint!!.y, centerPoint.x)).toString() + } + } } \ No newline at end of file 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 5fc097ed..48ca07c2 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 @@ -191,7 +191,7 @@ class MainActivity : BaseActivity() { viewModel.speakMode = SpeakMode(this) // 在mapController初始化前获取当前OMDB图层显隐 viewModel.refreshOMDBLayer(LayerConfigUtils.getLayerConfigList()) - mapController.mMapView.vtmMap.viewport().maxZoomLevel = Constant.MAX_ZOOM + mapController.mMapView.vtmMap.viewport().maxZoomLevel = com.navinfo.collect.library.system.Constant.MAX_ZOOM //关联生命周期 binding.lifecycleOwner = this //给xml转递对象 diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/personalcenter/PersonalCenterFragment.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/personalcenter/PersonalCenterFragment.kt index c2ed075e..a12d4635 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/personalcenter/PersonalCenterFragment.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/personalcenter/PersonalCenterFragment.kt @@ -167,7 +167,7 @@ class PersonalCenterFragment(private var indoorDataListener: ((Boolean) -> Unit? // 定位到指定位置 niMapController.mMapView.vtmMap.animator() // .animateTo(GeoPoint( 40.05108004733645, 116.29187746293708 )) - .animateTo(GeoPoint(40.5016054261786, 115.82381251427815)) + .animateTo(GeoPoint(40.50704534740206, 115.80404946472662)) } R.id.personal_center_menu_open_all_layer -> { diff --git a/collect-library/src/main/assets/editormarker.xml b/collect-library/src/main/assets/editormarker.xml index 0396c8e6..cff509ec 100644 --- a/collect-library/src/main/assets/editormarker.xml +++ b/collect-library/src/main/assets/editormarker.xml @@ -1814,6 +1814,21 @@ + + + + + + + + + + + + + + + @@ -1923,26 +1938,30 @@ - + - + - + - + - + + + + + diff --git a/collect-library/src/main/assets/omdb/icon_3001_0.svg b/collect-library/src/main/assets/omdb/icon_3001_0.svg new file mode 100644 index 00000000..46b83bd6 --- /dev/null +++ b/collect-library/src/main/assets/omdb/icon_3001_0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/object_symbol_3003_0.svg b/collect-library/src/main/assets/omdb/object_symbol_3003_0.svg new file mode 100644 index 00000000..23936b2e --- /dev/null +++ b/collect-library/src/main/assets/omdb/object_symbol_3003_0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/object_symbol_3003_1.svg b/collect-library/src/main/assets/omdb/object_symbol_3003_1.svg index 09d6f4ff..1ea27fef 100644 --- a/collect-library/src/main/assets/omdb/object_symbol_3003_1.svg +++ b/collect-library/src/main/assets/omdb/object_symbol_3003_1.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/object_symbol_3003_2.svg b/collect-library/src/main/assets/omdb/object_symbol_3003_2.svg index fcec6795..6f134c24 100644 --- a/collect-library/src/main/assets/omdb/object_symbol_3003_2.svg +++ b/collect-library/src/main/assets/omdb/object_symbol_3003_2.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/object_symbol_3003_3.svg b/collect-library/src/main/assets/omdb/object_symbol_3003_3.svg index 3a947ce3..1a68fbe7 100644 --- a/collect-library/src/main/assets/omdb/object_symbol_3003_3.svg +++ b/collect-library/src/main/assets/omdb/object_symbol_3003_3.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/object_symbol_3003_4.svg b/collect-library/src/main/assets/omdb/object_symbol_3003_4.svg index cb7f35c8..c5878f4b 100644 --- a/collect-library/src/main/assets/omdb/object_symbol_3003_4.svg +++ b/collect-library/src/main/assets/omdb/object_symbol_3003_4.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/object_symbol_3003_9.svg b/collect-library/src/main/assets/omdb/object_symbol_3003_9.svg index 0ff7e21d..d4ab85b6 100644 --- a/collect-library/src/main/assets/omdb/object_symbol_3003_9.svg +++ b/collect-library/src/main/assets/omdb/object_symbol_3003_9.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBReferenceDataSource.java b/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBReferenceDataSource.java index 9f3c4aee..9cd8765d 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBReferenceDataSource.java +++ b/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBReferenceDataSource.java @@ -36,12 +36,18 @@ public class OMDBReferenceDataSource implements ITileDataSource { @Override public void query(MapTile tile, ITileDataSink mapDataSink) { // 获取tile对应的坐标范围 - if (tile.zoomLevel >= Constant.OMDB_MIN_ZOOM && tile.zoomLevel < Constant.OVER_ZOOM) { - int m = Constant.OVER_ZOOM - tile.zoomLevel; - int xStart = (int) tile.tileX << m; - int xEnd = (int) ((tile.tileX + 1) << m); - int yStart = (int) tile.tileY << m; - int yEnd = (int) ((tile.tileY + 1) << m); + if (tile.zoomLevel >= Constant.OMDB_MIN_ZOOM && tile.zoomLevel <= Constant.DATA_ZOOM) { + int m = Constant.DATA_ZOOM - tile.zoomLevel; + int xStart = tile.tileX; + int xEnd = tile.tileX + 1; + int yStart = tile.tileY; + int yEnd = tile.tileY + 1; + if (m>0) { + xStart = (int) (xStart << m); + xEnd = (int) (xEnd << m); + yStart = (int) (yStart << m); + yEnd = (int) (yEnd << m); + } if(isUpdate){ diff --git a/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBReferenceTileSource.java b/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBReferenceTileSource.java index 183b3213..3fc6ea84 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBReferenceTileSource.java +++ b/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBReferenceTileSource.java @@ -1,15 +1,9 @@ package com.navinfo.collect.library.map.source; -import android.util.Log; - -import com.navinfo.collect.library.data.entity.RenderEntity; import com.navinfo.collect.library.system.Constant; import org.oscim.tiling.ITileDataSource; import org.oscim.tiling.OverzoomTileDataSource; -import org.oscim.tiling.TileSource; - -import io.realm.Realm; public class OMDBReferenceTileSource extends RealmDBTileSource { private OMDBReferenceDataSource omdbReferenceTileSource = new OMDBReferenceDataSource(); @@ -17,7 +11,7 @@ public class OMDBReferenceTileSource extends RealmDBTileSource { @Override public ITileDataSource getDataSource() { //return new OverzoomTileDataSource(new OMDBReferenceDataSource(), Constant.OVER_ZOOM); - return omdbReferenceTileSource; + return new OverzoomTileDataSource(omdbReferenceTileSource, Constant.OVER_ZOOM); } @Override 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 35a7d40d..62475226 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 @@ -35,12 +35,18 @@ public class OMDBTileDataSource implements ITileDataSource { @Override public void query(MapTile tile, ITileDataSink mapDataSink) { // 获取tile对应的坐标范围 - if (tile.zoomLevel >= Constant.OMDB_MIN_ZOOM && tile.zoomLevel < Constant.OVER_ZOOM) { - int m = Constant.OVER_ZOOM - tile.zoomLevel; - int xStart = (int) tile.tileX << m; - int xEnd = (int) ((tile.tileX + 1) << m); - int yStart = (int) tile.tileY << m; - int yEnd = (int) ((tile.tileY + 1) << m); + if (tile.zoomLevel >= Constant.OMDB_MIN_ZOOM && tile.zoomLevel <= Constant.DATA_ZOOM) { + int m = Constant.DATA_ZOOM - tile.zoomLevel; + int xStart = tile.tileX; + int xEnd = tile.tileX + 1; + int yStart = tile.tileY; + int yEnd = tile.tileY + 1; + if (m>0) { + xStart = (int) (xStart << m); + xEnd = (int) (xEnd << m); + yStart = (int) (yStart << m); + yEnd = (int) (yEnd << m); + } if(isUpdate){ Realm.getInstance(MapParamUtils.getTaskConfig()).refresh(); diff --git a/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBTileSource.java b/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBTileSource.java index 752b839c..406c27ec 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBTileSource.java +++ b/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBTileSource.java @@ -7,7 +7,6 @@ import com.navinfo.collect.library.system.Constant; import org.oscim.tiling.ITileDataSource; import org.oscim.tiling.OverzoomTileDataSource; -import org.oscim.tiling.TileSource; import io.realm.Realm; @@ -16,7 +15,7 @@ public class OMDBTileSource extends RealmDBTileSource { @Override public ITileDataSource getDataSource() { // return new OverzoomTileDataSource(new OMDBTileDataSource(), Constant.OVER_ZOOM); - return omdbTileSource; + return new OverzoomTileDataSource(omdbTileSource, Constant.OVER_ZOOM); } @Override diff --git a/collect-library/src/main/java/com/navinfo/collect/library/system/Constant.java b/collect-library/src/main/java/com/navinfo/collect/library/system/Constant.java index 60ece1cd..764f6f71 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/system/Constant.java +++ b/collect-library/src/main/java/com/navinfo/collect/library/system/Constant.java @@ -2,10 +2,6 @@ package com.navinfo.collect.library.system; import android.os.Environment; -import com.navinfo.collect.library.map.source.RealmDBTileDataSource; - -import org.oscim.tiling.OverzoomTileDataSource; - import java.util.HashMap; import java.util.Map; @@ -30,8 +26,11 @@ public class Constant { } public static String[] HAD_LAYER_INVISIABLE_ARRAY; - public static final int OVER_ZOOM = 20; - public static final int MAX_ZOOM = 20; + // 渲染引擎开始切割的级别 + public static final int OVER_ZOOM = 18; + public static final int MAX_ZOOM = 22; + // 数据保存时的zoom + public static final int DATA_ZOOM = 23; public static final int OMDB_MIN_ZOOM = 15; /** diff --git a/collect-library/src/main/java/com/navinfo/collect/library/utils/GeometryToolsKt.kt b/collect-library/src/main/java/com/navinfo/collect/library/utils/GeometryToolsKt.kt index 888e0afd..b626079c 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/utils/GeometryToolsKt.kt +++ b/collect-library/src/main/java/com/navinfo/collect/library/utils/GeometryToolsKt.kt @@ -38,8 +38,8 @@ class GeometryToolsKt { } } // 分别计算最大和最小x值对应的tile号 - val tileY0 = MercatorProjection.latitudeToTileY(minMaxY[0], Constant.OVER_ZOOM.toByte()) - val tileY1 = MercatorProjection.latitudeToTileY(minMaxY[1], Constant.OVER_ZOOM.toByte()) + val tileY0 = MercatorProjection.latitudeToTileY(minMaxY[0], Constant.DATA_ZOOM.toByte()) + val tileY1 = MercatorProjection.latitudeToTileY(minMaxY[1], Constant.DATA_ZOOM.toByte()) val minTileY = if (tileY0 <= tileY1) tileY0 else tileY1 val maxTileY = if (tileY0 <= tileY1) tileY1 else tileY0 // println("getTileYByGeometry$envelope===$minTileY===$maxTileY") @@ -82,8 +82,8 @@ class GeometryToolsKt { } } // 分别计算最大和最小x值对应的tile号 - val tileX0 = MercatorProjection.longitudeToTileX(minMaxX[0], Constant.OVER_ZOOM.toByte()) - val tileX1 = MercatorProjection.longitudeToTileX(minMaxX[1], Constant.OVER_ZOOM.toByte()) + val tileX0 = MercatorProjection.longitudeToTileX(minMaxX[0], Constant.DATA_ZOOM.toByte()) + val tileX1 = MercatorProjection.longitudeToTileX(minMaxX[1], Constant.DATA_ZOOM.toByte()) val minTileX = if (tileX0 <= tileX1) tileX0 else tileX1 val maxTileX = if (tileX0 <= tileX1) tileX1 else tileX0 // println("getTileXByGeometry$envelope$minTileX===$maxTileX") From a2245f8e7cbcf5345c531c38cc13bd797b3eee2e Mon Sep 17 00:00:00 2001 From: xiaoyan Date: Wed, 27 Sep 2023 09:37:30 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix:=20=E4=BF=AE=E6=94=B9=E4=B8=8A=E6=96=B9?= =?UTF-8?q?=E9=9A=9C=E7=A2=8D=E7=89=A9=E6=B8=B2=E6=9F=93=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- collect-library/src/main/assets/editormarker.xml | 4 ++-- collect-library/src/main/assets/omdb/icon_3001_0.svg | 2 +- collect-library/src/main/assets/omdb/tex_fill_area_3027_1.svg | 1 + collect-library/src/main/assets/omdb/tex_fill_area_3027_2.svg | 1 + 4 files changed, 5 insertions(+), 3 deletions(-) create mode 100644 collect-library/src/main/assets/omdb/tex_fill_area_3027_1.svg create mode 100644 collect-library/src/main/assets/omdb/tex_fill_area_3027_2.svg diff --git a/collect-library/src/main/assets/editormarker.xml b/collect-library/src/main/assets/editormarker.xml index cff509ec..8ca3e4b3 100644 --- a/collect-library/src/main/assets/editormarker.xml +++ b/collect-library/src/main/assets/editormarker.xml @@ -1822,10 +1822,10 @@ - + - + diff --git a/collect-library/src/main/assets/omdb/icon_3001_0.svg b/collect-library/src/main/assets/omdb/icon_3001_0.svg index 46b83bd6..8a83ff09 100644 --- a/collect-library/src/main/assets/omdb/icon_3001_0.svg +++ b/collect-library/src/main/assets/omdb/icon_3001_0.svg @@ -1 +1 @@ - \ No newline at end of file +障碍物 \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/tex_fill_area_3027_1.svg b/collect-library/src/main/assets/omdb/tex_fill_area_3027_1.svg new file mode 100644 index 00000000..b9433d00 --- /dev/null +++ b/collect-library/src/main/assets/omdb/tex_fill_area_3027_1.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/tex_fill_area_3027_2.svg b/collect-library/src/main/assets/omdb/tex_fill_area_3027_2.svg new file mode 100644 index 00000000..d6d0c1d0 --- /dev/null +++ b/collect-library/src/main/assets/omdb/tex_fill_area_3027_2.svg @@ -0,0 +1 @@ + \ No newline at end of file