OpenLayers集成天地圖服務開發指南

以下是一份面向GIS初學者的OpenLayers開發詳細教程,深度解析代碼:
在這里插入圖片描述

一、開發環境搭建

1.1 OpenLayers庫引入

<!-- 使用CDN引入最新版OpenLayers -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/ol@latest/ol.css">
<script src="https://cdn.jsdelivr.net/npm/ol@latest/dist/ol.js"></script>
  • ol.css:包含地圖控件、圖層等可視化樣式
  • ol.js:OpenLayers核心功能庫
  • 推薦使用固定版本號(如v7.3.0)確保穩定性

1.2 地圖容器設置

.map {//設置地圖控件顯示尺寸height: 95vh;width: 95vw;
}
  • 使用視口單位(vh/vw)實現響應式布局
  • 保留5%邊距防止窗口遮擋

二、地圖核心配置解析

2.1 地圖實例化

var map = new ol.Map({target: 'map',        // DOM元素IDlayers: [/* 圖層數組 */],view: new ol.View({/* 視圖配置 */})
});
  • target:綁定HTML元素的ID
  • layers:圖層加載順序遵循數組索引(先添加的在下層)
  • view:地圖的空間參照系與初始狀態

2.2 坐標系與投影轉換

view: new ol.View({center: ol.proj.fromLonLat([120.62, 31.32]), // 蘇州坐標zoom: 8,projection: "EPSG:3857"
})
  • EPSG:3857:Web墨卡托投影(Google/Bing等通用)
  • ol.proj.fromLonLat():將WGS84坐標(EPSG:4326)轉換為Web墨卡托坐標
  • 轉換公式:x = lon * 20037508.34 / 180, y = Math.log(Math.tan((90+lat)*Math.PI/360)) * 20037508.34 / Math.PI

2.3 天地圖服務配置

new ol.layer.Tile({title: "天地圖地形圖層",source: new ol.source.XYZ({url: "http://t0.tianditu.gov.cn/DataServer?T=ter_w&x={x}&y={y}&l={z}&tk=您的密鑰",wrapX: true})
})
  • 服務參數解析:
    • T=ter_w:全球地形圖(中文標注)
    • T=cta_w:地形注記層(需疊加顯示)
    • x/y/z:瓦片坐標與縮放級別
    • tk:開發者密鑰(需自行申請更換)
  • wrapX: true:啟用經度方向瓦片循環

三、進階功能擴展

3.1 地圖控件集成

// 比例尺控件
new ol.control.ScaleLine({units: 'metric', // 公制單位className: 'ol-scale-line' // 自定義樣式類
})// 旋轉復位控件
new ol.control.Rotate({autoHide: false,  // 常顯旋轉指示器duration: 500     // 復位動畫時長
})

3.2 多源數據疊加

// 添加WMS服務示例
new ol.layer.Tile({source: new ol.source.TileWMS({url: 'https://demo.geo-solutions.it/geoserver/wms',params: {'LAYERS': 'topp:states','TILED': true}})
})

四、專業優化建議

4.1 性能優化

  1. 預加載設置:
new ol.layer.Tile({preload: Infinity, // 預加載所有相鄰瓦片useInterimTilesOnError: false // 禁用錯誤瓦片顯示
})
  1. 緩存控制:
source: new ol.source.XYZ({cacheSize: 512,    // 緩存容量crossOrigin: 'anonymous' // 跨域標識
})

4.2 錯誤處理

// 監聽瓦片加載錯誤
source.on('tileloaderror', function(event) {console.error('Tile加載失敗:', event.tile.src);
});// 全局錯誤捕獲
map.on('error', function(error) {console.error('地圖錯誤:', error.message);
});

五、完整代碼展示

一下代碼展示了如何加載天地圖地形暈渲與地形注記。注意修改您的密鑰

<!DOCTYPE html>
<html lang="zh">
<head><!-- 引入在線 OpenLayers 樣式和腳本 --><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/ol@latest/ol.css"><script src="https://cdn.jsdelivr.net/npm/ol@latest/dist/ol.js"></script><style>.map {height: 95vh;width: 95vw;}</style><title>天地圖地形圖</title>
</head>
<body><div id="map" class="map"></div><script type="text/javascript">// 創建地圖var map = new ol.Map({target: 'map',layers: [new ol.layer.Tile({title: "天地圖地形圖層",source: new ol.source.XYZ({                     url: "http://t0.tianditu.gov.cn/DataServer?T=ter_w&x={x}&y={y}&l={z}&tk=您的密鑰",                        wrapX: true})                    }),new ol.layer.Tile({title: "天地圖地形圖層注記",source: new ol.source.XYZ({                        url: "http://t0.tianditu.gov.cn/DataServer?T=cta_w&x={x}&y={y}&l={z}&tk=您的密鑰",                        wrapX: true})                    })],view: new ol.View({center: ol.proj.fromLonLat([120.62, 31.32]), // 設置初始中心點(蘇州)zoom: 8,projection: "EPSG:3857" // 使用Web墨卡托投影以適配 OpenLayers})});// 添加比例尺var scaleLineControl = new ol.control.ScaleLine();map.addControl(scaleLineControl);// 添加方向工具(重置旋轉)var rotateControl = new ol.control.Rotate();map.addControl(rotateControl);</script>
</body>
</html>

六、天地圖所有類型地圖展示

下方連接教程中的代碼已經添加了控件直接控制不同類型地圖(以及注記)。只需要填入您的密鑰即可使用。
OpenLayers集成天地圖服務【懶人版】


本教程完整實現了基于OpenLayers的地形圖展示系統。

推薦學習路徑:OpenLayers官方文檔 → OGC服務規范 → WebGL地圖渲染 → GIS算法基礎


轉載吱一聲~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/74174.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/74174.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/74174.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【免費】2000-2019年各省地方財政房產稅數據

2000-2019年各省地方財政房產稅數據 1、時間&#xff1a;2000-2019年 2、來源&#xff1a;國家統計局、統計年鑒 3、指標&#xff1a;行政區劃代碼、地區、年份、地方財政房產稅 4、范圍&#xff1a;31省 5、指標說明&#xff1a;房產稅是對個人和單位擁有的房產征收的一種…

在Ubuntu 22.04 中安裝Docker的詳細指南

在Ubuntu 22.04 中安裝Docker的詳細指南 一、引言 Docker是一個開源的應用容器引擎&#xff0c;它可以讓開發者將應用程序及其依賴項打包到一個可移植的容器中&#xff0c;然后發布到任何流行的Linux機器上&#xff0c;也可以實現虛擬化。在Ubuntu 22.04上安裝Docker能為開發、…

macOS 使用 iconv 轉化文件編碼

文章目錄 使用方式支持的編碼類型iconv 更多用法 使用方式 iconv -f GB2312 -t UTF-8 分治算法.txt > 分治算法2.txt 支持的編碼類型 可以使用 下面命令 查看編碼類型 iconv -lPS : ISO-8859 有很多種分支&#xff0c;iconv 支持 ISO-8859-1、ISO-8859-10&#xff0c;但…

操作系統核心問題解析(目的/定位、管理思想:先描述,再組織、 庫函數與系統調用的關系)

1. 目的/定位 核心作用&#xff1a;操作系統是計算機系統的資源管理者和用戶/應用程序的服務提供者。 資源管理&#xff1a;統一管理CPU、內存、磁盤、外設等硬件資源&#xff0c;避免沖突、提高利用率&#xff08;如多任務調度、虛擬內存&#xff09;。 服務接口&#xff1a…

使用Python將視頻轉化為gif

使用Python將視頻轉化為gif 一、前言二、準備三、測試 一、前言 最近想把喜歡的視頻片段作成gif&#xff0c;就試著用Python做了下&#xff0c;感覺效果還行&#xff0c;這里做個記錄。 二、準備 先下載安裝對應的庫&#xff0c;命令如下&#xff1a; pip install moviepy …

Python模塊化設計 ——函數調用

1.以下代碼的輸出結果是()。 def young(age): if 25 <=age<=30: print(“作為一個老師,你很年輕”) elif age <25: print(“作為一個老師,你太年輕了”) elif age>=60: print(“作為一個老師,你可以退休了”) else: print(“作為一個老師,你很有愛心”) young(42) …

在 Linux下使用 Python 3.11 和 FastAPI 搭建帶免費證書的 HTTPS 服務器

在當今數字化時代&#xff0c;保障網站數據傳輸的安全性至關重要。HTTPS 協議通過使用 SSL/TLS 加密技術&#xff0c;能夠有效防止數據在傳輸過程中被竊取或篡改。本教程將詳細介紹如何在 Ubuntu 22.04 系統上&#xff0c;使用 Python 3.11 和 FastAPI 框架搭建一個帶有免費 SS…

MySQL 事務(Transaction)詳解

MySQL 事務&#xff08;Transaction&#xff09;詳解 1. 什么是事務&#xff1f; 事務&#xff08;Transaction&#xff09;是一組要么全部執行&#xff0c;要么全部回滾的 SQL 語句&#xff0c;用于保證數據一致性。事務一般用于銀行轉賬、訂單支付等操作&#xff0c;確保多個…

SPI 機制與 Spring Boot AutoConfiguration 對比解析

一、架構效率革命性提升 1.1 類加載效率躍升 Spring Boot 2.7引入的AutoConfiguration.imports采用清單式配置加載&#xff0c;對比傳統SPI機制&#xff1a; 傳統SPI掃描路徑&#xff1a;META-INF/services/** Spring Boot新方案&#xff1a;META-INF/spring/org.springfram…

【 <二> 丹方改良:Spring 時代的 JavaWeb】之 Spring Boot 中的異常處理:全局異常與自定義異常

<前文回顧> 點擊此處查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12907601&sharereferPC&sharesourceFoyoDesigner&sharefromfrom_link <今日更新> 一、開篇整…

思源配置阿里云 OSS 踩坑記

按照正常的配置IAM&#xff0c;賦予OSS權限&#xff0c;思源筆記還是無法使用&#xff0c;缺少ListBuckets權限。 正常配置權限&#xff0c;又無法覆蓋&#xff0c;因此需要手動配置權限。 {"Version": "1","Statement": [{"Effect":…

Debezium日常分享系列之:Debezium Charts

Debezium日常分享系列之&#xff1a;Debezium Charts 最近&#xff0c;圍繞 Debezium 圖表發生了一些變化&#xff0c;所以我在這里解釋這些變化是什么以及背后的理由。正如您從我們的最新公告中了解到的&#xff0c;我們將發布 Debezium 管理平臺的第一個版本。 Debezium 管理…

moveit2基礎教程上手-使用xarm6演示

0、前置信息 開發環境&#xff1a;wsl。 ros版本&#xff1a;jazzy&#xff0c;ubuntu版本&#xff1a;24.04 xarm-ros2地址 1、啟動Rviz&#xff0c;加載 Motion Planning Plugin&#xff0c;實現演示功能 Getting Started — MoveIt Documentation: Rolling documentation…

第十六屆藍橋杯模擬二

由硬件框圖可以知道我們要配置LED 和按鍵 一.LED 先配置LED的八個引腳為GPIO_OutPut,鎖存器PD2也是,然后都設置為起始高電平,生成代碼時還要去解決引腳沖突問題 二.按鍵 按鍵配置,由原理圖按鍵所對引腳要GPIO_Input 生成代碼,在文件夾中添加code文件夾,code中添加fun.…

在OpenGL ES中將值傳入shader的方法總結

在OpenGL ES中&#xff0c;將值傳入Shader的方式主要有以下幾種&#xff1a; 1. Uniform變量 用途&#xff1a;用于傳遞在繪制過程中不變的常量數據&#xff0c;如變換矩陣、顏色等。步驟&#xff1a; 在Shader中聲明Uniform變量&#xff1a;uniform mat4 uMVPMatrix; // 例如…

華為總部-華為東莞松山湖基地參觀游學攻略

你有聽說過全球科技巨頭-華為嗎&#xff1f;今天帶你深入了解這一世界標桿工廠的秘密基地。跟隨華研標桿游學服務商一窺華為的強大實力。 在東莞松山湖&#xff0c;這里不僅僅是華為的終端總部&#xff0c;更是研發、銷售和增值業務的核心區域。我們一行人抵達后&#xff0c;立…

Linux小知識

1. /etc目錄 我們在配置文件中一直會調用 /etc目錄 cd /etc/xxxx.conf etc的全稱是editable configuration&#xff08;其中一種說法&#xff09;意為可編輯的配置&#xff1b;此目錄主要用來存放系統的配置文件和初始化文件的&#xff1b;像網絡配置 用戶信息 各種服務的配置…

晶鑫股份邁向敏捷BI之路,永洪科技助力啟程

數據驅動的時代&#xff0c;每一次技術的創新和突破都在為企業的發展注入新的動力。而敏捷性也不再是選擇&#xff0c;是企業生存與發展的必要條件。作為連續5年獲得中國敏捷BI第一名的永洪科技&#xff0c;通過不斷地在數據技術領域深耕細作&#xff0c;再次迎來了行業內的關注…

基于CAMEL 的Workforce 實現多智能體協同工作系統

文章目錄 一、workforce 簡介1.架構設計2.通信機制 二、workforce 工作流程圖示例1.用戶角色2.工作流程 三、workforce 中重要函數說明1.__init__函數2.add_single_agent_worker 函數3.add_role_playing_worker 函數4.add_workforce 函數 四、基于workforce實現多智能體協調&am…

每日一題力扣2974.最小數字游戲c++

2974. 最小數字游戲 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:vector<int> numberGame(vector<int>& nums) {vector<int> arr(nums.size());sort(nums.begin(),nums.end());for(size_t i0;i<nums.size();i2){arr[i]nums[i1]…