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.mzph.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]…