修改交通标牌为同点位聚合
This commit is contained in:
parent
e4aff19599
commit
b123fa543f
@ -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轴方向上的偏移量 -->
|
||||
|
@ -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>
|
||||
|
||||
<!-- 路口内交通岛 -->
|
||||
|
@ -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"),
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
@ -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++) {
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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
2
vtm
@ -1 +1 @@
|
||||
Subproject commit 9e0cc6dcdce04d1082ed6459e8810d6329e8cfdc
|
||||
Subproject commit a6787549efde8f445965faf41c17c9b58ddbd578
|
Loading…
x
Reference in New Issue
Block a user