Osmdroid 是一个开源的 Android 地图开发库,允许在 Android 应用中使用 OpenStreetMap 地图。本文将展示如何使用 Osmdroid 批量添加多种标记和弹窗来标识地图上的点位。

以下代码示例展示了如何使用 Osmdroid 添加点标记、圆形标记、多边形标记以及弹窗:

// 创建地图控件
MapView mapView = new MapView(this, new DefaultResourceProxyImpl(this));
mapView.setClickable(true);
mapView.setBuiltInZoomControls(true);
mapView.setMultiTouchControls(true);

// 在地图上添加点标记
ArrayList<OverlayItem> items = new ArrayList<>();
items.add(new OverlayItem('Title1', 'Desc1', new GeoPoint(51.50722, -0.12750)));
items.add(new OverlayItem('Title2', 'Desc2', new GeoPoint(40.71278, -74.00594)));
items.add(new OverlayItem('Title3', 'Desc3', new GeoPoint(35.68950, 139.69171)));
items.add(new OverlayItem('Title4', 'Desc4', new GeoPoint(37.77493, -122.41942)));
Drawable marker = getResources().getDrawable(R.drawable.marker);
ItemizedOverlayWithFocus<OverlayItem> overlay = new ItemizedOverlayWithFocus<>(items, marker, mapView);
mapView.getOverlays().add(overlay);

// 在地图上添加圆形标记
ArrayList<Overlay> circles = new ArrayList<>();
for (int i = 0; i < items.size(); i++) {
    Overlay circle = new Circle(this, items.get(i).getPoint(), 1000, 50, Color.GREEN);
    circles.add(circle);
}
mapView.getOverlays().addAll(circles);

// 在地图上添加多边形标记
List<GeoPoint> points = new ArrayList<>();
points.add(new GeoPoint(51.50722, -0.12750));
points.add(new GeoPoint(40.71278, -74.00594));
points.add(new GeoPoint(35.68950, 139.69171));
points.add(new GeoPoint(37.77493, -122.41942));
Polygon polygon = new Polygon(this);
polygon.setFillColor(Color.argb(75, 255, 0, 0));
polygon.setStrokeColor(Color.RED);
polygon.setStrokeWidth(2.0f);
polygon.setPoints(points);
mapView.getOverlays().add(polygon);

// 添加弹窗
overlay.setFocusItemsOnTap(true);
overlay.setOnFocusChangeListener(new ItemizedOverlayWithFocus.OnFocusChangeListener<OverlayItem>() {
    @Override
    public void onFocusChanged(ItemizedOverlayWithFocus<OverlayItem> overlay, OverlayItem newFocus) {
        if (newFocus != null) {
            Toast.makeText(MainActivity.this, newFocus.getTitle(), Toast.LENGTH_SHORT).show();
        }
    }
});

// 显示地图
setContentView(mapView);

在上面的代码中,首先创建了一个地图控件 mapView,然后通过添加点标记、圆形标记和多边形标记等来标识地图上的点位。最后通过添加弹窗,实现点击标记后弹出对应的信息窗口。

需要注意的是,在 Osmdroid 中添加标记和弹窗需要使用对应的 Overlay 和 ItemizedOverlay 类,其中 Overlay 表示地图上的图层,ItemizedOverlay 表示地图上的标记和弹窗。同时,Osmdroid 也提供了一些常用的图层和标记类,可以通过继承这些类来快速实现自定义图层和标记。

Android 地图开发:使用 Osmdroid 批量添加多种标记和弹窗

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

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