GIS开发零基础入门:地图操作(附代码)

article/2025/10/25 12:56:14

 

示例功能

    本示例在加载了天地图矢量图层以及其注记图层的基础上,添加了地图视图的放大、缩小、跳转以及复位功能。

示例实现

    本示例需要使用 【include-openlayers-local.js】 开发库实现,然后通过 setZoom(zoom)方法设置地图的缩放等级,通过 setCenter(center)方法设置地图中心点。

实现步骤

Step 1. 引用开发库:
    本示例通过本地离线 【include-openlayers-local.js】 脚本引入开发库;

Step 2. 创建地图容器:
    创建id="mapCon"的 div 作为地图容器,并设置其样式;

Step 3. 创建地图对象:
    创建地图对象,设置地图的必要参数,如地图 div 容器、缩放层级、中心点等,添加天地图,具体操作参考互联网地图目录下的天地图示例;

Step 4. 地图放大:
    通过设置地图视图的 Zoom 级别实现地图视图放大功能;

Example:

  //获取地图视图var view = map.getView()//获得当前缩放级数var zoom = view.getZoom()//地图放大一级view.setZoom(zoom + 1)

Example:

  //获取地图视图var view = map.getView()//获得当前缩放级数var zoom = view.getZoom()//地图缩小一级view.setZoom(zoom - 1 >= 1 ? zoom - 1 : 1)

Step 6. 地图跳转:
    通过设置地图视图的中心点位置和 Zoom 级别实现地图视图跳转;

Example:

  //获取地图视图var view = map.getView()var wh = ol.proj.fromLonLat([114, 30])//平移地图view.setCenter(wh)view.setZoom(7)

Step 7. 地图复位:
    通过设置地图视图初始的中心点位置、Zoom 级别和旋转角度实现地图视图复位功能。

Example:

  var view = map.getView()//初始中心点view.setCenter(center)//初始旋转角度view.setRotation(rotation)//初始缩放级数view.setZoom(zoom)

 

关键接口

1.【地图视图类】ol.View

【method】setZoom(zoom):设置地图视图的 Zoom 等级

参数名类型说明
zoomnumber地图缩放等级

【method】setCenter(center):设置地图视图的中心点

参数名类型说明
centercoordinate视图中心点坐标

 完整代码

<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title></title><!--当前示例页面样式表引用--><link rel="stylesheet" href="./static/demo/openlayers/example/style.css" /><script include="jquery" src="./static/libs/include-lib-local.js"></script><script src="./static/libs/include-openlayers-local.js"></script><style type="text/css">#mapCon {width: 100%;height: 95%;position: absolute;}</style><script type="text/javascript">var map = null;var TiandiMap_vect = null;var TiandiMap_vectcia = null;var tdk = "4c27d6e0e8a90715b23a989d42272fd8";   //天地图密钥//地图视图的初始参数var view =null;var zoom =null;var center =null;var rotation =null;function init() {//初始化地图容器map = new ol.Map({target: 'mapCon',     //地图容器div的IDcontrols: ol.control.defaults({attributionOptions: ({collapsible: true})}),view: new ol.View({center: [12000000, 4000000],  //地图初始中心点maxZoom: 28,         //最大瓦片显示级数minZoom: 1,          //最小瓦片显示级数zoom: 6,             //地图初始显示级数rotation: Math.PI/6  //设置旋转角度})});//加载天地图瓦片图层数据TiandiMap_vect = new ol.layer.Tile({title: "天地图矢量图层",source: new ol.source.XYZ({url: "http://t0.tianditu.com/DataServer?T=vec_w&x={x}&y={y}&l={z}&tk=" + tdk,wrapX: false})});TiandiMap_vectcia =new ol.layer.Tile({title: "天地图矢量注记图层",source: new ol.source.XYZ({url: "http://t0.tianditu.com/DataServer?T=cva_w&x={x}&y={y}&l={z}&tk=" + tdk})});map.addLayer(TiandiMap_vect);map.addLayer(TiandiMap_vectcia);//地图视图的初始参数view = map.getView();zoom = view.getZoom();center = view.getCenter();rotation = view.getRotation();}function ZoomIn(){//获取地图视图var view = map.getView();//获得当前缩放级数var zoom = view.getZoom();//地图放大一级   view.setZoom(zoom + 1);}function ZoomOut(){//获取地图视图var view = map.getView();//获得当前缩放级数var zoom = view.getZoom();//地图缩小一级   view.setZoom(zoom - 1>=1?zoom - 1:1);}function JumpTo(){//获取地图视图var view = map.getView();var wh = ol.proj.fromLonLat([114, 30]);//平移地图view.setCenter(wh);view.setZoom(7);}function Reset(){var view = map.getView();//初始中心点view.setCenter(center);//初始旋转角度view.setRotation(rotation);//初始缩放级数view.setZoom(zoom); }</script>
</head><body onload="init()"><div id="mapCon"></div><div id="menuContain" class='menuContain'><div id="tool-container"><div id='dataSourceMenuID'  class="optmain"  status="unactive" onclick="switchMenuStatus(this,'menu1')"><span></span><i class="menuGroup">视图控制</i><em></em></div></div></div><div id="menu1" class="menuStrip" style='display:none' ><ul  class="menuItems"><li   onclick="ZoomIn()"><span class="item1"></span><i >放大</i></li><li  onclick="ZoomOut()"><span class="item1"></span><i >缩小</i></li><li  onclick="JumpTo()"><span class="item1"></span><i >跳转</i></li><li class="divider"></li><li onclick="Reset()"><span class="item3"></span><i>复位</i></li></ul></div><script>function switchMenuStatus(div, menuitemFrameID) {var temDivs = document.getElementsByClassName('optmain');if (temDivs.length > 0) {for (var i = 0; i < temDivs.length; i++) {if (temDivs[i] === div) {var status = div.getAttribute("status");if (status == "unactive") {div.setAttribute("status", "active");var tem_spans = div.getElementsByTagName("span");var tem_ems = div.getElementsByTagName("em");tem_spans[0].className = "active";tem_ems[0].className = "active";//显示菜单项DisplayMenuItem(true, menuitemFrameID);}else {div.setAttribute("status", "unactive");var tem_spans = div.getElementsByTagName("span");var tem_ems = div.getElementsByTagName("em");tem_spans[0].className = "";tem_ems[0].className = "";//隐藏菜单项DisplayMenuItem(false, menuitemFrameID);}}else {var status = temDivs[i].getAttribute("status");if (status == "active") {temDivs[i].setAttribute("status", "unactive");var tem_spans = temDivs[i].getElementsByTagName("span");var tem_ems = temDivs[i].getElementsByTagName("em");tem_spans[0].className = "";tem_ems[0].className = "";}}}}}function DisplayMenuItem (isDisplay, iframeID) {var menuItemFrame = document.getElementById(iframeID);if (menuItemFrame != null) {if (isDisplay) {var temDivs = document.getElementsByClassName('menuStrip');if (temDivs.length > 0) {for (var i = 0; i < temDivs.length; i++) {if (temDivs[i] != menuItemFrame) {temDivs[i].style.display = "none";}}   }menuItemFrame.style.display = "";}else {menuItemFrame.style.display = "none";}}};</script>
</body></html>

点击领更多学习GIS软件开发内容


http://chatgpt.dhexx.cn/article/dC2vYYmh.shtml

相关文章

第一章第1节-什么是GIS开发

1. 什么是GIS 要了解GIS开发, 首先我们要知道什么是GIS GIS: Geographic Information System 地理信息系统 地理信息系统&#xff08;GIS&#xff0c;Geographic Information System&#xff09;是一门综合性学科 结合了地理学与地图学以及遥感和计算机科学 详细内容参考: …

GIS开发实战图谱

总结了GIS开发的技术栈&#xff0c;罗列了应该了解的内容。 算是比较大而全的了&#xff0c;分理论、规范、数据、算法、软件、后端、前端、方向8个专项。 不求短期内全部都会&#xff0c;但还是一个比较好的学习框架和实践索引&#xff0c;如果基础好的话&#xff0c;两三年…

js中的设计模式之适配器模式

Js中的适配器模式 定义 将一个对象的接口适配成用户所期待的接口。 详细描述 适配器模式就是将不同对象的方法适配成可以对接或者统一调用的方式。它也是包装器的一种。 在生活中也有很多类似的例子&#xff0c;比如有的手机没有3.5耳机插口&#xff0c;所以就需要增加一个…

JavaScript设计模式之状态模式

什么是状态模式&#xff1f; 状态模式是一种非同寻常的优秀模式&#xff0c;它也许是解决某些需求场景的最好方法。虽然状态模式并不是一种简单到一目了然的模式&#xff08;它往往还会带来代码量的增加&#xff09;&#xff0c;但你一旦明白了状态模式的精髓&#xff0c;以后…

【JavaScript设计模式】观察者模式

观察者模式 文章目录 观察者模式&#x1f330;&#xff1a;理解观察者模式手写观察者模式必须先订阅再发布吗Vue数据双向绑定&#xff08;响应式系统&#xff09;的实现原理实现一个Event Bus/ Event Emitter在Vue中使用Event Bus来实现组件间的通讯 观察者模式与发布-订阅模式…

js设计模式

js设计模式 1.构造器函数 function Ema(name, age) {this.name nameconsole.log(this);//谁调用了this就指向谁this.sayfunction(){console.log(1)}}let ema1new Ema(zhangsna1)let ema2new Ema(李四1)console.log(ema1);//Ema obj {name:zhangsan1, Fun say}console.log(ema…

八大最常用的JavaScript设计模式

八大最常用的JavaScript设计模式 设计模式&#xff08;Design pattern&#xff09; 是解决软件开发某些特定问题而提出的一些解决方案也可以理解成解决问题的一些思路。通过设计模式可以帮助我们增强代码的可重用性、可扩充性、 可维护性、灵活性好。我们使用设计模式最终的目…

JavaScript 设计模式之组合模式

引 我们知道地球和一些其他行星围绕着太阳旋转&#xff0c;也知道在一个原子中&#xff0c;有许多电子围绕着原子核旋转。我曾经想象&#xff0c;我们的太阳系也许是一个更大世界里的一个原子&#xff0c;地球只是围绕着太阳原子的一个电子。而我身上的每个原子又是一个星系&a…

JavaScript设计模式

JavaScript设计模式 设计模式&#xff1a;代码经验的总结&#xff0c;是可重用的用于解决软件设计中一般问题的方案。 设计模式都是面向对象的。 学习设计模式&#xff0c;有助于写出可复用和可维护性高的程序。 常用的12种设计模式&#xff1a; 工厂模式 单例模式 原型模…

JavaScript中常见的十五种设计模式

一、单例模式 二、策略模式 三、代理模式 四、迭代器模式 五、发布—订阅模式 六、命令模式 七、组合模式 八、模板方法模式 九、享元模式 十、职责链模式 十一、中介者模式 十二、装饰者模式 十三、状态模式 十四、适配器模式 十五、外观模式 一、单例模式 1. …

JS 常用的六种设计模式介绍

常用设计模式 前言 我们经常听到一句话&#xff0c;“写代码要有良好的封装&#xff0c;要高内聚&#xff0c;低耦合”。究竟怎样的代码才算得上是良好的代码。 什么是高内聚&#xff0c;低耦合&#xff1f; 即五大基本原则&#xff08;SOLID&#xff09;的简写 高层模块不…

git工具统计项目的代码行数

1、git 查看代码的项目总行数 &#xff08;1&#xff09;打开Git终端&#xff0c;进入项目的根目录 git log --prettytformat: --numstat | awk { add $1; subs $2; loc $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add,…

小技巧之统计代码行数

欢迎关注我的微信公众号“人小路远”哦&#xff0c;在这里我将会记录自己日常学习的点滴收获与大家分享&#xff0c;以后也可能会定期记录一下自己在外读博的所见所闻&#xff0c;希望大家喜欢&#xff0c;感谢支持&#xff01; 搞了两个月&#xff0c;连搬带抄写出来的代码&a…

MAC代码下统计代码行数工具

作为一名程序员在很多的时候需要统计代码行数&#xff1a; 支持windows系统的代码行数统计方法以及软件很多&#xff0c;但是MAC系统的统计代码行数的真的不太多。 大家都知道用 wc -l 命令进行代码行数统计&#xff0c;但是它会将代码中的注释、空行所占用的文本行都统计在内…

cloc工具 命令行 统计代码行数

基本用法 &#xff1a;cloc后面跟目录名&#xff0c;文件名&#xff0c;或压缩文件名 例如&#xff1a; cloc ./application 1.安装(参考官网http://cloc.sourceforge.net/#apt-get) 根据操作系统不同&#xff0c;选择以下任意安装方法 sudo npm install -g cloc …

程序代码行数统计

程序写完了&#xff0c;提交著作权的时候不知道代码行数是多少怎么办&#xff1f; 介绍 软件名称兼容系统下载地址代码统计工具Windows软件下载 下面我们开始教程 打开主应用程序点击加号添加程序项目所在的目录点击按钮选择需要统计文件的文件后缀&#xff0c;看个人需求如…

计代码行数cloc,一个代码统计行数很好用的工具

分为window、mac系统区分&#xff0c;基本是一样的&#xff0c;一个代码统计行数很好用的工具。 CLOC简介 Cloc是一款使用Perl语言开发的开源代码统计工具&#xff0c;支持多平台使用、多语言识别&#xff0c;能够计算指定目标文件或文件夹中的文件数&#xff08;files&#x…

统计代码量-代码统计工具 CLOC | gitlab统计代码量

文章目录 一、代码统计工具 CLOC什么是CLOC?下载安装clocs使用 二、gitlab统计代码量命令行统计图形化统计IDE Statistic统计代码插件 一、代码统计工具 CLOC 什么是CLOC? github: https://github.com/AlDanial/cloc CLOC是Count Lines of Code的意思&#xff0c;可以计算…

Python实现一个代码行数统计工具(以C/C++为例)

前几天在网上看到一个有意思的题&#xff0c;题目是设计一个代码行数统计工具。这类工具我经常会用到&#xff0c;但是具体是如何实现的呢&#xff1f;这个问题我还从未思考过&#xff0c;于是便试着做出这种工具。 题目描述是这样的&#xff1a; 题目要求&#xff1a;   请…

统计项目代码行数工具cloc

Ubuntu用户 使用cloc在ubuntu内统计代码行数 安装cloc工具 sudo apt-get install cloc进入需要统计的目录内&#xff0c;然后执行 cloc .然后就会显示文件目录中的文件数(files)、空白行数(blank)、注释行数(comment)和代码行数(code)。 Windows 用户 也是使用cloc工具 …