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

这篇具有很好参考价值的文章主要介绍了Vue+Openlayers+proj4实现坐标系转换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

场景

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

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

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

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

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

EPSG:900913等效于EPSG:3857

可在EPSG官网进行验证

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

如果从其他坐标系的系统中获取坐标数据,则需要在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

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

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);

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

此时需要借助于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')

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

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

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

一种是访问如下

Home -- Spatial Reference

点击search,比如这里搜索2334

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

 

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

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

 

就能获取到结果

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

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

 

另一种是从epsg网站查询

EPSG.io: Coordinate Systems Worldwide

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

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

4、以上示例完整代码文章来源地址https://www.toymoban.com/news/detail-426572.html

​
<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>

​

到了这里,关于Vue+Openlayers+proj4实现坐标系转换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 世界坐标系、相机坐标系和图像坐标系的转换

    之前只是停留在会用的阶段,一直没去读懂计算的原理,今天通读了大佬的文章,写的言简意赅,感谢感谢~~特此记录一下,仅用作个人笔记 贴链接,十分感谢~ https://blog.csdn.net/weixin_44278406/article/details/112986651 https://blog.csdn.net/guyuealian/article/details/104184551 将三维物体转换成照

    2023年04月15日
    浏览(48)
  • 相机坐标系、像素坐标系转换

    相机内参矩阵是相机的重要参数之一,它描述了相机光学系统的内部性质,例如焦距、光学中心和图像畸变等信息。在计算机视觉和图形学中,相机内参矩阵通常用于将图像坐标系中的像素坐标转换为相机坐标系中的三维坐标,或者将相机坐标系中的三维坐标投影到图像坐标

    2024年02月13日
    浏览(32)
  • Java+GeoTools实现WKT数据根据EPSG编码进行坐标系转换

    Java+GeoTools(开源的Java GIS工具包)快速入门-实现读取shp文件并显示: Java+GeoTools(开源的Java GIS工具包)快速入门-实现读取shp文件并显示_霸道流氓气质的博客-CSDN博客 在上面实现Java中集成Geotools之后,需求是将WKT数据转换成其他坐标系的WKT。 比如说将EPSG:4524的坐标系转换成EPSG:2

    2023年04月25日
    浏览(28)
  • 柱坐标系与直角坐标系的转换

    1.柱坐标系转化为直角坐标系:柱坐标系(r,φ,z)与直角坐标系(x,y,z)的转换关系 x=rcosφ y=rsinφ z=z 2.直角坐标系转化为柱坐标系:直角坐标系(x,y,z)与柱坐标系(r,φ,z)的转换关系: r= φ= z=z

    2024年02月11日
    浏览(31)
  • 图像坐标系如何转换到相机坐标系。

    问题描述:图像坐标系如何转换到相机坐标系。 问题解答: 图像坐标系的定义: 图像坐标系是用于描述数字图像中像素位置的坐标系。图像坐标系的原点是相机光轴与成像平面的交点。X轴沿着成像平面的水平方向正向,Y轴沿着成像平面的垂直方向正向。 相机坐标系的定义

    2024年02月04日
    浏览(38)
  • Cesium:CGCS2000坐标系的xyz坐标转换成WGS84坐标系的经纬高度,再转换到笛卡尔坐标系的xyz坐标

    作者:CSDN @ _乐多_ 本文将介绍使用 Vue 、cesium、proj4 框架,实现将CGCS2000坐标系的xyz坐标转换成WGS84坐标系的经纬高度,再将WGS84坐标系的经纬高度转换到笛卡尔坐标系的xyz坐标的代码。并将输入和输出使用 Vue 前端框架展示了出来。代码即插即用。 网页效果如下图所示, 一、

    2024年02月06日
    浏览(33)
  • ROS中RVIZ坐标系及TF坐标系转换

    RVIZ坐标系 X轴--红色 Y轴---绿色 Z轴---蓝色 YAW(偏航角)绕Z轴旋转 PITCH(俯仰角)绕Y轴旋转 ROLL(滚转角)绕X轴旋转 符合右手坐标系原则 利用TF进行坐标系转换 采用以下指令进行转换,其中frame_id child_frame_id 为两个坐标系的名称,通过以下命令可以确定两者的关系 通过在RVIZ中更改“

    2024年02月11日
    浏览(24)
  • (02)Cartographer源码无死角解析-(80) 核心要点→local坐标系、子图坐标系、切片坐标系、地图坐标系等相转换与联系

    讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解(02)Cartographer源码无死角解析-链接如下: (02)Cartographer源码无死角解析- (00)目录_最新无死角讲解:https://blog.csdn.net/weixin_43013761/article/details/127350885   文末正下方中心提供了本人 联系方式, 点击本人照片

    2024年02月16日
    浏览(32)
  • WGS84地球坐标系,GCJ02火星坐标系,BD09百度坐标系简介与转换 资料收集

    高性能、低功耗 GPS、北斗双模定位模块 STM32 GPS定位_为了维护世界和平_的博客-CSDN博客 秉火多功能调试助手上位机开源!共六款软件,学到你吐... , - 电脑上位机 - 野火电子论坛 - Powered by Discuz! https://www.firebbs.cn/forum.php?mod=viewthreadtid=11985fromuid=64 地图坐标系之间的转换(百度

    2024年02月11日
    浏览(30)
  • Unity坐标系的转换—世界坐标转为UI坐标

    直接调用WorldToAnchorPos,传入对应的参数返回UGUI坐标

    2024年04月13日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包