Proj4.js使用初步入门
一、基础知识
在正式使用Proj4.js时,我们首先需要了解下有关各种投影的参数定义
(例如:椭球长半轴、扁率、原点纬线、中央经线、两条标准纬线、东偏移量、北偏移量和单位等),具体参数可参考下面这个网站上的介绍。
https://epsg.io/
http://spatialreference.org
(注:该网站是一个记录和使用空间参考系统的网站,可以很直接的找到各种投影的参数定义,推荐优先使用该网站)
二、Proj4js引用
前端添加Proj4js有三种方式:
-
从http://trac.osgeo.org/proj4js/wiki/Download下载,获取产品包中dist/proj4.js文件。
-
引入CDN上的Proj4js:https://cdnjs.com/libraries/proj4js
-
本地有Node.js,可以直接使用
npm install proj4
进行安装。
这里用的Node.js的安装方法
npm install proj4 --save
三、基础使用
proj4.js中预定义了三个坐标系,其他的坐标系则需要自己定义了,下面以从WGS84(4326)到Web墨卡托(3857)的转换为例
function Wgs84ToMector2(lat,lng) {
const proj4 = require('proj4');
return proj4(proj4('EPSG:4326'), proj4('EPSG:3857'), [lng, lat])
}
四、小技巧
假设有这么一个需求,在保存geojson数据时,需要将不同图层的坐标系统一为同一个坐标系,方便后续对geojson数据统一管理
那么,我们就可以考虑如下操作ヾ(◍°∇°◍)ノ゙
async function toWgs84(wkid, geojson) {
if (wkid != 4326) {
let proj;
if (wkid == 102100 || wkid == 3857) {
proj = 'EPSG:3857'
} else {
// 获取wkid对应坐标系的proj
proj = await fetch(`https://epsg.io/${wkid}.proj4`).then(response => response.text())
if (!proj) return;
}
const proj4 = require('proj4/dist/proj4');
geoJSON.features.forEach((feature) => {
let { type, coordinates } = feature.geometry;
if (type == 'Polygon') {
feature.geometry.coordinates = coordinates.map(e1 => e1.map(e2 => proj4(proj, 'EPSG:4326', e2)))
} else if (type == 'LineString') {
feature.geometry.coordinates = coordinates.map(e => proj4(proj, 'EPSG:4326', e))
} else if (type == 'Point') {
feature.geometry.coordinates = proj4(proj, 'EPSG:4326', coordinates);
}
})
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
2021-12-14 Python实现控制台输出文本进度条
2021-12-14 Python | 一人之下漫画爬取并保存为pdf文件
2021-12-14 ArcGIS 栅格ArcScan矢量化使用不了栅格清理问题