SuperMap的WebGL是基于开源JS库Cesium做的修改而形成的产品,理论上用起来大同小异,如果在有不一样的地方再看,基本上还是与Cesium的接口名称和结构是一样的。

定位方法有基于Cesium.Camera类(SuperMap/Cesium),它不需要去单独创建这个,因为他是Cesium.viewer的Member成员之一,直接使用创建好的view容器,使用view.camera就可以拿到

也可以使用Cesium.Viewer类做定位,方法下文会提到

定位方法一(Camera.setView(_Object))

这个方法是直接定位到该位置, 参数用Obj构造{destination:,orientation:, endTransform}

destination

相机在WGS84世界坐标系中的最终位置,或是自顶向下视图中可见的矩形区域。即可以是一个点坐标({Cartesian3}格式点坐标)或一个四至范围({Rectangle}格式)

Cartesian3格式构造点

有很多方法,我最常用的是

  • 从弧度转Cartesian3的Cesium.Cartesian3.fromRadians方法(SuperMap/Cesium)
  • 从WGS-84坐标转Cartesian3的Cesium.Cartesian3.fromDegrees方法(SuperMap/Cesium)
      viewer.camera.setView({
    destination:Cesium.Cartesian3.fromDegrees(116.4139265527,39.8865940599,100),
    orientation:{
    pitch: -0.3870743833538963,
    roll: 0.00004766518822663102,
    heading:5.71581666483758,
    }
    });

Rectangle格式构造四至范围

有很多方法,我最常用的是

  • 直接构造矩形范围:new Cesium.Rectangle(west, south, east,north)方法(SuperMap/Cesium),需要注意的是,四个参数的单位是弧度,范围是[-PI,PI]和[-PI/2,PI/2]

     viewer.camera.setView({
    destination:Cesium.Rectangle(1.9911131841002994,0.6863576116684447,2.0676847898509436, 0.7171078891208857),
    orientation:{
    pitch: -0.3870743833538963,
    roll: 0.00004766518822663102,
    heading:5.71581666483758,
    }
    });
  • 使用WGS-84坐标去构造Cesium.Rectangle.fromDegrees(west, south, east, north, result)方法(SuperMap/Cesium),四个参数的范围是[-180.0, 180.0]和[-90.0, 90.0]

定位方法二(Camera.flyTo(_Object))

Camera.flyTo(_Obj)方法的参数和setView其实差不多,它注重的是飞行体验,飞往目的地有一个过程,也就是其中的duration参数,它以秒为单位,表征飞行持续时间。如果省略,由飞行距离计算合理的持续时间。

viewer.camera.flyTo({
destination : Cesium.Cartesian3.fromDegrees(-122.19, 46.25, 5000.0),
orientation : {
heading : Cesium.Math.toRadians(175.0),
pitch : Cesium.Math.toRadians(-35.0),
roll : 0.0
},
duration:3 //飞行到目的地花费时间3秒
})

定位方法3(Viewer.flyTo(target, options))

在cesium中viewer.flyTo和Camera.flyTo的区别挺大,我们通常会用camera来定位,但当需要加上一个倾斜角的时候,可能定位的结果就和预想的区别很大

这个时候,就可以制定一个目标去,例如定位创建的Entity实体

loactionTectEntity = viewer.entities.add({
name: 'locationRectangle',
id: 'locationRectangle',
rectangle: {
coordinates: Cesium.Rectangle(1.9911131841002994,0.6863576116684447,2.0676847898509436, 0.7171078891208857),
material: Cesium.Color.GREEN.withAlpha(1.0),
height: 10.0,
outline: false
}
});
var flyPromise = viewer.flyTo(loactionTectEntity, {
duration: 5,
offset: new Cesium.HeadingPitchRange(0.0, Cesium.Math.toRadians(-20.0))
});

具体方法可以参考Cesium中定位方法使用,他写的很详细,也很清楚,本文不再赘述,只做整理

Supermap/Cesium 开发心得----定位的更多相关文章

  1. Supermap/Cesium 开发心得----动态散点图(波纹点/涟漪点)

    在二维开发中,openlayers4 入门开发系列结合 echarts4 实现散点图,下图是GIS之家的效果图,那么在三维中,则可借助Entity来变相构造下图的效果. 思路: 构造实体ellipse ...

  2. Supermap/Cesium 开发心得----飞天动线的实现

    在实际开发中,我遇到这样的问题,只给了两地点的坐标,要求会出从A地到B地的在天上飞的那种动态线 本质上动线的效果就是构造实体Entity中的polyline来实现,设置好材质,颜色和运动频率 具体实现 ...

  3. Supermap/Cesium 开发心得----本地视频接入播放

    在三维中,为了增加现实感.给人一种带入感,我们会采取接入视频的方式来实现,那么如何接入视频呢? 由于没有截至写文章为止,我没有视频流数据,所以只能采取本地视频文件的方式来做. 本文介绍结束视频的其中一 ...

  4. Supermap/Cesium 开发心得----获取三维视角的四至范围

    网上目前有两种获取当前Camera的四至范围的方法 方法一    这种方法是最通用的,即使在哥伦布视角(2.5D下依旧能准确获取值) function getCurrentExtent() { // ...

  5. 安卓版App开发心得

    从2016年4月到6月主要做的工作是网站的开发,而6月到现在2016年8月初,主要做的工作是Android和IOS两种App的开发,又以Android为主. 将这段时间的Android开发心得记录如下 ...

  6. AEAI Portlet开发心得

    1 背景概述 Portlet是AEAI Portal组件API,是基于Java的Web组件,由Portlet容器管理,并由容器处理请求,生产动态内容.AEAI Portal中已经预置了许多Portle ...

  7. Cesium学习2:如何从零开始在Eclipse IDE,Java语言搭建cesium开发环境

    废话不多说,今天就先在Eclipse上搭建Cesium开发环境吧~ 零.Cesium简介 Cesiumjs 是一套javascript库,用来渲染3D地球,2D区域地图,和多种GIS要素.不需要安装任 ...

  8. Android开发--用户定位服务--UserLocation

    Android开发--用户定位服务--UserLocation 2013-01-28 08:32:26     我来说两句      作者:BruceZhang 收藏    我要投稿 [java] & ...

  9. NodeJS版本EasyDarwin开源流媒体服务器开发心得

    title: Node版本EasyDarwin开发心得 date: 2018-03-27 22:46:15 tags: 年后着手Node版本EasyDarwin的开发工作,截止到今天2018年03月2 ...

随机推荐

  1. linux bash shell编程之参数变量和流程控制。

    参数变量:用来向脚本中传递参数 我们在执行脚本的时候可以在其后面加入一些参数,通常来说这些参数与脚本中变量为对应关系. start.sh argu1 argu2 引用方式: $1,,2,……${10} ...

  2. BeanUtils.copyProperties()怎样去掉字段首尾的空格

    背景 下午三时许,笔者正戴着耳机听着歌开心的敲着bug,忽然听到办公室的吵架声,原来是ios开发和产品小姐姐吵起来了,为了一个车牌号的校验问题.起因是ios传的车牌号没有将字符串的首尾空格去掉,后端直 ...

  3. 攻略前端面试官(一):JS的数据类型和内存机制浅析

    原文地址:http://rainykane.cn/2019/09/29/与K_K君一起攻略前端面试官(一):JS的数据类型和内存机制浅析/ 背就完事了 介绍:一些知识点相关的面试题和答案 使用姿势:看 ...

  4. c# 基于DataTable的Compute方法的扩展

    DataTable.Compute(String, String) 方法 定义 命名空间:System.Data 程序集:System.Data.dll, netstandard.dll, Syste ...

  5. 运维与开发的开车现场之MySQL5.7创建触发器报错解决过程

    报错内容如下: ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds ...

  6. adb查看Android app包名

    1. 确保电脑已经安装了adb.exe文件 2. 使用USB连接你的手机到电脑上,输入下图所示的命令后按下回车键:adb devices 3. 使用手机打开某个应用程序 4.回到命令号窗口,输入代码如 ...

  7. 什么是WCF

    WCF的全称是windows的通信基础 Windows Communication Foundation.本质上来讲,他是一套软件开发包. 服务终节点的三要素 用来发送接收消息的构造 创建一个WCF程 ...

  8. Ubuntu中git pull远程仓库时显示403错误

    # 报错内容 fatal: unable to access 'https://git.dev.tencent.com/chendongnan/sfedu_wx.git/': The requeste ...

  9. SpringBoot 发送邮件功能实现

    背景 有个小伙伴问我你以前发邮件功能怎么弄的.然后我就给他找了个demo,正好在此也写一下,分享给大家. 理清痛点 发送邮件,大家可以想一下,坑的地方在哪? 我觉得是三个吧. 第一:邮件白名单问题. ...

  10. 揭秘 iOS App Extension 开发 —— Today 篇

    转自:http://www.cocoachina.com/ios/20160619/16760.html 本文授权转载,作者:Cyandev(简书) 从 iOS 8 开始,苹果引入了全新的 App E ...