ArcGIS 10.8.1之后发布栅格数据的MapServer 动态工作空间 替换数据源渲染问题

news2025/4/21 15:10:27

背景

经过测试,Server 10.8.1、11.0、11.1发布相关服务设置动态空间之后,前端都无法自动读取同名的clr色彩映射表文件进行渲染,服务都是由ArcGIS Pro进行发布。

原因

基于ArcMap发布的服务才支持,但是10.8.1之后不支持ArcMap发布服务。自动读取clr色彩映射表文件,需要ArcMap Runtime后台支持,已废弃,可以加载切换数据源,但是不支持渲染,需要采用新的开发方式。
在这里插入图片描述

首先,如何发布服务并开启动态空间?

通过Pro发布服务后在Manager设置开启即可。
在这里插入图片描述
测试示例代码:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>加载ArcGIS Server服务</title>
    <!-- <link rel="stylesheet" href="https://js.arcgis.com/4.25/esri/themes/light/main.css">
    <script src="https://js.arcgis.com/4.25/"></script> -->
    <link rel="stylesheet" href="https://js.arcgis.com/4.32/esri/themes/light/main.css" />
    <script src="https://js.arcgis.com/4.32/"></script>
    <style>
        #viewDiv {
            height: 100vh;
            width: 100%;
        }
    </style>
</head>
<body>
    <div id="viewDiv"></div>
    <script>
        require([
            "esri/Map",
            "esri/views/MapView",
            "esri/layers/MapImageLayer"
        ], function(Map, MapView, MapImageLayer) {
            // 创建一个地图实例
            const map = new Map({
                basemap: "streets"
            });

            // 创建一个地图视图实例
            const view = new MapView({
                container: "viewDiv",
                map: map,
                center: [120.0916129,30.2487992],
                zoom: 8
            });

            // 定义 token
            //const tkstr = "iN8hBNamZvCpIeo_-QD-dHAg8afm1y4ZUWuj1RmswuM";

            // 创建一个动态地图服务图层
            const dynamicLayer = new MapImageLayer({
                //url: "http://xxxx:6080/geoscene/rest/services/demstyletest/MapServer",
                url: "http://xxxx:6080/geoscene/rest/services/demstyletest/MapServer",
                sublayers: [
                    {
                        id: 0,
                        source: {
                            type: "data-layer",
                            dataSource: {
                                type: "raster",
                                workspaceId: "kkk123",
                                dataSourceName: "aster84.tif"
                            }
                        }
                    }
                ]
            });

            // 将地图服务图层添加到地图中
            map.add(dynamicLayer);
        });
    </script>
</body>
</html>

动态空间路径下即使,存放了同名clr色彩映射表,也是不支持读取渲染的。
在这里插入图片描述

在这里插入图片描述

解决方案

1. 导出为 RGB 方案的栅格数据

这种方法主要针对较为固定的成果数据,如果渲染也是动态的则无法满足。

具体方法可以参考:https://www.cnblogs.com/wigis/p/11065631.html

2. 将数据作为在线数据资源,使用ImageTileLayer加载

这种方法主要针对用户查看的栅格数据,tif栅格数据可以放在Tomcat或其他服务器都可以,渲染通过前端设置render控制,示例代码可以参考:

<html>
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no" />
    <title>hello</title>
    <style>
      html,
      body,
      #viewDiv {
        padding: 0;
        margin: 0;
        height: 100%;
        width: 100%;
      }
    </style>
     <link
     rel="stylesheet"
     href="https://js.arcgis.com/4.30/esri/themes/light/main.css"
   />
   <script src="https://js.arcgis.com/4.30/"></script>
    <script>
        require([
                "esri/config",
                "esri/WebMap",
                "esri/views/MapView",
                "esri/views/SceneView",
                "esri/layers/ImageryTileLayer",
                "esri/layers/TileLayer",
                "esri/layers/support/RasterFunction",
                "esri/renderers/RasterShadedReliefRenderer",
                "esri/smartMapping/raster/support/colorRamps",
                "esri/renderers/RasterStretchRenderer",
                "esri/rest/support/MultipartColorRamp",
                "esri/rest/support/AlgorithmicColorRamp",
                "esri/Color",
            ], function(esriConfig,Map, MapView, SceneView,ImageryTileLayer, TileLayer, RasterFunction, RasterShadedReliefRenderer, colorRamps, RasterStretchRenderer, MultipartColorRamp, AlgorithmicColorRamp, Color) {

            const colorRamp = new MultipartColorRamp({
              colorRamps: [
                new AlgorithmicColorRamp({
                  fromColor: new Color([20, 100, 150, 255]),
                  toColor: new Color([70, 0, 150, 255])
                }),
                new AlgorithmicColorRamp({
                  fromColor: new Color([70, 0, 150, 255]),
                  toColor: new Color([170, 0, 120, 255])
                }),
                new AlgorithmicColorRamp({
                  fromColor: new Color([170, 0, 120, 255]),
                  toColor: new Color([230, 100, 60, 255])
                }),
                new AlgorithmicColorRamp({
                  fromColor: new Color([230, 100, 60, 255]),
                  toColor: new Color([255, 170, 0, 255])
                }),
                new AlgorithmicColorRamp({
                  fromColor: new Color([255, 170, 0, 255]),
                  toColor: new Color([255, 255, 0, 255])
                })
              ]
            });


            const stretchRenderer = new RasterStretchRenderer({
              colorRamp: colorRamp,
              type: "raster-stretch",
              bandIds: [0], // 使用第一个波段
              stretchType: "min-max", // 最小值-最大值拉伸
              statistics: [[0, 255]], // 波段的最小值和最大值
              gamma: [1] // Gamma 值
            });


              let layer = new ImageryTileLayer({
                url: "http://localhost/data/red.tif",
                renderer: stretchRenderer
              })


              const map = new Map({
                layers: [layer]
              });


              const view = new MapView({
                  map: map,
                  container: "viewDiv"
              });

              function updateImageTileLayerUrl(newUrl) {
                // 移除旧图层
                map.remove(layer);

                // 创建新图层
                let newLayer = new ImageryTileLayer({
                  url: newUrl,
                  renderer: stretchRenderer
                });

                // 将新图层添加到地图
                map.add(newLayer);
              }

              let btn = document.getElementById("click")
              btn.onclick = () => {
                updateImageTileLayerUrl("http://127.0.0.1:5500/static/fanred.tif")
              }
      })

     

    </script>

  </head>
  <body>
    <div id="viewDiv"></div>
    <button id="click">change</button>
  </body>
</html>

在这里插入图片描述

2. 发布单景栅格数据的 ImageServer

需要通过代码层面,替换服务下的同名栅格数据源,同样,渲染也需要通过前端renderer控制。可以参考:
https://blog.csdn.net/suntongxue100/article/details/130303795?spm=1011.2415.3001.5331

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2321939.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java集合框架深度剖析:从数据结构到实战应用

引言 Java集合框架是Java开发中的核心组件之一&#xff0c;其设计目标是提供高性能、高复用性的数据容器。无论是数据处理、缓存设计还是高并发场景&#xff0c;集合框架都扮演着关键角色。本文将从List、Map、Set三大核心接口出发&#xff0c;深入剖析其主流实现类&#xff0…

涅槃上岸,入陕进军,复试全程流程开启!

复试决胜局&#xff0c;整装待发&#xff0c;上岸西电&#xff01; 线下复试注意事项、全流程、录取后西安旅游提前告知&#xff01; 过两天考研复试笔试、机试&#xff08;如果有&#xff09;、面试就要开始了&#xff0c;我们需要准备很多东西&#xff0c;学长从以下几个方面…

msyql--基本操作之运维篇

检查 root 用户的权限 查看该用户针对这个数据库的权限 -- 如果在终端连接mysql时需要 mysql -u root -p -- 查看用户权限 SELECT user, host FROM mysql.user WHERE user root;可以看的出来root有他的访问权限&#xff0c;如过没有localhost或者% 说明没有访问权限 添加…

es6 fetch

对比XHR &#x1f6e0;️ fetch 所有配置项 fetch(url, {// 核心配置 method: GET, // HTTP 方法: GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONSheaders: { // 请求头&#xff08;支持 Headers 对象或普通对象&#xff09;Content-Type: applicati…

智能汽车图像及视频处理方案,支持视频星轨拍摄能力

美摄科技作为智能汽车图像及视频处理领域的先行者&#xff0c;正以革新性的技术引领着行业的未来发展。美摄科技智能汽车图像及视频处理方案&#xff0c;一个集高效性、智能化、画质增强于一体的创新解决方案&#xff0c;旨在重塑智能汽车图像画质的新标准&#xff0c;并支持前…

C盘急救实录:从爆红到畅快

极速救援通道&#xff08;懒人专享&#xff09; 老规矩&#xff0c;先上王炸方案&#xff01;”小番茄C盘清理器”直达链接&#xff1a;https://cclean-cdn.xkbrowser.com/cleanmaster/FanQieClean_13046_st.exe 这个神器有三绝&#xff1a; 智能扫描引擎&#xff1a;能识别23…

UART转APB模块ModelSim仿真

一、简介 之前介绍过一个UART转AHB模块&#xff0c;这个代码的框架有个好处&#xff0c;就是FPGA内总线接口比较容易修改成其他总线接口。下图是UART转AHB模块中子模块uart_ahb_mst的框图&#xff0c;主要有三个状态机&#xff1a; &#xff08;1&#xff09; UART_RX_FSM将接收…

Cesium 自定义路径导航材质

cesium 自定义路径导航纹理图片随便更换&#xff0c;UI 提供设计图片即可达到效果&#xff1b; 打开小马的weix 关注下 搜索“技术链” 回复关键词《《路径》》获取原始代码&#xff1b; 拿到就能用轻松解决&#xff01;帮忙点个关注吧&#xff01;

【江协科技STM32】BKP备寄存器RTC实时时钟(学习笔记)

BKP备寄存器 BKP简介 BKP&#xff08;Backup Registers&#xff09;备份寄存器BKP可用于存储用户应用程序数据。当VDD&#xff08;2.0~3.6V&#xff09;电源被切断&#xff0c;他们仍然由VBAT&#xff08;1.8~3.6V&#xff09;维持供电。当系统在待机模式下被唤醒&#xff0…

卷积神经网络 - 参数学习

本文我们通过两个简化的例子&#xff0c;展示如何从前向传播、损失计算&#xff0c;到反向传播推导梯度&#xff0c;再到参数更新&#xff0c;完整地描述卷积层的参数学习过程。 一、例子一 我们构造一个非常简单的卷积神经网络&#xff0c;其结构仅包含一个卷积层和一个输出…

亮数据爬取API爬取亚马逊电商平台实战教程

前言 在当今数据驱动的商业环境中&#xff0c;企业需要快速、精准地获取互联网上的公开数据以支持市场分析、竞品调研和用户行为研究。然而&#xff0c;传统的手动网页爬取方式面临着诸多挑战&#xff1a;IP封锁、验证码干扰、网站结构频繁变更&#xff0c;以及高昂的运维成本…

[CLS] Token 在 ViT(Vision Transformer)中的作用与实现

[CLS] Token 在 ViT&#xff08;Vision Transformer&#xff09;中的作用与实现 1. 什么是 [CLS] Token&#xff1f; [CLS]&#xff08;classification token&#xff09;是Transformer模型中一个可学习的嵌入向量&#xff0c;最初在 BERT&#xff08;Bidirectional Encoder …

基于网启PXE服务器的批量定制系统平台

项目概述 1.需求 公司新购了一批服务器和台式机&#xff0c;需要为台式机和服务器安装系统&#xff0c;一部分需要安装国产OpenEuler&#xff0c;一部分要求安装CentOS 7.9&#xff0c;同时也要满足定制化需求&#xff0c;即按要求分区安装相应软件。 2.使用开源软件 &…

在本地Windows机器加载大模型并生成内容

本篇演示在本地机器下载和加载大模型并获取AI产生的内容。简单起见&#xff0c;使用的大模型是Qwen2.5-0.5B-Instruct&#xff0c;整个模型的所有文件不到1G。 Qwen2.5-0.5B-Instruct 是阿里巴巴云 QWen 团队基于 Transformer 架构开发的轻量级指令调优语言模型&#xff0c;专…

热门面试题第14天|Leetcode 513找树左下角的值 112 113 路径总和 105 106 从中序与后序遍历序列构造二叉树 (及其扩展形式)以一敌二

找树左下角的值 本题递归偏难&#xff0c;反而迭代简单属于模板题&#xff0c; 两种方法掌握一下 题目链接/文章讲解/视频讲解&#xff1a;https://programmercarl.com/0513.%E6%89%BE%E6%A0%91%E5%B7%A6%E4%B8%8B%E8%A7%92%E7%9A%84%E5%80%BC.html 我们来分析一下题目&#…

【计算机网络】-计算机网络期末复习题复习资料

一、计算机网络体系结构&#xff08;800字&#xff09; 1. OSI参考模型 七层结构&#xff1a;物理层→数据链路层→网络层→传输层→会话层→表示层→应用层 各层核心功能&#xff1a; 物理层&#xff1a;比特流传输&#xff08;如RJ45、光纤接口&#xff09; 数据链路层&…

批归一化(Batch Normalization)与层归一化(Layer Normalization)的区别与联系

文章目录 一、Batch normalization 理论与应用1. 理论解释2. 数值例子 二、Layer normalization 理论与应用1. 理论解释2. 数值例子 三、Layer Normalization 和 Batch Normalization 的区别四、《Transformers without Normalization》笔记 一、Batch normalization 理论与应用…

12届蓝桥杯—货物摆放

货物摆放 题目描述 小蓝有一个超大的仓库&#xff0c;可以摆放很多货物。 现在&#xff0c;小蓝有 nn 箱货物要摆放在仓库&#xff0c;每箱货物都是规则的正方体。小蓝规定了长、宽、高三个互相垂直的方向&#xff0c;每箱货物的边都必须严格平行于长、宽、高。 小蓝希望所…

c++进阶--哈希表的实现

大家好&#xff0c;今天我们来学习ubordered_set和unordered_map的底层哈希表。 目录 哈希表实现 1. 哈希概念 1.1 直接定址法 1.2 哈希冲突 1.3 负载因⼦ 1.4 将关键字转为整数 1.5 哈希函数 下面我们介绍几种哈希函数&#xff1a;1.5.1 除法散列法/除留余数法 1.…

颠覆传统:SaaS 品牌如何通过 SEO 策略引爆市场!

SaaS 商业模式提供了令人难以置信的可扩展性和盈利能力——但前提是与正确的营销增长策略相结合。 SaaS 品牌知道&#xff0c;托管基于云的应用程序的成本会随着用户量的增加而降低&#xff0c;因此必须专注于订阅者的快速增长&#xff0c;以保持竞争力并降低成本。 许多 CMO…