Android 地图开发:使用 Osmdroid 批量添加多种标记和弹窗
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 也提供了一些常用的图层和标记类,可以通过继承这些类来快速实现自定义图层和标记。
原文地址: https://www.cveoy.top/t/topic/oXhu 著作权归作者所有。请勿转载和采集!