Пытаюсь сделать кластеризацию в приложении с использованием библиотеки mapbox и их плагина аннотаций. В разрабатываемом приложении необходимо использовать обработчик нажатий и задавать свойства каждому маркеру (угол, иконка, цвет и прочее), поэтому вариант с использованием SymbolLayer отпал сразу. Единственное почти рабочее решение, которое мне пришло в голову это создать слой с использованием SymbolManager и попытаться перекрыть его слоем SymbolLayer. Недостаток этого решения в том, что перекрытие слоев осуществляется неправильно, можно сказать асинхронно. Например, может быть так, что кластер уже появился, а маркеры еще не пропали, или наоборот... Также кластер не до конца перекрывает маркеры. Кто сталкивался с такой задачей, подскажите как вы ее решили? Мое решение выглядит так. Заранее спасибо!
int[] layers = new int[] { 0, ContextCompat.getColor(this, R.color.colorAccent) } ;
private void createSymbols() {
Expression pointCount = toNumber(get("point_count"));
for (int i = 0; i < mCarData.getSize(); i++) {
String color = ColorUtils.colorToRgbaString(ContextCompat.getColor(this, R.color.gray));
if (mCarData.isOnline(i)) {
if (mCarData.getDrive(i) == 1) {
color = ColorUtils.colorToRgbaString(ContextCompat.getColor(this, R.color.mapboxGreen));
} else {
color = ColorUtils.colorToRgbaString(ContextCompat.getColor(this, R.color.mapbox_blue));
}
}
createSymbol(mCarData.getLatLng(i), mCarData.getAngle(i), mCarData.getNumber(i), color, "ic_marker");
symbolManager.setFilter(all(has("point_count", gte(pointCount, literal(layers[0])))));
}
}
private void createSymbol(LatLng latLng, float angle, String number, String color,@Nullable String icon) {
SymbolOptions symbolOptions = new SymbolOptions()
.withLatLng(latLng)
.withIconImage(icon)
.withIconSize(0.8f)
.withTextField(number)
.withIconRotate(angle)
.setDraggable(false);
markers.add(symbolManager.create(symbolOptions));
}
private void showCluster() {
List<Feature> markerCoordinates = new ArrayList<>();
for(int i = 0; i < mCarData.getSize(); i++) {
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)
.withTolerance(0.5f)
.withClusterRadius(50)
.withClusterMaxZoom(14)
)
);
} else {
mSource.setGeoJson(FeatureCollection.fromFeatures(markerCoordinates));
}
for (int i = 0; i < layers.length; i++) {
//Add clusters' circles
CircleLayer circles = (CircleLayer) mStyle.getLayer("cluster-" + i);
if (circles == null) {
circles = new CircleLayer("cluster-" + i, "markers");
circles.setProperties(
circleColor(layers[1]),
circleRadius(18f)
);
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(layers[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)
);
mStyle.addLayer(count);
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Пожалуйста помогите решить эту проблему, хотя бы в какую сторону копать решение
Размер ArrayList задаю через BufferedReader, вывожу сообщение о последнем элементе массива, далее сортируюsort()-ом
Имеется строка в которой может присутствовать любой один из пяти символов: & или @ или + или * или %
Я хочу добавить PNG-изображение в PDF-файл, но я знаю, что PDF не поддерживает PNG-файлыЗначит ли это, что я не могу использовать PNG-файлы в iText?