diff --git a/app/src/main/assets/omdb_config.json b/app/src/main/assets/omdb_config.json index 67ff7199..36599433 100644 --- a/app/src/main/assets/omdb_config.json +++ b/app/src/main/assets/omdb_config.json @@ -181,6 +181,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, @@ -281,6 +298,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 70b8e519..a0decc44 100644 --- a/app/src/main/java/com/navinfo/omqs/Constant.kt +++ b/app/src/main/java/com/navinfo/omqs/Constant.kt @@ -92,11 +92,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 487b62af..d4996311 100644 --- a/app/src/main/java/com/navinfo/omqs/db/ImportPreProcess.kt +++ b/app/src/main/java/com/navinfo/omqs/db/ImportPreProcess.kt @@ -844,8 +844,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 2f205215..f15e23d8 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 @@ -190,7 +190,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 68051458..a9876542 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 @@ -178,7 +178,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 d0a5f0c6..88a006aa 100644 --- a/collect-library/src/main/assets/editormarker.xml +++ b/collect-library/src/main/assets/editormarker.xml @@ -1851,6 +1851,21 @@ + + + + + + + + + + + + + + + @@ -1960,26 +1975,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..8a83ff09 --- /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/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 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")