导航
当前位置:首页 > 八字

经纬度换算器在线查询 经纬度换算工具

经纬度换算器在线查询 经纬度换算工具

本文目录一览:

经纬度换算公式怎么算?

首先我们看一个例子:北纬39.9289,东经116.3882换成精确的多少度多少分 怎么换? 换算方法是怎样的?

1、北纬39.9289,39度;

2、然后将小数点0.9289乘以60,结果为55.734,即55分;

3、再将0.734乘以60,结果为44.04,即44.04秒 ;

所以北纬39.9289,就是北纬39度55分44.04秒,也可表示为39°55′44.04″。因为经纬度是六十进制,同种方法可以得到经度。

接下来介绍用Excel表公式进行经纬度换算

1、在A1和B1单元格中输入数据

十进制换算经纬度

假如原始数据为十进制数据。在C3单元格中输入公示=TEXT(INT(A1),"0")&"°"&TEXT(INT((A1-INT(A1))*60),"00")&"′"&TEXT(((A1-INT(A1))*60-INT((A1-INT(A1))*60))*60,"00.00")&"″"

可以得到转换后的经度度分秒数值,纬度转换方法与此一样。

经纬度换算十进制

在E1单元格中输入公式

=LEFT(A2,FIND("°",A2)-1)+MID(A2,FIND("°",A2)+1,FIND("′",A2)-FIND("°",A2)-1)/60+MID(A2,FIND("′",A2)+1,FIND("″",A2)-FIND("′",A2)-1)/3600

可以得到转换后的经度十进制数值,纬度换算方法与此一样。

最后关于经度问题进行了分析,当经纬度中秒保留2位小数时,转换后的十进制精度与原来的数值相比,大家可以根据业务所需保留进度

常用地图经纬度转换,以及遇到的问题和解决方式

坐标系分类

第一种分类1、GPS,WGS-84,原始坐标体系。一般用国际标准的GPS记录仪记录下来的坐标,都是GPS的坐标。很可惜,在中国,任何一个地图产品都不允许使用GPS坐标,据说是为了保密。2、GCJ-02,国测局02年发布的坐标体系。又称“火星坐标”。在中国,必须至少使用GCJ-02的坐标体系。比如谷歌,腾讯,高德都在用这个坐标体系。GCJ-02也是国内最广泛使用的坐标体系。3、其他坐标体系。一般都是由GCJ-02进过偏移算法得到的。这种体系就根据每个公司的不同,坐标体系都不一样了。比如,百度和搜狗就使用自己的坐标体系,与其他坐标体系不兼容。

第二种分类首先明白,所有坐标体系的原点,都是非洲。

1、经纬度。这个是球面坐标,对于北京来说,就是(116.38817139.935961)这样的坐标。比如腾讯、高德、百度都是这样的经纬度坐标。谷歌是经纬度顺序写反的经纬度坐标。

如果是度分秒坐标,需要进行转换,才能得到这样的经纬度坐标。详见坐标转换。

2、墨卡托坐标。平面坐标,相当于是直线距离,数字一般都比较大,像这样的。(215362.0002133333599526.00034912192)

墨卡托坐标,主要用于程序的后台计算。直线距离嘛,加加减减几乎计算方便。

搜狗地图API就是直接使用的墨卡托坐标。

经纬度转换工具类

static double pi = 3.14159265358979324;static double a = 6378245.0;static double ee = 0.00669342162296594323;public final static double x_pi = pi * 3000.0 / 180.0;/*** 高德经纬度转百度经纬度*/public static double[] gcj2bd(double lat, double lon) {double z = Math.sqrt(lon * lon + lat * lat) + 0.00002 * Math.sin(lat * x_pi);double theta = Math.atan2(lat, lon) + 0.000003 * Maths(lon * x_pi);double bd_lon = z * Maths(theta) + 0.0065;double bd_lat = z * Math.sin(theta) + 0.006;return new double[] { bd_lat, bd_lon };}/*** 百度经纬度转高德*/public static double[] bd2gcj(double lat, double lon) {double x = lon - 0.0065, y = lat - 0.006;double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi);double theta = Math.atan2(y, x) - 0.000003 * Maths(x * x_pi);double gg_lon = z * Maths(theta);double gg_lat = z * Math.sin(theta);return new double[] { gg_lat, gg_lon };}/*** 国标经纬度转高德经纬度*/public static double[] wgs2gcj(double lat, double lon) {double dLat = transformLat(lon - 105.0, lat - 35.0);double dLon = transformLon(lon - 105.0, lat - 35.0);double radLat = lat / 180.0 * pi;double magic = Math.sin(radLat);magic = 1 - ee * magic * magic;double sqrtMagic = Math.sqrt(magic);dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi);dLon = (dLon * 180.0) / (a / sqrtMagic * Maths(radLat) * pi);double mgLat = lat + dLat;double mgLon = lon + dLon;return new double[]{ mgLat, mgLon };}/*** 高德转到GPS*/public static double[] gcj2wgc(double lat, double lon) {double dLat = transformLat(lon - 105.0, lat - 35.0);double dLon = transformLon(lon - 105.0, lat - 35.0);double radLat = lat / 180.0 * pi;double magic = Math.sin(radLat);magic = 1 - ee * magic * magic;double sqrtMagic = Math.sqrt(magic);dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi);dLon = (dLon * 180.0) / (a / sqrtMagic * Maths(radLat) * pi);double mgLat = lat + dLat;double mgLon = lon + dLon;double lontitude = lon * 2 - mgLon;double latitude = lat * 2 - mgLat;return new double[]{latitude, lontitude};}/*** 国标转百度*/public static double[] wgs2bd(double lat, double lon) {double[] wgs2gcj = wgs2gcj(lat, lon);return gcj2bd(wgs2gcj[0], wgs2gcj[1]);}/*** 经纬度转换*/private static double transformLat(double lat, double lon) {double ret = -100.0 + 2.0 * lat + 3.0 * lon + 0.2 * lon * lon + 0.1 * lat * lon + 0.2 * Math.sqrt(Math.abs(lat));ret = getRet(lat, lon, ret);ret += (160.0 * Math.sin(lon / 12.0 * pi) + 320 * Math.sin(lon * pi / 30.0)) * 2.0 / 3.0;return ret;}private static double getRet(double lat, double lon, double ret) {ret += (20.0 * Math.sin(6.0 * lat * pi) + 20.0 * Math.sin(2.0 * lat * pi)) * 2.0 / 3.0;ret += (20.0 * Math.sin(lon * pi) + 40.0 * Math.sin(lon / 3.0 * pi)) * 2.0 / 3.0;return ret;}private static double transformLon(double lat, double lon) {double ret = 300.0 + lat + 2.0 * lon + 0.1 * lat * lat + 0.1 * lat * lon + 0.1 * Math.sqrt(Math.abs(lat));ret = getRet(lat, lat, ret);ret += (150.0 * Math.sin(lat / 12.0 * pi) + 300.0 * Math.sin(lat / 30.0 * pi)) * 2.0 / 3.0;return ret;}

PS:因为经纬度的获取是依靠卫星的,所以屋内无法获取经纬度。并且哪怕你站在一个点移动,经纬度的获取也是有飘忽的,允许误差大概在10米以内即可。

软硬件结合时要提前沟通好使用的经纬度分类。比如软件使用的是高德坐标,而硬件获取的则是其他坐标系或者使用的安卓原生坐标,尤其是后者转换后仍旧不属于任何一种坐标,所以尽量避免硬件传输安卓原生坐标,可以通过相关地图,比如高德的sdk进行转换。

创作不易,如果这篇文章对你有用,请点个赞谢谢♪(・ω・)ノ!

Openlayers GPS(度分秒)和经纬度坐标相互互转换

OpenLayers教程

在地图开发过程中,尤其是涉及手持设备,有时会遇到GPS原始坐标数据(116°23’28.44",39°54’25.77"),为了方便使用,需要转换为经纬度(116.39123,39.9071583)。

这里介绍一下GPS坐标和经纬度坐标互转。

Openlayers GPS(度分秒)和经纬度坐标相互互转换

<html lang="en"><head> <meta charset="utf-8"> <!--注意:openlayers 原版的比较慢,这里引起自己服务器版--> <link rel="stylesheet" href="http://openlayers/examples/css/ol.css" type="text/css"> <style> /* 注意:这里必须给高度,否则地图初始化之后不显示;一般是计算得到高度,然后才初始化地图 */ .map { height: 400px; width: 100%; float: left; } </style> <!--注意:openlayers 原版的比较慢,这里引起自己服务器版--> <script src="http://openlayers/examples/resources/ol.js"></script> <script src="./tiandituLayers.js"></script> <title>OpenLayers example</title></head><body><h2>Feature transfer</h2><!--地图容器,需要指定 id --><div id="map" class="map"></div><!--注意:本示例将 高德腾讯坐标设置为黑色;将百度坐标设置为黄色 --><!--注意:本示例将 高德腾讯坐标转为WGS84颜色设置为粉色;将百度坐标转为WS84颜色设置为绿色 --><script type="text/javascript"> var map = new ol.Map({ // 地图容器 target: 'map', // 地图图层,比如底图、矢量图等 layers: [ getIMG_CLayer(), getIBO_CLayer(), getCIA_CLayer(), ], // 地图视野 view: new ol.View({ projection: "EPSG:4326", // 定位 center: [116, 39], // 缩放 zoom: 4, maxZoom: 18, minZoom: 1, }) }); var xy = [116.391232637988, 39.907157016256974]; // 初始点 var originPoint = new ol.Feature({ geometry: new ol.geom.Point(xy), name: 'My Point' }); // 矢量图层 var layer = initVectorLayer(); /** * @todo 矢量图层 * @returns {VectorLayer} * @constructor */ function initVectorLayer() { //实例化一个矢量图层Vector作为绘制层 let source = new olurce.Vector(); //创建一个图层 let customVectorLayer = new olyer.Vector({ source: source, zIndex: 2, //设置样式 style: new ol.Style({ //边框样式 stroke: new ol.Stroke({ color: 'red', width: 5, lineDash: [3, 5] }), //填充样式 fill: new ol.Fill({ color: 'rgba(0, 0, 255, 0.3)', }), image: new ol.Circle({ radius: 9, fill: new ol.Fill({ color: 'red', }) }) }), }); //将绘制层添加到地图容器中 map.addLayer(customVectorLayer); customVectorLayer.getSource().addFeatures([originPoint]); var extent = customVectorLayer.getSource().getExtent(); map.getView()(extent, { duration: 1,//动画的持续时间, callback: null, }); return customVectorLayer; } /** * 添加点到地图 * @param geom * @param color 颜色 * @returns {Feature|Feature|null} */ function addFeature(geom, color) { let temp = new ol.Feature({ geometry: new ol.geom.Point(geom), name: 'My Point' }); let style = new ol.Style({ image: new ol.Circle({ radius: 9, fill: new ol.Fill({ color: color || 'blue', }) }) }); temp.setStyle(style); layer.getSource().addFeatures([temp]); move(); return temp; } //============转换方法 start =================================================================================== /** * 度分秒转经纬度 * @param dfm * @returns {number} */ function convertGPSToXY(dfm) { const arr1 = dfm.split('°'); const d = arr1[0]; const arr2 = arr1[1].split("'") let f = arr2[0] || 0; const m = arr2[1].replace('"', '') || 0; f = parseFloat(f) + parseFloat(m / 60); var du = parseFloat(f / 60) + parseFloat(d); return du; } /** * 经纬度转度分秒 * @param point * @returns {*} */ function convertXYToGPS(point) { let xy; if (point instanceof Array) { xy = point; } else { point = point + ""; xy = point.split(','); } let dPoint = []; let dPointStr = ""; for (let i = 0; i < xy.length; i++) { const mElement = xy[i] + ""; const arr1 = mElement.split("."); const d = arr1[0]; let tp = "0." + arr1[1] tp = String(tp * 60); //这里进行了强制类型转换 const arr2 = tp.split("."); const f = arr2[0]; tp = "0." + arr2[1]; tp = tp * 60; const m = tp.toFixed(2); const dfm = d + "°" + f + "'" + m + "\""; dPointStr += "," + dfm; dPoint.push(dfm); } dPointStr = dPointStr.replace(',', ''); return point instanceof Array ? dPoint : dPointStr; } var gps; /** * @todo gps坐标转为WKT格式 */ function GPSToXY() { if (!gps) { alert("请先点击 XY坐标转为GPS坐标!"); return; } // 参数包含x和y,并且以 , 拼接 if (gps instanceof Array) { alert("XY数组:" + [convertGPSToXY(gps[0]), convertGPSToXY(gps[1])]); // 参数只有x或者y } else { alert("X或Y:" + convertGPSToXY(gps)); } } /** * @todo WKT坐标转为gps格式 */ function XYToGPS() { // 获取坐标 // var point = xy; var point = originPoint.getGeometry().getCoordinates(); gps = convertXYToGPS(point); alert("gps数组:" + gps); } //===========转换方法 end ====================================================================================</script><button id="WKTToGPS" onclick="XYToGPS()">XY坐标转为GPS坐标</button><button id="GPSToWKT" onclick="GPSToXY()">GPS坐标转为XY坐标</button></body></html>在线示例

Openlayers GPS(度分秒)和经纬度坐标相互互转换:OpenLayers example