import UIKit
import ArcGISclass MapPlanVc: UIViewController {func startTransportData(spoint : SpacePoint) {DispatchQueue.main.async {self.planGraphic?.geometry = spoint.pointself.planGraphic?.attributes["HEADING"] = spoint.headingself.planGraphic?.attributes["ROLL"] = spoint.rollself.planGraphic?.attributes["PITCH"] = spoint.pitch}}@IBOutlet weak var startBtn: UIButton!@IBOutlet weak var scenseView: AGSSceneView!var scenseGraphicOverly:AGSGraphicsOverlay!var planModelSymbol :AGSModelSceneSymbol?var planGraphic  :AGSGraphic?var frames = [Frame]()var timer:Timer!var frameIndex = 0private var missionFileNames = ["GrandCanyon.csv", "Hawaii.csv", "Pyrenees.csv", "Snowdon.csv"]var spacePoint:SpacePoint? = SpacePoint()var dataTransport:DataTransport!override func viewDidLoad() {super.viewDidLoad()self.initDatas()// Do any additional setup after loading the view.//self.startBtn.addTarget(self, action: #selector(startAnimate), for: .touchUpInside)//模拟数据 startReceveDataself.startBtn.addTarget(self, action: #selector(startReceveData), for: .touchUpInside)getFlightDatas()}override func viewWillAppear(_ animated: Bool) {super.viewWillAppear(animated)}override func viewWillDisappear(_ animated: Bool) {super.viewWillDisappear(animated)}func updatePlanSateAndPosition() {spacePoint?.showPointDetail()DispatchQueue.main.async {self.startTransportData(spoint: self.spacePoint!)}}func initDatas()  {let scense = AGSScene(basemap: .imagery())self.scenseView.scene = scense//添加底图self.addSurface()//添加渲染器self.addRender()//添加飞机self.add3DPlan()//设置相机self.setCamera()//设置动画相关
//        self.setAnimationAbout()self.dataTransport  = DataTransport()self.dataTransport.delegate = self}@objc func startReceveData(){print("加载数据")self.dataTransport.loadDatas()}func setAnimationAbout()  {//加载路径数据self.loadDatasFromFile(fileName: self.missionFileNames[0])self.animate()}//开始@objc func startAnimate() {self.timer = Timer(timeInterval: 0.1, target: self, selector: #selector(animate), userInfo: nil, repeats: true)RunLoop.main.add(self.timer, forMode: .common)}@objc func animate(){if self.frames.count <= self.frameIndex {return}let frame = self.frames[self.frameIndex]self.planGraphic?.geometry = frame.positionself.planGraphic?.attributes["HEADING"] = frame.headingself.planGraphic?.attributes["ROLL"] = frame.rollself.planGraphic?.attributes["PITCH"] = frame.pitchself.frameIndex += 1}//func loadDatasFromFile(fileName:String)  {if let path = Bundle.main.path(forResource: fileName, ofType: nil){if let content = try? String(contentsOfFile: path){let lines = content.components(separatedBy: CharacterSet.newlines)
//                print(lines)var frames1 = [Frame]()for line in lines{let lineDetail = line.components(separatedBy: ",")let frame = Frame()frame.position = AGSPoint(x: Double(lineDetail[0])!, y: Double(lineDetail[1])!, z: Double(lineDetail[2])!, spatialReference: AGSSpatialReference.wgs84())frame.heading = Double(lineDetail[3])!frame.pitch = Double(lineDetail[4])!frame.roll = Double(lineDetail[5])!frames1.append(frame)}self.frames = frames1}}else{print("source file not found please check")}}func setCamera()  {let cameraController =  AGSOrbitGeoElementCameraController(targetGeoElement: self.planGraphic!, distance: 1000)//通过这个几个参数调整飞机显示姿态cameraController.isAutoRollEnabled = falsecameraController.isAutoHeadingEnabled = falsecameraController.isAutoPitchEnabled = false//设置视野距离
//        cameraController.maxCameraDistance = 18000
//        cameraController.minCameraDistance = 500//相机相对于飞机的角度偏移量cameraController.cameraHeadingOffset = 0.8cameraController.cameraPitchOffset = 0.5cameraController.cameraDistance = 100self.scenseView.cameraController = cameraController}//func addLinTo3DMap()  {let ranges = [AGSDistanceSymbolRange]()let scenDistanceSymbol = AGSDistanceCompositeSceneSymbol()scenDistanceSymbol.ranges = ranges}func add3DPlan(){//Bristol,fmPlanModellet plan3dModelname = "fmplanAnimate"//加载3d模型图self.planModelSymbol = AGSModelSceneSymbol(name: plan3dModelname, extension: "dae", scale: 1)//开始位置,默认是bottomself.planModelSymbol?.anchorPosition = .centerself.planGraphic =  AGSGraphic()self.planGraphic?.geometry = AGSPoint(x: 0, y: 0, z: 0, spatialReference: AGSSpatialReference.wgs84())self.planGraphic!.symbol = self.planModelSymbolself.scenseGraphicOverly.graphics.add(self.planGraphic as Any)}func addRender()  {let render = AGSSimpleRenderer()render.sceneProperties?.headingExpression = "[HEADING]"render.sceneProperties?.pitchExpression = "[PITCH]"render.sceneProperties?.rollExpression = "[ROLL]"//        render.sceneProperties?.extrusionExpressionself.scenseGraphicOverly.renderer = render}func addSurface()  {let urlstr = "https://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer"let elevationSource = AGSArcGISTiledElevationSource(url: URL.init(string: urlstr)!)let surface = AGSSurface()surface.elevationSources.append(elevationSource)self.scenseView.scene?.baseSurface = surfaceself.scenseGraphicOverly = AGSGraphicsOverlay()self.scenseGraphicOverly.sceneProperties?.surfacePlacement = .absoluteself.scenseView.graphicsOverlays.add(self.scenseGraphicOverly as Any)}/*// MARK: - Navigation// In a storyboard-based application, you will often want to do a little preparation before navigationoverride func prepare(for segue: UIStoryboardSegue, sender: Any?) {// Get the new view controller using segue.destination.// Pass the selected object to the new view controller.}*/}

ArcGIS 关于三维立体地图 简单使用,里面的资源就在 arcgis 的demo里面有相关推荐

  1. 微软推出三维立体地图搜索(3-D City Live Search)

    http://local.live.com/ 微软的三维立体地图终于来了,操作方法和Google Earth差不多,很不同的是,微软将其在浏览器中实现而无须特定的应用程序界面,但其实也是需要在客户端装 ...

  2. python导入txt文件并绘图-Python实现读取txt文件并画三维图简单代码示例

    记忆力差的孩子得勤做笔记! 刚接触python,最近又需要画一个三维图,然后就找了一大堆资料,看的人头昏脑胀的,今天终于解决了!好了,废话不多说,直接上代码! #由三个一维坐标画三维散点 #codin ...

  3. python读取txt文件代码-Python实现读取txt文件并画三维图简单代码示例

    记忆力差的孩子得勤做笔记! 刚接触python,最近又需要画一个三维图,然后就找了一大堆资料,看的人头昏脑胀的,今天终于解决了!好了,废话不多说,直接上代码! #由三个一维坐标画三维散点 #codin ...

  4. 如何使用ArcGIS制作三维地形图

    ArcGIS作为专业的GIS软件,不仅可以制作二维地图,制作三维地图也是不在话下,通常我们使用ArcScene来制作三维地图,这里为大家介绍一下制作三维地图的方法,希望能对你有所帮助. 预处理数据 将 ...

  5. arcgis api for js 4.19 尝鲜(React + ts+ arcgis api)

    前言 前段时间看到 arcgis api 更新 4.19 版本,而且全面拥抱 ES Modules 开发模式,这无疑是每个 giser 的福音啊:之前的版本基于 dojo 的那种笨重前端框架开发,学习 ...

  6. 【ArcGIS Pro微课1000例】0001:Win7系统ArcGIS Pro2.5安装权威教程(附软件安装包下载)

    ArcGIS Pro是ESRI桌面产品线的新秀,集很多新技术于一身,原生支持64位系统,Ribbon界面,支持二三维一体化等.可以与别的版本的ArcGIS软件共存. 文章目录 1. 系统环境配置 2. ...

  7. ArcGIS for Desktop入门教程_第七章_使用ArcGIS进行空间分析 - ArcGIS知乎-新一代ArcGIS问答社区...

    原文:ArcGIS for Desktop入门教程_第七章_使用ArcGIS进行空间分析 - ArcGIS知乎-新一代ArcGIS问答社区 1 使用ArcGIS进行空间分析 1.1 GIS分析基础 G ...

  8. ArcGIS for Desktop入门教程_第五章_ArcCatalog使用 - ArcGIS知乎-新一代ArcGIS问答社区

    原文:ArcGIS for Desktop入门教程_第五章_ArcCatalog使用 - ArcGIS知乎-新一代ArcGIS问答社区 1 ArcCatalog使用 1.1 GIS数据 地理信息系统, ...

  9. ArcGIS初学者的建议一(自带资源利用)

    对ArcGIS的学习绝大部分的人都是从ArcMap这个软件下手的(准确来说甚至就是ArcGIS Desktop 的ArcInfo[ArcInfo是在Desktop中的角色类似于win7中的ultima ...

  10. 基于arcgis的python编程秘笈第2版_基于ArcGIS的Python编程秘笈(第2版)

    基于ArcGIS的Python编程秘笈(第2版) 译者简介 审阅人简介 1 面向ArcGIS的Python语言基础 1.1 使用IDLE进行Python脚本开发 1.1.1 Python Shell窗 ...

最新文章

  1. Fabric--CA 应用与配置
  2. 第三课 泛型+反射封装数据库访问层 2019-04-02
  3. 提高SQL执行效率的16种方法
  4. oracle 10g 分区管理,Oracle 10g分区表的自动维护
  5. 网上购物软件的测试计划,网上购物平台购物测试计划书
  6. 北航计算机和天大建筑,天津大学好厉害,原来北航、北科大、北邮,都是天大分出去的......
  7. vim批量删除与插入
  8. Bolt界面引擎 HostWnd的生存周期以及相应的objtree的绑定问题
  9. html文字闪烁没效果,html文字闪烁代码 css3文字闪烁效果
  10. amesim子模型_为什么amesim模型建立后有的元件没有可用的子模型
  11. 打开计算机出现酷我音乐删不掉,删除 “我的电脑” 里的 “酷我音乐” 快捷方式...
  12. 实战:RBAC(基于角色的权限控制)-2021.11.28
  13. C++ strtok函数详解
  14. spyder python使用技巧大全_spyder常用功能
  15. 联想服务器pe进系统还原,传授联想如何一键还原系统
  16. C 不常见的一些晦涩语法
  17. 请问做亚马逊,注册P卡是用个人名义还是公司名义?
  18. 双十一!如何下载各种热卖商品视频?
  19. miui11升级鸿蒙,MIUI11稳定版首批推送来了 12款小米机型可升级
  20. AMD EPYC CPU物理机之core(云主机最大可使用内核数)售卖机制 ---- NUMA and NPS使用

热门文章

  1. 华三计算机网络笔试题,软考网络工程师试题
  2. 怎么制作电脑动态壁纸 桌面高清动态图怎么做
  3. ASP.NET 新闻发布网站
  4. 可用性及测试方法小介绍
  5. JAVA面试题目及推荐书籍
  6. windows远程桌面不能复制粘贴的解决办法
  7. 金士顿固态硬盘修复,慧荣SM2246EN开卡记录,附量产工具
  8. MySQL中的自增主键用完了怎么办
  9. python哥德巴赫猜想
  10. Android应用的persistent属性