修改交通标牌为同点位聚合
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="repeat-start" default="30" type="xs:float" use="optional"/>
|
||||||
<xs:attribute name="rotate" default="true" type="xs:boolean" use="optional"/>
|
<xs:attribute name="rotate" default="true" type="xs:boolean" use="optional"/>
|
||||||
<!-- 设置是否支持图标压盖,如果为true,则同点位图标不避让,允许压盖,否则支持自动避让 -->
|
<!-- 设置是否支持图标压盖,如果为true,则同点位图标不避让,允许压盖,否则支持自动避让 -->
|
||||||
<xs:attribute name="gland" default="true" type="xs:boolean" use="optional"/>
|
<xs:attribute name="gland" default="false" type="xs:boolean" use="optional"/>
|
||||||
<!-- 原图标旋转角度,默认情况下应该使用以X轴为正方向的图标,此处可设置原图标的旋转角度,在渲染时自动对图标进行旋转,仅支持线要素 -->
|
<!-- 原图标旋转角度,默认情况下应该使用以X轴为正方向的图标,此处可设置原图标的旋转角度,在渲染时自动对图标进行旋转,仅支持线要素 -->
|
||||||
<xs:attribute name="degree" default="0" type="xs:float" use="optional"/>
|
<xs:attribute name="degree" default="0" type="xs:float" use="optional"/>
|
||||||
<!-- 图标在y轴方向上的偏移量 -->
|
<!-- 图标在y轴方向上的偏移量 -->
|
||||||
|
@ -1565,7 +1565,7 @@
|
|||||||
|
|
||||||
<!-- 交通标牌 -->
|
<!-- 交通标牌 -->
|
||||||
<m v="OMDB_TRAFFIC_SIGN">
|
<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>
|
src="@src" symbol-height="24" symbol-width="24" degree="-90" dy="-30"></symbol>
|
||||||
</m>
|
</m>
|
||||||
|
|
||||||
@ -1847,12 +1847,12 @@
|
|||||||
<!-- 环岛 -->
|
<!-- 环岛 -->
|
||||||
<m v="OMDB_ROUNDABOUT">
|
<m v="OMDB_ROUNDABOUT">
|
||||||
<line stroke="#fcba5a" width="0.5" />
|
<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>
|
||||||
|
|
||||||
<!-- 上方障碍物 -->
|
<!-- 上方障碍物 -->
|
||||||
<m v="OMDB_OBJECT_OH_STRUCT">
|
<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>
|
</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_FORM("点形态", "1007-6"),
|
||||||
OMDB_NODE_PA("点形态PA", "1007-6"),
|
OMDB_NODE_PA("点形态PA", "1007-6"),
|
||||||
OMDB_CHECKPOINT("检查点", "1012"),
|
OMDB_CHECKPOINT("检查点", "1012"),
|
||||||
|
@ -63,24 +63,21 @@ public class OMDBDataDecoder extends TileDecoder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@RequiresApi(api = Build.VERSION_CODES.N)
|
@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;
|
mTileDataSink = sink;
|
||||||
mTileScale = 1 << tile.zoomLevel;
|
mTileScale = 1 << tile.zoomLevel;
|
||||||
mTileX = tile.tileX / mTileScale;
|
mTileX = tile.tileX / mTileScale;
|
||||||
mTileY = tile.tileY / mTileScale;
|
mTileY = tile.tileY / mTileScale;
|
||||||
mTileScale *= Tile.SIZE;
|
mTileScale *= Tile.SIZE;
|
||||||
|
listResult.stream().iterator().forEachRemaining(new Consumer<RenderEntity>() {
|
||||||
List<RenderEntity> list = GeometryTools.groupByDistance(DataCodeEnum.OMDB_TRAFFIC_SIGN.code,listResult,5.0);
|
|
||||||
|
|
||||||
list.stream().iterator().forEachRemaining(new Consumer<RenderEntity>() {
|
|
||||||
@Override
|
@Override
|
||||||
public void accept(RenderEntity renderEntity) {
|
public void accept(RenderEntity renderEntity) {
|
||||||
|
|
||||||
if(!(mapLevel<renderEntity.getZoomMin()||mapLevel>renderEntity.getZoomMax())){
|
if (!(mapLevel < renderEntity.getZoomMin() || mapLevel > renderEntity.getZoomMax())) {
|
||||||
Map<String, Object> properties= new HashMap<>(renderEntity.getProperties().size());
|
Map<String, Object> properties = new HashMap<>(renderEntity.getProperties().size());
|
||||||
properties.putAll(renderEntity.getProperties());
|
properties.putAll(renderEntity.getProperties());
|
||||||
parseGeometry(renderEntity.getTable(), renderEntity.getWkt(), properties);
|
parseGeometry(renderEntity.getTable(), renderEntity.getWkt(), properties);
|
||||||
}else{
|
} else {
|
||||||
// Log.e("qj","render"+renderEntity.name+"=="+renderEntity.getZoomMin()+"==="+renderEntity.getZoomMax()+"==="+renderEntity.getEnable());
|
// 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);
|
processCoordinateArray(multiPoint.getGeometryN(i).getCoordinates(), false);
|
||||||
}
|
}
|
||||||
} else if (geometry instanceof LineString) {
|
} 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) {
|
} else if (geometry instanceof MultiLineString) {
|
||||||
MultiLineString multiLineString = (MultiLineString) geometry;
|
MultiLineString multiLineString = (MultiLineString) geometry;
|
||||||
for (int i = 0; i < multiLineString.getNumGeometries(); i++) {
|
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));
|
mMapElement.tags.add(new Tag(Tag.KEY_NAME, fallbackName, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void clean(){
|
public void clean() {
|
||||||
if(mTileDataSink!=null){
|
if (mTileDataSink != null) {
|
||||||
mTileDataSink.notifyAll();
|
mTileDataSink.notifyAll();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -63,7 +63,7 @@ public class OMDBReferenceDecoder extends TileDecoder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@RequiresApi(api = Build.VERSION_CODES.N)
|
@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;
|
mTileDataSink = sink;
|
||||||
mTileScale = 1 << tile.zoomLevel;
|
mTileScale = 1 << tile.zoomLevel;
|
||||||
mTileX = tile.tileX / mTileScale;
|
mTileX = tile.tileX / mTileScale;
|
||||||
@ -73,8 +73,8 @@ public class OMDBReferenceDecoder extends TileDecoder {
|
|||||||
listResult.stream().iterator().forEachRemaining(new Consumer<ReferenceEntity>() {
|
listResult.stream().iterator().forEachRemaining(new Consumer<ReferenceEntity>() {
|
||||||
@Override
|
@Override
|
||||||
public void accept(ReferenceEntity renderEntity) {
|
public void accept(ReferenceEntity renderEntity) {
|
||||||
if(!(mapLevel<renderEntity.getZoomMin()||mapLevel>renderEntity.getZoomMax())){
|
if (!(mapLevel < renderEntity.getZoomMin() || mapLevel > renderEntity.getZoomMax())) {
|
||||||
Map<String, Object> properties= new HashMap<>(renderEntity.getProperties().size());
|
Map<String, Object> properties = new HashMap<>(renderEntity.getProperties().size());
|
||||||
properties.putAll(renderEntity.getProperties());
|
properties.putAll(renderEntity.getProperties());
|
||||||
parseGeometry(renderEntity.getTable(), renderEntity.getWkt(), properties);
|
parseGeometry(renderEntity.getTable(), renderEntity.getWkt(), properties);
|
||||||
}
|
}
|
||||||
@ -103,14 +103,7 @@ public class OMDBReferenceDecoder extends TileDecoder {
|
|||||||
processCoordinateArray(multiPoint.getGeometryN(i).getCoordinates(), false);
|
processCoordinateArray(multiPoint.getGeometryN(i).getCoordinates(), false);
|
||||||
}
|
}
|
||||||
} else if (geometry instanceof LineString) {
|
} 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) {
|
} else if (geometry instanceof MultiLineString) {
|
||||||
MultiLineString multiLineString = (MultiLineString) geometry;
|
MultiLineString multiLineString = (MultiLineString) geometry;
|
||||||
for (int i = 0; i < multiLineString.getNumGeometries(); i++) {
|
for (int i = 0; i < multiLineString.getNumGeometries(); i++) {
|
||||||
|
@ -129,7 +129,7 @@ public class OMDBTileDataSource implements ITileDataSource {
|
|||||||
realmQuery.endGroup();
|
realmQuery.endGroup();
|
||||||
}
|
}
|
||||||
long time = System.currentTimeMillis();
|
long time = System.currentTimeMillis();
|
||||||
List<RenderEntity> listResult = realmQuery.findAll();
|
List<RenderEntity> listResult = realm.copyFromRealm(realmQuery.findAll());
|
||||||
long newTime = System.currentTimeMillis() - time;
|
long newTime = System.currentTimeMillis() - time;
|
||||||
|
|
||||||
// Log.e("jingo", "当前OMDBTileDataSource " + Thread.currentThread().hashCode() + " 当前realm " + realm.hashCode() + " 查询耗时" + newTime + " 条数" + listResult.size());
|
// 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的其他数据不再重复渲染)*/
|
/*过滤数据,只有最小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)
|
// .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());
|
.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);
|
mapDataSink.completed(QueryResult.SUCCESS);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
mapDataSink.completed(QueryResult.SUCCESS);
|
mapDataSink.completed(QueryResult.SUCCESS);
|
||||||
}
|
}
|
||||||
|
@ -1592,10 +1592,11 @@ public class GeometryTools {
|
|||||||
java.util.Map<String, RenderEntity> calcMap = new HashMap<>();
|
java.util.Map<String, RenderEntity> calcMap = new HashMap<>();
|
||||||
|
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
|
||||||
//遍历开始
|
//遍历开始
|
||||||
for (RenderEntity renderEntity : list) {
|
for (RenderEntity renderEntity : list) {
|
||||||
|
|
||||||
if(!TextUtils.isEmpty(code)&&renderEntity.getCode()!=code){
|
if(!TextUtils.isEmpty(code)&&!renderEntity.getCode().equals(code)){
|
||||||
listReslut.add(renderEntity);
|
listReslut.add(renderEntity);
|
||||||
calcMap.put(renderEntity.getId(),renderEntity);
|
calcMap.put(renderEntity.getId(),renderEntity);
|
||||||
continue;
|
continue;
|
||||||
@ -1610,6 +1611,7 @@ public class GeometryTools {
|
|||||||
if (renderEntity.getId().equals(renderEntityTemp.getId())) {
|
if (renderEntity.getId().equals(renderEntityTemp.getId())) {
|
||||||
listReslut.add(renderEntityTemp);
|
listReslut.add(renderEntityTemp);
|
||||||
count++;
|
count++;
|
||||||
|
Log.e("qj", "====计算间距" + count);
|
||||||
calcMap.put(renderEntityTemp.getId(), renderEntityTemp);
|
calcMap.put(renderEntityTemp.getId(), renderEntityTemp);
|
||||||
} else {
|
} else {
|
||||||
GeoPoint geoPoint = createGeoPoint(renderEntity.getGeometry());
|
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;
|
return listReslut;
|
||||||
}
|
}
|
||||||
|
2
vtm
2
vtm
@ -1 +1 @@
|
|||||||
Subproject commit 9e0cc6dcdce04d1082ed6459e8810d6329e8cfdc
|
Subproject commit a6787549efde8f445965faf41c17c9b58ddbd578
|
Loading…
x
Reference in New Issue
Block a user