Gps坐标转换成gcj 02坐标的js代码

由于最近在开发相关地图应用,所以不可必免的就会遇到GPS坐标(WGS-84)转换成国家测绘局标准要求的GCJ-02(所谓的火星坐标)

关于WGS-84GCJ-02可以参照这篇文章,坐标转换、偏移.

下面的代码摘直网上,特收藏下

//World Geodetic System ==> Mars Geodetic System
//translate from https://on4wp7.codeplex.com/SourceControl/changeset/view/21483#353936
var WGS84_to_GCJ02 = function() {}

WGS84_to_GCJ02.prototype.a = 6378245.0;
WGS84_to_GCJ02.prototype.ee = 0.00669342162296594323;
WGS84_to_GCJ02.prototype.transform = function(wgLat, wgLon) {

    if (this.outOfChina(wgLat, wgLon)) {
        return [wgLat, wgLon];
    }

    dLat = this.transformLat(wgLon - 105.0, wgLat - 35.0);
    dLon = this.transformLon(wgLon - 105.0, wgLat - 35.0);
    radLat = wgLat / 180.0 * Math.PI;
    magic = Math.sin(radLat);
    magic = 1 - this.ee * magic * magic;
    sqrtMagic = Math.sqrt(magic);
    dLat = (dLat * 180.0) / ((this.a * (1 - this.ee)) / (magic * sqrtMagic) * Math.PI);
    dLon = (dLon * 180.0) / (this.a / sqrtMagic * Math.cos(radLat) * Math.PI);
    mgLat = wgLat + dLat;
    mgLon = wgLon + dLon;

    return [mgLat, mgLon];

};

WGS84_to_GCJ02.prototype.outOfChina = function(lat, lon) {

    if (lon < 72.004 || lon > 137.8347)
        return true;
    if (lat < 0.8293 || lat > 55.8271)
        return true;

    return false;

};

WGS84_to_GCJ02.prototype.transformLat = function(x, y) {

    var ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.sqrt(Math.abs(x));
    ret += (20.0 * Math.sin(6.0 * x * Math.PI) + 20.0 * Math.sin(2.0 * x * Math.PI)) * 2.0 / 3.0;
    ret += (20.0 * Math.sin(y * Math.PI) + 40.0 * Math.sin(y / 3.0 * Math.PI)) * 2.0 / 3.0;
    ret += (160.0 * Math.sin(y / 12.0 * Math.PI) + 320 * Math.sin(y * Math.PI / 30.0)) * 2.0 / 3.0;

    return ret;

};

WGS84_to_GCJ02.prototype.transformLon = function(x, y) {

    var ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.sqrt(Math.abs(x));
    ret += (20.0 * Math.sin(6.0 * x * Math.PI) + 20.0 * Math.sin(2.0 * x * Math.PI)) * 2.0 / 3.0;
    ret += (20.0 * Math.sin(x * Math.PI) + 40.0 * Math.sin(x / 3.0 * Math.PI)) * 2.0 / 3.0;
    ret += (150.0 * Math.sin(x / 12.0 * Math.PI) + 300.0 * Math.sin(x / 30.0 * Math.PI)) * 2.0 / 3.0;

    return ret;

};

使用例子如下:

new WGS84_to_GCJ02().transform(31.283814, 121.502191)
// -> [31.28181188043995, 121.50661885748906] (该坐标是上海同济大学)

最后附上一个在线转换接口,在线转换坐标接口

时间: 2024-10-01 12:45:52

Gps坐标转换成gcj 02坐标的js代码的相关文章

通过百度地图获取公交线路的站点坐标的js代码_javascript技巧

最近做百度地图的模拟数据,需要获取某条公交线路沿途站点的坐标信息,貌似百度没有现成的API,因此做了一个模拟页面,工具而已,IE6/7/8不支持 复制代码 代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>获取公交站点坐标</title> <style type="text/css"> html,b

wgp-急求将GPS测得的经纬度(WGS84)转换成xy坐标的java代码

问题描述 急求将GPS测得的经纬度(WGS84)转换成xy坐标的java代码 急求将GPS测得的经纬度(WGS84)转换成xy坐标的java代码 解决方案 经纬度其实就是XY坐标 只是不知你说的XY坐标指的是什么? 百度地图?google地图? 不同地图坐标有差别 再说也不用转换,直接给经纬度就行了 //Double latitude = 22.560034 * 1E6;

一个屏幕坐标和地图坐标转换的js代码

js|转换 一个屏幕坐标和地图坐标转换的js代码     在开发webgis的时候 在客户端 经常要处理 屏幕坐标和地图坐标的转换关系,特别是现在 web2.0时代,要求ie 交互和展现更加丰富,对坐标转换要求就更多了.因此在项目中写了个 通用的 转换 javascript代码.在实际项目 得到了较好的应用具体代码如下 (需要prototype.js的支持) /**共有三个类 *whpoint 点*whrect 矩形*whcoordchange坐标转换类*/ whpoint=Class.crea

一个简单闪动的hot小图标的js源代码

 具体如下: <div id="net_nav" style="position:relative;"><img id="hot" src="hot.jpg"  style="position:absolute; top:-4px; left:293px; z-index:999999;" /></div> 这里是写html的代码,把一个小hot图标显示出来. 下面是一个

api-google中关于已知多个点的坐标与这多个点与未知点的不精确的距离,求未知点的坐标的API?

问题描述 google中关于已知多个点的坐标与这多个点与未知点的不精确的距离,求未知点的坐标的API? C语言的API,google中关于已知多个点的坐标与这多个点与未知点的不精确的距离,求未知点的坐标的API? 解决方案 所谓距离就是一个圆的方程,用两个圆的方程就能定位坐标(方程的解)

ExtJS 4.2 教程-02:bootstrap.js 工作方式

转载自起飞网,原文地址:http://www.qeefee.com/extjs-course-2-bootstrap-js ExtJS 4.2 教程-01:Hello ExtJS ExtJS 4.2 教程-02:bootstrap.js 工作方式 ExtJS 4.2 教程-03:使用Ext.define自定义类 ExtJS 4.2 教程-04:数据模型 ExtJS 4.2 教程-05:客户端代理(proxy) ExtJS 4.2 教程-06:服务器代理(proxy) ExtJS 4.2 教程-0

图片-opengl 有关深度值,顶点坐标的z值有奇怪问题

问题描述 opengl 有关深度值,顶点坐标的z值有奇怪问题 我碰到了一个奇怪的问题:画了一个正方体, 然后读取正中间一行像素的对应片元的z坐标值, 为啥先减小后变大又减小,这个有具体的值,第一列对应x,第三列对应z 解决方案 Z值表示与相机的距离,按你这个情况,z越大表示与相机越近,没问题啊 解决方案二: 我这个是45度放置的,应该是中间最小两边变大,而且应该对称, 现在是先减小一点点,然后一直在变大,最后面又减小了, 解决方案三: 你好,我目前在尝试做一个立方体,但是法线应该有问题,只有一个

用SendMessage实现,在当前鼠标坐标的X+10 Y+10的位置实现单击

问题描述 用SendMessage实现,在当前鼠标坐标的X+10Y+10的位置实现单击比如鼠标坐标(102,205)在(112,215)的位置用消息SendMessageWM_CLICK实现单击效果请具体些解答下谢谢 解决方案 解决方案二:用GetCursorPos的到鼠标坐标,用SendMessage发消息.解决方案三:用GetCursorPos得到鼠标坐标,用SendMessage发消息.解决方案四:///<summary>///鼠标左键点击///</summary>priva

jsp-JSP中编写JS代码过程中,调用了一个JSP表达式,发现一个问题,麻烦各位大神解答

问题描述 JSP中编写JS代码过程中,调用了一个JSP表达式,发现一个问题,麻烦各位大神解答 背景: 楼主使用Myelipse新建了一个Web项目,在编写一个JSP文件的时候遇到一个问题,首先是使用了img,并且写了一个事件,代码如下: <imgclass="poke" src="poke/back.jpg" title="hit" id="play_id_3" onClick="change_pic()&qu