arcgis 数据和服务中的z值,以及地下三维展示(附代码)

最近在进行地图符号的三维配置,在尝试三维符号时,发现无论如何都无法出现地下的效果,很郁闷,终于在好闺蜜的帮助下了解到了关于数据和服务的z值

一、什么是z值

z 值通常表示可用于以三维形式显示要素的高程或高度。要素的各折点可将 z 值与 x,y 位置信息一同存储。虽然 ArcMap 及其编辑环境是二维的,但仍可以输入、编辑和维护 z 值。

在 ArcMap 中执行编辑操作时,z 值的分配由编辑工具或命令所执行的常规功能决定:是创建新要素还是编辑现有要素。所创建的、用于生成新要素的大多数操作都会为所有折点分配相同的默认 z 值。修改现有要素时,将内插新的 z 值,并将更新后的值分配给已编辑的折点。但是,某些编辑操作只会维护现有 z 值。

二、新建带有z值的要素类或shp并赋予z值

1、新建带有z值的要素类或shp

在catalog中新建shp或要素类,命名选择类型并勾选“坐标将包含z值”。

2、新建z值字段

在属性表中添加字段,并赋值(示例中由于点位于地下,所以z赋值负值,若在地上则赋值正值)

3、设置z值等于赋予的z字段值

打开工具箱<<数据管理工具<<要素<<调整3D的z值

这样,就可以得到包含z值的数据了,三维效果也就可以展示啦

三、展示地下三维

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no" />
    <title>三维test</title>
    <style>
        html,
        body,
        #viewDiv {
            padding: 0;
            margin: 0;
            height: 100%;
            width: 100%;
        }

        #homeDiv {
            left: 15px;
            top: 130px;
            z-index: 35;
            position: absolute;
        }
    </style>

    <link rel="stylesheet" href="http://ip/arcgis_api/4.11/esri/themes/light/main.css" />
    <script src="http://ip/arcgis_api/4.11/init.js"></script>

    <script>
        require([
            "esri/Map",
            "esri/Basemap",
            "esri/layers/ElevationLayer",
            "esri/layers/BaseElevationLayer",
            "esri/views/SceneView",
            "esri/layers/FeatureLayer",
            "esri/layers/MapImageLayer",
            "esri/widgets/Home"
        ], function (Map, Basemap, ElevationLayer, BaseElevationLayer, SceneView, FeatureLayer, MapImageLayer, Home) {
            var xzqh = "http://ip:6080/arcgis/rest/services/test/xzqh_test/MapServer";
            var precipiation = "http://ip:6080/arcgis/rest/services/test/precipiation_test/MapServer";
            var elevation = "http://ip:6080/arcgis/rest/services/Elevation/NMG_DEM_30m/ImageServer";
            var ore = "http://ip:6080/arcgis/rest/services/test/mine/MapServer/0";
            var oreIM = "http://ip:6080/arcgis/rest/services/test/mine/MapServer";
            var Extent = {
                xmax: 1.40336476624E7,
                xmin: 1.08169663638E7,
                ymax: 7044962.961599998,
                ymin: 4495920.4575999975,
                spatialReference: {
                    wkid: 3857
                }
            };
            var baseLayer = new MapImageLayer({
                title: "行政区划",
                url: xzqh
            });
            var basemap = new Basemap({
                baseLayers: [baseLayer],
                title: "行政区划",
            });

            var elevLyr = new ElevationLayer({
                url: elevation,
                spatialReference: {
                    wkid: 4326
                }
            });

            var depthRenderer = {
                type: "simple",
                symbol: {
                    type: "point-3d",
                    symbolLayers: [
                        {
                            type: "object",
                            resource: {
                                primitive: "sphere"
                            }
                        }
                    ]
                },
                visualVariables: [
                    {
                        type: "color",
                        field: "type_num",
                        //地下符号颜色
                        stops: [
                            {
                                value: "1",
                                color: "yellow"
                            },
                            {
                                value: "2",
                                color: "white"
                            },
                            {
                                value: "3",
                                color: "red"
                            },
                            {
                                value: "4",
                                color: "blue"
                            },
                            {
                                value: "5",
                                color: "green"
                            },
                            {
                                value: "6",
                                color: "black"
                            }
                        ]
                    },
                    {
                        type: "size",
                        field: "OreReserve",
                        axis: "all",
                        stops: [
                            {
                                value: 1000,
                                size: 2000
                            },
                            {
                                value: 2000,
                                size: 40000
                            }
                        ]
                    }
                ]
            };

            var surfaceSym = {
                type: "point-3d",
                symbolLayers: [
                    {
                        type: "icon",
                        resource: {
                            primitive: "circle"
                        }
                    }
                ]
            };

            var SurfaceRenderer = {
                type: "simple",
                symbol: surfaceSym,
                visualVariables: [
                    {
                        type: "size",
                        field: "OreReserve",
                        axis: "all",
                        stops: [
                            {
                                value: 1000,
                                size: 15
                            },
                            {
                                value: 2000,
                                size: 40
                            }
                        ]
                    },
                    {
                        type: "color",
                        field: "type_num",
                        //地下符号颜色
                        stops: [
                            {
                                value: "1",
                                color: "yellow"
                            },
                            {
                                value: "2",
                                color: "white"
                            },
                            {
                                value: "3",
                                color: "red"
                            },
                            {
                                value: "4",
                                color: "blue"
                            },
                            {
                                value: "5",
                                color: "green"
                            },
                            {
                                value: "6",
                                color: "black"
                            }
                        ]
                    }
                ]
            };

            var KCTemplate = {
                title: "{ORETYPE}矿",
                content: "{*}"
            }

            var DepthLayer = new FeatureLayer({
                url: ore,
                outFields: ["*"],
                renderer: depthRenderer,
                popupTemplate: KCTemplate,
                elevationInfo: {
                    mode: "relative-to-ground"
                }
            });

            var SurfaceLayer = new FeatureLayer({
                url: ore,
                outFields: ["*"],
                renderer: SurfaceRenderer,
                popupTemplate: KCTemplate,
                opacity: 0.6,
                elevationInfo: {
                    mode: "on-the-ground"
                }
            });

            var map = new Map({
                basemap: basemap,
                layers: [
                    DepthLayer,
                    SurfaceLayer
                ],
                ground: {
                    navigationConstraint: {
                        type: "none"
                    }
                }
            });

            var view = new SceneView({
                container: "viewDiv",
                map: map,
                viewingMode: "local",
                clippingArea: Extent,
                extent: Extent
            });

            var homeBtn = new Home(
                {
                    view: view
                },
                "homeDiv"
            );
        });
    </script>
</head>

<body>
    <div id="viewDiv"></div>
    <div id="homeDiv"></div>
</body>

</html>

效果如下:

原文地址:https://www.cnblogs.com/tangguobo/p/10797335.html

时间: 2024-11-11 00:06:01

arcgis 数据和服务中的z值,以及地下三维展示(附代码)的相关文章

ArcMap AddIn之下载ArcGIS Server地图服务中的数据

涉及到开发知识点1.ArcGIS Server地图服务 2.C# web请求获取数据 3.AddIN开发技术 工具界面: 具体涉及到的代码之后有空贴出来.先上工具 AddIn插件下载地址:点击这里下载工具 功能说明: 1.只支持ArcGIS Server中发布的功能参数类型为 MapServer类型的地图服务,该功能每次输入其中一个图层,进行下载 2.ArcGIS Server默认情况下,每次请求最大返回要素个数为1000,如果地图服务器做过配置,则手工修改此参数. 3.目前没有做消息界面,正常

【Excle】如何隐藏数据透视表中的错误值

如下:数据透视表出现错误 怎么解决呢 步骤 方法① 单击数据透视表任意单元格→数据透视表工具→分析→选项→勾选"对于错误值显示"→确定 方法② 右键→数据透视表选项(同样可以修改)

Android中实现一个简单的逐帧动画(附代码下载)

场景 Android中的逐帧动画,就是由连续的一张张照片组成的动画. 效果 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 首先准备一组不同表情的照片,放在res/drawable下,然后在此目录下新建动画资源文件fairy.xml <?xml version="1.0" encoding="utf-8"?> <animati

将深度缓冲z值变换到相机坐标系

将Depth Buffer中的Z值转换到Camera坐标系下需要使用投影矩阵 OpenGL: OpenGL的投影矩阵为 设Camera坐标系下点为(Vx,Vy,Vz,1.0) 通过上述投影矩阵变换后的点为(Px,Py,Pz,-Vz) Px与Py我们不关心,Pz=Az+B,A=-(f+n)/(f-n),B=-2fn/(f-n), 然后各项除以w,Pz=-A-B/Vz 现在Pz在[-1,1]之间,OpenGL会将其变换到[0,1]内得到Dz 以上就是Camera坐标系到投影坐标系的过程 当得到Dep

ArcGIS高程Z值的去除方法

在ArcGIS中,我们常用的几何类型有点.线.面.体(体,在涉及三维的情况下使用),但在这之外,可能会遇到带ZM的类型,如图所示,面ZM,它与面类似,但比面多两个字段. 在编辑中查看草图属性可看到Z值和M值.Z值是用来存储高程属性信息的,M值是用来存储其他属性信息的,如温度.浓度等.这里的数据是CAD文件转过来的,所有有高程值,但没有M值. 从下面的WKT格式中可以看出几何点可能的类型有Point.PointZ.PointM.PointZM四种格式,Polyline.Polygon也是类似的.

java实现服务端守护进程来监听客户端通过上传json文件写数据到hbase中

1.项目介绍: 由于大数据部门涉及到其他部门将数据传到数据中心,大部分公司采用的方式是用json文件的方式传输,因此就需要编写服务端和客户端的小程序了.而我主要实现服务端的代码,也有相应的客户端的测试代码.这里须有一个需要提到的是,我在实现接收json文件的同时,而且还需将数据写到hbase中.写入到hbase当中采用的是批量插入的方式,即一次插入多条记录. 好了,有了前面的说明,下面来简单的说一下我实现的服务端的小程序把. 2.为了实现服务端能够监听客户端的行为,因此我在服务端采用多线程的技术

[ArcGIS API for JavaScript 4.8] Sample Code-Popups-1-popupTemplate的概念和popup中属性字段值的多种表现形式

[官方文档:https://developers.arcgis.com/javascript/latest/sample-code/intro-popuptemplate/index.html] 一.Intro to PopupTemplate(关于popup模板) popups(弹出框)提供了一种简便的方式去查看layers(图层)或者graphics(图形)的属性信息.它也可以展示鼠标在view(视图)中的点击位置的坐标等其他相关信息.在ArcMap中,查看要素图层(shapefile)的属

ArcGIS之去除要素的Z值和M值

近期用python连接ArcGIS时,需要通过readshapefile函数读取shp文件,读取过程中经常出现 报错为 “ readshapefile can only handle 2D shape types ” 原因时shp文件在创建时包含了Z坐标及M坐标,如下图所示 于此,需要先将图层中的shape类型更改为平面: 方法为 打开toolbox的数据管理工具->要素->复制要素 修改环境设置,Disabled掉M值及Z值 运行完之后,得到新要素(不更改之前的要素,创建得到新图层) 原文地

EHlib在数据单元中显示字段值为图形。

-[定制网格数据单元]  在数据单元中显示字段值为图形.  TDBGridEh allows to show bitmaps from TImageList component depending on field values. TDBGridEh 可以根据字段的值显示TImageList 组件中相应的BMP. To show bitmaps depending on field values need: 要根据字段的值显示BMP图片需要, Fill list of field values