php wgs-84 bd-09,WGS-84,GCJ-02,BD-09的js转换

var GPS = {

PI: 3.14159265358979324,

x_pi: 3.14159265358979324 * 3000.0 / 180.0,

delta: function (lat, lon)

{

// Krasovsky 1940

//

// a = 6378245.0, 1/f = 298.3

// b = a * (1 - f)

// ee = (a^2 - b^2) / a^2;

var a = 6378245.0; //  a: 卫星椭球坐标投影到平面地图坐标系的投影因子。

var ee = 0.00669342162296594323; //  ee: 椭球的偏心率。

var dLat = this.transformLat(lon - 105.0, lat - 35.0);

var dLon = this.transformLon(lon - 105.0, lat - 35.0);

var radLat = lat / 180.0 * this.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) * this.PI);

dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * this.PI);

return { 'lat': dLat, 'lon': dLon };

},

//WGS-84 to GCJ-02

gcj_encrypt: function (wgsLat, wgsLon)

{

if (this.outOfChina(wgsLat, wgsLon))

return { 'lat': wgsLat, 'lon': wgsLon };

var d = this.delta(wgsLat, wgsLon);

return { 'lat': wgsLat + d.lat, 'lon': wgsLon + d.lon };

},

//GCJ-02 to WGS-84

gcj_decrypt: function (gcjLat, gcjLon)

{

if (this.outOfChina(gcjLat, gcjLon))

return { 'lat': gcjLat, 'lon': gcjLon };

var d = this.delta(gcjLat, gcjLon);

return { 'lat': gcjLat - d.lat, 'lon': gcjLon - d.lon };

},

//GCJ-02 to WGS-84 exactly

gcj_decrypt_exact: function (gcjLat, gcjLon)

{

var initDelta = 0.01;

var threshold = 0.000000001;

var dLat = initDelta, dLon = initDelta;

var mLat = gcjLat - dLat, mLon = gcjLon - dLon;

var pLat = gcjLat + dLat, pLon = gcjLon + dLon;

var wgsLat, wgsLon, i = 0;

while (1)

{

wgsLat = (mLat + pLat) / 2;

wgsLon = (mLon + pLon) / 2;

var tmp = this.gcj_encrypt(wgsLat, wgsLon)

dLat = tmp.lat - gcjLat;

dLon = tmp.lon - gcjLon;

if ((Math.abs(dLat) 

break;

if (dLat > 0) pLat = wgsLat; else mLat = wgsLat;

if (dLon > 0) pLon = wgsLon; else mLon = wgsLon;

if (++i > 10000) break;

}

//console.log(i);

return { 'lat': wgsLat, 'lon': wgsLon };

},

//GCJ-02 to BD-09

bd_encrypt: function (gcjLat, gcjLon)

{

var x = gcjLon, y = gcjLat;

var z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * this.x_pi);

var theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * this.x_pi);

bdLon = z * Math.cos(theta) + 0.0065;

bdLat = z * Math.sin(theta) + 0.006;

return { 'lat': bdLat, 'lon': bdLon };

},

//BD-09 to GCJ-02

bd_decrypt: function (bdLat, bdLon)

{

var x = bdLon - 0.0065, y = bdLat - 0.006;

var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * this.x_pi);

var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * this.x_pi);

var gcjLon = z * Math.cos(theta);

var gcjLat = z * Math.sin(theta);

return { 'lat': gcjLat, 'lon': gcjLon };

},

//WGS-84 to Web mercator

//mercatorLat -> y mercatorLon -> x

mercator_encrypt: function (wgsLat, wgsLon)

{

var x = wgsLon * 20037508.34 / 180.;

var y = Math.log(Math.tan((90. + wgsLat) * this.PI / 360.)) / (this.PI / 180.);

y = y * 20037508.34 / 180.;

return { 'lat': y, 'lon': x };

/*

if ((Math.abs(wgsLon) > 180 || Math.abs(wgsLat) > 90))

return null;

var x = 6378137.0 * wgsLon * 0.017453292519943295;

var a = wgsLat * 0.017453292519943295;

var y = 3189068.5 * Math.log((1.0 + Math.sin(a)) / (1.0 - Math.sin(a)));

return {'lat' : y, 'lon' : x};

//*/

},

// Web mercator to WGS-84

// mercatorLat -> y mercatorLon -> x

mercator_decrypt: function (mercatorLat, mercatorLon)

{

var x = mercatorLon / 20037508.34 * 180.;

var y = mercatorLat / 20037508.34 * 180.;

y = 180 / this.PI * (2 * Math.atan(Math.exp(y * this.PI / 180.)) - this.PI / 2);

return { 'lat': y, 'lon': x };

/*

if (Math.abs(mercatorLon) 

return null;

if ((Math.abs(mercatorLon) > 20037508.3427892) || (Math.abs(mercatorLat) > 20037508.3427892))

return null;

var a = mercatorLon / 6378137.0 * 57.295779513082323;

var x = a - (Math.floor(((a + 180.0) / 360.0)) * 360.0);

var y = (1.5707963267948966 - (2.0 * Math.atan(Math.exp((-1.0 * mercatorLat) / 6378137.0)))) * 57.295779513082323;

return {'lat' : y, 'lon' : x};

//*/

},

// two point's distance

distance: function (latA, lonA, latB, lonB)

{

var earthR = 6371000.;

var x = Math.cos(latA * this.PI / 180.) * Math.cos(latB * this.PI / 180.) * Math.cos((lonA - lonB) * this.PI / 180);

var y = Math.sin(latA * this.PI / 180.) * Math.sin(latB * this.PI / 180.);

var s = x + y;

if (s > 1) s = 1;

if (s 

var alpha = Math.acos(s);

var distance = alpha * earthR;

return distance;

},

outOfChina: function (lat, lon)

{

if (lon  137.8347)

return true;

if (lat  55.8271)

return true;

return false;

},

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 * this.PI) + 20.0 * Math.sin(2.0 * x * this.PI)) * 2.0 / 3.0;

ret += (20.0 * Math.sin(y * this.PI) + 40.0 * Math.sin(y / 3.0 * this.PI)) * 2.0 / 3.0;

ret += (160.0 * Math.sin(y / 12.0 * this.PI) + 320 * Math.sin(y * this.PI / 30.0)) * 2.0 / 3.0;

return ret;

},

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 * this.PI) + 20.0 * Math.sin(2.0 * x * this.PI)) * 2.0 / 3.0;

ret += (20.0 * Math.sin(x * this.PI) + 40.0 * Math.sin(x / 3.0 * this.PI)) * 2.0 / 3.0;

ret += (150.0 * Math.sin(x / 12.0 * this.PI) + 300.0 * Math.sin(x / 30.0 * this.PI)) * 2.0 / 3.0;

return ret;

}

};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PHP(全称:PHP: Hypertext Preprocessor)是一种广泛应用于Web开发的开源脚本语言,以其易学易用、高效灵活的特性深受广大开发者喜爱。诞生于1995年,由Rasmus Lerdorf创建,PHP最初用于简单的网页动态处理,如今已发展成为一款功能齐全、生态丰富的全栈开发工具,支持从网站前端交互到后端业务逻辑、数据库操作乃至API接口开发的全方位需求。 PHP的一大特点在于其与HTML的深度融合,可以直接嵌入到HTML文档中,通过特殊的起始标签“<?php”和结束标签“?>”界定PHP代码段。这种特性使得开发者能够轻松地在静态网页中插入动态内容,实现数据渲染、条件判断、循环处理等功能,极大地简化了Web开发流程。同时,PHP也支持纯脚本文件编写,适用于构建复杂的后台逻辑。 PHP语法简洁明了,借鉴了C、Perl等语言的特点,易于理解和学习,对于初学者友好。它支持面向过程、面向对象以及函数式编程范式,可根据项目需求和开发者喜好灵活选择。PHP内置丰富的数据类型(如整型、浮点型、字符串、数组、对象等),并提供了大量的预定义函数,涵盖了字符串操作、数学运算、文件系统处理、日期时间处理、数据库连接等常见功能,极大提高了开发效率。 在Web开发中,PHP与MySQL数据库的搭配尤为经典。PHP提供mysqli、PDO等数据库扩展,能够无缝连接MySQL,进行SQL查询、数据插入、更新、删除等操作,实现动态网站的数据持久化。此外,PHP还支持与其他数据库系统的连接,如PostgreSQL、SQLite、Oracle等,具有良好的数据库兼容性。 PHP拥有庞大的开发者社区和丰富的开源项目,如内容管理系统(CMS)WordPress、Drupal、Joomla,框架 Laravel、Symfony、CodeIgniter等,为开发者提供了丰富的代码资源和快速开发的便利。同时,官方维护的PHP文档详尽全面,社区活跃的技术论坛和问答网站为学习和解决问题提供了有力支持。 在性能优化方面,PHP支持 opcode 缓存(如APC、OpCache)以加速脚本执行,可通过配置调整、代码优化、使用缓存技术等手段提升应用性能。近年来,PHP持续进行性能改进与新特性的引入,如PHP 7系列版本在速度上有了显著提升,新增了类型声明、标量类型提示、null合并运算符等语法特性,进一步提升了开发效率和代码质量。 总的来说,PHP作为一种成熟的Web开发语言,凭借其易用性、灵活性、丰富的库与框架支持、强大的社区生态以及持续的性能优化,成为了构建各类动态网站、Web应用及API服务的理想选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值