专栏名称: 锐多宝
遥感技术教程、资讯与前沿论文
目录
相关文章推荐
51好读  ›  专栏  ›  锐多宝

ArcGIS 加载吉林一号地图的探索

锐多宝  · 公众号  ·  · 2024-09-13 18:39

正文

请到「今天看啥」查看全文


ArcGIS 不支持吉林一号在线地图服务,有两种方面的原因 🤔

第一,ArcGIS 桌面软件不支持webp图片格式的加载显示,刚好吉林一号瓦片格式就是webp;

第二,ArcGIS 桌面软件不支持瓦片原点坐标为左下角的瓦片地图服务。

吉林一号瓦片格式

# 1-问题描述

# 1.1-ArcGIS不支持webp瓦片

ESRI的产品定义跟苹果刀法精准,现在原生支持webp瓦片已经在ArcGIS Pro的功能建议清单中了。今年8月份,已经是【In Product Plan】状态了,说明已经着手编写代码了,该功能建议由 [xingchenc] 提出。

(https://community.esri.com/t5/user/viewprofilepage/user-id/567991)
最新动态

Add WMTS (Webp format tile) support for ArcGIS Pro

⇲https://community.esri.com/t5/arcgis-pro-ideas/add-wmts-webp-format-tile-support-for-arcgis-pro/idi-p/1306431

ArcGIS Pro Labels (功能建议状态说明)

⇲https://community.esri.com/t5/arcgis-pro-documents/arcgis-pro-labels/ta-p/1000519

# 1.2-ArcGIS不支持瓦片Y轴翻转

吉林一号在线地图服务的原点坐标不是标准的左上角(谷歌标准),而是左下角(TMS标准),这导致了Y轴方向的瓦片索引需要翻转;对于QGIS软件,可以采用-y的方式解决、奥维地图则用y!的地址格式。

Google XYZ Tile VS OGC TMS

谷歌XYZ:Z表示缩放层级,Z=zoom;XY的原点在左上角,X从左向右,Y从上向下。

TMS:开源产品的标准,Z的定义与谷歌相同;XY的原点在左下角,X从左向右,Y从下向上。

🧐引用自瓦片(Tile)行列号计算方法

⇲https://xcsf.github.io/blog/2020/06/12/%E7%93%A6%E7%89%87Tile%E8%A1%8C%E5%88%97%E5%8F%B7%E8%AE%A1%E7%AE%97%E6%96%B9%E6%B3%95/

# 2-解决思路

# 2.1-webp转png

编写webp图片格式的动态转换程序,实现不同图片格式的动态转换中间代理,将.webp实时转换成jpg/png可以解决ArcGIS桌面软件不兼容的问题。采用api接口的形式,瓦片地图链接改成https://webp2jgg.cc/api?url=https://api.jl1mall.com/getMap/{z}/{x}/{y}。

这样请求的顺序是先下载对应的瓦片,接着由本地程序转换图片格式,返回ArcGIS适配的瓦片格式如PNG。

# 2.2-瓦片Y轴翻转

标准的XYZ瓦片地图服务采用左上角为原点(0,0)的谷歌标准,吉林一号则是从左下角开始索引编号的,这意味着X轴没有改变,只是将Y轴翻转了;那么我们请求吉林一号的z=1,x=0,y=0的时候,应该下载翻转之后的索引编号,设ymax的最大值是2^1 - 1=1,此时请求的y=0,那么翻转的-y=ymax - y=1;此时我们编写一段程序代码将请求改成z=1,x=0,y=1,即可解决瓦片Y轴翻转的问题了。

🌏设谷歌瓦片索引为XYZ,TMS瓦片索引为X-YZ,其中有

·>>>  -Y = 2^Z - 1 - Y

# 3-实现步骤

# 3.1-开发环境

+ NVM

nvm 允许您通过命令行快速安装和使用不同版本的 node。

⇲https://nvm.p6p.net/download.html

查看安装版本

nvm -v

  • NodeJS

下载最新稳定版本的nodejs

nvm install lts
nvm use lts

如果上述命令行执行报错,试着切换至国内镜像

nvm npm_mirror https://npmmirror.com/mirrors/npm/
nvm node_mirror https://npmmirror.com/mirrors/node/

查看安装版本

node -v

# 3.2-程序编写

+ NPM

npm 是nodejs的插件管理程序,首先 npm install 项目引用的插件集,新建空文件夹用于存放项目文件,安装项目所需要的库。
npm install express sharp axios
其中 sharp是图片格式转换的插件、axios是提供api接口的插件。
接下来,构建我们的项目配置文件
npm init
最后,新建JavaScript文件,命名为  server.js
  • server.js

我们编写程序有1个流程、4个步骤,首先解决程序的输入形式,ArcGIS 请求XYZ瓦片地图时,会发送 xyz 三个数值参数到服务器中,那么输入的参数就是 z, x, y了;
const { z, x, y } = req.params;
接着,我们需要对瓦片Y轴翻转,即 -y = ymax -y, yamx = 2^z -1
const yInverted = (Math.pow(2, z) - 1) - y;
然后,对获取的瓦片进行图片格式转换,使用 sharp 将 WebP 图像转换为 PNG
const pngImage = await sharp(webpImage).png().toBuffer();
最后,返回url链接
⇲http://127.0.0.1:3000/convert/{z}/{x}/{y}

# 4-成果分享

# 4.1-本地部署

上述你们可以不用经历的,下载打包好的压缩包【jilin12ArcGIS.zip】,解压之后双击【启动服务(自动部署).bat】即可,如果窗口闪退了,再次双击打开。

jilin12ArcGIS.zip

⇲https://vip.123pan.cn/1831579846/lreept/Data/China/jilin12ArcGIS.zip

# 4.2-使用说明

+ 1)双击打开【启动服务(手动部署).bat】或【启动服务(自动部署).bat】,二者的区别在于手动部署可以选择安装目录,空间占用不到50MB.
+ 2)等待窗口显示,将ArcGIS对应的lyrx拖放至ArcGIS Pro中,即可访问啦
+ 3)期间不要关闭黑色窗口哦 🫠(这是我最后的建议)

本地部署测试视频参见本次推送 2/2 🧐

求点赞、转发、收藏!爱你 😘








请到「今天看啥」查看全文