Vue+Openlayers+proj4实现坐标系转换

news2024/9/24 2:24:50

场景

Vue中使用Openlayers加载Geoserver发布的TileWMS:

Vue中使用Openlayers加载Geoserver发布的TileWMS_霸道流氓气质的博客-CSDN博客

在上面的基础上实现不同坐标系坐标数据的转换。

Openlayers中默认的坐标系是EPSG:900913

 

EPSG:900913等效于EPSG:3857

可在EPSG官网进行验证

 

如果从其他坐标系的系统中获取坐标数据,则需要在Openlayers中进行坐标系转换。

注:

博客:
https://blog.csdn.net/badao_liumang_qizhi 

实现

1、 openlayers中实现EPSG:4326和EPSG:3857的转换

openlayer默认支持3857和4326坐标相互转换

引入模块

import {transform} from 'ol/proj'

实现转换

    //EPSG:90013转换成EPSG:4326
    var coorTo4326 = transform([987777.93778,213834.81024], 'EPSG:3857', 'EPSG:4326')
    console.log("EPSG:90013转换成EPSG:4326为");
    console.log(coorTo4326);
    var coorTo3857 = transform(coorTo4326, 'EPSG:4326', 'EPSG:3857')
    console.log("EPSG:4326转换成EPSG:3857为");
    console.log(coorTo3857);

取一个EPSG:900913/EPSG:3857的坐标。实现与EPSG:4326的互转。

转换结果可在epsg.io中对比验证

Transform coordinates - GPS online converter

 

2、但是如果需要其它坐标系的转换,比如要转换成2334,直接使用则会报错

    //EPSG:90013转换成EPSG:4326
    var coorTo4326 = transform([987777.93778,213834.81024], 'EPSG:3857', 'EPSG:4326')
    console.log("EPSG:90013转换成EPSG:4326为");
    console.log(coorTo4326);
    var coorTo3857 = transform(coorTo4326, 'EPSG:4326', 'EPSG:3857')
    console.log("EPSG:4326转换成EPSG:3857为");
    console.log(coorTo3857);
    //无法用ol直接转换
    // var coorTo2334 = transform(coorTo4326, 'EPSG:4326', 'EPSG:2334')
    // console.log("EPSG:4326转换成EPSG:2334为");
    // console.log(coorTo2334);

 

此时需要借助于proj4.js

3、Vue中使用proj4实现坐标转换

proj4

PROJ是一种通用的坐标转换软件,可以将地理空间坐标从一种坐标参考系(CRS)转换为另一种坐标参考系。

这包括制图投影和大地测量转换。PROJ是在X/MIT开源许可下发布的

PROJ包括命令行应用程序,可以方便地从文本文件或直接从用户输入转换坐标。除了命令行实用程序之外,

PROJ还公开了一个应用程序编程接口,简称API。该API允许开发人员在自己的软件中使用PROJ的功能,

而不必自己实现类似的功能。

PROJ最初纯粹是一个制图应用程序,允许用户使用许多不同的制图投影将大地坐标转换为投影坐标。

多年来,随着需求变得越来越明显,对基准转换的支持也慢慢地在PROJ中发挥作用。

如今,PROJ支持一百多种不同的地图投影,可以使用除了最模糊的大地测量技术之外的所有基准之间的坐标转换。

proj

PROJ — PROJ 9.2.0 documentation

GitHub - OSGeo/PROJ: PROJ - Cartographic Projections and Coordinate Transformations Library

proj4js

proj4 - npm

Download – Proj4js

Proj4js是一个JavaScript库,用于将点坐标从一种坐标系转换为另一种坐标系,

包括基准转换。最初是PROJ(当时称为PROJ.4)和GCTCP C (Archive)的一个端口,它是MetaCRS项目组的一部分。

npm安装proj4

npm install proj4 --save

引入模块

import proj4 from 'proj4'
import {register} from 'ol/proj/proj4';

注册和使用

    proj4.defs("EPSG:2334","+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ");
    register(proj4);
    var coorTo2334 = transform([987777.93778,213834.81024], 'EPSG:3857', 'EPSG:2334')

 

注意这里的投影字符串如何获取。

proj4的epsg的投影字符串获取:

一种是访问如下

Home -- Spatial Reference

点击search,比如这里搜索2334

 

 

点击搜索结果进去之后选择Proj4

 

就能获取到结果

https://spatialreference.org/ref/epsg/2334/proj4/

 

另一种是从epsg网站查询

EPSG.io: Coordinate Systems Worldwide

搜索2334并点进去,拉到下面

4、以上示例完整代码

​
<template>
  <div id="map" class="map"></div>
</template>

<script>
//导入基本模块
import "ol/ol.css";
import Map from "ol/Map";
import View from "ol/View";
//导入相关模块
import { Tile as TileLayer } from 'ol/layer'
import { TileWMS } from 'ol/source'
//引入ol坐标转换模块
import {transform} from 'ol/proj'
//引入proj4
import proj4 from 'proj4'
import {register} from 'ol/proj/proj4';

export default {
  name: "olMapTileWMSTrans",
  data() {
    return {
    };
  },
  mounted() {
    this.initMap();
    //EPSG:90013转换成EPSG:4326
    var coorTo4326 = transform([987777.93778,213834.81024], 'EPSG:3857', 'EPSG:4326')
    console.log("EPSG:90013转换成EPSG:4326为");
    console.log(coorTo4326);
    var coorTo3857 = transform(coorTo4326, 'EPSG:4326', 'EPSG:3857')
    console.log("EPSG:4326转换成EPSG:3857为");
    console.log(coorTo3857);
    //无法用ol直接转换
    // var coorTo2334 = transform(coorTo4326, 'EPSG:4326', 'EPSG:2334')
    // console.log("EPSG:4326转换成EPSG:2334为");
    // console.log(coorTo2334);
    //需借助于proj4
    proj4.defs("EPSG:2334","+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ");
    register(proj4);
    var coorTo2334 = transform([987777.93778,213834.81024], 'EPSG:3857', 'EPSG:2334')
    console.log("EPSG:3857 转换成EPSG:2334为");
    console.log(coorTo2334);
  },
  methods: {
    initMap() {
      var image = new TileLayer({
        source: new TileWMS({
          //不能设置为0,否则地图不展示。
          ratio: 1,
          url: "http://localhost:8000/geoserver/nyc/wms",
          params: {
            LAYERS: "nyc:nyc_roads",
            STYLES: "",
            VERSION: "1.1.1",
            FORMAT: "image/png",
          },
          serverType: "geoserver",
        }),
      });

      this.map = new Map({
        //地图容器ID
        target: "map",
        //引入地图
        layers: [image],
        view: new View({
          //地图中心点
          center: [987777.93778, 213834.81024],
          zoom: 12,
          // minZoom:1, // 地图缩放最小级别
        }),
      });
    },
  },
};
</script>

<style scoped>
.map {
  width: 100%;
  height: 800px;
}
</style>

​

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

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

相关文章

kafka集群压测与优化

影响kafka集群性能的因数有多个&#xff0c;网络带宽、cpu、内存、磁盘读写速度、副本数、分区数、broker数量、内存缓存等因素都会影响kafka集群的性能 1.优化kafka集群配置 server.properties配置文件优化 num.network.threads4 num.io.threads4 socket.send.buffer.bytes…

提升供应链运营效率:企业如何规范化供应商关系?

在现代企业运营中&#xff0c;采购和供应链管理已成为至关重要的环节。企业尤其需要管理好自身供应商&#xff0c;才能够获得优质的原材料和零部件&#xff0c;并确保生产和销售的正常进行。本文将从供应商的筛选、双方合作的流程管理、团队建设等方面&#xff0c;为大家介绍如…

腾讯云COS+SpringBOot实现文件上传下载功能

文章目录 第一步&#xff1a;在.yml文件中配置对应秘钥内容第二步&#xff1a;完成COSConfig类编写第三步&#xff1a;编写Controller类Bug提示&#xff1a; 最近一直在做一个项目&#xff0c;需要支持视频&#xff0c;音频&#xff0c;图片的上传&#xff0c;前面介绍的都是把…

新一代边缘计算盒子,英码科技边缘计算盒子SY-E160

SY-E160 是英码科技推出的新一代智能工作站&#xff0c;内部集成了 4 核强悍处理器 A551.5 GHz&#xff0c;其内置的算力核拥有 16Tops 超强算力。SY-E160 工作站采用低功耗技术设计&#xff0c;支持 宽温度环境工作&#xff0c;可以灵活部署于各种 AI 场景中。 SY-E160 深元 A…

在SaleSmartly管理客户互动的 3 个好处

交互是关系的小组成部分。随着时间的推移&#xff0c;互动的质量决定了人们对这段关系的投入程度&#xff0c;同样的动态也适用于客户和品牌。在跨境电商业务中&#xff0c;每一次互动都是建立信任或失望的机会。 对于许多公司来说&#xff0c;客户互动的主要领域是客户服务功能…

机器学习 - Seaborn 练习, 常见功能查阅

机器学习记录 Seaborn Seaborn 是一个基于 Matplotlib 的 Python 可视化库,提供了一些内置数据集以及进行统计数据可视化和模型现场的 API。 sns.get_dataset_names() 方法会返回一个字符串列表,包含所有内置数据集的名称 练习 Seaborn 依赖Matplotlib, NumPy, SciPy, Pan…

python装不上库的心得

如果在相同的环境下别人能安装上&#xff0c;但你安装不上&#xff0c;可以考虑下面几点 目录 1 升级pip 2 有的包不用刻意装&#xff0c;它跟着别的就一起装了 3 缺少外部依赖 4 有的库用conda安装要方便一点 5 导入名不一定是包名 6 编译安装 7 安装包时&…

西门子S7-1500与FANUC机器人进行EtherNetIP通信的具体方法示例

西门子S7-1500与FANUC机器人进行EtherNetIP通信的具体方法示例 具体方法可参考以下内容: 以下示例中TIA博途的版本为V17,本例中PLC做主站,机器人做从站 一、 西门子PLC一侧的组态设置和编程 首先,我们需要到下载所需的EtherNetIP通信库文件,大家可自行百度获取或者从以下链…

Kafka的核心概念

一、消息&#xff08;Record&#xff09; 消息是 Kafka 中最基本的数据单元。消息由一串字节构成&#xff0c;其中主要由 key 和 value 构成&#xff0c;key 和 value 也都是 byte 数组。消息的真正有效负载是 value 部分的数据。为了提高网络和存储的利用率&#xff0c;生产者…

TCP流量控制与拥塞控制

什么是流量控制 一条TCP连接的每一侧主机都为该连接设置了接收缓存。当该TCP连接接收到正确的、有序的报文段&#xff0c;就会将数据放入接收缓存。相关联的应用会从缓存中读取数据。 如果发送者发送数据过快、过多&#xff0c;而接收方的应用程序从缓冲区读取的速度较慢&…

【C++】二叉搜索树经典OJ题目

文章目录 根据二叉树创建字符串二叉树的层序遍历二叉树的层序遍历II二叉树的最近公共祖先二叉搜索树与双向链表从前序与中序遍历序列构造二叉树从中序与后序遍历序列构造二叉树二叉树的前序遍历(非递归)二叉树的中序遍历(非递归)二叉树的后序遍历(非递归) 根据二叉树创建字符串…

捷报连连丨小匠物联SILA第六届“智光杯”荣获两项跨界大奖

2023年4月26日&#xff0c;SILA第六届“智光杯”跨界奖项名单公布。 喜讯传来&#xff0c;小匠物联荣获SILA第六届“智光杯”跨界奖项-全屋智能及商用系统优秀新供应链奖、智能照明新锐优秀新供应链奖。 “智光杯”“智光杯”由上海浦东智能照明联合会&#xff08;SILA&#xf…

【校招VIP】简历上项目名称看起来不重复,是安全相关项目,但是为什么简历通过率还是低?

在简历指导的直播里面&#xff0c;我看了一个新的项目。 这是个信息安全方向的一个项目&#xff0c;之前倒是没有看过。 所以项目的介绍本身是看不出它的重复度的。 但是一往下看 12345的要点&#xff0c;就发现这又是一个烂大街的。 项目本身的逻辑是没有写的。 然后又是所…

【Linux脚本篇】shell变量的使用

目录 &#x1f341;shell变量替换 &#x1f341;定义变量 &#x1f341;shell变量运算 &#x1f342;整数运算 &#x1f342;小数运算 &#x1f990;博客主页&#xff1a;大虾好吃吗的博客 &#x1f990;专栏地址&#xff1a;Linux从入门到精通 shell变量替换 ${变量#匹配规则}…

设计模式 -- 访问者模式

前言 月是一轮明镜,晶莹剔透,代表着一张白纸(啥也不懂) 央是一片海洋,海乃百川,代表着一块海绵(吸纳万物) 泽是一柄利剑,千锤百炼,代表着千百锤炼(输入输出) 月央泽,学习的一种过程,从白纸->吸收各种知识->不断输入输出变成自己的内容 希望大家一起坚持这个过程,也同…

SpringCloud入门实战(七)-Hystrix服务降级

&#x1f4dd; 学技术、更要掌握学习的方法&#xff0c;一起学习&#xff0c;让进步发生 &#x1f469;&#x1f3fb; 作者&#xff1a;一只IT攻城狮 。 &#x1f490;学习建议&#xff1a;1、养成习惯&#xff0c;学习java的任何一个技术&#xff0c;都可以先去官网先看看&…

三翼鸟:传统品牌只盯局部,智慧品牌谋划全局

“当今企业之间的竞争&#xff0c;不是产品之间的竞争&#xff0c;而是商业模式之间的竞争。”很多人都听过现代管理学之父德鲁克的这句话&#xff0c;但又有多少人真正理解了它&#xff1f; 以当下的语境去看&#xff0c;这里其实就是“自利”和“共荣”的区别。前者&#xf…

多臂老虎机问题

1.问题简介 多臂老虎机问题可以被看作简化版的强化学习问题&#xff0c;算是最简单的“和环境交互中的学习”的一种形式&#xff0c;不存在状态信息&#xff0c;只有动作和奖励。多臂老虎机中的探索与利用&#xff08;exploration vs. exploitation&#xff09;问题一直以来都…

Zabbix“专家坐诊”第189期问答汇总

问题一 Q&#xff1a;您好&#xff0c;为什么在shell脚本中&#xff0c;不写mysql命令的绝对路径&#xff0c;zabbix获取不到输出的值&#xff1f; A&#xff1a;mysql默认命令是针对root等有权限才能直接使用的&#xff0c;其他用户要使用要指定命令路径。 Q&#xff1a;zab…

SLB负载均衡haproxy的安装及使用

1.介绍 HAProxy是什么 HAProxy是一个免费的负载均衡软件&#xff0c;可以运行于大部分主流的Linux操作系统上。 HAProxy提供了L4(TCP)和L7(HTTP)两种负载均衡能力&#xff0c;具备丰富的功能。HAProxy的社区非常活跃&#xff0c;版本更新快速&#xff08;最新稳定版1.7.2于2…