依赖:

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;
    }
}
``
android osmdroid批量添加多种标记将每种标记作为一个图层实时刷新标记位置和弹窗信息 给出详细代码和依赖

原文地址: https://www.cveoy.top/t/topic/hucE 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录