Android 地图开发:免费替代 Google Maps API 的解决方案 - OSMDroid 示例
是的,除了 Google Maps API,还有其他免费的地图 API 可供使用。其中一个常用的是 OpenStreetMap(OSM)。\n\n要在 Android 应用中展示地图并获取地点的经纬度,可以使用 OSMDroid 库。OSMDroid 是一个基于 OpenStreetMap 数据的 Android 库,可以在应用中显示地图并进行相关操作。\n\n以下是一个简单的示例代码,演示了如何使用 OSMDroid 在 Android 应用中显示地图并选择地点获取经纬度:\n\n1. 首先,将 OSMDroid 库添加到你的项目中。你可以在项目的 build.gradle 文件中添加以下依赖项:\n\n\nimplementation 'org.osmdroid:osmdroid-android:6.1.6'\nimplementation 'org.osmdroid:osmdroid-wms:6.1.6'\nimplementation 'org.osmdroid:osmdroid-mapsforge:6.1.6'\n\n\n2. 在你的布局文件中添加一个 MapView 控件,用于显示地图。例如,可以在 activity_main.xml 文件中添加以下代码:\n\n\n<org.osmdroid.views.MapView\n android:id="@+id/mapView"\n android:layout_width="match_parent"\n android:layout_height="match_parent" />\n\n\n3. 在你的 Activity 或 Fragment 中,使用以下代码初始化地图,并为 MapView 设置相应的配置和事件监听器:\n\njava\nimport org.osmdroid.config.Configuration;\nimport org.osmdroid.util.GeoPoint;\nimport org.osmdroid.views.MapView;\nimport org.osmdroid.views.overlay.Marker;\n\npublic class MainActivity extends AppCompatActivity {\n private MapView mapView;\n\n @Override\n protected void onCreate(Bundle savedInstanceState) {\n super.onCreate(savedInstanceState);\n\n // 初始化 OSMDroid 配置\n Configuration.getInstance().load(getApplicationContext(), PreferenceManager.getDefaultSharedPreferences(getApplicationContext()));\n\n setContentView(R.layout.activity_main);\n\n mapView = findViewById(R.id.mapView);\n mapView.setTileSource(TileSourceFactory.DEFAULT_TILE_SOURCE);\n mapView.setBuiltInZoomControls(true);\n\n // 添加地图点击事件监听器\n mapView.setOnTouchListener(new View.OnTouchListener() {\n @Override\n public boolean onTouch(View v, MotionEvent event) {\n if (event.getAction() == MotionEvent.ACTION_UP) {\n // 获取点击的地理坐标\n GeoPoint point = (GeoPoint) mapView.getProjection().fromPixels((int) event.getX(), (int) event.getY());\n\n // 将地理坐标转换为经纬度\n double latitude = point.getLatitude();\n double longitude = point.getLongitude();\n\n // 在地图上添加标记点\n Marker marker = new Marker(mapView);\n marker.setPosition(point);\n mapView.getOverlays().add(marker);\n mapView.invalidate();\n\n // 输出经纬度\n Log.d("Map Click", "Latitude: " + latitude + ", Longitude: " + longitude);\n }\n return true;\n }\n });\n }\n}\n\n\n这样,你就可以在应用中展示地图,并在点击地图时获取经纬度信息。\n\n你可以参考以下示例代码和文档,了解更多关于 OSMDroid 的用法和功能:\n\n- OSMDroid GitHub 仓库\n- OSMDroid 示例代码
原文地址: https://www.cveoy.top/t/topic/p049 著作权归作者所有。请勿转载和采集!