修改交通标牌为同点位聚合

This commit is contained in:
qiji4215 2023-11-09 17:25:25 +08:00
parent e4aff19599
commit b123fa543f
8 changed files with 29 additions and 39 deletions

View File

@ -257,7 +257,7 @@
<xs:attribute name="repeat-start" default="30" type="xs:float" use="optional"/>
<xs:attribute name="rotate" default="true" type="xs:boolean" use="optional"/>
<!-- 设置是否支持图标压盖如果为true则同点位图标不避让允许压盖否则支持自动避让 -->
<xs:attribute name="gland" default="true" type="xs:boolean" use="optional"/>
<xs:attribute name="gland" default="false" type="xs:boolean" use="optional"/>
<!-- 原图标旋转角度默认情况下应该使用以X轴为正方向的图标此处可设置原图标的旋转角度在渲染时自动对图标进行旋转仅支持线要素 -->
<xs:attribute name="degree" default="0" type="xs:float" use="optional"/>
<!-- 图标在y轴方向上的偏移量 -->

View File

@ -1565,7 +1565,7 @@
<!-- 交通标牌 -->
<m v="OMDB_TRAFFIC_SIGN">
<symbol repeat="false" repeat-gap="2000" repeat-start="0" rotate="true"
<symbol repeat="false" repeat-gap="2000" repeat-start="0" rotate="true" gland="true"
src="@src" symbol-height="24" symbol-width="24" degree="-90" dy="-30"></symbol>
</m>
@ -1847,12 +1847,12 @@
<!-- 环岛 -->
<m v="OMDB_ROUNDABOUT">
<line stroke="#fcba5a" width="0.5" />
<symbol repeat="false" repeat-start="0" gland="false" repeat-gap="0" src="assets:omdb/icon_2204_0.svg"></symbol>
<symbol repeat="false" repeat-start="0" repeat-gap="0" src="assets:omdb/icon_2204_0.svg"></symbol>
</m>
<!-- 上方障碍物 -->
<m v="OMDB_OBJECT_OH_STRUCT">
<symbol repeat="false" repeat-start="0" gland="false" repeat-gap="32" symbol-width="42" symbol-height="42" src="assets:omdb/icon_3001_0.svg"></symbol>
<symbol repeat="false" repeat-start="0" repeat-gap="32" symbol-width="42" symbol-height="42" src="assets:omdb/icon_3001_0.svg"></symbol>
</m>
<!-- 路口内交通岛 -->

View File

@ -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"),

View File

@ -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<RenderEntity> listResult) {
public boolean decode(int mapLevel, Tile tile, ITileDataSink sink, List<RenderEntity> listResult) {
mTileDataSink = sink;
mTileScale = 1 << tile.zoomLevel;
mTileX = tile.tileX / mTileScale;
mTileY = tile.tileY / mTileScale;
mTileScale *= Tile.SIZE;
List<RenderEntity> list = GeometryTools.groupByDistance(DataCodeEnum.OMDB_TRAFFIC_SIGN.code,listResult,5.0);
list.stream().iterator().forEachRemaining(new Consumer<RenderEntity>() {
listResult.stream().iterator().forEachRemaining(new Consumer<RenderEntity>() {
@Override
public void accept(RenderEntity renderEntity) {
if(!(mapLevel<renderEntity.getZoomMin()||mapLevel>renderEntity.getZoomMax())){
Map<String, Object> properties= new HashMap<>(renderEntity.getProperties().size());
if (!(mapLevel < renderEntity.getZoomMin() || mapLevel > renderEntity.getZoomMax())) {
Map<String, Object> 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();
}
}

View File

@ -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<ReferenceEntity> listResult) {
public boolean decode(int mapLevel, Tile tile, ITileDataSink sink, List<ReferenceEntity> 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<ReferenceEntity>() {
@Override
public void accept(ReferenceEntity renderEntity) {
if(!(mapLevel<renderEntity.getZoomMin()||mapLevel>renderEntity.getZoomMax())){
Map<String, Object> properties= new HashMap<>(renderEntity.getProperties().size());
if (!(mapLevel < renderEntity.getZoomMin() || mapLevel > renderEntity.getZoomMax())) {
Map<String, Object> 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++) {

View File

@ -129,7 +129,7 @@ public class OMDBTileDataSource implements ITileDataSource {
realmQuery.endGroup();
}
long time = System.currentTimeMillis();
List<RenderEntity> listResult = realmQuery.findAll();
List<RenderEntity> 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<RenderEntity> list = GeometryTools.groupByDistance("3005", listResult, 5.0);
mThreadLocalDecoders.get().decode(tile.zoomLevel, tile, mapDataSink, list);
mapDataSink.completed(QueryResult.SUCCESS);
} else {
mapDataSink.completed(QueryResult.SUCCESS);
}

View File

@ -1592,10 +1592,11 @@ public class GeometryTools {
java.util.Map<String, RenderEntity> 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;
}

2
vtm

@ -1 +1 @@
Subproject commit 9e0cc6dcdce04d1082ed6459e8810d6329e8cfdc
Subproject commit a6787549efde8f445965faf41c17c9b58ddbd578