openlayers实例_介绍OpenLayers

简介

Web开发有一个专门的方向就是Web GIS,而Openlayers库就是Web GIS里的一个翘楚,想要开源的Web GIS的JavaScript库几乎就没有别的选择。

OpenLayers的官网是

OpenLayers - Welcome​openlayers.org

目前最新的版本是5.3.x。它的github地址是

openlayers/openlayers​github.com
701fdf172ef15f064616dabc69aac0ea.png

看看官网上的一句话介绍——A high-performance, feature-packed library for all your mapping needs.,如果看不出什么来(微言而不大义),那就再看看详细的介绍和特性

OpenLayers makes it easy to put a dynamic map in any web page. It can display map tiles, vector data and markers loaded from any source. OpenLayers has been developed to further the use of geographic information of all kinds. It is completely free, Open Source JavaScript, released under the 2-clause BSD License (also known as the FreeBSD).

  • Tiled Layers
  • Vector Layers
  • Cutting Edge, Fast & Mobile Ready
  • Easy to Customize and Extend

总结出来几个特点是

  1. 做地图的
  2. 能支持不同的层类型,比如瓦片、矢量等
  3. 能支持移动设备了
  4. 方便定制和扩展
  5. Licence也不让你有后顾之忧

要强调的是OpenLayers仅仅是Web GIS的前端,不包含后端,而整个前后端的Web GIS的解决方案可以参考Arc GIS。有的场景下,比如数据量特别大,假设有10000个标记,那么不适合把数据传送到前端在前端渲染,而是在后端制图,在地图移动、缩放的时候把当前范围内的标记通过图像的方式传递到前端展现。

另一个混淆的概念是LBS应用,比如百度地图API、高德地图API等,这种适用于通用型的应用,而对于特别专业化的应用解决方案,比如电信业、交通业就不适合了,它们是不需要展现周围有什么公交站和电影院的 : )。

Hello World

新建目录,然后npm init -y初始化一下,修改package.json

{"name": "openlayers","version": "1.0.0","description": "","main": "index.js","scripts": {"start": "webpack-dev-server --open"},"keywords": [],"author": "","license": "ISC","dependencies": {"ol": "^5.3.3"},"devDependencies": {"html-webpack-plugin": "^3.2.0","webpack": "^4.39.1","webpack-cli": "^3.3.6","webpack-dev-server": "^3.7.2"}
}

新建webpack.config.js文件,以下几乎是最小化的配置了

const path = require("path");
const webpack = require("webpack");
const HtmlWebpackPlugin = require("html-webpack-plugin");module.exports = {mode: "development",entry: {app: "./src/index.js"},devtool: "inline-source-map",devServer: {//静态资源放这个目录下,不然会找不到contentBase: "./dist",hot: true},plugins: [new HtmlWebpackPlugin({template: "./dist/index.html"}),new webpack.HotModuleReplacementPlugin()],output: {filename: "[name].bundle.js",path: path.resolve(__dirname, "dist")}
};

入口的html.js文件

<!DOCTYPE html>
<html><head><meta charset="utf-8" /><title>Hello Openlayers</title><link rel="stylesheet" href="./ol.css" /><style>html,body {margin: 0;height: 100%;}#map {position: absolute;top: 0;bottom: 0;width: 100%;}</style></head><body><div id="map"></div></body>
</html>

入口的index.js文件

import { Map, View } from "ol";
import TileLayer from "ol/layer/Tile";
import OSM from "ol/source/OSM";
import { fromLonLat } from "ol/proj";
new Map({target: "map",layers: [new TileLayer({source: new OSM()})],view: new View({center: fromLonLat([121.47, 31.23]),zoom: 15})
});

7c5273e41ecd6007507d1c4e14992a70.png

不需要几行代码就搭建出了一个地图,这里加载的是OpenStreetMap,没有版权、费用的困扰。

基础概念

OpenLayers里有几个重要的概念,理清它们后有助于我们开发。

Map

Map就是地图,它是一个抽象的概念。Map上可以关联多个Layer或者一个View。它的定义在ol/Map下。

Layer

Layer表示一个图层。OpenLayers的名字里就带有Layer,表示最终它的展现效果是通过一层层的Layer来显示出来的,比如你可以在底部显示基础的地图,然后在地图的上方显示一些标记、线路、提示等效果。

它的定义在ol/layer下,有如下四种基础的Layer,前两种属于栅格,后两种属于矢量。

  • ol/layer/Tile - 渲染瓦片图片,就是那种将整个地图分解为一张张图片最后拼起来的
  • ol/layer/Image - 渲染图像
  • ol/layer/Vector - 渲染矢量数据
  • ol/layer/VectorTile - 渲染矢量瓦片

Source

Source就是地图的来源,在OpenLayers里可以支持多种地图源,比如OpenStreetMap 、Bing、XYZ或者矢量的KML等。

Source是跟Layer关联的。它的定义在ol/source下。

View

View用来表示一组属性,比如中心点,缩放大小以及映射等。它的定义在ol/View下。

控件

ol/control下已经定义了一些内置的控件,如果不满意,部分也是可以定制的。

大致有如下一些内置控件

  • 全屏
  • 鼠标经纬度
  • 旋转
  • 缩放
  • 小地图(类似于打游戏时的那种小地图)

d6f762d26f98f2235c586de2cff329bb.png

交互

交互事件定义在ol/interaction下,大致有如下一些交互事件

  • DragRotate
  • DoubleClickZoom
  • DragPan
  • PinchRotate
  • PinchZoom
  • KeyboardPan
  • KeyboardZoom
  • MouseWheelZoom
  • DragZoom

下图是测距和测面积的交互实例

f5646b5484d3267fe37c3a400d934822.png

API和Demo

我觉得只要理清基础概念,那么查阅API就不会很困难,在线API地址是

OpenLayers v5.3.0 API - Index​openlayers.org

可以先浏览一遍Demo,目前大约有将近170个例子,浏览过后就可以对OpenLayers能做一些什么事情心里有数了,它的地址是

OpenLayers Examples​openlayers.org

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/485909.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

macos Jetbrains IDEA用户自定义vm配置信息存储路径, IDEA点击无反应 无法打开问题解决

Jetbrains Clion, IDEA 用户在应用里面修改了自定义的VM配置后的存储路径为 ~/Library/Application Support/JetBrains/xxx2023.3/xxx.vmoptions xxx为你安装的APP名称, 如 Clion .IntelliJIdea 这里的自定义配置如果配置有误就会直接导致JetBrains软件无法打开, 即 点击打开…

【sping揭秘】19、关于spring中jdbctemplate中的DataSource怎么来呢

我们这是可以正好借助之前学的factorybean类&#xff0c;自己吧jdbctemplate加载到spring容器中&#xff0c;我们可以封装多个这种对象&#xff0c;那么可以实现针对不同的数据库的jdbctemplate 首先我们肯定要引入对应的jar&#xff0c;来构建数据源对象 <dependency>&l…

2020年度“中国神经科学重大进展”获奖名单【附成果介绍】

来源&#xff1a;brainnews编辑&#xff1a;Simon为了推动神经科学领域的创新发展&#xff0c;充分展示和宣传神经科学领域的重大科研成果&#xff0c;经中国神经科学学会七届二次常务理事会一致通过&#xff0c;开展2020年度“中国神经科学重大进展”推荐工作。按照相关程序&a…

python选择某一行_Python常用语法有哪些 如何快速入门Python开发

Python常用语法有哪些&#xff1f;如何快速入门Python开发&#xff1f;Python编程语言是最容易学习、并且功能强大的语言&#xff0c;吸引了很多人学习入行。很多人想知道如何快速入门Python开发&#xff0c;接下来就给大家分享Python学习入门中常用的语法知识。1、变量。常量&…

人类使用AI征服太空技术盘点,《星球大战》中的机器人会成为现实吗?

来源&#xff1a;学术头条作者&#xff1a;Thomas Lawrence一说起太空 AI&#xff0c;你脑海中浮现的是这样的角色吗&#xff1f;图 | 电影《星球大战》的AI机器人&#xff1a;C-3PO和R2-D2&#xff08;来源&#xff1a;starwars.fandom.com)实际上&#xff0c;早在现代计算机问…

springboot jar中没有主清单属性_Spring Boot 常见错误及解决方法

导读Spring Boot 作为 Java 生态中最流行的开发框架&#xff0c;意味着被数以万计的开发者所使用。下面根据我们自身遇到的问题&#xff0c;加上用户提供的一些反馈&#xff0c;来大致梳理下 Spring Boot 的常见错误及解决方法。找不到配置&#xff1f;配置不对&#xff1f;配置…

Nature:2020年10大科学发现

文章来源&#xff1a;新浪探索在2020年即将结束之际&#xff0c;《自然》&#xff08;Nature&#xff09;杂志盘点了今年发表的科学新闻和研究观点&#xff0c;从中选出了十项最为重大的科学发现&#xff0c;既包括新冠病毒研究、压力如何导致白发、HIV治疗等医学方面的研究&am…

php mysql上传多张图片_PHP实现一次性多张图片上传功能

原标题&#xff1a;PHP实现一次性多张图片上传功能最近遇到一个需求&#xff0c;就是多张图片上传&#xff0c;按住Ctrl键能选择多张图片一次性上传&#xff0c;上传成功后数据库保存图片的路径及图片原来的文件名。该功能一般在比较成熟的内容编辑器插件中有&#xff0c;今天特…

【2018.6.7】阶段总结

颓废了好久-.- 不记得从什么时候开始的了吧- 1. 好像是去年初赛翻车&#xff1f;&#xff09;&#xff09;归于以外好像也是我不对&#xff0c;&#xff0c;&#xff0c;总之很多&#xff0c;&#xff0c;不对的地方吧&#xff0c;&#xff0c;&#xff0c;我&#xff0c;&am…

车联网支持实现无人驾驶的思考

来源&#xff1a;机器学习研究组订阅号/ 导读 /无人驾驶是车辆作为运载工具智能化、网联化发展的核心应用功能&#xff0c;也是车联网、智慧交通产业发展的核心应用服务。网联无人驾驶则是在车辆智能化基础上&#xff0c;通过车联网实现车与车、车与路等的互联和信息交互&#…

简论重大科学发现诞生的时机

来源&#xff1a;秦四清科学网博客。链接地址&#xff1a;http://blog.sciencenet.cn/blog-575926-1263364.html 纵观科学史&#xff0c;几乎每一项重大科学发现诞生的时机需要&#xff1a;&#xff08;1&#xff09;当时已具备足够的知识和资料储备&#xff1b;&#xff08;2&…

python pip gpl_python pip怎么更新包

1、pip下载安装1.1 pip下载进入https://pypi.python.org/pypi/pip&#xff0c;下载 .tar.gz压缩包1.2 Linux安装pip# tar -xzvf pip-1.5.4.tar.gz 解压# cd pip-1.5.4 进入解压文件# python setup.py install 安装1.3 升级pippython -m pip install…

人工智能皇冠上的明珠:自然语言处理简介、最新进展、未来趋势

来源&#xff1a;图灵人工智能 编辑&#xff1a;TJUNLP 自然语言处理&#xff08;Nature Language Processing&#xff0c;NLP&#xff09;被誉为“人工智能皇冠上的明珠”&#xff0c;一方面表明了它的重要性&#xff0c;另一方面也显现出了它的技术难度。本文整理了自然语言…

Yoshua Bengio:深度学习的未来需要“探索高级认知的归纳偏置”

来源&#xff1a;AI科技评论 编译&#xff1a;Mr Bear本文介绍了Yoshua Bengio及其学生Anirudh Goyal近期发表的一篇论文&#xff0c;该论文围绕“归纳偏置”概念&#xff0c;展开了对当下人工智能研究现状的讨论&#xff0c;并提出了富有启发性的观点&#xff1a;不同的深度学…

头发剪短了要快速生发_怎样生发效果最好最快?四个方法快速长出头发!

脱发问题导致很多人头发稀少、头发细软油腻&#xff0c;这些症状&#xff0c;让患者时常感到十分的痛苦&#xff0c;因为他们每天都要面临被调侃和取笑的尴尬&#xff0c;不仅个人形象全无&#xff0c;更是饱受严重的自卑心理&#xff0c;甚至因为脱发问题&#xff0c;总是给人…

AI求解薛定谔方程,兼具准确度和计算效率,登上《自然-化学》

来源&#xff1a;机器学习研究组订阅号即使并非物理学界人士&#xff0c;我们也对薛定谔这个名字并不陌生&#xff0c;比如「薛定谔的猫」。著名物理学家埃尔温 薛定谔是量子力学奠基人之一&#xff0c;他在 1926 年提出的薛定谔方程&#xff08;Schrdinger equation&#xff…

redis修改端口号后还是占用6379_Redis分布式缓存分布式集群搭建

当你试图解决一个你不理解的问题时,复杂化就产成了。—Andy BootheRedis集群安装部署Redis是一个运行在内存的非关系型数据库&#xff0c;因为其速度快(效率高)&#xff0c;支持数据的持久化(安全)&#xff0c;事务操作的原子性(所有操作的原子性)&#xff0c;使得其在高并发场…

千禧年大奖难题之始与未终

来源&#xff1a;数学文化撰文&#xff1a;Arthur Michael Jaffe、薛博卿“千禧年大奖难题”的诞生千禧之际&#xff0c;万象更新&#xff0c;数学界的柔风细雨中惊响起初夏的雷鸣。七个重要的数学问题&#xff01;七百万美元的巨额奖金&#xff01;克雷数学研究所公布的大奖难…

linux mysql 5.6.14_CentOS 6.4下编译安装MySQL 5.6.14

配置用户MySQL启动成功后&#xff0c;root默认没有密码&#xff0c;我们需要设置root密码。设置之前&#xff0c;我们需要先设置PATH&#xff0c;要不不能直接调用mysql修改/etc/profile文件&#xff0c;在文件末尾添加PATH/usr/local/mysql/bin:$PATHexport PATH关闭文件&…

全世界最前沿的125个科学问题

来源&#xff1a;世界先进制造技术论坛在庆祝Science创刊125周年之际&#xff0c;Science公布了125个最具挑战性的科学问题。了解前沿科学研究方向&#xff0c;对你的成长或许有所帮助。简单归纳统计这125个问题&#xff0c;其中涉及生命科学的问题占46%&#xff0c;关系宇宙和…