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助手:
Android 物联网WIFI模块配置
2301_77906093:
Android 物联网WIFI模块配置
2301_77906093:
osmdroid 在线加载谷歌瓦片(谷歌地图瓦片地址解释)
Blank~:
arcgis for Android 100.1 在线加载天地图和谷歌地图
fdxszy: