UCMap for iOS 开发教程


                 UCMap for iOS  开发教程             http://www.creable.cn  第 1 页      目  录    一、 配置开发环境.................................. 2 1.1 配置UCMap开发环境.......................................................... 2 二、 UCMap装载地图.............................. 3 2.1 矢量地图.............................................................................. 3 2.2 Google Maps或Bing Maps ................................................... 4 2.3 WMTS或WMS地图 .............................................................. 6 2.4 矢量叠加瓦片.................................................................... 14 三、 UCMap基础功能.............................16 3.1 地图浏览............................................................................ 16 3.2 Info工具 ............................................................................. 17 3.3 属性查询............................................................................ 18 3.4 定位 ................................................................................... 19 3.5 要素编辑............................................................................ 20 四、 UCMap  附加功能...........................23                    UCMap for iOS  开发教程             http://www.creable.cn  UCMap for Android  开发教程  一、 配置开发环境  1.1   配置 UCMap 开发环境  从http://www.creable.cn/kuibu/xiazai.asp  下载UCMap SDK for iOS开发包。双击打开UCMap for  iOS.dmg,将UCMap文件夹拖进应用程序里。      新建一个 iOS 工程 demo1,查看项目的 info,点击 Build 选项卡,找到 Header Search Paths, 添加/Applications/UCMap/include,请参考下图。    第 2 页                     UCMap for iOS  开发教程             http://www.creable.cn  将开发包中lib文件夹中的libUCMap.a文件添加进Frameworks。(位于/Applications/UCMap/lib 文件夹)  添加 libsqlite3.0.dylib 进 Frameworks。  这样,就可以利用 UCMap 开发地图程序了。    二、 UCMap 装载地图  2.1   矢量地图  UCMap 支持 shapefile 矢量地图,支持海量矢量要素的采集和编辑。 装载矢量地图的步骤: 1) 准备一份shapefile格式的矢量地图,利用“UCMap地图配置程序.command”实现 对地图的配置处理,具体处理过程详见 http://wenku.baidu.com/view/26d1007e27284b73f24250fe.html UCMap地图配置过 程详解。 2) 将配置生成好的矢量地图拷贝到 xcode 工程里。 载入代码,如: 其中,nj2为配置生成好的矢量地图的文件夹名。需要将地图文件夹复制到应用程序的沙盒 里,这样才能保存您的编辑结果。 具体可以参见开发包里面的demo4。 3) 演示效果 第 3 页                     UCMap for iOS  开发教程             http://www.creable.cn  2.2   Google Maps 或 Bing Maps  UCMap 支持在线或离线的 Google Maps 或 Bing Maps,离线瓦片,即事先将瓦片地图 下载下来并存储到设备存储卡中,UCMap 支持 Google Maps 或 Bing Maps 的自动坐标纠 正。 具体步骤: 1) 将开发包中的 OpenSourceMap.xml 文件复制到手机或模拟器的 sdcard 根目录下。 2) 载入代码: 第 4 页                     UCMap for iOS  开发教程             http://www.creable.cn  第 5 页    具体可以参见开发包里面的 demo2。 OpenSourceMap.xml 文件说明: maxExtent、numberOfLayers、center 设置一般不需要修改,含义见 2.3。 另外,type=OpenSourceMap,这说明这个图层是一个开源地图图层。google 的显示 比例等级数为 19 层,bing 为 18 层,从 0 开始,InitZoomIndex 表示地图加载之后直接 从第 8 层开始显示。 InitMapType:设置为“0 ”,表示地图加载之后,以 google 地图为数据源;设置为“1 ”, 表示以 bing 地图为数据源,切换数据源的操作可以通过 OpenSourceMap 类的 setMapMode 来实现。 下面紧跟的两个 MapType,说明了 google 和 bing 不同的地图版本号。 3)演示效果                  UCMap for iOS  开发教程             http://www.creable.cn    2.3   WMTS 或 WMS 地图  UCMap 支持 OGC 的 WMTS、WMS、WFS、WCS 等标准,即 UCMap 能访问符合 WMTS、WMS 发布的地图服务。  1、 访问 WMTS 地图:  WMTS 是 OGC 瓦片标准,UCMap 支持 WMTS 服务,目前支持 WMTS 的服务端主要 有 Geowebcache、Geostar  GeoGlobe 支持 WMTS 瓦片标准,下面分别以 UCMap 访 问天地图为例,具体步骤:  1) 将开发包中的 TianDiVector.xml 文件复制到 xcode 的工程目录下。 第 6 页                     UCMap for iOS  开发教程             http://www.creable.cn  2) 载入代码: 3) 演示效果: TianDiVector.xml 文件说明: 第 7 页                     UCMap for iOS  开发教程             http://www.creable.cn  第 8 页        2、 访问 WMS 地图  以访问 geoserver 为例,来说明这个访问过程。Geoserver 服务器的搭建和添加配置地图 请参考网上及相关资料。  1) 准备地图服务。  启动 geoserver 服务器,将 shapefile 地图数据添加到 geoserver,配置地图服务。  笔者在 geoserver 上配置的地图服务的相关信息如下:  shapefile 地图数据 bjshp 文件夹放在\webapps\geoserver\data\data\下面。  注意:Shp 文件名最好不要出现中文,否则可能出现乱码而导致不能添加图层。  添加 workspace:    添加 Vector Data Source:                   UCMap for iOS  开发教程             http://www.creable.cn    添加发布图层:需要注意 SRS 选择 EPSG:4326  第 9 页                     UCMap for iOS  开发教程             http://www.creable.cn    添加 layer group:  这里为 bjshp 添加 3 个图层:  第 10 页                     UCMap for iOS  开发教程             http://www.creable.cn  第 11 页        这样地图服务就配置好了。可以通过 http://localhost:8080/geoserver/gwc/demo/bjshp?gridSet=EPSG:4326&format=image/ png来测试已配好的地图服务。  2) 准备配置文件。  参照开发包里的 nanjing.xml,根据以上配置的地图服务信息来编写配置文件。首先 解释一下 nanjing.xml 里各项属性的含义。    a) maxExtent:表示 geowebcache  生成瓦片时采用的地图最大范围,坐标系统为 EPSG:4326  时,该值为‐180,180,‐90,90。                   UCMap for iOS  开发教程             http://www.creable.cn  第 12 页    b) numberOfLayers:表示图层个数。  注意:这里一个……为一个图层。  例如,笔者配置的地图服务 bjshp 虽然包含 3 个图层(creable:city_region、 creable:road_polyline、creable:building_point),但是作为一个整体,这里的 numberOfLayers 应设置为 1。  c) center:表示地图中心点位置,地图加载之后会自动以这个点为中心显示。中 心点的设置,可以通过 http://localhost:8080/geoserver/gwc/demo/bjshp?gridSet=EPSG:4326&format=im age/png访问地图时,鼠标放在地图中心,获得右下方显示的坐标值即可。  d) type:图层类型,WMSWithCache  表示带有瓦片缓冲机制的 WMS  标准图层。  e) name:为图层名称,与 geoserver  中 WMS  中的 Layer Group  名字一致。  f) url:为服务器 WMS  的 url,应该使用真机 ip  地址替换上面的例子。(如果真 机连上电脑,使用电脑的网络,那么该 ip  地址可以是内网地址,便于调试(模 拟器一定是使用电脑网络,当然可以使用内网地址。如果该 ip  是局域网内部 的另外一台电脑,那么必须保证该电脑的 tomcat  或 IIS  使用的端口要在网络防 火墙中处于开放状态)(如果真机使用 3G、GPRS  网络,那么该 ip  必须是公网 地址,服务器处于内网的话,还需要做端口映射,将 tomcat  或 IIS  使用的端口 号映射到那个服务器上)。  若在模拟器上测试,这里的 ip 地址都设置为 10.0.0.2。  g) WFSServerUrl:为服务器 WFS  的 url,应该使用真机 ip  地址替换上面的例子。  若在模拟器上测试,这里的 ip 地址都设置为 10.0.0.2。  h) namespace:为该地图所属的名字空间,与 geoserver  中设置一致。  i) namespaceURL:为名字空间对应的 url,与 geoserver  中设置一致。  j) maxExtent:为地图最大范围,与上面那个 maxExtent  相同即可。  k) resolutions:为显示比例尺列表,用逗号分割。  比例尺的获取:  打开http://localhost:8080/geoserver/wms?service=WMS&request=GetCapabilities 页面里的“WMS  1.1.1  GetCapabilities  document ”链接,获得文件 “wms.1&REQUEST=getcapabilities&TILED=true”并用写字板打开,获得地图服 务对应的Resolutions。拷贝到此处,用逗号分隔。  注意:这里的比例尺列表用于每次地图缩放对应的缩放比例,如果范围过小过 大,可能达不到想要的效果,需要实际测试后,根据需要选取。  上述配置文件中第二个 resolutions  为负值,这是表示地图在加载之后,使用这 个比例尺来显示地图,如果每个 resolutions  都为正值,那么 UCMap  采用第一 个比例尺来显示地图,这个也需要测试后来设定。  l) projection:为坐标系统。EPSG:4326  即 WGS84。  m) format:图像格式。  n) pixelWidth:瓦片象素宽度,一般为 256。  o) pixelHeight:瓦片象素高度,一般为 256。    更详尽的说明请查看“UCMap 开发手册.pdf”的“客户端如何浏览服务器发布的地 图”的相关部分。                     UCMap for iOS  开发教程             http://www.creable.cn  笔者根据地图服务配置的文件如下图所示:      3、 访问 Geowebcache 发布 WMTS 地图  UCMap 访问 Geowebcache 发布的 WMTS 瓦片服务。  参照开发包里的 nanjing2.xml,根据配置的地图服务信息来编写文件。首先解释一下 nanjing2.xml 里各项属性的含义。  大多数参数的意义与上面的相同,这里说明不同的地方:  a) layer 的 type 这里是“WMTS”。  b) layer 的 url,这里是 wmts 的服务地址。  c) layer 的 maxExtent,这里必须是 layer 的最大范围。  d) layer 的 resolutions 下面多了 TileMatrix 参数,这个参数与上面的 resolutions 一一对应。 在 WMTS 服务的 GetCapabilities 返回的 xml 文档里能找到。  e) 还多了一个 TileMatrixSet,这是图层采用的瓦片网格名字,也是在 WMTS 服务的 GetCapabilities 返回的 xml 文档里能找到。  程序访问方式与上面类似,需要将该 xml 文件拷贝到 sdcard 根目录下。  添加代码:  第 13 页                     UCMap for iOS  开发教程             http://www.creable.cn  第 14 页    2.4   矢量叠加瓦片  1、矢量叠加 Google 或 Bing 地图  UCMap 支持 shapefile 矢量叠加 Google 或 Bing 地图,正因为 UCMap 能提供自动坐 标纠正,所以能将正确的经纬度坐标地图叠加到 Google 或 Bing 地图之上。 具体步骤: 1) 将 UCMap 配置好的矢量地图拷贝到 xcode 工程目录下。具体参照 2.1。 2) 将开发包中的 OpenSourceMapWithLocal.xml 文件复制到手机或模拟器的 sdcard 根目录下。 3) 添加 UCMap 的自动纠偏机制。将开发包中的 cache 文件夹拷贝到手机或模拟器的 sdcard 根目录下。 4) 载入代码: NSString* path=[[[NSBundle mainBundle] bundlePath] stringByAppendingString:@"OpenSourceMapLayerWithLocal.xml"]; ucmap::MapLoader::loadMapXML(mapControl,FromNSString(path)); OpenSourceMapLayer* ly=(OpenSourceMapLayer*)mapControl->getMap()->getLayer(0); ly->setZoomRate(0.00001f); 具体可以参见开发包里面的 demo。 5) 演示效果:                  UCMap for iOS  开发教程             http://www.creable.cn  OpenSourceMapWithLocal.xml 文件说明: 可以看出,只在 OpenSourceMap.xml 的基础上,增加了一个属性:LocalMap,该属 性设置本地矢量数据的位置,即/sdcard/nj2/map.ini。把矢量地图 第 15 页                     UCMap for iOS  开发教程             http://www.creable.cn  文件夹 nj2 事先拷贝到手机或模拟器的 sdcard 根目录下。实际应用中,把 nj2 替换成自己 的矢量数据所在的文件夹。 注:初始化时,不同的城市需要设置不同的 center 值,即地图初始化显示的中心位置。 2、矢量叠加 OGC 的 WMTS、WMS、WCS 瓦片地图  UCMap 支持 shapefile 矢量叠加 OGC 的 WMTS、WMS、WCS 瓦片地图。  具体步骤: 1) 将 UCMap 配置好的矢量地图拷贝到 xcode 工程目录下。具体参照 2.1。 2) 将类似如下内容的配置文件复制到 xcode 工程目录下。 3) 载入代码: MapLoader::loadMapXML(mapView.getMapControl(), "/sdcard/nanjing3.xml");  nanjing3.xml 文件说明:    可以看出,nanjing3.xml只在nanjing.xml的基础上,增加了一个属性:LocalMap,该属 性设置本地矢量数据的位置,即/sdcard/nj2/map.ini。把矢量地图 文件夹nj2 事先拷贝到手机或模拟器的sdcard根目录下。实际应用中,把nj2 替换成自己的 矢量数据所在的文件夹。 三、 UCMap 基础功能  UCMap 基础功能主要有:地图浏览、info 工具、属性及空间查询、定位与拍照等。功 能的实现需要调用很多底层的类、接口所提供的方法。这里选择一些典型的应用作简要描述, 更详尽描述请参见开发包中的 doc 文件夹和 demo 源码。  3.1   地图浏览  1、多点触摸缩放、平移地图,需要如下设置:  mapControl‐>setPanTool();  第 16 页                     UCMap for iOS  开发教程             http://www.creable.cn  2、单击放大地图,主要代码:  mapControl‐>setZoomInTool();  3、单击缩小地图,主要代码:  mapControl‐>setZoomOutTool();    注:现在手机或平板几乎都支持多点触摸功能,所以,一般情况下只需要设置 1 就可以 实现地图的多点缩放和平移功能。除非特殊需要(如,在模拟器上测试),可以使用 2 和 3 的代码实现单击放大和缩小。如果您需要单击一个按钮之后,地图立即放大,那么可以在 setZoomInTool 之后,调用 mapControl‐>getCurrentTool()‐>action();    主要涉及到 2 个很重要的类:  1)MapControl 类是地图控件类,提供各种地图操作的方法。  2)UIMapView 类是地图 View 类,对 MapControl 对象的再包装,实现前端界面交互。  3.2   Info 工具  选中地图上的某个要素,获取其属性信息,示例代码如下:  1. 定义个类,实现 IInfoToolListener  这里是类的实现代码      2. 在 viewController 类里添加这个类的  3. 在 viewController 的按钮响应代码里  第 17 页                     UCMap for iOS  开发教程             http://www.creable.cn         涉及到的主要接口和类:  1) IMapTool 接口:  自定义地图工具接口,实现这个接口,即可替换 MapControl 的地图工具。  2) IInfoToolListener 接口:  InfoTool 监听器接口,当用户使用 Info 工具点击到一个地图要素时,会调用这个函 数:  void notify(MapControl mapControl,                       IFeatureLayer flayer,                       IFeature ft,                       String[] fields,                       String[] values);  可以在这个函数中响应用户的操作,比如显示地图要素属性等。  3) InfoTool 类:  实现了 IMapTool 接口,响应用户的按键事件等。         3.3   属性查询  按指定条件进行查询,将查询结果居中闪烁显示。  1、访问本地地图。  下面是一段按属性查询要素并在地图中居中闪烁显示的示例代码:      涉及到的主要类和方法:  1)FeatureInfo 类:  存放地图要素信息。  2)MapControl 类的这个方法:  FeatureInfo** searchFeature(TCHAR*  layerName,    ‐‐图层名称                                       TCHAR**  fieldNames,  ‐‐需要返回的字段数组,如果 需要返回全部,则该参数请设置 null  第 18 页                     UCMap for iOS  开发教程             http://www.creable.cn                               int fieldCount,      ‐‐需要返回的字段个数                               TCHAR* whereClause,  ‐‐sql 条件                               TCHAR* groundBy,     ‐‐sql 分组子句                               TCHAR* having,       ‐‐sql having 子句                               TCHAR* orderBy)      ‐‐sql 排序子句    2、访问 ogc 地图(WFS 查询)。  下面是一段查询要素的示例代码:  3.4   定位  定位是移动 GIS 最基础的功能。     1、 GPS 定位  步骤如下:(详见 demo2 代码)  1) 建立 GPS 跟踪,做好绘制准备:          2) 刷新 GPS 位置:  第 19 页                     UCMap for iOS  开发教程             http://www.creable.cn  第 20 页        3) 绘制 GPS 点:  更多有关 GPS 的代码请参照 demo2 中的 GPSCustomDraw 类,详细说明请参照“UCMap 开发手册.pdf”的相关部分。   3.5   要素编辑  UCMap 提供对 shapefile 矢量地图的编辑功能,主要包括:添加要素、删除要素、修 改图形、修改属性、导出地图、开启捕捉、关闭捕捉。本节对主要的功能代码进行分 析,完整的代码请查看 demo4。  1、 添加要素  一个要素包含几何信息和属性信息。根据用户的操作,我们依次添加要素的几何信息 和属性信息。                   UCMap for iOS  开发教程             http://www.creable.cn        主要代码如下:  1) 选择要添加要素的图层,准备添加:  上面的代码首先显示一个对话框供用户选择一个图层。    这个函数在用户按下按钮之后调用,开启添加要素工具,并设置监听器    2) 添加要素的几何信息  用户绘制完图形后,需要在屏幕上按住保持 1 秒以上即可完成操作,响应事件如 下:  当用户结束输入之后,onAddFeature 被自动调用,这里我们显示一个对话框供用 户输入地图要素的属性。    第 21 页                     UCMap for iOS  开发教程             http://www.creable.cn  3) 添加要素的属性信息  用户输入要素的属性信息,确定提交后,响应事件如下:         这两行代码执行完后,添加要素的操作已完成。要素的几何和属性信息都保存在 ft 实 例里,若需要将该要素信息发送到服务器,可以在这两行后面追加相关的代码。    2、 删除要素  1) 使地图处于编辑状态,准备删除:    2) 在屏幕上点击要删除的要素对象,被选中的要素会呈现为绿色并闪烁,如果确 定删除,则需要在屏幕上按住保持 1 秒以上即可。响应事件如下:    3、 修改图形  使地图处于编辑要素状态:  mapControl->setCurrentTool(new EditFeatureTool(mapControl)); 在屏幕上点击要编辑的要素对象,被选择的要素的所有节点会以绿色显示,点击 一个绿色节点,并指定需要移动的位置之后,屏幕上出现红色的虚线。则需要在 屏幕上按住保持 1 秒以上,程序将自动提交修改,完成此项操作。  4、 修改属性  1) 使地图处于编辑要素状态,准备修改:    2) 在屏幕上点击要修改的要素对象,被选中的要素会闪烁,如果确定修改他的属 性,则需要在屏幕上按住保持 1 秒以上,响应事件:    第 22 页                     UCMap for iOS  开发教程             http://www.creable.cn  弹出属性编辑框。  3) 对属性编辑框进行编辑,“确定”后完成操作。  响应事件:同上面的添加要素的属性信息一样。       5、 开启捕捉  该功能只在添加要素时使用。  首先请确认进入添加要素模式后,开启“开始捕捉”功能,屏幕上会用绿色的十 字星显示可供捕捉的位置。  相关代码:    6、 关闭捕捉       该功能只在添加要素时使用,关闭捕捉功能。相关代码:      7、 导出地图  选择某个图层,确认导出后,该图层将以 shapefile 格式的文件形式保存在 sdcard 根目录下。相关代码如下:      四、 UCMap  附加功能  除了以上基础功能外,UCMap 还提供了一些附件功能,如  态势标绘组件、等值线组 件、表格组件、统计图组件、空间查询组件、缓冲区组件、叠置分析组件等。    第 23 页                     UCMap for iOS  开发教程             http://www.creable.cn    第 24 页                     UCMap for iOS  开发教程             http://www.creable.cn    第 25 页                     UCMap for iOS  开发教程             http://www.creable.cn      第 26 页   
还剩25页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享pdf获得金币 ] 2 人已下载

下载pdf

pdf贡献者

wzhang1k

贡献于2012-03-21

下载需要 8 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf