首发地址:http://www.cnblogs.com/esrichina/archive/2012/11/05/2750569.html
在我们开发iOS的应用程序时,常常需要嵌入地理信息相关的模块来方便用户定位和查找附近的美食、影院等设施。今天,我将给大家介绍如何让你的iOS应用具有ArcGIS提供的GIS能力。
最新官方参考:https://developers.arcgis.com/ios/info/install.htm
https://developers.arcgis.com/ios/guide/adding-a-map.htm
1.使用ArcGIS for iOS提供的MapViewDemo来构建应用;
这种方式是最简单的,也是比较常用的方式。这个Demo为我们配置好了相关的引用路径等信息,提供了最简单的地图浏览功能,当然用户可以根据需求来修改相关的代码。这种方式适合于项目开发初期。(Demo路径:${HOME}/Library/SDKs/ArcGIS/Samples/MapViewDemo)
2.配置工程相关信息,使应用具有GIS能力;
这种方式可以针对已有的iOS工程添加相关的GIS功能,当然也适合从零开始构建的iOS应用。下面我们来看如何操作:
2.1新建工程,选择相应的模版(每个模版有自己的适用范围,具体可以参考网络)
设置项目名称等信息、其中Devices后的下拉框可以选择应用适用的设备,可以选择iPad、iPhone、Universal(都适用)。接下来的三个复选框分别是是否适用iOS5提供的界面构建新特性(选择就意味着该应用只能在iOS5及以上设备运行);第二个是内存管理相关的,建议大家手动管理;最后的是是否创建测试单元。
2.2配置工程
首先,添加引用路径。点击项目名称后在右侧选择Build Settings选项卡,搜索framework就可以找到Framwork Search Paths,在右侧空白处点击添加ArcGIS for iOS的引用路径:$(HOME)/Library/SDKs/ArcGIS/**;
2.3同样的方法,添加Other Linker Flags,在build Setting选项卡下搜索other link,点击加号添加:-all_load -ObjC -framework ArcGIS
2.4添加依赖库,点击左侧的Targets下的MyMapView,选择右侧的Build Phases选项卡,
点击加号添加如下依赖库:
2.5设计界面,点击工程下的.storyboard(可以对iPad和iPhone界面设计不同的布局)打开界面构建器(Interface Builder),如下图
通过右下角的组件库找到view组件拖放到左上角的view下,并在inspector下修改其继承类为AGSMapView,你会发现view已经变成了Map View。然后选中Map View右键画线到@interface与@end之间,就会弹出如图对话框,输入Name:mapView就会生成相应代码。但在生成的代码前会有提示,是因为没有添加对ArcGIS.h的引用,添加即可。当然,这些操作我们也可以通过代码来完成。
#import <ArcGIS/ArcGIS.h>
2.6界面与代码绑定(如果上一步你使用的点击Map View右键连线的方式,可以跳过,因为系统会自动绑定),Objective-C中将与用户交互相关的实例变量定义为输出口(插座),在Xcode中可以通过在点击Esri View Controller,然后在右侧属性窗口的Connections选项卡中,可以看到Outlets里有一个mapView对象,点击右侧的空心圆圈连线到左侧View下的Map View或界面中的Map View对象上,空心圆圈变成实心,说明绑定成功。
2.7资源引用,如果你需要使用到ArcGIS Runtime for iOS自带的一些资源文件,就需要添加
“ArcGIS.bundle”,路径为:
${HOME}/Library/SDKs/ArcGIS/ArcGIS.framework/Versions/Current/Resources/ArcGIS.bundle
使用方法:
AGSPictureMarkerSymbol *pt=[AGSPictureMarkerSymbol pictureMarkerSymbolWithImageNamed:@"ArcGIS.bundle/GpsDisplay.png"];
2.8添加代码,Map View的操作都是在esriViewController.m文件中实现的,如地图加载代码
command+S保存,command+R运行;
3,旧版本的工程迁移
如果你的工程中使用了ArcGIS Runtime for iOS的早期版本,希望能够升级到最新版的SDK获得更多的功能和更高效的操作。那么,你需要做以下尝试 :
3.1在ArcGIS for iOS的2.2版本中用“ArcGIS.Framework”取代了之前的静态库“libArcGIS.a”,所以首先要删除libArcGIS.a的引用;
3.2删除“Build”设置中的“Library Search Paths”参数,路径:${HOME}/Library/SDKs/ArcGIS/iOS.sdk/usr/local/lib;
3.3删除Build设置中的the User Header Search Paths参数,路径:${HOME}/Library/SDKs/ArcGIS/iOS.sdk/usr/local/include/**;
3.4在Build中设置Frameworks Search Paths参数,增加${HOME}/Library/SDKs/ArcGIS/**;
3.5在Build中设置Other Linker Flags参数,增加“-framework”和“ArcGIS”(“-all_load”和 “-ObjC”依然保留);
3.6修改相关引用import <ArcGIS/ArcGIS.h>代替之前的import "ArcGIS.h";
3.7如果使用了ArcGIS.bundle包中的资源,还需删除并重新添加该资源文件ArcGIS.bundle,即
${HOME}/Library/SDKs/ArcGIS/ArcGIS.framework/Versions/Current/Resources/ArcGIS.bundle
3.8接口变更:随着SDK版本的变迁有些接口会做一些调整,对于这些变化我们应该参考ArcGIS for iOS Reference来做相应的调整;
如self.tiledLayer.mapServiceInfo.tileInfo.lods应该改为self.tiledLayer.tileInfo.lods
mapView.envelope会出现envelope has been deprecated错误,应该改为mapView.visibleArea.envelope
注:以上修改只是针对于ArcGIS for iOS相关功能;
LeetCode | Reverse Words in a String,布布扣,bubuko.com
LeetCode | Reverse Words in a String
原文:http://blog.csdn.net/perfect8886/article/details/20833685