经纬网和地图的理论总结(OpenlayersGPS度分秒)

在地图开发过程中,尤其是涉及手持设备,有时会遇到GPS原始坐标数据(116°23’28.44",39°54’25.77"),为了方便使用,需要转换为经纬度(116.39123,39.9071583),今天小编就来说说关于经纬网和地图的理论总结?下面更多详细答案一起来看看吧!

经纬网和地图的理论总结(OpenlayersGPS度分秒)

经纬网和地图的理论总结

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.vip/examples/css/ol.css" type="text/css"> <style> /* 注意:这里必须给高度,否则地图初始化之后不显示;一般是计算得到高度,然后才初始化地图 */ .map { height: 400px; width: 100%; float: left; } </style> <!--注意:openlayers 原版的比较慢,这里引起自己服务器版--> <script src="http://openlayers.vip/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 ol.source.Vector(); //创建一个图层 let customVectorLayer = new ol.layer.Vector({ source: source, zIndex: 2, //设置样式 style: new ol.style.Style({ //边框样式 stroke: new ol.style.Stroke({ color: 'red', width: 5, lineDash: [3, 5] }), //填充样式 fill: new ol.style.Fill({ color: 'rgba(0, 0, 255, 0.3)', }), image: new ol.style.Circle({ radius: 9, fill: new ol.style.Fill({ color: 'red', }) }) }), }); //将绘制层添加到地图容器中 map.addLayer(customVectorLayer); customVectorLayer.getSource().addFeatures([originPoint]); var extent = customVectorLayer.getSource().getExtent(); map.getView().fit(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.Style({ image: new ol.style.Circle({ radius: 9, fill: new ol.style.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

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页