关于WEB端实现电子海图之Openlayers加载切片

news2025/7/18 14:34:17

记笔记,免忘记!

关于WEB端实现电子海图研究之思路

关于WEB端实现电子海图研究二GeoServer

GeoServer完成shp文件切矢量图后,我们需要加载GeoServer切片在web上展示。

vector-tiles-tutorial官方示例

以下示例使用openLayers来加载

D:\software\GeoServer 2.13.1\data_dir\www目录下新建一个文件夹vectortiles新建文件如下图,我为了方便自己使用EPSG编码命名的文件

示例正确显示
正确的地图显示

 

 EPSG:900913下代码:

以下只能900913。如果使用EPSG:4326显示不了。(因为这里我用下面的代码使用EPSG:4326,一直不显示,查了N个页面都不行,费时2天才知道只能EPSG:900913)

<!DOCTYPE html>
<html>

<head>
    <title>Vector tiles</title>
    <script src="./ol3/ol.js"></script>
    <link rel="stylesheet" href="./ol3/ol.css">
    <style>
        html,
        body {
            font-family: sans-serif;
            width: 100%;
            height: 100%;
            overflow: hidden;
        }

        .map {
            height: 100%;
            width: 100%;
            overflow: hidden;
        }
    </style>
</head>

<body>
    <h3>Mapbox Protobuf - vector tiles</h3>
    <div id="map" class="map"></div>
    <script>
        var style_simple = new ol.style.Style({
            fill: new ol.style.Fill({
                color: '#ADD8E6'
            }),
            stroke: new ol.style.Stroke({
                color: '#88eee',
                width: 1
            })
        });

        function simpleStyle(feature) {
            return style_simple;
        }

        var layer = 'cite:COALNE';
        var projection_epsg_no = '900913';
        var map = new ol.Map({
            target: 'map',
            view: new ol.View({
                // center: [0, 0], 
                //如果是世界全部地图可以用0,0,否则需要给个点,不然会显示不了
                center:[12348169, 889341],
                zoom: 6
            }),
            layers: [new ol.layer.VectorTile({
                style: simpleStyle,
                source: new ol.source.VectorTile({
                    tilePixelRatio: 1,
                    tileGrid: ol.tilegrid.createXYZ({
                        maxZoom: 19
                    }),
                    format: new ol.format.MVT(),
                    url: '/geoserver/gwc/service/tms/1.0.0/' + layer +
                        '@EPSG%3A' + projection_epsg_no + '@pbf/{z}/{x}/{-y}.pbf'
                })
            })]
        });
    </script>
</body>

</html>

 页面代码完了后,访问下面链接地址:如果本地直接通过文件打开到浏览器会出现跨域问题(跨域问题后续再写)缩小后,和正确显示的一致

http://localhost:2048/geoserver/www/vectortiles/900913.html

 

EPSG:4326下代码:(js部分,其它参见上面EPSG:900913代码)

        var map = new ol.Map({
            target: 'map',
            view: new ol.View({
                center: [110.478515, 6.811523],
                zoom: 7,
                projection: 'EPSG:4326',
            }),
            layers: [new ol.layer.VectorTile({
                style: simpleStyle,
                projection: "EPSG:4326",
                source: new ol.source.VectorTile({
                    tilePixelRatio: 1, 
                    tileGrid: ol.tilegrid.createXYZ({
                        extent: ol.proj.get('EPSG:4326').getExtent(),
                        maxZoom: 19
                    }),
                    format: new ol.format.MVT(),
                    // 矢量切片服务地址
                    tileUrlFunction: function (tileCoord, pixelRatio, proj) {
                        console.log(
                            tileCoord, pixelRatio, proj,
                        )
                    },
                })
            })]
        });

代码跑后截图如下,说明epgs是4326的

tileUrlFunction函数尝试一:(失败)

tileUrlFunction: function (tileCoord) {
   console.log(tileCoord,(Math.pow(2, tileCoord[0] - 1) - 1 - tileCoord[2]))
   const url =`/geoserver/gwc/service/tms/1.0.0/cite:COALNE@EPSG%3A4326@pbf/${(tileCoord[0] - 1)}/${tileCoord[1]}/${(Math.pow(2, tileCoord[0] - 1) - 1 - tileCoord[2])}.pbf`;
   return url;
}

 截图如下

 然后去\data_dir\gwc\cite_COALNE\EPSG_4326_06中进入子文件夹查看切片,发现确实没有上面截图对应的数字,所以说明y是错误的

tileUrlFunction函数尝试二:(失败)

tileUrlFunction: function (tileCoord) {
   console.log(tileCoord)
   const url =`/geoserver/gwc/service/tms/1.0.0/cite:COALNE@EPSG%3A4326@pbf/${(tileCoord[0] - 1)}/${tileCoord[1]}/${-tileCoord[2]}.pbf`;
   return url;
}

 截图如下:和正确的图对比后,发现下部分跑去上部分了,说明Y值还是不对。

tileUrlFunction函数尝试三:(成功)

tileUrlFunction: function (tileCoord) {
   console.log(tileCoord,(Math.pow(2, tileCoord[0] - 1) + tileCoord[2]))
   const url =`/geoserver/gwc/service/tms/1.0.0/cite:COALNE@EPSG%3A4326@pbf/${(tileCoord[0] - 1)}/${tileCoord[1]}/${(Math.pow(2, tileCoord[0] - 1) + tileCoord[2])}.pbf`;
   return url;
}

截图如下:缩小后对比后和正确显示的图保持一致,说明成功 

报错:

同时在研究中,发现设置 projection: "EPSG:4326" 后会报错如下图:

如果你的报这个错,可能ol版本太高了(都是泪。最开始我用的最新版本7以上的。一直不行)

 

易错点:图层加载不出来的原因大多是因为格网方案的参数设置和坐标系统不匹配导致。

先记录到这,后续有其它再补充!

其它可参考:

Geoserver发布矢量切片服务及使用openlayer调用展示

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

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

相关文章

status_breakpoint谷歌浏览器如何解决?

众所周知&#xff0c;谷歌浏览器是一款非常好用的浏览器软件&#xff0c;但是在使用过程中难免会遇到一些问题&#xff0c;比如status_breakpoint错误代码该怎么办&#xff1f;下面就来看看小编整理的status_breakpoint谷歌浏览器相关内容。 一些可能导致谷歌浏览器status_brea…

【数据结构】堆及堆排序的实现(C语言)

目录 前言 初始化 增删 由一个数组构建堆 堆排序 TOPK问题 前言 我们都知道二叉树是度为 2 的树&#xff0c;如果在一个完全二叉树里&#xff0c;所有的子结点都小于他的父结点&#xff0c;那么它就是堆。这样的堆被称之为大堆&#xff0c;反之则称为小堆。 虽然我们画出…

光学测量精度极限—光谱共焦位移传感器的六大行业应用

科技的不断发展&#xff0c;在半导体&#xff0c;高精密制造领域中都是采用微米及以上的加工工艺&#xff0c;并与之匹配高精度测量技术进行品质控制。光谱共焦的测量原理是一束白光经过镜头将不同的波长聚焦到光轴上&#xff0c;色散地形成一条彩虹状分布带&#xff0c;照射到…

第五章:LockSupport与线程中断

阿里蚂蚁金服面试题什么是线程中断机制&#xff1f;中断相关的 API 方法面试题1、如果停止正在运行的一个线程&#xff1f;2 当前线程的中断标识为true&#xff0c;是不是线程就立刻停止&#xff1f;案例一案例二3、静态方法Thread.interrupted()&#xff0c;谈谈你的理解总结L…

国外服务器采取数据备份和灾难恢复的重要性

在国外服务器的使用中&#xff0c;数据的安全性和完整性是任何组织都不能忽视的问题。丢失数据可能会对业务造成毁灭性的影响&#xff0c;因此必须有一个完善的数据备份和灾难恢复计划。 什么是备份? 备份将数据复制到辅助形式&#xff0c;如存档文件&#xff0c;在灾难发生时…

网络安全:SQL盲注概述

目录 盲SQL注入 什么是盲SQL注入&#xff1f; 通过触发条件响应来利用盲SQL注入 通过触发 SQL 错误来诱导条件响应 通过触发时间延迟来利用盲 SQL 注入 使用带外 &#xff08;OAST&#xff09; 技术利用盲 SQL 注入 如何防止SQL注入 二阶 SQL 注入 特定于数据库的因素…

4.每天不同时间段通过微信发消息提醒女友

目录 sentence_good_dinner.txt README.MD say_to_lady.py sentence_good_dream.txt sentence_good_lunch.txt sentence_good_dinner.txt 公主&#xff01;记得吃晚饭。 下班了&#xff0c;记得吃晚饭哦。 记得多吃点饭 你吃晚饭吧&#xff1f; 宝宝吃晚饭了吗&#xff0…

《从零开始:机器学习的数学原理和算法实践》chap1

《从零开始&#xff1a;机器学习的数学原理和算法实践》chap1 学习笔记 文章目录《从零开始&#xff1a;机器学习的数学原理和算法实践》chap1 学习笔记chap1 补基础&#xff1a;不怕学不懂微积分1.1 深入理解导数的本质直观理解复合函数求导1.2 理解多元函数偏导1.3 理解微积分…

超纯水系统中硼离子去除技术原理

硼在元素周期表里面是五号元素&#xff0c;是IIIA族中唯一 一个非金属元素。它是制造P型半导体的主要 掺杂剂&#xff0c;基材中硼的含量直接影响半导体的极限电压&#xff0c;因此要严格控制基材中硼的含量。在半导体 制造的过程中&#xff0c;水、气、化直接跟产品接触&…

b站黑马JavaScript的Ajax案例代码——图书管理案例

目录 目标效果&#xff1a; 重点原理&#xff1a; 1.js数组操作中push方法 2.jquery中append方法 3.js数组操作中join方法 4.jQuery中attr方法 5.jQuery中trim方法 代码部分&#xff1a; 1. 图书管理案例.html(js部分全是重点&#xff0c;html部分用于看结构) 2.jquery.js…

软考-系统架构师-计算机与网络基础知识-计算机网络基础知识

文章目录1.网络概述1.1开放系统互连参考模型1.2OSI协议集2.计算机网络2.1广域网局域网和城域网2.2网络互联2.3Internet3.网络管理与网络安全3.1网络管理3.2计算机网络安全3.3VPN4.网络工程5.存储及负载均衡技术5.1RAID技术5.2网络存储技术注1.网络概述 计算机网络通信按距离&a…

论文阅读笔记 | 三维目标检测——PointPillars算法

如有错误&#xff0c;恳请指出。 文章目录1. 背景2. 网络结构3. 实验结果paper&#xff1a;《PointPillars: Fast Encoders for Object Detection from Point Clouds》 1. 背景 PointPillars的出发点同样与SECOND一样&#xff0c;希望改进VoxelNet所使用3d卷积计算量太大推理…

Docker 安装 mysql5.7

docker拉取镜像命令 docker pull mysql:5.7 docker安装MySQL命令 docker run -p 3306:3306 --name mysql -v /mydata/mysql/log:/var/log/mysql -v /mydata/mysql/data:/var/lib/mysql -v /mydata/mysql/conf:/etc/mysql -e MYSQL_ROOT_PASSWORDroot -d mysql:5.7 修改MySQL的…

SpringBoot2.7.4整合Redis

目录 一、添加maven依赖 二、添加配置项 三、新增配置类 四、编辑实体类 五、编写接口 六、编写业务层 1.编写service层 2.编写service实现层 七、测试接口 一、添加maven依赖 <dependency><groupId>org.springframework.boot</groupId><artif…

@PostConstruct详解

1、 Servlet中增加了两个影响Servlet生命周期的注解&#xff0c;PostConstruct和PreDestroy&#xff0c;这两个注解被用来修饰一个非静态的void&#xff08;&#xff09;方法。写法有如下两种方式&#xff1a; PostConstruct public void someMethod(){} 或者 public PostConst…

第六章:Java内存模型之JMM

有关JMM的面试题&#xff1f;计算机硬件存储体系Java内存模型Java Memory Model概念原则能干什么JMM三大特性原子性可见性有序性JMM规范下&#xff0c;多线程对变量的读写过程JMM规范下&#xff0c;多线程先行发生原则之happens-beforehappens-before 先行发生原则的概念Happen…

CentOS中yum install命令如何找到安装包的下载地址

我们通常用的yum install命令是怎么找到我们想要的下载地址的&#xff0c;这里简单做一下分析 首先&#xff0c;搜索所有/etc/yum.repos.d下所有repo 在每个repo中都有一个baseurl&#xff0c;这里以docker-ce.repo下载containerd.io 的rpm包为例 docker-ce的部分repo为 [do…

怎么去除视频上的文字?一篇教你:视频上的文字水印怎么去除

原创视频更能够吸引人&#xff0c;但是毕竟热点有限&#xff0c;想要随时保持活跃度和吸引力就必须借助更多的视频素材来留住粉丝。但是很多视频素材是有水印、文字、LOGO或者一些图像的&#xff0c;那怎么去除视频上的文字呢&#xff1f;小编一篇简单文章教你怎么去除视频上的…

GEO振弦式钢筋计的组装

&#xff08;1&#xff09;按钢筋直径选配相应的钢筋计&#xff0c;如果规格不符合&#xff0c;应选择尽量接近于结构钢筋直径 的钢筋计&#xff0c;例如&#xff1a;钢筋直径为 35mm&#xff0c;可使用 NZR-36 或 NZR-32 的钢筋计&#xff0c;此时仪器的最小 读数应进行修…

Quarkus 集成 mailer 使用 easyexcel 发送表格邮件

前言 在quarkus 项目开发中,需要实现一个把用户数据写入到excel 表格中,然后发送邮件给到对应的用户邮箱上,在查找了Quarkus 官方文档后发现,Quarkus 对于发送邮箱的服务是天然支持的. 官方文档: https://cn.quarkus.io/guides/mailer 环境配置 首先发送邮箱服务,那么就需要有…