proj4js 坐标转换
一、概述
Proj4js 是一个开源的 JavaScript 库,用于将点坐标从一个坐标系转换到另一个坐标系,包括基准转换。
git代码库地址:https://github.com/proj4js/proj4js
另一个坐标系在线查询和坐标转换地址:EPSG.io: Coordinate Systems Worldwide
在PostGIS中有一个表 spatial_ref_sys ,可以查询所有的坐标系信息。
在Geoserver中也有所有坐标系的信息。在ArcGIS中也有。
以下介绍在node中使用proj4,以及在Cesium三维开发中使用。
二、node中使用Proj4
1、引入库,npm install proj4
2、引用库,const proj4 = require('proj4')
3、转换方法,proj4(fromProjection, toProjection, [x, y])
4、坐标系举例说明
EPSG:4549 CGCS2000 / 3-degree Gauss-Kruger CM 120E
2000大地坐标系,3度分带,高斯克吕格投影,中央经线120。
如果坐标是加了带号的,就用4528。具体看需要转换的数据坐标。加了带号的X坐标前面两位就是带号。
东西向X坐标不加带号6位数(坐标向东偏移,了500km,因此中央子午线的X坐标就是500000,加了带号就是365000000),加了带号8位数。南北方向7位数
EPSG:4528 CGCS2000 / 3-degree Gauss-Kruger zone 40
3度带中央经线=3乘以带号
5、代码,在下面的代码中实现将点坐标从CGCS2000坐标系EPSG:4549转换为WGS84坐标系
函数convert111_和convert111结果相同。因为proj4函数可以传入坐标系的wkt,也可以传入proj.4。
/** @Author: 苹果园dog* @Date: 2021-07-01 11:48:07* @LastEditTime: 2021-07-01 17:44:56* @LastEditors: Please set LastEditors* @Description: In User Settings Edit* @FilePath: */ const proj4 = require('proj4'); function convert111_(x, y) {const fromProjection = `PROJCS["CGCS2000 / 3-degree Gauss-Kruger CM 120E",GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",120],PARAMETER["scale_factor",1],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AUTHORITY["EPSG","4549"]]`;const toProjection = `GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG", "6326"]], PRIMEM["Greenwich", 0, AUTHORITY["EPSG", "8901"]],UNIT["degree", 0.0174532925199433, AUTHORITY["EPSG", "9122"]], AUTHORITY["EPSG", "4326"]]`;const newCoordinates = proj4(fromProjection, toProjection, [x, y]);return newCoordinates; }function convert111(x, y) {const fromProjection = `+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs`;const toProjection = `+proj=longlat +datum=WGS84 +no_defs`;const newCoordinates = proj4(fromProjection, toProjection, [x, y]);return newCoordinates; }module.exports = {convert111: convert111 }
6、坐标转换测试
三、Cesium中使用Proj4
由于Cesium三维球默认是WGS84的,要想加载一些CGCS2000坐标系的一些矢量文件。
比如geojson,kml等,需要在加载数据的时候动态转换坐标。
以下介绍加载2000坐标系的Geojson方法。
在下面的代码中实现将点坐标从CGCS2000坐标系EPSG:4524转换为WGS84坐标系。
/** @Author: 苹果园dog* @Date: 2021-04-12 14:42:01* @LastEditTime: 2021-04-12 14:46:41* @LastEditors: Please set LastEditors* @Description: In User Settings Edit* @FilePath: */ import { default as proj4 } from "proj4";Cesium.GeoJsonDataSource.crsNames["urn:ogc:def:crs:EPSG::4524" ] = Cesium.GeoJsonDataSource.crsNames["EPSG:4524"] = function(coordinates) {const fromProj = `PROJCS["CGCS2000 / 3-degree Gauss-Kruger zone 36", GEOGCS["China Geodetic Coordinate System 2000", DATUM["China 2000", SPHEROID["CGCS2000", 6378137.0, 298.257222101, AUTHORITY["EPSG","1024"]], AUTHORITY["EPSG","1043"]], PRIMEM["Greenwich", 0.0, AUTHORITY["EPSG","8901"]], UNIT["degree", 0.017453292519943295], AXIS["Geodetic longitude", EAST], AXIS["Geodetic latitude", NORTH], AUTHORITY["EPSG","4490"]], PROJECTION["Transverse_Mercator", AUTHORITY["EPSG","9807"]], PARAMETER["central_meridian", 108.0], PARAMETER["latitude_of_origin", 0.0], PARAMETER["scale_factor", 1.0], PARAMETER["false_easting", 36500000.0], PARAMETER["false_northing", 0.0], UNIT["m", 1.0], AXIS["Easting", EAST], AXIS["Northing", NORTH], AUTHORITY["EPSG","4524"]]`;const toProj = `GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG", "6326"]], PRIMEM["Greenwich", 0, AUTHORITY["EPSG", "8901"]],UNIT["degree", 0.0174532925199433, AUTHORITY["EPSG", "9122"]], AUTHORITY["EPSG", "4326"]]`;const x = coordinates[0];const y = coordinates[1];const newCoordinates = proj4(fromProj, toProj, [x, y]);return Cesium.Cartesian3.fromDegrees(newCoordinates[0], newCoordinates[1], 0); };
相关:坐标转换接口http:// https://blog.csdn.net/u014556081/article/details/121242989
Cesium矩阵变换https://blog.csdn.net/u014556081/article/details/118341391
proj4js 坐标转换相关推荐
- Openlayers使用Proj4js坐标转换cgcs2000分带(zone)投影的问题
问题源于使用4528投影按照官网示例定义view时地图一片空白,于是开始了对Proj4js和投影转换的抽丝剥茧,这里记录下了解的知识和最后的结论. 官网示例和Proj4js的使用 OL示例见wms-i ...
- OpenLayers学习笔记2——坐标转换问题
參照别人的加入marker的demo来改造时.发现不管如何更改经纬度,都是停留在同一个位置.过了一两天突然想起可能是坐标參考的问题.尝试搜了一下.果然是这个问题. 问题是这样子的: WMTS中地图的坐 ...
- 分享proj4js中经纬度和兰伯特投影的转换代码
兰伯特投影简介参见百科搜索: 兰伯特投影在气象数据的处理中,是比较常用的投影坐标系,根据不同区域.范围进行投影. proj4是专业的坐标转换类库,有各种语言版本的,C++,java,js,python ...
- proj4经纬度bl转换xy_在Web客户端中基于Proj4实现坐标转换
当鼠标滑过地图,我们会扫一眼鼠标的地理位置,至少要能看到经纬度,好确认当前的范围和地物是否处在正常的位置.这对于C/S应用来说,是最为常见的辅助功能,即使是在B/S中,这似乎也不是难事,比如谷歌地图等 ...
- Proj4.js wgs84与cgcs2000坐标转换示例 中央经线计算
1.js源码:https://github.com/proj4js/proj4js 2.引用包中dist/proj4.js文件 3.//根据自己的坐标系参数定义 proj4字符串 v ...
- arcgis 投影变换与坐标转换研究
arcgis 投影变换与坐标转换研究 1 ArcGIS中的投影方法 投影的方法可以使带某种坐标信息数据源进行向另一坐标系统做转换,并对源数据中的X和Y值进行修改.我们生产实践中一个典型的例子是利用该方 ...
- 火星坐标、百度坐标、WGS84坐标转换代码(JS、python版)
火星坐标.百度坐标.WGS84坐标转换代码(JS.python版) 一.JS版本源码 github:https://github.com/wandergis/coordTransform /*** C ...
- 墨卡托坐标转换成经纬度
为什么80%的码农都做不了架构师?>>> /*** 墨卡托坐标转换成经纬度* @param {Object} mx* @param {Object} my*/ function ...
- iOS之百度导航SDK的坐标转换
1 百度导航 iOS SDK的坐标转换代码示例,有需要的朋友可以参考下. 2 3 4 5 //导航坐标--------------> 地图坐标 6 7 8 //假设从导航sdk取到了一个点坐标是 ...
- PIE SDK Geometry的坐标转换
1. 基于SpatialReference对象的坐标转换 1.1 示例简介 Geometry类是所有几何形体对象的父类,它是一个抽象类,IGeometry接口定义了所有的几何对象都有的方法和属性. 下 ...
最新文章
- 你的声音作为一种“武器”:人类战争中声学活动
- reactNative 打包那些事儿
- 文献学习(part10)--元自步学习
- 系统安全防护之UNIX下***检测方法
- Git如何忽略已经上传的文件或文件夹?
- 用计算机弹奏体面6,抖音能用计算器按出音乐有哪些?计算器乐谱分享
- Python 操作 Azure Blob Storage
- python 熊猫钓鱼_Python数据结构与算法之使用队列解决小猫钓鱼问题
- 详解:Hive的存储格式与对比
- android python .xlsx_python读写xlsx
- VsCode+PicGO+腾讯云实现快速上传markdown图床
- 使用ffmpeg将h264视频文件转Mp4格式保存
- python模拟登录京东网页
- 小米原装系统镜像列表
- 看到大量状态SYN_RCVD的连接,可能发生的原因是什么?
- SpringSecurity前后端分离02(授权)
- 揭秘:古代五大美男的悲惨结局
- MySQL借助Excel快速区间分段统计思路(客单价分布 IOS账单分月)
- 机器学习--Iris数据集的Fisher线性分类以及数据可视化技术的学习
- 如何查看自己的数据库