真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

js蘭伯特和經(jīng)緯度轉(zhuǎn)換(提取自proj4js)-創(chuàng)新互聯(lián)

技術(shù)交流群:665060698

站在用戶的角度思考問題,與客戶深入溝通,找到雁江網(wǎng)站設(shè)計(jì)與雁江網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、申請(qǐng)域名、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋雁江地區(qū)。

    proj4是一個(gè)非常有用的坐標(biāo)轉(zhuǎn)換類庫(kù),有各種語(yǔ)言版本的,C++,java,js,python版等,可以很方便的將坐標(biāo)從一個(gè)坐標(biāo)系轉(zhuǎn)換到另一個(gè)


坐標(biāo)系。

    在網(wǎng)頁(yè)端使用的時(shí)候,轉(zhuǎn)換大量的坐標(biāo)時(shí),發(fā)現(xiàn)存在性能有問題,就查看了一下proj4js的源代碼,發(fā)現(xiàn)初始化很多不相關(guān)的類型,對(duì)象等,

基于現(xiàn)有的項(xiàng)目,就進(jìn)行相關(guān)代碼的提取,以下是提取的蘭伯特和經(jīng)緯度坐標(biāo)的轉(zhuǎn)換,簡(jiǎn)略代碼說(shuō)明如下:

        //初始化常用的變量,直接換算成弧度,提升計(jì)算性能
        var EPSLN = (typeof Number.EPSILON === 'undefined') ? 1.0e-10 : Number.EPSILON;
	var conv = 180 / Math.PI;
	var HALF_PI = Math.PI / 2;
	var SPI = 3.14159265359;
	var TWO_PI = 2 * Math.PI;
	var a = 6378137;
	var b = 6356752.314245179;
	var e = 0.08181919084262157;
	var lat1 = 0.52359877559829;
	var lat2 = 1.04719755119659; 
	var long0 = 1.8029251173101;
	var lat0 = 0;
	var k0 = 1; 
	var ns;
	var f0;
	var rh;
	
	//常用的轉(zhuǎn)換參數(shù),直接提取引用
	var tsfnz = function(eccent, phi, sinphi) {
		var con = eccent * sinphi;
		var com = 0.5 * eccent;
		con = Math.pow(((1 - con) / (1 + con)), com);
		return(Math.tan(0.5 * (HALF_PI - phi)) / con);
	};
	var sign = function(x) {
		return x < 0 ? -1 : 1;
	};
	var msfnz = function(eccent, sinphi, cosphi) {
		var con = eccent * sinphi;
		return cosphi / (Math.sqrt(1 - con * con));
	};

	var adjust_lon = function(x) {
		return(Math.abs(x) <= SPI) ? x : (x - (sign(x) * TWO_PI));
	};
	
	var phi2z = function(eccent, ts) {
		var eccnth = 0.5 * eccent;
		var con, dphi;
		var phi = HALF_PI - 2 * Math.atan(ts);
		for(var i = 0; i <= 15; i++) {
			con = eccent * Math.sin(phi);
			dphi = HALF_PI - 2 * Math.atan(ts * (Math.pow(((1 - con) / (1 + con)), eccnth))) - phi;
			phi += dphi;
			if(Math.abs(dphi) <= 0.0000000001) {
				return phi;
			}
		}
		//console.log("phi2z has NoConvergence");
		return -9999;
	};
	
	//根據(jù)proj4的坐標(biāo)系描述字符串,解析其中的參數(shù)
	function init(prjstr) {
		if(prjstr.indexOf(" ") > -1) {
			var _prjArr = prjstr.split(" ");
			_prjArr.forEach(function(item, index, input) {
				if(item.indexOf("lat_0") > -1) {
					lat0 = parseFloat(item.split("=")[1]) / conv;
				}
			})
		}
		var sin1 = Math.sin(lat1);
		var cos1 = Math.cos(lat1);
		var ms1 = msfnz(e, sin1, cos1);
		var ts1 = tsfnz(e, lat1, sin1);

		var sin2 = Math.sin(lat2);
		var cos2 = Math.cos(lat2);
		var ms2 = msfnz(e, sin2, cos2);
		var ts2 = tsfnz(e, lat2, sin2);

		var ts0 = tsfnz(e, lat0, Math.sin(lat0));
		if(Math.abs(lat1 - lat2) > EPSLN) {
			ns = Math.log(ms1 / ms2) / Math.log(ts1 / ts2);
		} else {
			ns = sin1;
		}
		if(isNaN(ns)) {
			ns = sin1;
		}
		f0 = ms1 / (ns * Math.pow(ts1, ns));
		rh = a * f0 * Math.pow(ts0, ns);
	}
	
	//經(jīng)緯度坐標(biāo)轉(zhuǎn)蘭伯特坐標(biāo)
	function projCood(lon, lat) {
		lon = lon / conv;
		lat = lat / conv;
		if(Math.abs(2 * Math.abs(lat) - Math.PI) <= EPSLN) {
			lat = sign(lat) * (HALF_PI - 2 * EPSLN);
		}
		var con = Math.abs(Math.abs(lat) - HALF_PI);
		var ts, rh2;
		if(con > EPSLN) {
			ts = tsfnz(e, lat, Math.sin(lat));
			rh2 = a * f0 * Math.pow(ts, ns);
		} else {
			con = lat * ns;
			if(con <= 0) {
				return null;
			}
			rh2 = 0;
		}
		var theta = ns * adjust_lon(lon - long0);
		var nlon = (rh2 * Math.sin(theta));
		var nlat = (rh - rh2 * Math.cos(theta));

		return [nlon, nlat];
	}
	
	//蘭伯特坐標(biāo)轉(zhuǎn)經(jīng)緯度坐標(biāo)
	function inverseProj(x1, y1) {
		var rh2, con, ts;
		var lat, lon;
		var x = x1 / k0;
		var y = (rh - y1 / k0);
		if(ns > 0) {
			rh2 = Math.sqrt(x * x + y * y);
			con = 1;
		} else {
			rh2 = -Math.sqrt(x * x + y * y);
			con = -1;
		}
		var theta = 0;
		if(rh2 !== 0) {
			theta = Math.atan2((con * x), (con * y));
		}
		if((rh2 !== 0) || (ns > 0)) {
			con = 1 / ns;
			ts = Math.pow((rh2 / (a * f0)), con);
			lat = phi2z(e, ts);
			if(lat === -9999) {
				return null;
			}
		} else {
			lat = -HALF_PI;
		}
		lon = adjust_lon(theta / ns + long0);

		return [lon * conv, conv * lat];
	}
	
	

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。


分享題目:js蘭伯特和經(jīng)緯度轉(zhuǎn)換(提取自proj4js)-創(chuàng)新互聯(lián)
分享路徑:http://weahome.cn/article/gjsdj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部