GIS的学习(二十九)Osmdroid 离线地图存放位置的研究和详细分析

        在手机通过osmdroid调用离线地图必须放在sdcard目下、如果采用osmdroid调用地图,那么用户查看地图手机上面一定有一个目录叫/sdcard/osmdroid/目录。目录下存放着调用的图层。

 

 

在线地图例如路径如下:

/sdcard/osmdroid/titles/poly_landmarks/14/3667/6189.png.tile

 

表示osmdroid调用的图层为poly_landmarks,14为缩放大小,3667为图层的索引,3667目录下为具体的索引下图层tiles图片。

 

离线地图调用路径:

 

       /mnt/sdcard/osmdroid/gmap.zip

 

 

 

 

 

 

文档说明如下:

 

Map tiles in Osmdroid are provided by map tile providers. The default tile provider used by Osmdroid is MapTileProviderBasic. This provider extends MapTileProviderArray, which means that it is an array of a few other tile providers - when a tile is requested these tile providers are asked one by one for a tile image until one of them provides it. Take a look at the constructor of MapTileProviderBasic:

public MapTileProviderBasic(final IRegisterReceiver pRegisterReceiver,
            final INetworkAvailablityCheck aNetworkAvailablityCheck, final ITileSource pTileSource) {
    super(pTileSource, pRegisterReceiver);

    final TileWriter tileWriter = new TileWriter();

    final MapTileFilesystemProvider fileSystemProvider = new MapTileFilesystemProvider(pRegisterReceiver, pTileSource);
    mTileProviderList.add(fileSystemProvider);

    final MapTileFileArchiveProvider archiveProvider = new MapTileFileArchiveProvider(pRegisterReceiver, pTileSource);
    mTileProviderList.add(archiveProvider);

    final MapTileDownloader downloaderProvider = new MapTileDownloader(pTileSource, tileWriter, aNetworkAvailablityCheck);
    mTileProviderList.add(downloaderProvider);
}

There are three map tile providers added to the array of providers, in this order:

  • MapTileFilesystemProvider - provides tiles from the file system (SD card directory)
  • MapTileFileArchiveProvider - provides tiles from archive in file system
  • MapTileDownloader - provides tiles by downloading them from the Internet (e.g. from OSM servers)

          So the MapTileProviderBasic looks for a given tile first in the file system, if the tile is not available then it looks for it in archive files and again if it is not available there it downloads the tile from the Internet.

         Ok, this is the default mechanism. If you want to change this mechanism to look for tiles stored in a DB then you can create you own class similar to MapTileProviderBasic. So your class could also exte  nd MapTileProviderArray and just use other providers in the constructor. In Osmdroid there is a class DatabaseFileArchive which could probably help you in reading tiles from the DB.

        After creating your own tile provider you should use it instead of the default one. Map tile providers are attached to the MapView. Some of the constructors of MapView take MapTileProviderBase as an argument - you can use one of them to attach your own provider.

 

 

综述:osmdroid使用地图的方式如下

1.首先调用MapTileFilesystemProvider 在sd card 目录查找地图图层。

2.如果没有,调用MapTileFileArchiveProvider 查找zip类型的压缩文件。

3.如果没有,到官方下载地图。

 

如果想使用本地数据库存储图层信息,那么需要重设置MapTileProviderArray实现地图图层的存储。

 

 

转载自引路峰移动软件

 

http://www.imobilebbs.com/wordpress/%e7%a6%bb%e7%ba%bf%e5%9c%b0%e5%9b%be%e4%b8%8b%e8%bd%bd/%e7%a6%bb%e7%ba%bf%e5%9c%b0%e5%9b%be%e5%b7%a5%e5%85%b7

 

 

离线地图生成工具结构图

前面描述的地图应用基本上都需要网络连接,每次更新地图都需要连接地图服务器。在编写地图客户端软件时,常常会想使用离线地图包,这样一来可以节省流量,同时也可以提高客户端响应能力。引路蜂软件在提供地图开发包的同时也提供了离线地图生成工具,可以用于地图开发包,可以做到显示地图时,先从本地地图包取出相应图片,如果本地没有,再从相应地图服务器上取图片。
Guidebee 离线地图生成器的数据来源可以有三种。
1.各种地图服务器如微软Bing map,google map 或者是用户自定义的服务器。只要符合通用的分片原则http://msdn.microsoft.com/en-us/library/bb259689.aspx
2. 已生成的离线地图包,包括guidebee离线地图包以及其它格式离线地图包(如mgmap).
3. 来自矢量地图数据(如MapInfo, ArgGIS地图数据)

GIS的学习(二十九)Osmdroid 离线地图存放位置的研究和详细分析_第1张图片

对于不同来源的数据,Guidebee 离线地图生成工具生成最终带索引的离线地图包.map ,可以通过Mapdigit 地图开发包用于各种平台的客户端。

离线地图生成工具使用方法

引路蜂离线地图生成工具用于生成离线地图包,运行环境需要安装 .net framework 3.5.

GIS的学习(二十九)Osmdroid 离线地图存放位置的研究和详细分析_第2张图片

移动地图

GIS的学习(二十九)Osmdroid 离线地图存放位置的研究和详细分析_第3张图片

加载文件 –> 读取离线文件 ,可以通过离线工具查看已生成的离线地图包,或者读取MapInfo矢量地图(不在免费版本中)
上移,左移,右移,下移–>移动地图 ,也可以通过鼠标来拖动地图
放大,缩小–>放大及缩小地图
服务器 –>在读取离线文件后,当时显示为离线地图包内容,若想重新连接相应地图服务器,则按些钮。
调整–>将当前地图对齐到最近的网格中。
查找–>为方便移动到地图到指定地方,可以通过查询地图来移动。
选择下载区域

GIS的学习(二十九)Osmdroid 离线地图存放位置的研究和详细分析_第4张图片

可以通过输入起始及终止网格的序号来指定下载区域,一个简单的方法是通过按住右键拖动鼠标来选择区域,选择的区域以蓝色显示。
每个网格左上角显示当前网络的序号。
选择地图下载级别

GIS的学习(二十九)Osmdroid 离线地图存放位置的研究和详细分析_第5张图片

在生成离线地图时,同样需要指定需下载的地图级别,比如当前放大级别为10(显示在地图左下角)。你不能选择小于10的级别,下载总是会从当前级别开始。这时可以选择11,12 ,一直到17级。 total xxx ,这里xxx给出了将有多少片图片会被下载到离线地图包中。
级别越大,下载图片越多,成指数级别增长。
地图类型选择

GIS的学习(二十九)Osmdroid 离线地图存放位置的研究和详细分析_第6张图片

最后选择地图类型,地图类型只对服务器有效,可以从下拉框中选择各种地图类型,点击开始,则开始下载图片,下载结束时,显示“finished writing”。
地图文件名为 StartX_StartY_EndX_EndY_ZoomLevel_MapType.map

离线工具下载  http://www.imobilebbs.com/download/tools/downloader.msi    安装版

和 http://www.imobilebbs.com/download/tools/MapTileDownloader.rar          绿色版

离线工具需要.Net Framework Runtime,如果您的计算机上未安装,请下载安装

新版离线地图工具下载

基本使用方法参见离线地图生成工具使用方法

  • 支持下载1-23 级地图。
  • 允许指定下载文件名。
  • 性能大幅提高> 50 倍。

离线工具下载 http://www.imobilebbs.com/download/tools/downloader.msi 安装版
和 http://www.imobilebbs.com/download/tools/MapTileDownloader.rar 绿色版
离线工具需要.Net Framework Runtime,如果您的计算机上未安装,请下载安装

GIS的学习(二十九)Osmdroid 离线地图存放位置的研究和详细分析_第7张图片

再谈离线地图工具(1):如何使用已有地图数据源生成离线地图包

在前文离线地图下载方法解析 , 离线地图生成工具结构图离线地图生成工具使用方法

我们重点介绍如果使用引路蜂离线地图制作工具的原理和使用方法,离线地图工具缺省支持从Google地图,Bing地图,MapABC地图,Yahoo地图等地图服务器下载制作离线地图包。

但有些情况下,用户自己已经购买了地图数据(如ArgGIS, MapInfo,PostGIS ,ShapeFile等)需要从这些数据来生成离线地图包。

可以利用GeoServer和引路蜂离线地图包来制作离线地图包:步骤如下:

1. 下载安装GeoServer ,GeoServer是Java应用,可以用于Windows ,Mac OS, Linux,本教程使用Windows 系统,在 http://geoserver.org/display/GEOS/Stable 选择 Windows Installer

2. GeoServer安装成功后,在GeoServer 启动菜单有如下几个菜单项:

GIS的学习(二十九)Osmdroid 离线地图存放位置的研究和详细分析_第8张图片

  • Start GeoServer   启动GeoServer
  • Stop GeoServer   停止GeoServer
  • GeoServer Web Admin Page: GeoServer管理页面

首先启动GeoServer,然后进入GeoServer管理页面, 缺省用户名和密码为admin , geoserver.

3. 首先看看随GeoServer安装时自带的地图数据   Data –>Layers

GIS的学习(二十九)Osmdroid 离线地图存放位置的研究和详细分析_第9张图片我们想生成Topp:states 数据的离线地图包,可以在Data -> Layer Preview 中使用 OpenLayers来预览该图层:

4. GeoServer 集成了一个GeoWebCache ,是一个采用Java实现用于缓存WMS(Web Map Service)Tile的开源项目。当地图客户端请求一张新地图和Tile时,GeoWebCache将拦截这些调用然后返回缓存过的Tiles。如果找不到缓存再调用服务器上的Tiles,从而提高地图展示的速度。实现更好的用户体验.

这里不详细介绍GeoWebCache ,只要知道它提供一种和Google Map类似的Tile访问方法 。可以根据Tile的X,Y和Zoom来访问一个图片:

比如安装好GeoServer,在IE地址栏输入:

http://localhost:8080/geoserver/gwc/service/gmaps?layers=topp:states&zoom=1&x=0&y=0 ,表示Zoom为1即是X=0和Y=0的Tile:GIS的学习(二十九)Osmdroid 离线地图存放位置的研究和详细分析_第10张图片

5. 下载引路蜂离线地图工具

离线工具下载 http://www.imobilebbs.com/download/tools/downloader.msi 安装版

和 http://www.imobilebbs.com/download/tools/MapTileDownloader.rar 绿色版

离线工具需要.Net Framework Runtime,如果您的计算机上未安装,请下载安装

6.  打开引路蜂离线地图工具的安装目录: 找到 MapDigit.exe.config ,这是 MapDigit.exe的配置文件,这个配置文件缺省定义了多个地图服务器(软件Google地图,Bing地图等)。

我们重用GOOGLESATELLITE这个类型,将它重新定义为:

<add key=”GOOGLESATELLITE” value=”http://localhost:8080/geoserver/gwc/service/gmaps?layers=topp:states#zoom={ZOOM}#x={X}#y={Y}” />

可以对比一下 URL:

http://localhost:8080/geoserver/gwc/service/gmaps?layers=topp:states&zoom=1&x=0&y=0

将& 改成#  Zoom=1 , x=0 ,y=  改成zoom={ZOOM},x={X},y={Y}从而就为Layer: topp:states 定义好了URL模板,然后启动MapDigit.exe ,在下来框中选择 GOOGLESATELLITE。

GIS的学习(二十九)Osmdroid 离线地图存放位置的研究和详细分析_第11张图片后面就可以和下载Google地图,Bing地图一样来制作离线地图包了,地图数据源来自GeoServer。离线地图生成工具使用方法

限于篇幅,将在下一篇介绍如果使用ShapeFile做为GeoServer的数据源。

再谈离线地图工具(2):为GeoServer添加ShapeFile数据源

这里简要介绍一下如何给GeoServer添加一个ShapeFile:

准备测试数据

1. 下载示例ShapeFile nyc_roads.zip ,这个文件含有纽约市道路图。

2. 将其解压得到四个文件 nyc_roads.shp ,nyc_roads.shx, nyc_roads.dbf, nyc_roads.prj

3. 将 nyc_roads 拷贝到 <GEOSERVER_DATA_DIR> (在GeoServer 安装目录的data_dir)的data 子目录下: 在windows 的缺省目录名为:

C:\Program Files (x86)\GeoServer 2.1.0\data_dir\data

使用GeoServer创建Workspace, Workspace 用来管理一组相关的地图图层(Layers),比如道路层,湖泊层,文字层等,多层叠加可以构成完整的地图。

  1. 使用浏览器 进入GeoServer的管理页面http://localhost:8080/geoserver/web.
  2. 登录到GeoServer
  3. 转到Data->Workspace页面GIS的学习(二十九)Osmdroid 离线地图存放位置的研究和详细分析_第12张图片
  4. 创建一个新的Workspace,选择Add New Workspace 按钮,将会提升输入Workspace名称,和Namespace URI:GIS的学习(二十九)Osmdroid 离线地图存放位置的研究和详细分析_第13张图片
  5. 输入Name: nyc_roads ,URI: http://opengeo.org/nyc_roads, 这个URI可以用来唯一指定中个Workspace, http://opengeo.org可以替换成你自己的域名。GIS的学习(二十九)Osmdroid 离线地图存放位置的研究和详细分析_第14张图片
  6. 点击“Submit”提交,GeoServer将会创建nyc_roads Workspace.

创建 Data Store

  1. 转到 Data -> Store 页面。
  2. 为了添加 nyc_roads 数据,需要在GeoServer中创建一个新的Data Store, 点击“Add new Store”按钮,可以看到GeoServer支持很多种数据源: PostGIS NG , Shapefiles 等等。GIS的学习(二十九)Osmdroid 离线地图存放位置的研究和详细分析_第15张图片
  3. 因为我们使用的是shapefile,因此选择Shaprfile -ESRI(tm) Shapefile (*.shp)
  4. 在”New Vector Data Source”页面 来配置这个Store的基本信息,如Workspace, Data Source Name, Description (这些都可以根据需要自己定义)
  5. 在”Connection Parameters”下指定nyc_roads.shp 的路径GIS的学习(二十九)Osmdroid 离线地图存放位置的研究和详细分析_第16张图片
  6. 点击“Save”,页面将转到Layer 的配置页面。

Layer 配置

  1. 在“New Layer Chooser” ,选择 nyc_road.GIS的学习(二十九)Osmdroid 离线地图存放位置的研究和详细分析_第17张图片
  2. 配置“publish”的参数GIS的学习(二十九)Osmdroid 离线地图存放位置的研究和详细分析_第18张图片
  3. 为shape文件生成边界矩形参数 (点击” Compute from Data” 自动产生)
  4. 为Shaprfile 指定显示风格 (在Publsih页面)
  5. 选择”line”的缺省风格GIS的学习(二十九)Osmdroid 离线地图存放位置的研究和详细分析_第19张图片
  6. 保持配置”Save”

预览Layer

可以通过 Layer Preview 来检验nyc_roads 发布成功,

GIS的学习(二十九)Osmdroid 离线地图存放位置的研究和详细分析_第20张图片选择使用OpenLayers来显示地图

GIS的学习(二十九)Osmdroid 离线地图存放位置的研究和详细分析_第21张图片

使用引路蜂离线地图工具,参见上篇将 MapDigit.ext.config 中 Layers名称改为nyc_roads:nyc_roads

<add key=”GOOGLESATELLITE” value=”http://localhost:8080/geoserver/gwc/service/gmaps?layers=nyc_roads:nyc_roads#zoom={ZOOM}#x={X}#y={Y}” />

GIS的学习(二十九)Osmdroid 离线地图存放位置的研究和详细分析_第22张图片同样的方法可以为nyc_roads 生成离线地图包

由此可见,GeoServer可以用来架设自定义的地图服务器,引路蜂地图开发包(Android,Java ME, Blackberry等平台)支持这种自定义的服务器,离线地图工具生成的离线地图包可以直接用在引路蜂地图开发包中。

Android引路蜂地图开发示例:离线地图示例

在手机上,离线地图包一般放在SD卡上,然后通过文件读取。引路蜂地图开发包支持同时读取多个地图包,这是通过MapTiledZone类和MapTileStreamReader类来完成的。每个地图包对应于一个MapTiledZone,地图包对每张地图建立的索引以加速图片检索将记录地图包存放的区域和缩放级别。而类MapTileStreamReader提供了管理这些地图包的方法.

离线地图工具参见:离线地图生成工具结构图 和 离线地图生成工具使用方法

下面的示例从SD卡guidebee子目录读取world.map, china.map, nanjing.map ,更一般的做法是读取子目录下所有扩展名为.map 离线地图包,这样可以随时添加或删除离线地图包。因为是示例,所以在代码中指定读取这三个地图包。下面离线地图包为例子中用到的,是使用离线工具制作的。

文件名 大小 说明 下载
world.map 449k 世界地图 1-4级 下载
china.map 181M 中国地图 4-11级 下载
nanjing.map 64M 南京地图 11-17级 下载

随着缩放级别的增大,需下载的离线地图图片呈现指数增长,一般不可能将一个国家从1到17放在一个离线地图包,可以分几个层次下载制作离线地图包。如上图分3个层次。世界–>中国–>南京。

Java ME引路蜂地图开发示例:离线地图示例

Android引路蜂地图开发示例:离线地图示例

 

地图开发

提起地图开发包,Google 地图和Bing 地图主要应用于Web应用,在离线方式和移动平台上它们并没有提供足够的支持,比如在Java ME平台上使用Google地图API或是在Android,iPhone平台上使用Bing地图。如在中国,想在Windows Mobile 平台上使用 MapABC地图API都不是很方便。
引路蜂地图开发包提供了对几乎所有软件平台(桌面和移动平台)的支持,采用统一的接口使用包括Google 地图,Bing地图,MapABC地图在内多达二十多种地图类型,并在同一开发包中支持离线地图,矢量地图显示。
下图显示了引路蜂地图开发包支持的开发平台,软件包以三个不同的开发包提供对各个平台的支持:

Java ME 地图开发包 MIDP/LWUIT/Blackberry
Java SE 地图开发包 Android/Java SE
.Net Framework 地图开发包 Windows Mobile/Windows Phone 7/.Net desktop/Mac OS/iPhone/iPad

GIS的学习(二十九)Osmdroid 离线地图存放位置的研究和详细分析_第23张图片

引路蜂地图开发包支持的主要功能如下表

GIS的学习(二十九)Osmdroid 离线地图存放位置的研究和详细分析_第24张图片

注:对于Mac OS, iPhone,iPad 的支持是通过Mono C#支持,.Net Mobile 包括 Windows Mobile 6.0-6.5 和 Windows Phone 7.

产品报价:

使用许可 开发包 平台支持 报价
商用许可 Java ME 地图开发包 支持 Java ME ,LWUIT ,Blackberry 1350澳元
Java SE 地图开发包 支持 Android , Java SE 1350澳元
.Net Framework 地图开发包 Windows Mobile, .Net Framework desktop , Mono, iPhone 1350澳元
Silverlight地图开发包 支持 Windows Phone, Sliverlight, WFP etc
试用许可 地图开发包 Java ME 地图开发包,Java SE 地图开发包,.Net Framework 地图开发包 免费,带“Guidebee”水印,不可以商用。开发包中已包含使用许可。
学生许可 地图开发包 Java ME 地图开发包,Java SE 地图开发包,.Net Framework 地图开发包 免费,请使用试用许可,开发包中已包含使用许可。

注:若购买全部平台,价格为3500 澳元。以上费用为一次性收费,不针对每个设备另外收费。开发包中含有详细文档和示例。并含有免费试用许可。提供EMail技术支持。地图开发包含地图开发,二维图形包,定位开发包等。Silverlight地图开发包测试中,暂不提供。购买引路蜂商业许可,请直接联系[email protected]. 目前无其它代理。

试用许可已包含在开发包中,具体使用可以参考开发指南 第四章,第一个地图应用

付款方式:

  • HSBC澳洲分行 –接受澳元
  • Paypal付款        –接受美元,澳元
  • 中国银行,招行 –接受人民币(2011年5月1日起)

收到付款,将在24小时内发出商业版License

 

地图开发包下载

  1. Java ME平台地图开发包
  2. LWUIT平台地图开发包
  3. Blackberry 平台地图开发包
  4. Android平台地图开发包
  5. iOS 平台地图开发包
  6. Windows Phone 平台地图开发包
  7. 桌面平台(Java SE, .Net Framework)地图开发包

 

引路蜂地图应用GNavigator完整源码

GNavigator是 曾经发布在Nokia Ovi Store的Java ME应用,基本使用到了引路蜂地图API的所有功能,尽管这是一个基于LWUIT的应用,使用Java语言开发,其它平台也可以参考这个应用的代码。

总代码量大约为24000行,其中纯代码为12000行。

几个用户界面如下:

包括导航演示(可以连接GPS)

GIS的学习(二十九)Osmdroid 离线地图存放位置的研究和详细分析_第25张图片

代码下载 ,用户手册 ,为Netbean 项目。

你可能感兴趣的:(osmdroid)