给大家分享下坐标转换的代码的JS和Python两个版本的源码【转】

/** * Created by Wandergis on 2015/7/8. * 提供了百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换 */

/**
 * 百度坐标系 (BD-09) 与 火星坐标系 (GCJ-02)的转换
 * 即 百度 转 谷歌、高德
 * @param bd_lon
 * @param bd_lat
 * @returns {*[]}
 */
function bd09togcj02(bd_lon, bd_lat) {
    var x_pi = 3.14159265358979324 * 3000.0 / 180.0;
    var x = bd_lon - 0.0065;
    var y = bd_lat - 0.006;
    var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi);
    var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi);
    var gg_lng = z * Math.cos(theta);
    var gg_lat = z * Math.sin(theta);
    return [gg_lng, gg_lat]
}

/**
 * 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换
 * 即谷歌、高德 转 百度
 * @param lng
 * @param lat
 * @returns {*[]}
 */
function gcj02tobd09(lng, lat) {
    var z = Math.sqrt(lng * lng + lat * lat) + 0.00002 * Math.sin(lat * x_PI);
    var theta = Math.atan2(lat, lng) + 0.000003 * Math.cos(lng * x_PI);
    var bd_lng = z * Math.cos(theta) + 0.0065;
    var bd_lat = z * Math.sin(theta) + 0.006;
    return [bd_lng, bd_lat]
}

/**
 * WGS84转GCj02
 * @param lng
 * @param lat
 * @returns {*[]}
 */
function wgs84togcj02(lng, lat) {
    if (out_of_china(lng, lat)) {
        return [lng, lat]
    }
    else {
        var dlat = transformlat(lng - 105.0, lat - 35.0);
        var dlng = transformlng(lng - 105.0, lat - 35.0);
        var radlat = lat / 180.0 * PI;
        var magic = Math.sin(radlat);
        magic = 1 - ee * magic * magic;
        var sqrtmagic = Math.sqrt(magic);
        dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI);
        dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI);
        var mglat = lat + dlat;
        var mglng = lng + dlng;
        return [mglng, mglat]
    }
}

/**
 * GCJ02 转换为 WGS84
 * @param lng
 * @param lat
 * @returns {*[]}
 */
function gcj02towgs84(lng, lat) {
    if (out_of_china(lng, lat)) {
        return [lng, lat]
    }
    else {
        var dlat = transformlat(lng - 105.0, lat - 35.0);
        var dlng = transformlng(lng - 105.0, lat - 35.0);
        var radlat = lat / 180.0 * PI;
        var magic = Math.sin(radlat);
        magic = 1 - ee * magic * magic;
        var sqrtmagic = Math.sqrt(magic);
        dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI);
        dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI);
        mglat = lat + dlat;
        mglng = lng + dlng;
        return [lng * 2 - mglng, lat * 2 - mglat]
    }
}

function transformlat(lng, lat) {
    var ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * Math.sqrt(Math.abs(lng));
    ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0;
    ret += (20.0 * Math.sin(lat * PI) + 40.0 * Math.sin(lat / 3.0 * PI)) * 2.0 / 3.0;
    ret += (160.0 * Math.sin(lat / 12.0 * PI) + 320 * Math.sin(lat * PI / 30.0)) * 2.0 / 3.0;
    return ret
}

function transformlng(lng, lat) {
    var ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * Math.sqrt(Math.abs(lng));
    ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0;
    ret += (20.0 * Math.sin(lng * PI) + 40.0 * Math.sin(lng / 3.0 * PI)) * 2.0 / 3.0;
    ret += (150.0 * Math.sin(lng / 12.0 * PI) + 300.0 * Math.sin(lng / 30.0 * PI)) * 2.0 / 3.0;
    return ret
}

/**
 * 判断是否在国内,不在国内则不做偏移
 * @param lng
 * @param lat
 * @returns {boolean}
 */
function out_of_china(lng, lat) {
    return (lng < 72.004 || lng > 137.8347) || ((lat < 0.8293 || lat > 55.8271) || false);
}

  更多见:http://www.thinkgis.cn/topic/560370f200b823b7114ea635

JS版本Github地址

时间: 2024-10-12 12:59:37

给大家分享下坐标转换的代码的JS和Python两个版本的源码【转】的相关文章

【实习记】2014-09-04浏览代码查middle资料+总结我折腾过的源码浏览器

浏览着代码,看源码可以先看make文件,make文件有制造的流程信息. 一般可以从运行的程序对应的cpp看起.然而如果有框架,那就不容易了,会关系错纵复杂. 总结一下我折腾过的源码阅读器. source-insight组里都是用source-insight,可是在linux平台没有,我不喜欢linux下没有只能在windows用的软件. vimvim无疑的编辑器之神.可是vim太过专一,用来阅读而不是编辑源码是挺难的.但是vim的水太深了,你永远用不完他的功能,我相信可以阅读,只是我不够功力.尤

分享一直在维护简单实用高效的C++Socket框架Swa-server(开源+源码)

Swa-server 开源框架* 适用于中小型游戏,如:养成.RPG.棋牌等:应用软件,如:聊天室等* 已经封套好底层socket管理,sql请求处理.数据加密解密* 拿来即可开工写业务* Swa-server是面向小型快速开发的框架,所以采用单进程模式,以后更新也是单进程方案去解决所遇到的问题,这样可以减少开发时间与人力(其实很多服务器用单进程就够了) * 支持IO异步(基于boost库IO)* 支持sql异步执行(有回调函数)* 玩家管理器* 数据库管理器 项目中例子* 1.请求获得动态密码

Ubuntu下升级git版本(源码编译安装git)

Ubuntu自带的git是1.7的版本的,太旧了,所以想升级下,git官网上没有提供现成的安装包,所以只能源码编译了. linux上源码编译安装Git拢共分两步: 第一步,安装编译git的依赖包 第二步,下载源码,编译安装git 安装git的安装包: 在apt-get的系统上: sudo apt-get install curl curl-devel zlib-devel openssl-devel perl cpio expat-devel gettex-devel 在yum的系统上: yum

分享《Python神经网络编程》+PDF+源码+Tariq Rashid+林 赐

下载:https://pan.baidu.com/s/1iIIwN0DtZ7MLZtr6uy7tCA 更多资料分享:http://blog.51cto.com/14087171 <Python神经网络编程>中文版PDF+英文版PDF+源代码经典资料.中文版,255页,带目录和书签,彩色配图,文字可以复制粘贴:英文版,207页,带目录和书签,彩色配图,文字可以复制粘贴:两版对比学习.配套源代码. 其中,中文版如图: 原文地址:http://blog.51cto.com/14087171/2321

Ubuntu下python两个版本的切换

最近在Ubuntu16.04安装了python3.5还有系统自带的python2.7.13,总结一下不同版本的切换问题. alias:别名 bashrc:个人配置文件 一.修改Python版本(针对用户) 想要为某个特定用户修改 Python 版本,只需要在其 home 目录下创建一个 alias(别名) 即可.打开该用户的 ~/.bashrc文件,添加新的别名信息来修改默认使用的 Python 版本. alias python='/usr/bin/python3.5' 一旦完成以上操作,重新登

商务通跳转代码(php和html两个版本)

php商务通跳转代码 写一段商务通跳转代码,要求: 1)保证打开的是http://www.swt.com/LR/chat.aspx?from=LKT33156511 2)保证商务通中记录来源是自己的姓名拼音. 可以使用PHP跳转来实现,/swt/index.php 代码如下: <?php $from = isset($_GET['from'])?$_GET['from']:'';   if($from){     header('Location:http://lkt.zoosnet.net/L

Python web简约表白网页源码分享,时光不老,我们不散!

演示站:c.lmz8.cn打开js/4.js,复制到工具箱的js代码整理那,先解密,方便查看.工具箱:tool.lmz8.cnjs代码整理.在线解码 这个便是文字,只不过呗转码了,所以要用到解码工具.内容更改:index.html(里面的网址改了,否则会跳转到我的网站)js/4.js(网址.照片.音乐视频)图片文件夹:ml背景音乐:46行优酷视频地址:2232 行 拿走记得回复一下谢谢.虽然很不想说,但是还是得提一下. 原文地址:https://www.cnblogs.com/tzjks/p/9

分享《贝叶斯思维:统计建模的Python学习法》+PDF+源码+Allen B.Downey+许杨毅

下载:https://pan.baidu.com/s/130Wf-CymOIW4ELlh9ihVlg 更多资料分享:http://blog.51cto.com/14087171 <贝叶斯思维:统计建模的Python学习法>高清中文版PDF+高清英文版PDF+源代码 高清中文版PDF,带目录和书签,文字能够复制粘贴:高清英文版PDF,带目录和书签,文字能够复制粘贴:中英文两版可以对比学习. 配套源代码: 经典书籍,讲解详细: 其中高清中文版如图: 原文地址:http://blog.51cto.c

分享《精通Python自然语言处理》+PDF+源码+Deepti Chopra+王威

下载:https://pan.baidu.com/s/1iWNtwAgqaD966iysL-5ofA 更多资料分享:http://blog.51cto.com/14087171 <精通Python自然语言处理>高清中文版PDF+高清英文版PDF+源代码 高清中文版PDF,225页,带目录和书签,彩色配图,文字能够复制粘贴:高清英文版PDF,238页,带目录和书签,彩色配图,文字能够复制粘贴:中英文两版可以对比学习. 配套源代码:经典书籍,讲解详细:其中高清中文版如图 原文地址:http://b