热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【教程连载】ArcGISforiOS开发系列(3)–基础篇“HelloWorldMap”

搞定了环境配置,我们赶快开始ArcGISforiOS开发吧,按惯例首先创建一个“HelloWorldMap”程序,使用在上一节中我们新建好

    搞定了环境配置,我们赶快开始ArcGIS for iOS开发吧,按惯例首先创建一个“Hello World Map”程序,使用在上一节中我们新建好的项目。


第一步:配置界面。


    找到“ViewController_iPhone/iPad.xib”(分别针对了iPhone和iPad不同的布局),在内容窗口中可以看到只有一个空白的View视图,右下侧的工具窗口切换到组件对象,其中列举了Cocoa Touch库的全部可视化组件,定位到“View”对象,将其直接拖到内容窗口里,一个新的子视图就添加成功了,同时还添加了Constraints(Xcode4.5的新特性,宽高布局限制),把新添加的视图重命名为“Map View”。

图3-1 添加地图视图

    选中“Map View”视图,在右上侧的属性窗口切换到“inspector”项,修改其继承类为“AGSMapView”。

图3-2 修改Map View的继承类为AGSMapView

    然后“Command + s”保存。


第二步:添加代码。


1)             头文件“ViewController.h”,添加ArcGIS头文件引用,并声明一个地图控件的属性,代码如下:

#import
#import @interface TMViewController : UIViewController
@property(nonatomic,strong)IBOutletAGSMapView *mapView;
@end

    * @property关键字:公共属性标记,相当与“Get-Set”构造,4.0以前的版本中与synthesizes成对使用,4.0之后不再需要synthesizes。

    * IBOutlet关键字:界面 “插座”标记(以前的界面编辑工具Interface Builder,4.0后被集成进了Xcode,“插座”,表示与界面元素连接的属性对象。与之呼应的还有一个IBAction,表示界面元素的事件响应。

    不想敲太多这种机械代码的话,还可以在界面视图中完成,选中要连接的界面对象,右键拖动到代码窗口,会弹出一个小对话框,输入属性名称mapView,确定后会自动生成这个属性。


图3-3 自动生成属性


2)             打开类文件“ViewController.m” ,在viewDidLoad方法中添加如下代码:

- (void)viewDidLoad
{[superviewDidLoad];// //基础底图,使用的是北京捷泰科技有限公司提供的在线地图,更多地图请登陆ArcGIS Online中国网址查询(http://www.arcgisonline.cn)NSString *str_URL = @"http://www.arcgisonline.cn/ArcGIS/rest/services/ChinaOnlineCommunity/MapServer";NSURL *url_Tiled = [NSURLURLWithString:str_URL];AGSTiledMapServiceLayer *tiledLyr = [AGSTiledMapServiceLayertiledMapServiceLayerWithURL:url_Tiled];[self.mapViewaddMapLayer:tiledLyrwithName:@"TiledLayer"];//动态图层,使用ArcGIS Online的全球人口数据NSString *str_URL_1 = @"http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Population_World/MapServer";NSURL *url_Dynamic =[NSURLURLWithString:str_URL_1];AGSDynamicMapServiceLayer *dynamicLyr =[AGSDynamicMapServiceLayerdynamicMapServiceLayerWithURL:url_Dynamic];UIView*dynamicLyrView = [self.mapViewaddMapLayer:dynamicLyrwithName:@"PopulationLayer"];//设置动态图层透明度dynamicLyrView.alpha = 0.3;//设定地图初始化显示范围为中国AGSEnvelope *chinaEnv = [AGSEnvelopeenvelopeWithXmin:7800000.00ymin:44000.00xmax:15600000.00ymax:7500000.00spatialReference:self.mapView.spatialReference];[self.mapViewzoomToEnvelope:chinaEnvanimated:YES];
}


第三步:绑定界面与代码。


    Xcode里绑定界面元素与代码对象的操作方法很艺术,选中界面视图的File’s Owner,右上侧属性窗口切换到“Connections”项,“Outlets”里有一个mapView对象,这就是我们在ViewController.h中声明的地图控件属性。拖动其右侧的空心小圆圈,牵引到左侧界面对象“Map View” 上,绑定成功后,小圆圈就变成实心了的,再次保存。

图3-3 绑定地图控件与代码对象

第四步:保存工程,“Command+ r ”运行并调试“HelloWorld Map”。

图3-4 在iPhone5模拟器中运行“Hello World Map”

    *REST和JSON大家都应该很熟悉了,ArcGIS Server发布的服务支持SOAP、REST两种结构,而Web和移动API中都使用其REST服务接口,比如上文中提到的地图服务:http://yourServer/ArcGIS/rest/services/Demographics/ESRI_Population_World/MapServer。数据交互使用的是更为灵活高效的JSON格式,ArcGIS框架中集成了第三方库json-framework来负责中间层的数据转换,开发者一般不用操心




推荐阅读:

1、ArcGIS Runtime SDK for iOS开发系列教程(4)——如何让你的iOS应用具有GIS能力:http://www.cnblogs.com/esrichina/archive/2012/11/05/2750569.html

2、ArcGIS Runtime SDK for iOS开发系列教程(2)——MapViewDemo解析:http://www.cnblogs.com/esrichina/archive/2012/09/01/2666647.html





推荐阅读
  • iOS如何实现手势
    这篇文章主要为大家展示了“iOS如何实现手势”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“iOS ... [详细]
  • 本文介绍了如何使用 Gesture Detector 和 overridePendingTransition 方法来实现滑动界面和过渡动画。 ... [详细]
  • 我在一个UIImageView上附加了一个UILongPressGestureRecognizer,但无论如何配置,它都无法检测到长按手势。然而,当我将其替换为UITapGestureRecognizer时,后者却能正常工作。这究竟是怎么回事? ... [详细]
  • 本文介绍了 Android 开发中常用的滚动视图组件 ScrollView 和 HorizontalScrollView 的基本用法和注意事项,帮助开发者更好地处理屏幕内容超出显示范围的情况。 ... [详细]
  • 掌握Android UI设计:利用ZoomControls实现图片缩放功能
    本文介绍了如何在Android应用中通过使用ZoomControls组件来实现图片的缩放功能。ZoomControls提供了一种简单且直观的方式,让用户可以通过点击放大和缩小按钮来调整图片的显示大小。文章详细讲解了ZoomControls的基本用法、布局设置以及与ImageView的结合使用方法,适合初学者快速掌握Android UI设计中的这一重要功能。 ... [详细]
  • Android 开发技巧:使用 AsyncTask 实现后台任务与 UI 交互
    本文详细介绍了如何在 Android 应用中利用 AsyncTask 来执行后台任务,并及时将任务进展反馈给用户界面,提高用户体验。 ... [详细]
  • 本文探讨了如何利用 Android 的 Movie 类来展示 GIF 动画,并详细介绍了调整 GIF 尺寸以适应不同布局的方法。同时,提供了相关的代码示例和注意事项。 ... [详细]
  • 本文探讨了在UIScrollView上嵌入Webview时遇到的一个常见问题:点击图片放大并返回后,Webview无法立即滑动。我们将分析问题原因,并提供有效的解决方案。 ... [详细]
  • 本文探讨了如何在游戏启动画面中移除广告,特别是在游戏数据加载期间(大约5-6秒)广告会短暂显示的问题。通过调整XML布局和代码逻辑,可以实现广告的延迟加载或完全移除。 ... [详细]
  • CentOS7通过RealVNC实现多人使用服务器桌面
    背景:公司研发团队通过VNC登录到CentOS服务器的桌面实现软件开发工作为防止数据外泄,需要在RealVNC设置禁止传输文件、访问粘贴板等策略过程&# ... [详细]
  • SwipeRefreshLayout 是一个常用的刷新控件,可以包裹一个可滑动的子控件(如 ListView 或 RecyclerView)以实现竖直滑动时的页面刷新。然而,它本身并不支持上拉加载更多。本文将介绍如何通过继承 SwipeRefreshLayout 来实现这一功能。 ... [详细]
  • 本文介绍了Go语言中正则表达式的基本使用方法,并提供了一些实用的示例代码。 ... [详细]
  • 本文介绍如何在 Android 中自定义加载对话框 CustomProgressDialog,包括自定义 View 类和 XML 布局文件的详细步骤。 ... [详细]
  • 在 `UITableViewController` 中采用简洁的平面样式布局时,可以通过优化代码实现单元格扩展至屏幕边缘的效果,同时确保节标题以分组样式呈现,从而提升用户体验和界面美观度。通过这种方式,可以更好地组织和展示列表内容,使其更加清晰和有序。 ... [详细]
  • 在Android开发中,实现多点触控功能需要使用`OnTouchListener`监听器来捕获触摸事件,并在`onTouch`方法中进行详细的事件处理。为了优化多点触控的交互体验,开发者可以通过识别不同的触摸手势(如缩放、旋转等)并进行相应的逻辑处理。此外,还可以结合`MotionEvent`类提供的方法,如`getPointerCount()`和`getPointerId()`,来精确控制每个触点的行为,从而提升用户操作的流畅性和响应性。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有