首页 > 编程知识 正文

cesium二次开发教程,arcgis数字化地图步骤

时间:2023-05-04 20:15:15 阅读:144549 作者:304

Cesium中文网: http://cesiumcn.org/|国内快速访问: http://cesium.coinidea.com/

本教程介绍如何使用Cesium中的实体API绘制空间数据,如点、标记、标签、线、模型、形状和物体。 如果不需要Cesium的先验知识,但读者完全没有这方面的经验,读者可能想从“初学者入门中文教程(原版)”中学习。

# entity (什么是API?

Cesium提供了丰富的空间数据API,可以分为两类:面向图形开发人员的低级API (通常称为原始) API;以及用于数据驱动可视化的高级API (实体) API

原始API的主要目标是公开手头执行任务所需的最小抽象量。 我想像图形程序员一样,使用图形术语。 其结构不是为了API的一致性,而是为给定的可视化类型提供最高效、最灵活的实现。 加载模型与创建招牌不同,两者都与创建多边形完全不同。 每种类型的可视化都有其独特的特点。 它们还必须具有不同的性能特性,并遵循不同的最佳做法。 虽然功能强大、灵活,但大多数APP应用程序的抽象级别高于Primitive API。 原始API的主要目标是释放手头当前研发工作所需的最小抽象量。 我想像图形程序员一样,使用图形术语。 加载它的结构是为给定的可视化类型提供最有性能和灵活性的实现,而不是为了API的一致性型号与创建楼盘不同。 这两者都与创建多边形完全不同。 每种类型的可视化都有其独特的特点。 它们还必须具有不同的性能特性,并遵循不同的最佳做法。 虽然功能强大、灵活,但大多数APP应用程序提供的服务接口比Primitive API抽象级别更高。

实体API的目的是发布一组设计一致的高级对象,这些对象将相关的可视化和信息聚合到一个统一的数据结构中。 这称为实体。 不要担心可视化的潜在机制,集中精力展示数据吧。 它还提供了一种结构,可以方便地构建复杂、时间动态的可视化,以自然地适应静态数据。 实体API实际上在背后使用原始API(primitiveAPI ),这是我们(大多数)永远不需要关注的实现细节。 通过对提供的数据应用各种启发式算法,物理API可以提供灵活、高性能的可视化,同时还可以发布一致、易于学习、易于使用的界面。

#我们第一个实体

学习实体API的基本方法之一是看一些代码。 为了简化事情,用CesiumSandcastle的Hello World的例子构建。 如果读者在本地开发Cesium,就可以自由使用自己的APP应用程序。

假设您想从经度和纬度列表中添加美洲怀俄明的多边形。 (怀俄明是因为它是一个简单的多边形)可以复制以下代码并将其粘贴到Sandcastle中:

var viewer=new cesium.viewer (cesium container ); var Wyoming=viewer.entities.add (name : ' Wyoming ),Polygon: ) hierarchy : cesium.cartesian3. fromdegreeeeeeeaaan 44.996596,- 104.053011,43.002989,- 104.053011,41.003906,- 105.728954,40.990 40.998429,- 111.047063,40.998429 - 111.05254,45.002073 ],heii material 3360 cesium.color.red.with alpha (0.5 ),outline : true,outline color : ceses viewer.zoomto(wyoming ); 点击运行按钮(或F8 ),显示以下图像。

[导出外链图像失败。 (img-UqcaskFz-1563172217783 ) https://i.loli

.net/2018/11/01/5bdabb34bd61a.jpg)]

因为我们的一个目标是让Cesium的代码易于理解,希望这是不言自明的。我们创建了Viewer widget,它充当几乎所有Cesium应用程序的基础,然后通过viewer.entities.add. 添加一个新的Entity。我们传递的需add的对象只是一个提供初始值的选项参数。返回值是实际的实体实例。最后,我们调用 viewer.zoomTo 以确保实体处于视图中。
有很多实体选项可用,但是现在我们指定polygon内部的半透明红色和边界的黑色轮廓。我们也给实体一个“Wyoming 怀俄明”的显示名称。

##形状和物体
有了创建多边形的基本知识,并且由于实体API的同质性,我们现在可以通过简单地使用Sandcastle中的示例作为参考来创建各种图形。下面是支持的形状和物体的完整列表。
[外链图片转存失败(img-D0UViUgt-1563172217786)(https://i.loli.net/2018/11/01/5bdabf6bc454d.png)]

###材质和轮廓
不管它们的几何定义如何,所有形状和物体都有一组共同的属性来控制它们的外观。fill属性是一个布尔值,它指定是否填充了表面的内部,而outline属性控制形状的边缘是否被轮廓化。
当fill设为true,material属性决定填充物是什么。在接下来的例子中,让我们创建一个半透明的蓝色椭圆。默认情况下,fill是true,outline是false,所以我们只需要指定material。

var entity = viewer.entities.add({ position: Cesium.Cartesian3.fromDegrees(-103.0, 40.0), ellipse : { semiMinorAxis : 250000.0, semiMajorAxis : 400000.0, material : Cesium.Color.BLUE.withAlpha(0.5) }});viewer.zoomTo(viewer.entities);var ellipse = entity.ellipse; // For upcoming examples Image

我们也可以将材质指定为一个图片链接:

ellipse.material = '//cesiumjs.org/tutorials/images/cats.jpg';

在上述两种情况下,在赋值时自动为我们创建一个ColorMaterialProperty属性或ImageMaterialProperty属性。对于更复杂的材料,我们需要自己创建一个材料属性实例。目前,实体形状和物体支持颜色、图像、棋盘、条纹和网格材料。
###棋盘

ellipse.material = new Cesium.CheckerboardMaterialProperty({ evenColor : Cesium.Color.WHITE, oddColor : Cesium.Color.BLACK, repeat : new Cesium.Cartesian2(4, 4)});


###条纹

ellipse.material = new Cesium.StripeMaterialProperty({ evenColor : Cesium.Color.WHITE, oddColor : Cesium.Color.BLACK, repeat : 32});


###网格

ellipse.material = new Cesium.GridMaterialProperty({ color : Cesium.Color.YELLOW, cellAlpha : 0.2, lineCount : new Cesium.Cartesian2(8, 8), lineThickness : new Cesium.Cartesian2(2.0, 2.0)});


###轮廓
与fill属性不同,outline没有相应的材料,而是依赖于两个独立的outlineColor和outlineWidth属性。outlineWidth只适用于非Windows系统,如Android、iOS、Linux和OS X。这是由于WebGL是如何在Windows上的所有三个主要浏览器引擎中实现所限制的。

ellipse.fill = false;ellipse.outline = true;ellipse.outlineColor = Cesium.Color.YELLOW;ellipse.outlineWidth = 2.0;


###折线
折线是一种特殊情况,因为它们没有填充或轮廓属性。相反,他们依靠专门的材料来代替颜色。由于这些特殊材料,不同宽度和轮廓宽度的折线将对所有系统起作用。

var entity = viewer.entities.add({ polyline : { positions : Cesium.Cartesian3.fromDegreesArray([-77, 35, -77.1, 35]), width : 5, material : Cesium.Color.RED}});viewer.zoomTo(viewer.entities);var polyline = entity.polyline // For upcoming examples


###折线轮廓

polyline.material = new Cesium.PolylineOutlineMaterialProperty({ color : Cesium.Color.ORANGE, outlineWidth : 3, outlineColor : Cesium.Color.BLACK});

[外链图片转存失败(img-H3FIFZW1-1563172217803)(https://i.loli.net/2018/11/01/5bdabd0b032fc.jpg)]
###折现光晕

polyline.material = new Cesium.PolylineGlowMaterialProperty({ glowPower : 0.2, color : Cesium.Color.BLUE});


##高度与挤压
覆盖在地球上的所有形状,当前是圆、椭圆、多边形和矩形,也可以放置在海拔高度或挤压成一个物体。在这两种情况下,形状或物体仍然符合其下方的地球曲率。

对于高度,我们所要做的就是在相应的图形对象上设置高度属性,对于上面列出的所有形状都是一样的。这可能是提到Cesium总是使用米、弧度和秒作为单位的好时机,除非函数明确地表示了其他情况,比如Cartesian3.fromDegrees。下面的代码行将多边形提升到地球上方250000米处。

wyoming.polygon.height = 250000;

[外链图片转存失败(img-idxCE0c9-1563172217804)(https://i.loli.net/2018/11/01/5bdabd47871a8.jpg)]
将形状挤压成物体同样容易,我们只需要设置extrudedHeight属性。物体将在height和extrudedHeight之间产生。如果height是undefined,则物体从0开始。为了创造一个物体从200000米开始,延伸到250000米,我们可以使用下面的代码。这当然意味着物体本身是50000米高。

wyoming.polygon.height = 200000;wyoming.polygon.extrudedHeight = 250000;

Cesium中文网交流QQ群:807482793
Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。