OpenLayers 點擊顯示經緯度Demo

来源:https://www.cnblogs.com/smileZAZ/archive/2022/06/17/16386379.html
-Advertisement-
Play Games

這裡給大家分享我在OpenLayers 地圖開發工作中總結出的一下代碼和註意點,希望對大家有所幫助 效果如下: 核心代碼展示:附帶講解註釋 var map = new ol.Map({ // 初始化地圖 target: 'map',// 選擇地圖對象 layers: [ new ol.layer.T ...


這裡給大家分享我在OpenLayers 地圖開發工作中總結出的一下代碼和註意點,希望對大家有所幫助

效果如下:

核心代碼展示:附帶講解註釋

 var map = new ol.Map({ // 初始化地圖
            target: 'map',// 選擇地圖對象
            layers: [
                new ol.layer.Tile({// 初始化Tile外部圖層
                    source: new ol.source.XYZ({// 初始化XYZ切片服務圖層
                        url:
                            'http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineStreetPurplishBlue/MapServer/tile/{z}/{y}/{x}', // XYZ切片服務地址
                        wrapX: false
                    })
                }),
                new ol.layer.Tile({// 初始化Tile外部圖層
                    source: new ol.source.XYZ({// 初始化XYZ切片服務圖層
                        url:
                            'http://t{0-7}.tianditu.com/DataServer?T=cia_w&x={x}&y={y}&l={z}&tk=5d27dc75ca0c3bdf34f657ffe1e9881d',// XYZ切片服務地址
                        wrapX: false
                    })
                })
            ],
            view: new ol.View({ 
                projection: 'EPSG:4326', //設置地圖坐標系
                center: [113.87, 22.691],//設置地圖中心點
                zoom: 12//設置地圖層級
            }),
        });
        const BGLayer = new ol.layer.Tile({// 初始化Tile外部圖層
            source: new ol.source.XYZ({// 初始化XYZ切片服務圖層
                url: 'http://t{0-7}.tianditu.com/DataServer?T=img_w&x={x}&y={y}&l={z}&tk=5d27dc75ca0c3bdf34f657ffe1e9881d',// XYZ切片服務地址
                wrapX: false
            })
        })
        BGLayer.setVisible(false) //設置圖層顯示隱藏
        map.addLayer(BGLayer)//添加圖層
        //實例化矢量點要素,通過矢量圖層添加到地圖容器中
        //這樣就實現了預先載入圖文標註
        var iconFeature = new ol.Feature();
        //設置點要素樣式
        iconFeature.setStyle(createLabelStyle(iconFeature));
        //矢量標註的數據源
        var vectorSource = new ol.source.Vector({
            features: [iconFeature]
        });
        //矢量標註圖層
        var vectorLayer = new ol.layer.Vector({
            source: vectorSource
        });
        map.addLayer(vectorLayer);
        //矢量標註樣式設置函數,設置image為圖標ol.style.Icon
        function createLabelStyle(feature) {
            return new ol.style.Style({
                image: new ol.style.Icon({
                    anchor: [40, 42],
                    scale: 0.5, // 圖標縮小顯示
                    anchorOrigin: 'top-right', // 標註樣式的起點位置
                    anchorXUnits: 'pixels', // X方向單位:分數
                    anchorYUnits: 'pixels', // Y方向單位:像素
                    offsetOrigin: 'bottom-left', // 偏移起點位置的方向
                    opacity: 1, // 透明度
                    src: 'dian.png'  //圖標的URL
                }),
                text: new ol.style.Text({
                    textAlign: 'center',            //位置
                    textBaseline: 'middle',         //基準線
                    font: 'normal 14px 微軟雅黑',    //文字樣式
                    fill: new ol.style.Fill({       //文本填充樣式(即文字顏色)
                        color: '#000'
                    }),
                    stroke: new ol.style.Stroke({
                        color: '#F00',
                        width: 2
                    })
                })
            });
        }
        var newFeature = new ol.Feature({
            geometry: new ol.geom.Point([0,0])  //幾何信息
        });
        newFeature.setStyle(createLabelStyle(newFeature));      //設置要素樣式
        vectorSource.addFeature(newFeature);
        map.on('click', function (evt) {
            var coordinate = evt.coordinate;        //滑鼠單擊點的坐標
            //新建一個要素ol.Feature
            newFeature.set('geometry',new ol.geom.Point(coordinate))
            document.getElementsByClassName("list-box")[0].innerHTML = '<p> 經度:' + coordinate[0].toFixed(3) + '     緯度:' + coordinate[1].toFixed(3) + '</p>'
        });
        map.on('moveend', function (evt) {
            if (map.getView().getZoom() >= 16) {
                BGLayer.setVisible(true)
            } else {
                BGLayer.setVisible(false)
            }
        })

 點點陣圖片:

 完整demo代碼:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="https://openlayers.org/en/v5.3.0/css/ol.css" />
    <script type="text/javascript" src="https://openlayers.org/en/v5.3.0/build/ol.js"></script>
    <title>點擊出點位</title>
    <style>
        *{padding: 0;margin: 0}
        .list-box {
            width: 300px;
            height: 100px;
            background: white;
            box-sizing: border-box;
            padding: 20px;
            line-height: 60px;
            overflow: auto;
            position: fixed;
            right: 10px;
            top: 10px;
            z-index: 999;
            text-align: center;
        }
    </style>
</head>

<body>
    <div id="map"></div>
    <div class="list-box">
    </div>
    <script>
        var map = new ol.Map({ // 初始化地圖
            target: 'map',// 選擇地圖對象
            layers: [
                new ol.layer.Tile({// 初始化Tile外部圖層
                    source: new ol.source.XYZ({// 初始化XYZ切片服務圖層
                        url:
                            'http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineStreetPurplishBlue/MapServer/tile/{z}/{y}/{x}', // XYZ切片服務地址
                        wrapX: false
                    })
                }),
                new ol.layer.Tile({// 初始化Tile外部圖層
                    source: new ol.source.XYZ({// 初始化XYZ切片服務圖層
                        url:
                            'http://t{0-7}.tianditu.com/DataServer?T=cia_w&x={x}&y={y}&l={z}&tk=5d27dc75ca0c3bdf34f657ffe1e9881d',// XYZ切片服務地址
                        wrapX: false
                    })
                })
            ],
            view: new ol.View({ 
                projection: 'EPSG:4326', //設置地圖坐標系
                center: [113.87, 22.691],//設置地圖中心點
                zoom: 12//設置地圖層級
            }),
        });
        const BGLayer = new ol.layer.Tile({// 初始化Tile外部圖層
            source: new ol.source.XYZ({// 初始化XYZ切片服務圖層
                url: 'http://t{0-7}.tianditu.com/DataServer?T=img_w&x={x}&y={y}&l={z}&tk=5d27dc75ca0c3bdf34f657ffe1e9881d',// XYZ切片服務地址
                wrapX: false
            })
        })
        BGLayer.setVisible(false) //設置圖層顯示隱藏
        map.addLayer(BGLayer)//添加圖層
        //實例化矢量點要素,通過矢量圖層添加到地圖容器中
        //這樣就實現了預先載入圖文標註
        var iconFeature = new ol.Feature();
        //設置點要素樣式
        iconFeature.setStyle(createLabelStyle(iconFeature));
        //矢量標註的數據源
        var vectorSource = new ol.source.Vector({
            features: [iconFeature]
        });
        //矢量標註圖層
        var vectorLayer = new ol.layer.Vector({
            source: vectorSource
        });
        map.addLayer(vectorLayer);
        //矢量標註樣式設置函數,設置image為圖標ol.style.Icon
        function createLabelStyle(feature) {
            return new ol.style.Style({
                image: new ol.style.Icon({
                    anchor: [40, 42],
                    scale: 0.5, // 圖標縮小顯示
                    anchorOrigin: 'top-right', // 標註樣式的起點位置
                    anchorXUnits: 'pixels', // X方向單位:分數
                    anchorYUnits: 'pixels', // Y方向單位:像素
                    offsetOrigin: 'bottom-left', // 偏移起點位置的方向
                    opacity: 1, // 透明度
                    src: 'dian.png'  //圖標的URL
                }),
                text: new ol.style.Text({
                    textAlign: 'center',            //位置
                    textBaseline: 'middle',         //基準線
                    font: 'normal 14px 微軟雅黑',    //文字樣式
                    fill: new ol.style.Fill({       //文本填充樣式(即文字顏色)
                        color: '#000'
                    }),
                    stroke: new ol.style.Stroke({
                        color: '#F00',
                        width: 2
                    })
                })
            });
        }
        var newFeature = new ol.Feature({
            geometry: new ol.geom.Point([0,0])  //幾何信息
        });
        newFeature.setStyle(createLabelStyle(newFeature));      //設置要素樣式
        vectorSource.addFeature(newFeature);
        map.on('click', function (evt) {
            var coordinate = evt.coordinate;        //滑鼠單擊點的坐標
            //新建一個要素ol.Feature
            newFeature.set('geometry',new ol.geom.Point(coordinate))
            document.getElementsByClassName("list-box")[0].innerHTML = '<p> 經度:' + coordinate[0].toFixed(3) + '     緯度:' + coordinate[1].toFixed(3) + '</p>'
        });
        map.on('moveend', function (evt) {
            if (map.getView().getZoom() >= 16) {
                BGLayer.setVisible(true)
            } else {
                BGLayer.setVisible(false)
            }
        })
    </script>
</body>

</html>

如果對您有所幫助,歡迎您點個關註,我會定時更新技術文檔,大家一起討論學習,一起進步。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 鏡像下載、功能變數名稱解析、時間同步請點擊 阿裡雲開源鏡像站 前言 開始搭建RK3568的基礎虛擬機,具備基本的通用功能,主要包含了串口工具minicom,遠程登陸ssh,遠程傳輸filezilla,代碼編輯工具vscode。 虛擬機 文檔對對虛擬機做了一些基本要求,如下圖: 為了儘量在前期減少錯誤,應選擇 ...
  • 下載證書 申請證書 證書下載 文件格式為: PEM格式的證書文件。 PEM格式的證書文件是採用Base64編碼的文本文件,您可以根據需要將證書文件修改成其他格式。 KEY格式的證書私鑰文件。 安裝證書 登錄Linux 證書上傳到伺服器 新建存放證書的目錄 mkdir /usr/local/nginx ...
  • CentOS目前官網提供的下載版本有6、7、8,最新的版本為8,不過個人推薦CentOS 7 的版本,因為相比較於最新版本,版本7更加地穩定。而相比於版本6,版本7新增了很多的功能。CentOS 7 是目前主流的版本,穩定成熟,是大多數伺服器首選的版本。話不多說,直入主題。 下載centos官方鏡像 ...
  • 唉。下麵是我花了不知道多少個小時踩過的所有坑總結出來的血淚史,希望能幫你們少踩一些坑吧,正常來講一步一步下來就不會出現任何問題了。 背景 用的是百度雲的雲伺服器(其他雲伺服器同理),系統是Ubuntu 20.04 LTS,Mysql版本8.0+,需求是在Windows上開發,可以隨時遠程連接讀寫服務 ...
  • 分享嘉賓:張政 京東 演算法工程師 編輯整理:AMS 周金星 出品平臺:DataFunTalk 導讀: 內容生態建設是近幾年互聯網快速發展的關鍵動因,也是AI化的重點方向之一。本文主要分享在京東廣告業務下內容理解體系的建設情況,從標簽化、內容準入、質量美學評價等多個角度探討內容理解能力的應用;同時整體 ...
  • SQL的函數 函數的定義 函數是指一段可以直接被另一段程式調用的程式或代碼; 字元串函數 MySQL常用的字元串函數 函數 功能 concat(s1,s2,···sN) 字元串拼接,將s1···sN拼接為一個字元串 lower(str) 將字元串str全部轉換為小寫 upper(str) 將字元串s ...
  • 華為應用內支付服務(In-App Purchases,IAP)為開發者提供便捷的應用內支付體驗和簡便的接入流程。開發者的應用集成IAP SDK後,調用IAP SDK介面,啟動IAP收銀台,即可實現應用內支付。在集成過程中,開發者可能會遇到報錯的問題,這時我們可以通過查找日誌中的tag的方法對問題快速 ...
  • 今天把平臺屬性的管理基本完成了,後臺管理做到現在基本也開始熟悉,確實就是對ElementUI的一個熟練程度。 一.平臺屬性管理 1.動態展示數據 先把介面弄好,應該在第三級標題選擇後進行發請求 靜態頁面搭建 渲染數據 屬性值列表,用到一個新組件 tag,並且這裡有多個屬性值,所以要遍歷,既然要在裡面 ...
一周排行
    -Advertisement-
    Play Games
  • 概述:本文代碼示例演示瞭如何在WPF中使用LiveCharts庫創建動態條形圖。通過創建數據模型、ViewModel和在XAML中使用`CartesianChart`控制項,你可以輕鬆實現圖表的數據綁定和動態更新。我將通過清晰的步驟指南包括詳細的中文註釋,幫助你快速理解並應用這一功能。 先上效果: 在 ...
  • openGauss(GaussDB ) openGauss是一款全面友好開放,攜手伙伴共同打造的企業級開源關係型資料庫。openGauss採用木蘭寬鬆許可證v2發行,提供面向多核架構的極致性能、全鏈路的業務、數據安全、基於AI的調優和高效運維的能力。openGauss深度融合華為在資料庫領域多年的研 ...
  • openGauss(GaussDB ) openGauss是一款全面友好開放,攜手伙伴共同打造的企業級開源關係型資料庫。openGauss採用木蘭寬鬆許可證v2發行,提供面向多核架構的極致性能、全鏈路的業務、數據安全、基於AI的調優和高效運維的能力。openGauss深度融合華為在資料庫領域多年的研 ...
  • 概述:本示例演示了在WPF應用程式中實現多語言支持的詳細步驟。通過資源字典和數據綁定,以及使用語言管理器類,應用程式能夠在運行時動態切換語言。這種方法使得多語言支持更加靈活,便於維護,同時提供清晰的代碼結構。 在WPF中實現多語言的一種常見方法是使用資源字典和數據綁定。以下是一個詳細的步驟和示例源代 ...
  • 描述(做一個簡單的記錄): 事件(event)的本質是一個委托;(聲明一個事件: public event TestDelegate eventTest;) 委托(delegate)可以理解為一個符合某種簽名的方法類型;比如:TestDelegate委托的返回數據類型為string,參數為 int和 ...
  • 1、AOT適合場景 Aot適合工具類型的項目使用,優點禁止反編 ,第一次啟動快,業務型項目或者反射多的項目不適合用AOT AOT更新記錄: 實實在在經過實踐的AOT ORM 5.1.4.117 +支持AOT 5.1.4.123 +支持CodeFirst和非同步方法 5.1.4.129-preview1 ...
  • 總說周知,UWP 是運行在沙盒裡面的,所有許可權都有嚴格限制,和沙盒外交互也需要特殊的通道,所以從根本杜絕了 UWP 毒瘤的存在。但是實際上 UWP 只是一個應用模型,本身是沒有什麼許可權管理的,許可權管理全靠 App Container 沙盒控制,如果我們脫離了這個沙盒,UWP 就會放飛自我了。那麼有沒... ...
  • 目錄條款17:讓介面容易被正確使用,不易被誤用(Make interfaces easy to use correctly and hard to use incorrectly)限制類型和值規定能做和不能做的事提供行為一致的介面條款19:設計class猶如設計type(Treat class de ...
  • title: 從零開始:Django項目的創建與配置指南 date: 2024/5/2 18:29:33 updated: 2024/5/2 18:29:33 categories: 後端開發 tags: Django WebDev Python ORM Security Deployment Op ...
  • 1、BOM對象 BOM:Broswer object model,即瀏覽器提供我們開發者在javascript用於操作瀏覽器的對象。 1.1、window對象 視窗方法 // BOM Browser object model 瀏覽器對象模型 // js中最大的一個對象.整個瀏覽器視窗出現的所有東西都 ...