OSMBonusPack 开源项目教程
项目介绍
OSMBonusPack 是一个第三方库,为 osmdroid 提供了非常有用的额外对象。osmdroid 是一个在 Android 应用程序中与 OpenStreetMap 数据交互的库,它几乎完全替代了 Android 地图对象。OSMBonusPack 扩展了 osmdroid 的功能,提供了更多的地图交互和展示选项。
项目快速启动
安装指南
-
克隆项目仓库:
git clone https://github.com/MKergall/osmbonuspack.git
-
添加依赖: 在你的
build.gradle
文件中添加以下依赖:implementation 'org.osmdroid:osmdroid-android:6.1.10' implementation 'com.github.MKergall:osmbonuspack:6.7.0'
-
初始化 osmdroid: 在你的应用程序的
Application
类中初始化 osmdroid:import org.osmdroid.config.Configuration; import org.osmdroid.util.GeoPoint; import org.osmdroid.views.MapView; public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); Configuration.getInstance().load(this, getSharedPreferences("osmdroid", MODE_PRIVATE)); } }
-
在布局文件中添加 MapView:
<org.osmdroid.views.MapView android:id="@+id/mapView" android:layout_width="match_parent" android:layout_height="match_parent"/>
-
在 Activity 中使用 MapView:
import org.osmdroid.views.MapView; import org.osmdroid.util.GeoPoint; public class MainActivity extends AppCompatActivity { private MapView mapView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mapView = findViewById(R.id.mapView); mapView.setTileSource(TileSourceFactory.MAPNIK); mapView.getController().setCenter(new GeoPoint(51.5074, -0.1278)); // London mapView.getController().setZoom(10); } }
应用案例和最佳实践
搜索路线上的加油站
import org.osmdroid.bonuspack.routing.OSRMRoadManager;
import org.osmdroid.bonuspack.routing.Road;
import org.osmdroid.bonuspack.routing.RoadManager;
import org.osmdroid.util.GeoPoint;
// 设置起点和终点
GeoPoint startPoint = new GeoPoint(51.5074, -0.1278); // London
GeoPoint endPoint = new GeoPoint(51.5100, -0.1300); // London
// 创建路线管理器
RoadManager roadManager = new OSRMRoadManager(this);
// 获取路线
ArrayList<GeoPoint> waypoints = new ArrayList<>();
waypoints.add(startPoint);
waypoints.add(endPoint);
Road road = roadManager.getRoad(waypoints);
// 在地图上绘制路线
Overlay roadOverlay = RoadManager.buildRoadOverlay(road);
mapView.getOverlays().add(roadOverlay);
mapView.invalidate();
显示区域内的电影院
import org.osmdroid.bonuspack.overlays.Marker;
import org.osmdroid.bonuspack.overlays.POI;
import org.osmdroid.bonuspack.poi.POIProvider;
import org.osmdroid.bonuspack.poi.POISearching;
import org.osmdroid.util.BoundingBox;
// 设置搜索区域
BoundingBox boundingBox = new BoundingBox(51.5100, -0.1200, 51.5000, -0.