互联网地图坐标系问题

转:https://codeload.github.com/wandergis/coordtransform/legacy.zip/master

coordtransform 坐标转换

一个提供了百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换的工具模块另外还提供了python版本的代码https://github.com/wandergis/coordTransform_py

 支持node、浏览器(AMD方式和直接引用方式)

GitHub地址:https://github.com/wandergis/coordtransform

npm地址:https://www.npmjs.com/package/coordtransform

项目主页:http://wandergis.github.io/coordtransform/

 为什么写这个模块

随着移动互联网的兴起,几乎每一个app都会去收集用户位置,如果恰好你在处理与地理定位相关的代码,并且不了解地理坐标系的话,肯定要被我大天朝各种坐标系搞晕。写这个模块的目的也是因为项目中app获取的坐标是百度sdk获取的,在做webgis可视化的时候各种偏,各种坐标不对,当时的心情就是下面这个图片。

 当前互联网地图的坐标系现状

 地球坐标 (WGS84)

国际标准,从 GPS 设备中取出的数据的坐标系

国际地图提供商使用的坐标系

 火星坐标 (GCJ-02)也叫国测局坐标系

中国标准,从国行移动设备中定位获取的坐标数据使用这个坐标系

国家规定: 国内出版的各种地图系统(包括电子形式),必须至少采用GCJ-02对地理位置进行首次加密。

 百度坐标 (BD-09)

百度标准,百度 SDK,百度地图,Geocoding 使用

(本来就乱了,百度又在火星坐标上来个二次加密)

 开发过程需要注意的事

从设备获取经纬度(GPS)坐标

    如果使用的是百度sdk那么可以获得百度坐标(bd09)或者火星坐标(GCJ02),默认是bd09

    如果使用的是ios的原生定位库,那么获得的坐标是WGS84

    如果使用的是高德sdk,那么获取的坐标是GCJ02

互联网在线地图使用的坐标系

火星坐标系:

        iOS 地图(其实是高德)

        Gogole地图

        搜搜、阿里云、高德地图

百度坐标系:

        当然只有百度地图

WGS84坐标系:

        国际标准,谷歌国外地图、osm地图等国外的地图一般都是这个

 举个栗子

笔者所在的公司app使用的是百度的sdk,需要对定位坐标做web可视化效果,百度地图提供的js api满足不了需求,选用leaflet来做可视化,这里要说到百度地图了,它使用的坐标系和切图的原点都不一致,并且其加偏还是非线性的,因此无法利用常用的加载方法去加载,放弃使用它的底图,选用了符合标准的高德底图,高德底图使用的是国测局坐标也就是GCJ02坐标系,如果简单的将app获取的经纬度叠加上去,就有可能你本来在百度大厦的位置就显示在西二旗地铁站了甚至更远,因此需要将bd09转成gcj02坐标系,这个时候这个库就有了用武之地,对点批量转换再加载到底图上,就可以让点显示在本应该出现的位置。

另外如果你拿到了一些WGS84的坐标,想加载到各种底图上就可以根据这个库在底图坐标系和你的数据坐标系之间进行转换。希望对大家有用吧。

 安装(install)

npm install coordtransform

 示例用法(Example&Usage)

1 NodeJs用法

//国测局坐标(火星坐标,比如高德地图在用),百度坐标,wgs84坐标(谷歌国外以及绝大部分国外在线地图使用的坐标)

var coordtransform=require('coordtransform');

//百度经纬度坐标转国测局坐标

var bd09togcj02=coordtransform.bd09togcj02(116.404, 39.915);

//国测局坐标转百度经纬度坐标

var gcj02tobd09=coordtransform.gcj02tobd09(116.404, 39.915);

//wgs84转国测局坐标

var wgs84togcj02=coordtransform.wgs84togcj02(116.404, 39.915);

//国测局坐标转wgs84坐标

var gcj02towgs84=coordtransform.gcj02towgs84(116.404, 39.915);

console.log(bd09togcj02);

console.log(gcj02tobd09);

console.log(wgs84togcj02);

console.log(gcj02towgs84);

//result

//bd09togcj02:  [ 116.39762729119315, 39.90865673957631 ]

//gcj02tobd09:  [ 116.41036949371029, 39.92133699351021 ]

//wgs84togcj02:  [ 116.41024449916938, 39.91640428150164 ]

//gcj02towgs84:  [ 116.39775550083061, 39.91359571849836 ]

2 浏览器用法 直接引用目录内的index.js,会有一个coordtransform的全局对象暴露出来,也支持用AMD加载器加载

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>coordTransform</title>

</head>

<body>

<h1>请按F12打开控制台查看结果</h1>

<script src="index.js"></script>

<script>

    //国测局坐标(火星坐标,比如高德地图在用),百度坐标,wgs84坐标(谷歌国外以及绝大部分国外在线地图使用的坐标)

    //百度经纬度坐标转国测局坐标

    var bd09togcj02 = coordtransform.bd09togcj02(116.404, 39.915);

    //国测局坐标转百度经纬度坐标

    var gcj02tobd09 = coordtransform.gcj02tobd09(116.404, 39.915);

    //wgs84转国测局坐标

    var wgs84togcj02 = coordtransform.wgs84togcj02(116.404, 39.915);

    //国测局坐标转wgs84坐标

    var gcj02towgs84 = coordtransform.gcj02towgs84(116.404, 39.915);

    console.log(bd09togcj02);

    console.log(gcj02tobd09);

    console.log(wgs84togcj02);

    console.log(gcj02towgs84);

    //result

    //bd09togcj02:  [ 116.39762729119315, 39.90865673957631 ]

    //gcj02tobd09:  [ 116.41036949371029, 39.92133699351021 ]

    //wgs84togcj02:  [ 116.41024449916938, 39.91640428150164 ]

    //gcj02towgs84:  [ 116.39775550083061, 39.91359571849836 ]

</script>

</body>

</html>

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,904评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,581评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,527评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,463评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,546评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,572评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,582评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,330评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,776评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,087评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,257评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,923评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,571评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,192评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,436评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,145评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容