zoukankan      html  css  js  c++  java
  • 自定义坐标系的转换方式

    最近在做有关地图的项目,然鹅,客户提供的位置坐标经过他们自己公司进行自定义转换,而不是传统意义上的CJCS2000(又叫WGS84/EPSG:3857/墨卡托坐标系/真实坐标系)或GCJ02(国测局标准),对于这种坐标系,无法从leaflet中的crs进行转换(leaflet能做到什么地步,请看https://leafletjs.com/reference-1.5.0.html#crs),用户又需要对坐标进行转换,转换成他们的坐标系,所以,网上有一个js插件“proj4.js”。

    在它的官网上讲的是:“用于将坐标从一个坐标系转换为另一个坐标系的JavaScript库,包括基准转换

    意思就是,任何定义或自定义的坐标系,我都能转换,只要你有“proj参数”,这里强调的proj参数就是转换的依据。

    这里展示一个EPSG:4326转换为EPSG:3857,EPSG:3857的proj如下

    let proj_object = {
        "name": "EPSG:3857",
        "name_ref": "WGS_1984_Web_Mercator_Auxiliary_Sphere",
        "name_ref_cn": "WGS84_墨卡托",
        "proj": "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs",
        "code": "EPSG3857"
    }
    
    //注册EPSG3857坐标系,用于转换
    proj4.defs([ [proj_object.name, proj_object.proj] ])
    
    //将EPSG:4326坐标转换为EPSG:3857
    proj4("EPSG:4326",proj_object.name, [x,y])
    //xy分别是经度纬度,返回结果为一个坐标数组

    如果有两种不同的proj参数,name就可以进行坐标之间的相互转换

    var secondProjection = "+proj=longlat +datum=WGS84 +no_defs";
    
    var firstProjection = '+proj=utm +zone=50 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs';
    
    var coordinates = proj4( firstProjection, secondProjection,[x,y])
    //此时的coordinates就是转换后的坐标

    引入方式

    1. 外部直接引用proj4.js本地文件
    2. 引入cdn外部链接
    3. 控制台,npm install proj4 引入

    具体关于proj4的详细用法请转移http://proj4js.org/

  • 相关阅读:
    获取当前日期的年、月、日
    去掉后端返回过来的 % 且保留 2 位小数
    uni-app 长按复制
    rabbit——部署备份
    Mysql——查询语句备份
    Redis——常用命令
    luajit——编译运行lua
    Mac——无法退出移动硬盘解决办法
    Java——Function接口的使用
    Java——在运行mvn install或mvn package时跳过Test
  • 原文地址:https://www.cnblogs.com/lucio110/p/11242218.html
Copyright © 2011-2022 走看看