百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

Xamarin使用教程十四:在iOS项目中使用ESRI ArcGIS SDK

yuyutoo 2025-02-03 15:54 3 浏览 0 评论

ArcGIS SDK for iOS是 ESRI 公司针对 iOS 平台的 GIS 解决方案, 以 iOS Framework 的形式提供, 与 iOS 自带的 MapKit 相比, 提供了很多强大的地图以及分析功能, 如果你要想要在 iOS 平台上实现类似下图的应用, ArcGIS SDK for iOS 是不错的选择。

在 Xcode 项目中使用 ArcGIS SDK

下载并安装 ArcGIS SDK for iOS

在 iOS 项目中使用ArcGIS SDK for iOS, 需要有一个 ESRI 账户, 登录之后, 可以转到ESRI ArcGIS Runtime SDK for iOS的下载页面, 下载到的是一个 pkg 文件, OSX 系统下的一种安装格式, 类似于 Windows 系统下的 exe/msi , 双击即可安装。

Xcode项目设置

ESRI 提供的 ArcGIS SDK for iOS 是 Framework 形式, 但是与 iOS 提供的 Framework 有些不同, 在 Xcode 项目中使用有些麻烦, 设置步骤如下:

1. 将 ArcGIS 添加到框架搜索路径

要将 ArcGIS Framework 添加到项目, 选择左边导航窗口的项目节点, 选择一个目标节点, 再选择编译设置标签, 如下图所示:

在编译设置标签的搜索框输入 Framework Search Paths 可以快速找到框架搜索路径设置, 双击右边的空白处, 点击 + 按钮并输入下面的路径:

$(HOME)/Library/SDKs/ArcGIS/iOS/**

注意:如果在项目的 Valid Architectures setting 中有 armv7s 选项的话, 请删除这个选项, 这个选项是有 Xcode 针对 iPhone5 自动添加的, 但是 ArcGIS 库目前不包含 armv7s 。

2. 添加依赖项

ArcGIS 依赖于下面的框架和类库, 因此需要把它们添加到项目中:

  • CoreGraphics.framework
  • CoreLocation.framework
  • CoreText.framework
  • Foundation.framework
  • libc++.dylib
  • libz.dylib
  • QuartzCore.framework
  • MediaPlayer.framework
  • MobileCoreServices.framework
  • OpenGLES.framework
  • Security.framework
  • UIKit.framework

选择项目目标的 Build Phases 标签, 在 Link Binary with Libraries 节点, 点击 + 按钮, 添加上面列出的依赖项, 如下图所示:

3. 修改编译选项

为了确认能够正确的加载 ArcGIS framework , 需要在项目中添加一些编译标志 (build flags) 。

注意:如果没有这些标志, 程序在使用 ArcGIS API 提供的类时可能会崩溃!

选择 Build Settings 标签, 在搜索框内输入 Other Linker Flags 可快速找到 Other Linker Flags 设置, 双击空白处, 会弹出一个文本框, 在文本框内输入 -all_load -ObjC -framework ArcGIS , 点击文本框外任意位置, 保存输入选项, 如下图所示:

4. 添加资源包

ArcGIS API 用到的资源文件, 比如 ESRI 和 Bind 的 Logo , GPS 位置图片等, 被整理打包成一个 ArcGIS.bundle 文件, 默认安装在 ${HOME}
/Library/SDKs/ArcGIS/iOS/ArcGIS.framework/Versions/Current/Resources 目录, 需要手工将这个文件添加到项目中。

转到 XCode 的 File 菜单, 选择 Add Files to 菜单项, 导航到 ${HOME}
/Library/SDKs/ArcGIS/iOS/ArcGIS.framework/Versions/Current/Resources 目录, 选择 ArcGIS.bundle 文件, 最后点击 Add 按钮, 将 bundle 文件添加到项目。

注意:在 OS X 系统下, ${HOME}/Library 目录默认是隐藏的, 可以通过在终端程序中输入命令 chflags nohidden ~/Library/ 来显示这个目录。

使用 ArcGIS Online 基础图层

项目设置完成之后, 使用 ArcGIS Online 的图层就很简单了, 比如:

 (void)viewDidLoad {
    [super viewDidLoad];
 
    AGSTiledMapServiceLayer *tiledLayer =
    [AGSTiledMapServiceLayer
     tiledMapServiceLayerWithURL:[NSURL URLWithString:@"http://services.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer"]];
    [self.mapView addMapLayer:tiledLayer withName:@"Basemap Tiled Layer"];
 
    //Set the map view's layerDelegate to self so that our
    //view controller is informed when map is loaded
    self.mapView.layerDelegate = self;
}

在 Xamarin.iOS 项目中使用 ArcGIS SDK

要在 Xamarin.iOS 项目中使用 ArcGIS Runtime SDK , 需要先将 ArcGIS SDK 绑定成 Xamarin.iOS 类库项目, 这个在 Github 上已经有了,地址是:
https://github.com/beginor/MonoTouch.ArcGIS, 有了这个绑定项目, 在 Xamarin.iOS 中使用 ArcGIS 就容易的多了。>>Xamarin Studio下载

下载并编译 ArcGIS iOS 绑定项目

访问
https://github.com/beginor/MonoTouch.ArcGIS, 选择右边的 Download Zip 链接或者 Clone in Desktop 链接, 都可以得到这个绑定项目, 推荐 fork 这个项目, 这样便于根据自己的需要进行更改。

下载之后用 XamarinStudio 打开 MonoTouch.ArcGIS.sln 解决方案, 可以看到这个解决方案包括两个项目, Binding 和 AGSTestCS 两个项目, 分别是 ArcGIS for iOS 的绑定项目以及测试项目, 如下图所示:

参照 ReadMe.md 文件的说明, 需要把 ArcGIS 文件从
~/Library/SDKs/ArcGIS/iOS/ArcGIS.framework/Versions/Current/ 目录复制到 Binding 项目所在的目录, 并重命名为 libArcGIS.a ,然后编译这个项目, 如果没有错误的话, 会在 bin 目录内生成一个体积巨大的 dll 文件 MonoTouch.ArcGIS.dll , 这就表示 Binding 项目生成成功了, 虽然这个 dll 文件很大, 但是不用担心, 最终生成 ios 应用时, 编译器会将用不到的部分删除, 最终的应用程序不会很大, 一般会在 10m 以内。

现在可以生成并运行 AGSTestCS 项目, 可以看到一个地图应用在 iOS 模拟器启动, 这就表示一切都成功了!

使用 ArcGIS Online 基础图层

Binding项目只是对 ArcGIS API 的绑定, 因此对外暴露的 API 函数几乎不变, 不同的只是换成了 C# 的语法, 上面在 Xcode 中使用 ArcGIS Online 的基础图层的代码对应的 C# 版本如下:

public override void ViewDidLoad {
   base.ViewDidLoad;
   // add a basemap tiled layer.
   var url = NSUrl.FromString("http://services.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer");
   var tiledLayer = AGSTiledMapServiceLayer.TiledMapServiceLayerWithURL(url);
   this.MapView.AddMapLayer(tiledLayer, "Basemap Tiled Layer");
}

本站文章除注明转载外,均为本站原创或翻译

相关推荐

自卑的人容易患抑郁症吗?(自卑会导致抑郁吗)

Filephoto[Photo/IC]Lowself-esteemmakesusfeelbadaboutourselves.Butdidyouknowthatovert...

中考典型同(近)义词组(同义词考题)

中考典型同(近)义词组...

WPF 消息传递简明教程(wpf messagebox.show)

...

BroadcastReceiver的原理和使用(broadcast-suppression)

一、使用中注意的几点1.动态注册、静态注册的优先级在AndroidManifest.xml中静态注册的receiver比在代码中用registerReceiver动态注册的优先级要低。发送方在send...

Arduino通过串口透传ESP 13板与java程序交互

ESP13---是一个无线板子,配置通过热点通信Arduino通过串口透传ESP13板与java程序交互...

zookeeper的Leader选举源码解析(zookeeper角色选举角色包括)

作者:京东物流梁吉超zookeeper是一个分布式服务框架,主要解决分布式应用中常见的多种数据问题,例如集群管理,状态同步等。为解决这些问题zookeeper需要Leader选举进行保障数据的强一致...

接待外国人英文口语(接待外国友人的英语口语对话)

接待外国人英文口语询问访客身份:  MayIhaveyourname,please?  请问您贵姓?  Whatcompanyareyoufrom?  您是哪个公司的?  Could...

一文深入理解AP架构Nacos注册原理

Nacos简介Nacos是一款阿里巴巴开源用于管理分布式微服务的中间件,能够帮助开发人员快速实现动态服务发现、服务配置、服务元数据及流量管理等。这篇文章主要剖析一下Nacos作为注册中心时其服务注册与...

Android面试宝典之终极大招(android面试及答案)

以下内容来自兆隆IT云学院就业部,根据多年成功就业服务经验,以及职业素养课程部分内容,归纳总结:18.请描述一下Intent和IntentFilter。Android中通过Intent...

除了Crontab,Swoole Timer也可以实现定时任务的

一般的定时器是怎么实现的呢?我总结如下:1.使用Crontab工具,写一个shell脚本,在脚本中调用PHP文件,然后定期执行该脚本;2.ignore_user_abort()和set_time_li...

Spark源码阅读:DataFrame.collect 作业提交流程思维导图

本文分为两个部分:作业提交流程思维导图关键函数列表作业提交流程思维导图...

使用Xamarin和Visual Studio开发Android可穿戴设备应用

搭建开发环境我们需要做的第一件事情是安装必要的工具。因此,你需要首先安装VisualStudio。如果您使用的是VisualStudio2010,2012或2013,那么请确保它是一个专业版本或...

Android开发者必知的5个开源库(android 开发相关源码精编解析)

过去的时间里,Android开发逐步走向成熟,一个个与Android相关的开发工具也层出不穷。不过,在面对各种新鲜事物时,不要忘了那些我们每天使用的大量开源库。在这里,向大家介绍的就是,在这个任劳任怨...

Android事件总线还能怎么玩?(android实现事件处理的步骤)

顾名思义,AndroidEventBus是一个Android平台的事件总线框架,它简化了Activity、Fragment、Service等组件之间的交互,很大程度上降低了它们之间的耦合,使我们的代码...

Android 开发中文引导-应用小部件

应用小部件是可以嵌入其它应用(例如主屏幕)并收到定期更新的微型应用视图。这些视图在用户界面中被叫做小部件,并可以用应用小部件提供者发布。可以容纳其他应用部件的应用组件叫做应用部件的宿主(1)。下面的截...

取消回复欢迎 发表评论: