IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Openlayers GPS(度分秒)和经纬度坐标相互互转换 -> 正文阅读

[JavaScript知识库]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.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 transfer_gps

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-06 16:08:57  更:2022-04-06 16:12:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:43:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码