osmdroid是(几乎)完整/免费更换为Android MapView(v1 API)类。 它还包括一个模块化的瓷砖供应商系统支持众多的在线和离线瓷砖来源和覆盖支持内置覆盖绘制图标,跟踪位置和形状。如果想在你项目中使用 osmdroid,绝对是灵活度最高,不用申请百度,高德等的key。还有一堆规则要遵循。 osmdroid可以支持多图层叠加,绘制自已的图层。离线 加载常用地图格式zip,sqlite,.mbtiles,gemf。也可以在线加载地图等。

github官网: https://github.com/osmdroid/osmdroid

osmdroid api解释: http://osmdroid.github.io/osmdroid/

维基解释: https://github.com/osmdroid/osmdroid/wiki

这篇博客代码的下载地址: http://download.csdn.net/detail/qq_16064871/9728127

1,图片展示

在线地图:

网格形式:还没加载出来

加载sd卡下面一个离线地图

2,部分离线地图参考代码

package com.example.osmdroiddemo;
import java.io.File;
import java.util.Set;
import org.osmdroid.tileprovider.IRegisterReceiver;
import org.osmdroid.tileprovider.modules.ArchiveFileFactory;
import org.osmdroid.tileprovider.modules.IArchiveFile;
import org.osmdroid.tileprovider.modules.OfflineTileProvider;
import org.osmdroid.tileprovider.tilesource.FileBasedTileSource;
import org.osmdroid.tileprovider.tilesource.TileSourceFactory;
import org.osmdroid.tileprovider.util.SimpleRegisterReceiver;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.MapView;
import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.view.Menu;
import android.widget.Toast;
public class MainActivity extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		MapView mapView = (MapView)findViewById(R.id.MapView);
		initMapOverlays(mapView);
	public void initMapOverlays(MapView mapView) {
		if (mapView.getOverlays().size()<=0) {
			mapViewOtherData(mapView);
//			mapView.setTileSource(TileSourceFactory.MAPNIK);
			mapView.setDrawingCacheEnabled(true);
			mapView.setMaxZoomLevel(20);
			mapView.setMinZoomLevel(6);
			mapView.getController().setZoom(12);
			mapView.getController().setCenter(new GeoPoint(23.12655, 113.366575));
			mapView.setUseDataConnection(true);
			mapView.setMultiTouchControls(true);// 触控放大缩小   
			mapView.getOverlayManager().getTilesOverlay().setEnabled(true);
			//自己图层
//			mapView.getOverlays().add();
//			".zip"".sqlite"".mbtiles"".gemf"
	public void mapViewOtherData(MapView mapView){
		String strFilepath = Environment.getExternalStorageDirectory().getPath() + "/test.mbtiles";
		File exitFile = new File(strFilepath);
		String fileName = "test.mbtiles";
		if (!exitFile.exists()) {
			mapView.setTileSource(TileSourceFactory.MAPNIK);
		}else {
			fileName = fileName.substring(fileName.lastIndexOf(".") + 1);
			if (fileName.length() == 0)
				return;
			if (ArchiveFileFactory.isFileExtensionRegistered(fileName)) {
				try {
					OfflineTileProvider tileProvider = new OfflineTileProvider((IRegisterReceiver) new SimpleRegisterReceiver(this), new File[] { exitFile });
					mapView.setTileProvider(tileProvider);
					String source = "";
					IArchiveFile[] archives = tileProvider.getArchives();
					if (archives.length > 0) {
						Set<String> tileSources = archives[0].getTileSources();
						if (!tileSources.isEmpty()) {
							source = tileSources.iterator().next();
							mapView.setTileSource(FileBasedTileSource.getSource(source));
						} else {
							mapView.setTileSource(TileSourceFactory.DEFAULT_TILE_SOURCE);
					} else
						mapView.setTileSource(TileSourceFactory.DEFAULT_TILE_SOURCE);
					Toast.makeText(this,"Using " + exitFile.getAbsolutePath() + " "+ source, Toast.LENGTH_LONG).show();
					mapView.invalidate();
					return;
				} catch (Exception ex) {
					ex.printStackTrace();
	             Toast.makeText(this,  " did not have any files I can open! Try using MOBAC", Toast.LENGTH_LONG).show();
	        } else{
	             Toast.makeText(this, " dir not found!", Toast.LENGTH_LONG).show();

离线地图的格式支持:".zip"".sqlite"".mbtiles"".gemf"

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
4,在线地图数据源

可以加载不同的在线数据源

mapView.setTileSource(TileSourceFactory.MAPNIK);

5,xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >
    <org.osmdroid.views.MapView
        android:id="@+id/MapView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="2.00" />
</RelativeLayout>
osmdroid是(几乎)完整/免费更换为Android MapView(v1 API)类。它还包括一个模块化的瓷砖供应商系统支持众多的在线和离线瓷砖来源和覆盖支持内置覆盖绘制图标,跟踪位置和形状。如果想在你项目中使用osmdroid,绝对是灵活度最高,不用申请百度,高德等的key。还有一堆规则要遵循。osmdroid可以支持多图层叠加,绘制自已的图层。离线加载常用地图格式zip,sqlite,.
本文中的代码已经在文中全部出现过了,为什么还需要一个下载币呢,是因为我的下载币不够用了额,下载其他大神的代码,需要,所以请赞助一下吧。当然你不想赞助的话,你可以在文章中一个一个的copy,绝对的一模一样,绝对的开源,赞助一个下载币吧 ##里面附带这各个城市的cityCode
一,Osmdroid在线地图缓存地址 Osmdroid加载在线地图的时候会在本地创建一个.db文件作为缓存的地址 //设置Osmdroid文件路径,需要在MapView初始化之前进行设置 Configuration.getInstance().setOsmd...
osmdroid地图资源本文档主要介绍关于地图资源、载入瓦片、缓存、离线配置等。地图投影osmdroid支持多种投影。osmdroid是基于Open Street Maps,使用的投影是EPSG:3857。osmdroid支持什么类型的地图瓦片编号系统 ZXY - osmdroid基于Open Street Maps,这个地图使用的是“Slippy Map Format”格式(一种常见的地图供应商采
Leaflet 是一款非常优秀的 JavaScript 开源地图库,可以方便地创建基于 Web 的交互式地图应用程序。在 Leaflet 中,我们可以利用各种扩展扩展库实现相关的任务,其中加载和使用天地图是一个非常常见的任务。 在这里,我们将详细说明如何在 Leaflet 中加载地图。首先,我们需要获取天地图的开发者密钥并引入相关库。具体来说,我们需要引入 `leaflet.js`、`proj4js`、`leaflet.ChineseTmsProviders.js`和 `leaflet-tilelayer-wmts.js`。需要注意的是,天地图使用 WGS84 坐标系统和 3857 坐标系统,因此我们必须使用 proj4js 将这两个坐标系统进行转换。 接着,我们可以创建一个 Leaflet 地图对象并添加天地图的图层,代码示例如下: ```javascript // 创建 Leaflet 地图 var map = L.map('map', { crs: L.CRS.EPSG3857, // 设置坐标系 center: [30, 120], // 设置中心点坐标 zoom: 6 // 设置缩放级别 // 添加天地图的图层 var baseLayer = L.tileLayer.chinaProvider('TianDiTu.Normal.Map', { maxZoom: 18, // 设置最大缩放级别 minZoom: 1 // 设置最小缩放级别 map.addLayer(baseLayer); 在上面的示例中,我们首先创建了一个 Leaflet 地图对象,并设置了坐标系、中心点坐标和缩放级别。然后,我们使用 `tileLayer.chinaProvider` 方法添加了天地图的图层,其中 `'TianDiTu.Normal.Map'` 表示要添加的图层类型,这里我们添加了天地图的普通地图。除了 `'TianDiTu.Normal.Map'`,我们还可以添加其他类型的图层,比如卫星地图、地形图等。 最后,我们需要使用 CSS 定义一个容器来显示地图。完整的样例代码如下所示: ```html <!DOCTYPE html> <html lang="en"> <meta charset="UTF-8"> <title>Leaflet 加载地图</title> <link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/leaflet/1.6.0/leaflet.css"> <style> #map { width: 100%; height: 800px; </style> </head> <div id="map"></div> <script src="https://cdn.bootcdn.net/ajax/libs/leaflet/1.6.0/leaflet.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/proj4js/2.6.1/proj4.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/leaflet.ChineseTmsProviders/1.22.0/leaflet.ChineseTmsProviders.js"></script> <script src="./leaflet-tilelayer-wmts.js"></script> <script> // 创建 Leaflet 地图 var map = L.map('map', { crs: L.CRS.EPSG3857, // 设置坐标系 center: [30, 120], // 设置中心点坐标 zoom: 6 // 设置缩放级别 // 添加天地图的图层 var baseLayer = L.tileLayer.chinaProvider('TianDiTu.Normal.Map', { maxZoom: 18, // 设置最大缩放级别 minZoom: 1 // 设置最小缩放级别 map.addLayer(baseLayer); </script> </body> </html> 总之,使用 Leaflet 加载地图非常简单,只需要引入相关库、创建地图对象并添加天地图的图层。在这个过程中,需要注意的是天地图使用 WGS84 坐标系统和 3857 坐标系统,我们需要使用 proj4js 转换坐标系。同时,我们还可以根据需求添加其他类型的图层,比如卫星地图、地形图等。
CSDN-Ada助手: 非常感谢博主的分享,这篇博客真的非常有价值!我特别喜欢博主对问题的深入探究和分析,让我受益匪浅。希望博主能继续创作,分享更多的知识。同时也希望博主能在未来的文章中加入更多实践应用的案例,为读者提供更加全面的帮助。再次感谢博主的辛勤付出,期待更多的精彩内容! 为了方便博主创作,提高生产力,CSDN上线了AI写作助手功能,就在创作编辑器右侧哦~(https://mp.csdn.net/edit?utm_source=blog_comment_recall )诚邀您来加入测评,到此(https://activity.csdn.net/creatActivity?id=10450&utm_source=blog_comment_recall)发布测评文章即可获得「话题勋章」,同时还有机会拿定制奖牌。 Android 物联网WIFI模块配置 2301_77906093: "admin"密码"admin" Android 物联网WIFI模块配置 2301_77906093: "admin"密码admin" osmdroid 在线加载谷歌瓦片(谷歌地图瓦片地址解释) Blank~: osmbonuspack arcgis for Android 100.1 在线加载天地图和谷歌地图 fdxszy: 最新的好像加载不出谷歌地图