博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ArcGIS 关于三维立体地图 简单使用,里面的资源就在 arcgis 的demo里面有
阅读量:2345 次
发布时间:2019-05-10

本文共 6894 字,大约阅读时间需要 22 分钟。

import UIKitimport ArcGISclass MapPlanVc: UIViewController {
func startTransportData(spoint : SpacePoint) {
DispatchQueue.main.async {
self.planGraphic?.geometry = spoint.point self.planGraphic?.attributes["HEADING"] = spoint.heading self.planGraphic?.attributes["ROLL"] = spoint.roll self.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 = 0 private 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) //模拟数据 startReceveData self.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.position self.planGraphic?.attributes["HEADING"] = frame.heading self.planGraphic?.attributes["ROLL"] = frame.roll self.planGraphic?.attributes["PITCH"] = frame.pitch self.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 = false cameraController.isAutoHeadingEnabled = false cameraController.isAutoPitchEnabled = false //设置视野距离// cameraController.maxCameraDistance = 18000// cameraController.minCameraDistance = 500 //相机相对于飞机的角度偏移量 cameraController.cameraHeadingOffset = 0.8 cameraController.cameraPitchOffset = 0.5 cameraController.cameraDistance = 100 self.scenseView.cameraController = cameraController } // func addLinTo3DMap() {
let ranges = [AGSDistanceSymbolRange]() let scenDistanceSymbol = AGSDistanceCompositeSceneSymbol() scenDistanceSymbol.ranges = ranges } func add3DPlan(){
//Bristol,fmPlanModel let plan3dModelname = "fmplanAnimate" //加载3d模型图 self.planModelSymbol = AGSModelSceneSymbol(name: plan3dModelname, extension: "dae", scale: 1) //开始位置,默认是bottom self.planModelSymbol?.anchorPosition = .center self.planGraphic = AGSGraphic() self.planGraphic?.geometry = AGSPoint(x: 0, y: 0, z: 0, spatialReference: AGSSpatialReference.wgs84()) self.planGraphic!.symbol = self.planModelSymbol self.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?.extrusionExpression self.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 = surface self.scenseGraphicOverly = AGSGraphicsOverlay() self.scenseGraphicOverly.sceneProperties?.surfacePlacement = .absolute self.scenseView.graphicsOverlays.add(self.scenseGraphicOverly as Any) } /* // MARK: - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation override func prepare(for segue: UIStoryboardSegue, sender: Any?) { // Get the new view controller using segue.destination. // Pass the selected object to the new view controller. } */}

转载地址:http://cenvb.baihongyu.com/

你可能感兴趣的文章
在ros底下安装opencv
查看>>
PHP页面纯静态化与伪静态化
查看>>
分享网页到微信朋友圈,显示缩略图的方法
查看>>
PHP参数类型限制
查看>>
IOS博客项目搭建-12-刷新数据-显示最新的微博数提示
查看>>
Laravel5 Markdown 编辑器使用教程
查看>>
php文件上传与下载
查看>>
Python3学习教程
查看>>
Python3学习笔记01-第一个Python程序
查看>>
Laravel5学生成绩管理系统-01-安装-建表-填充数据
查看>>
Mac OSX下使用apt-get命令
查看>>
Mac下安装PHP的mcrypt扩展的方法(自己总结的)
查看>>
关于html_entity_decode、空格 以及乱码
查看>>
Box2d no gravity
查看>>
mario collision
查看>>
tiled 地图工具
查看>>
小游戏
查看>>
旋转关节绳子
查看>>
射箭box2d
查看>>
cocos2d iphone-wax cocowax
查看>>