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