zoukankan      html  css  js  c++  java
  • ArcGIS 发布高程服务。10.4

    ArcGIS 发布高程必须是10.21以上,我用10.4。

    前端用ArcGIS For API 4.x。

    ARCGIS很早之前有CS版本的ArcScene,可查看高程TIF文件,但机制和BS的完全不同。

    BS显示高程,前端是用ArcGIS的JS在Canvas上画的三维图形,后端提供的是瓦片高程数据。

    1、首先要有DEM文件,DEM只能是单波段TIF文件,要从里属性查看。

    2、发布高程服务。

    首先,ArcGIS强制要求此TIF必须是WKID为3857的坐标系,如不是,需要栅格工具转换。

    然后,发布ImageService服务,要求必须切片,切必须是ArcGIS Online/Bing/Google方案。

    最后,Cacheing-Advance Settings里,选择切片必须是LERC格式。

     3、发布后,使用JS代码验证。

    ArcGIS使用Elevation Layer图层,把此图层,赋予map.ground里即可。默认有个高程服务地址,可用来测试。详情参看官方API。

    https://developers.arcgis.com/javascript/latest/sample-code/scene-elevationinfo/index.html

    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8" />
        <meta
          name="viewport"
          content="initial-scale=1,maximum-scale=1,user-scalable=no"
        />
        <title>Intro to SceneView - Create a 3D map - 4.12</title>
        <style>
          html,
          body,
          #viewDiv {
            padding: 0;
            margin: 0;
            height: 100%;
             100%;
          }
        </style>
    
        <link
          rel="stylesheet"
          href="https://js.arcgis.com/4.12/esri/themes/light/main.css"
        />
        <script src="https://js.arcgis.com/4.12/"></script>
    
        <script>
          var G={};
          require(["esri/Map",
    			   "esri/views/SceneView",
    			   "esri/layers/ElevationLayer",
    			   "esri/Camera",
    			   "esri/layers/ImageryLayer"], 
    			   function(Map,
    						SceneView,
    						ElevationLayer,
    						Camera,
    						ImageryLayer) {
            var map = new Map({
              basemap: "streets",
              //ground: "world-elevation" 
            }); 
            G.map=map;
    		var elevationLayer = new ElevationLayer();
            //elevationLayer.url = "https://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer"; 
    		var evaurl="http://xxx/ImageServer"
    		elevationLayer.url =evaurl;
            map.ground.layers.add(elevationLayer);
    
            var view = new SceneView({
              container: "viewDiv",
              map: map,
              alphaCompositingEnabled: true,
              environment: { 
                starsEnabled: true,
                atmosphereEnabled: true 
              },
              scale: 500000,
              //center: [-128.9, -73.01]
    		  center: [-128.9, -73.01]
            });
    		 var layer = new ImageryLayer({
    									  // URL to the imagery service
    									  url: evaurl,
    									  format:"jpg"
    									});
    		map.layers.add(layer);
    		var cam = new Camera({
    					heading: 9, // face due east
    					tilt: 80, // looking from a bird's eye view
    					position: {
    								latitude: -73.22,
    								longitude: -129.07,
    								z: 6800,
    								spatialReference: { wkid: 3857 }
    							  }
    			});
    		view.camera = cam;
    		view.environment.lighting.cameraTrackingEnabled = true
    		view.environment.lighting.directShadowsEnabled=true
    		G.view=view;
    		//G.map.ground.layers.items[0].visible=false;
    		
          });
        </script>
      </head>
    
      <body>
        <div id="viewDiv"></div>
      </body>
    </html>
    

      4.效果。高程默认是没有颜色的,只有凹凸起伏。颜色是另附一层Image上去的,默认是黑白色,若要彩色覆盖,则需要设置Raster Function。

      5、遗憾。

    现在ArcGIS For JS API 4.12 并未支持前端高程拉伸。想要看更突出的效果,必须后端数据拉伸,重新发布。

    其实ArcSence中有拉伸因子,但BS的遗憾还未出现。

  • 相关阅读:
    分页
    【移动】
    iOS
    内存数据库
    HOJ——T 2275 Number sequence
    HOJ——T 1867 经理的烦恼
    HOJ——T 2430 Counting the algorithms
    洛谷—— P2047 社交网络
    HDU——T 1166 敌兵布阵
    前端学习之jquery
  • 原文地址:https://www.cnblogs.com/wigis/p/11275615.html
Copyright © 2011-2022 走看看