android osmdroid批量添加多种标记将每种标记作为一个图层实时刷新标记位置和弹窗信息 给出详细代码和依赖
依赖:
implementation 'org.osmdroid:osmdroid-android:6.1.9'
implementation 'org.osmdroid:osmdroid-mapsforge:6.1.9'
implementation 'org.osmdroid:osmdroid-geopackage:6.1.9'
implementation 'org.osmdroid:osmdroid-geopackage-android:6.1.9'
implementation 'org.osmdroid:osmdroid-third-party:6.1.9'
代码:
public class MainActivity extends AppCompatActivity {
private MapView mapView;
private ItemizedIconOverlay<OverlayItem> overlay1;
private ItemizedIconOverlay<OverlayItem> overlay2;
private ItemizedIconOverlay<OverlayItem> overlay3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mapView = findViewById(R.id.mapView);
mapView.setTileSource(TileSourceFactory.MAPNIK);
mapView.setBuiltInZoomControls(true);
//添加标记
overlay1 = new ItemizedIconOverlay<>(getOverlayItems1(), getResources().getDrawable(R.drawable.marker1), null, this);
mapView.getOverlays().add(overlay1);
overlay2 = new ItemizedIconOverlay<>(getOverlayItems2(), getResources().getDrawable(R.drawable.marker2), null, this);
mapView.getOverlays().add(overlay2);
overlay3 = new ItemizedIconOverlay<>(getOverlayItems3(), getResources().getDrawable(R.drawable.marker3), null, this);
mapView.getOverlays().add(overlay3);
//刷新标记
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
MainActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
overlay1.removeAllItems();
overlay1.addItems(getOverlayItems1());
overlay2.removeAllItems();
overlay2.addItems(getOverlayItems2());
overlay3.removeAllItems();
overlay3.addItems(getOverlayItems3());
mapView.invalidate();
}
});
}
}
}).start();
//弹窗信息
mapView.setMapListener(new MapListener() {
@Override
public boolean onScroll(ScrollEvent event) {
return false;
}
@Override
public boolean onZoom(ZoomEvent event) {
return false;
}
@Override
public boolean onSingleTapConfirmed(final MotionEvent event) {
MainActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
Projection projection = mapView.getProjection();
GeoPoint geoPoint = (GeoPoint) projection.fromPixels((int) event.getX(), (int) event.getY());
ArrayList<OverlayItem> items = new ArrayList<>();
items.addAll(overlay1.getItems());
items.addAll(overlay2.getItems());
items.addAll(overlay3.getItems());
for (OverlayItem item : items) {
if (item.getPoint().distanceTo(geoPoint) < 50) {
Toast.makeText(MainActivity.this, item.getTitle(), Toast.LENGTH_SHORT).show();
break;
}
}
}
});
return true;
}
});
}
private ArrayList<OverlayItem> getOverlayItems1() {
ArrayList<OverlayItem> items = new ArrayList<>();
items.add(new OverlayItem("Title1", "Snippet1", new GeoPoint(31.2297, 121.4727)));
items.add(new OverlayItem("Title2", "Snippet2", new GeoPoint(31.2397, 121.4827)));
return items;
}
private ArrayList<OverlayItem> getOverlayItems2() {
ArrayList<OverlayItem> items = new ArrayList<>();
items.add(new OverlayItem("Title3", "Snippet3", new GeoPoint(31.2497, 121.4927)));
items.add(new OverlayItem("Title4", "Snippet4", new GeoPoint(31.2597, 121.5027)));
return items;
}
private ArrayList<OverlayItem> getOverlayItems3() {
ArrayList<OverlayItem> items = new ArrayList<>();
items.add(new OverlayItem("Title5", "Snippet5", new GeoPoint(31.2697, 121.5127)));
items.add(new OverlayItem("Title6", "Snippet6", new GeoPoint(31.2797, 121.5227)));
return items;
}
}
``
原文地址: https://www.cveoy.top/t/topic/hucE 著作权归作者所有。请勿转载和采集!