Я хотел бы реализовать кластеризацию символов. Основываясь на этом руководстве - https://github.com/mapbox/mapbox-android-demo/blob/master/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/examples/dds/CircleLayerClusteringActivity.java и на том факте, что менеджер символов - это то же самое, что и SymbolLayer, я пришел к выводу, что вы можете использовать вместе менеджер символов и Symbol Layer, но это не работает для мне, подскажите, пожалуйста, что я делаю не так.
private void showCluster() {
List<Feature> markerCoordinates = new ArrayList<>();
for(int i = 0; i < mCarData.getSize(); i++) {
double lat = mCarData.getLat(i);
double lon = mCarData.getLon(i);
if (lat == 0.0 || lon == 0.0) {
continue;
}
markerCoordinates.add(Feature
.fromGeometry(Point.fromLngLat(mCarData.getLon(i), mCarData.getLat(i))));
}
GeoJsonSource mSource = (GeoJsonSource) mStyle.getSource("markers");
if (mSource == null) {
mStyle.addSource(
new GeoJsonSource("markers",
FeatureCollection.fromFeatures(markerCoordinates),
new GeoJsonOptions()
.withCluster(true)
.withClusterRadius(20)
.withTolerance(0.7f)
.withMaxZoom(21)
)
);
} else {
mSource.setGeoJson(FeatureCollection.fromFeatures(markerCoordinates));
}
//Add clusters' circles
CircleLayer circles = (CircleLayer) mStyle.getLayer("cluster-0");
if (circles == null) {
circles = new CircleLayer("cluster-0", "markers"); //mapbox-android-symbol-source
circles.setProperties(
circleColor(ContextCompat.getColor(context, R.color.mapbox_blue)),
circleRadius(18f),
iconAllowOverlap(true),
textIgnorePlacement(true),
iconIgnorePlacement(true),
textAllowOverlap(true),
symbolAvoidEdges(false)
);
Expression pointCount = toNumber(get("point_count"));
// Add a filter to the cluster layer that hides the circles based on "point_count"
circles.setFilter(all(has("point_count"), gte(pointCount, literal(0))));
mStyle.addLayer(circles);
}
//Add the count labels
SymbolLayer count = (SymbolLayer) mStyle.getLayer("count");
if (count == null) {
count = new SymbolLayer("count", "markers");
count.setProperties(
textField(Expression.toString(get("point_count"))),
textSize(12f),
textColor(Color.WHITE),
textIgnorePlacement(true),
textAllowOverlap(true),
iconIgnorePlacement(true)
// symbolAvoidEdges(false)
);
mStyle.addLayer(count);
}
}
Некоторые изменения в вопросе. Я играю со следующими свойствами диспетчера символов.
symbolManager.setIconIgnorePlacement(false);
symbolManager.setTextIgnorePlacement(true);
symbolManager.setIconAllowOverlap(false);
symbolManager.setTextAllowOverlap(true);
symbolManager.setIconOptional(false);
symbolManager.setTextOptional(true);
symbolManager.setSymbolAvoidEdges(true);
И со следующими свойствами слоя символов.
iconAllowOverlap(true),
textIgnorePlacement(true),
iconIgnorePlacement(true),
textAllowOverlap(true),
symbolAvoidEdges(false)
Я получаю следующий результат , так что скажите Я хотел бы, чтобы я мог перекрыть нижний слой с верхним. И также у меня есть этот proplem . Маркеры исчезают, и кластер еще не появился как this . Это та же картина, но с другим зумом.