Stack Overflow на русском Asked by Mulber on February 4, 2021
Собственно возник вопрос по работе с оверлеями OSMDroid. Допустим, у меня их несколько (1 – компас, 2 – маркеры и т.д). Не понимаю принципа работы с оными. По примеру из OSMDroid, добавляю Overlay с множеством геоточек с быстрой отрисовкой:
private void loadChats() {
// create and set up a clusterer
final List<IGeoPoint> points = new ArrayList<>();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference chatsRef = rootRef.child("ChatsP");
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
for(DataSnapshot ds : snapshot.getChildren()) {
String name = ds.child("name").getValue(String.class);
Double lat = Double.parseDouble(String.valueOf(ds.child("lat").getValue()).replace(",", "."));
Double lon = Double.parseDouble(String.valueOf(ds.child("lon").getValue()).replace(",", "."));
points.add(new LabelledGeoPoint(lat, lon, name));
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
};
chatsRef.addListenerForSingleValueEvent(valueEventListener);
// wrap them in a theme
SimplePointTheme pt = new SimplePointTheme(points, true);
// create label style
Paint textStyle = new Paint();
textStyle.setStyle(Paint.Style.FILL);
textStyle.setColor(Color.parseColor("#FF7700"));
textStyle.setTextAlign(Paint.Align.CENTER);
textStyle.setTextSize(24);
Paint pointStyle = new Paint();
pointStyle.setStrokeWidth(0);
pointStyle.setColor(Color.parseColor("#FF7700"));
// set some visual options for the overlay
// we use here MAXIMUM_OPTIMIZATION algorithm, which works well with >100k points
SimpleFastPointOverlayOptions opt = SimpleFastPointOverlayOptions.getDefaultStyle()
.setAlgorithm(SimpleFastPointOverlayOptions.RenderingAlgorithm.MAXIMUM_OPTIMIZATION)
.setSymbol(SimpleFastPointOverlayOptions.Shape.CIRCLE)
.setPointStyle(pointStyle)
.setSelectedPointStyle(pointStyle)
.setMinZoomShowLabels(12)
.setMaxNShownLabels(120)
.setRadius(12).setIsClickable(true).setCellSize(15).setTextStyle(textStyle);
// create the overlay with the theme
final SimpleFastPointOverlay sfpo = new SimpleFastPointOverlay(pt, opt);
// onClick callback
sfpo.setOnClickListener(new SimpleFastPointOverlay.OnClickListener() {
@Override
public void onClick(SimpleFastPointOverlay.PointAdapter points, Integer point) {
}
});
// add overlay
map.getOverlays().add(sfpo);
}
Таким образом, массово добавили точки на один Overlay, который добавили к MapView.
Теперь мне необходимо в real-time добавить точку на этот оверлей, не создавать же отдельные для каждой новой точки? Каждый раз пересоздавать оверлей с вновь добавленной точкой (удалить старый, добавив вместо него новый, со старыми точками + новой точкой), или как?
Спасибо!
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP