当你希望实现某种功能的时候,即使你对 openlayers 几乎一窍不通,照着官网的例子做,也可以很快的实现想要的效果。

问题在于,官网的例子都是英文啊,不能很快定位到想要的效果是在哪个例子里面!!( 英文不渣就别看这篇文章了 )

最近在学 openlayers ,我觉得非常有必要将 openlayers 官网的所有例子都看过去一遍,这篇文章就当是笔记了。

名词解释

在 openlayer 里,下面这些单词应该这么翻译。

layer:层
contorl:控件
feature:元素
interaction:交互
Vector:矢量的
Tile:瓦片
source:资源
format:转换
projection:投影

无障碍地图

Accessible Map

当地图获得焦点之后,可以使用键盘对地图进行控制,+ 键放大地图,- 键缩小地图,tab 键切换地图中的按钮,enter 键点击地图中的按钮,↑ ↓ ← → 键移动地图...

对于小白来说,官网的例子有些东西是不必要的,比如官网例子中的 controls,最初我以为要使用键盘控制地图是不是和这个 controls 有点关联呢?其实它们一点关系都没有,地图默认就支持无障碍访问,为了更好更快的理解例子,我会在每个例子中给出最精简的代码:

<div id="map"></div>
<script>//layers、target、view是地图最基本的部分,是必需的new ol.Map({layers: [new ol.layer.Tile({source: new ol.source.OSM()})],target: 'map',view: new ol.View({center: [0, 0],zoom: 2})});
</script>

视图动画

View Animation
让地图的视图拥有动画啊效果,关键点在于 loadTilesWhileAnimatingview.animate。这个动画最基本 的效果有三种:移动、旋转、放缩,通过这三种效果的组合,可以做出很多特效。

<div id="map"></div>
<script>//地图的视图var view = new ol.View({center: [0, 0],zoom: 2});new ol.Map({layers: [new ol.layer.Tile({source: new ol.source.OSM()})],loadTilesWhileAnimating: true,//将这个设置为true,默认为falsetarget: 'map',view: view});var london = ol.proj.fromLonLat([-0.12755, 51.507222]);//伦敦的坐标//移动到伦敦,移动时是有动画的view.animate({center:london,});
</script>

使用 ArcGIS 图片服务器

Image ArcGIS MapServer
这个没弄懂,貌似官网给的这个 url:https://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StateCityHighway_USA/MapServer 用不了了????。

<div id="map"></div>
<script>new ol.Map({layers: [new ol.layer.Tile({source: new ol.source.OSM()}),new ol.layer.Image({source: new ol.source.ImageArcGISRest({ratio: 1,params: {},url: 'https://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StateCityHighway_USA/MapServer'})})],target: 'map',view: new ol.View({center: [0, 0],zoom: 2})});
</script>

使用 ArcGIS 瓦片服务器

Tiled ArcGIS MapServer
这里使用了 ArcGIS 瓦片服务器的图源,和上面的 ArcGIS 图片服务器类似,注意对比两者的区别。

<div id="map"></div>
<script>new ol.Map({layers: [new ol.layer.Tile({source: new ol.source.BingMaps({key: 'AkjzA7OhS4MIBjutL21bkAop7dc41HSE0CNTR5c6HJy8JKc7U9U9RveWJrylD3XJ',imagerySet: 'Road'})}),new ol.layer.Tile({source:  new ol.source.TileArcGISRest({ratio: 1,params: {},url: 'https://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StateCityHighway_USA/MapServer'})})],target: 'map',view: new ol.View({center: [0, 0],zoom: 2})});
</script>

版权归属

Attributions

Attributions 的意思是「归属」,指的是右下角那个版权控件。

为了更好的理解这一个例子,下面代码展示了如何给地图添加控件:

<div id="map"></div>
<script>var attribution = new ol.control.Attribution();//这是版权控件var FullScreen = new ol.control.FullScreen();//这是全屏控件var map = new ol.Map({layers: [new ol.layer.Tile({source: new ol.source.OSM()})],controls: [attribution,FullScreen],//如果不设置 controls ,地图会默认设置target: 'map',view: new ol.View({center: [0, 0],zoom: 2})});
</script>

这样,我们就能在地图上显示版权和全屏按钮了,如果不设置 controls ,那么地图会默认帮我们设置,默认的效果等同于如下代码:

<div id="map"></div>
<script>var map = new ol.Map({layers: [new ol.layer.Tile({source: new ol.source.OSM()})],controls: ol.control.defaults(),//这就是默认的效果target: 'map',view: new ol.View({center: [0, 0],zoom: 2})});
</script>

接下来我们来看官网的例子:

<div id="map"></div>
<script>var attribution = new ol.control.Attribution({collapsible: false});var map = new ol.Map({layers: [new ol.layer.Tile({source: new ol.source.OSM()})],//这里的意思是,使用默认的 controls ,但是把默认的「版权控件」设置为false,隐藏掉了//然后使用 .extend 来添加一个新的「版权控件」controls: ol.control.defaults({attribution: false}).extend([attribution]),target: 'map',view: new ol.View({center: [0, 0],zoom: 2})});function checkSize() {var small = map.getSize()[0] < 600;attribution.setCollapsible(small);attribution.setCollapsed(small);}window.addEventListener('resize', checkSize);checkSize();
</script>

必应地图

Bing Maps
就是使用必应地图的一些API接口。这个例子展示了如何动态显示、隐藏地图的层 ( layers ),主要用到的是 setVisible 方法。

<div id="map"></div>
<script>var layer1 = new ol.layer.Tile({visible: false,//非必填,默认truepreload: Infinity,//非必填、Infinity表示正无穷大source: new ol.source.BingMaps({key: 'AkjzA7OhS4MIBjutL21bkAop7dc41HSE0CNTR5c6HJy8JKc7U9U9RveWJrylD3XJ',//必填、key要自己去申请哦imagerySet: "Road",//必填,可选值:Road、Aerial、AerialWithLabels、collinsBart、ordnanceSurvey})});var layer2 = new ol.layer.Tile({source: new ol.source.BingMaps({key: 'AkjzA7OhS4MIBjutL21bkAop7dc41HSE0CNTR5c6HJy8JKc7U9U9RveWJrylD3XJ',imagerySet: "AerialWithLabels",})});new ol.Map({layers: [layer1,layer2],target: 'map',view: new ol.View({center: [0, 0],zoom: 2})});//3秒后隐藏 layer2 显示 layer1setTimeout(function(){layer1.setVisible(true);layer2.setVisible(false);},3000);
</script>

setVisible 主要继承于 ol.layer.Base 类,拥有这个方法的类有:

ol.layer.Baseol.layer.Groupol.layer.Layerol.layer.Imageol.layer.Tile//我们用到的就是这个ol.layer.Vectorol.layer.Heatmapol.layer.VectorTile

框选

Box Selection
按住 ctrl + 鼠标左键拖拽,就可以框选地图上的一些元素。

这里框选属于一种交互,分别是 选择画框 两种交互:

<div id="map"></div>
<script>var map = new ol.Map({layers: [new ol.layer.Vector({//这是一个能选择的地图源source: new ol.source.Vector({url: 'https://openlayers.org/en/v4.1.1/examples/data/geojson/countries.geojson',format: new ol.format.GeoJSON()})})],interactions:[//交互new ol.interaction.Select(),//选择new ol.interaction.DragBox({condition: ol.events.condition.platformModifierKeyOnly})//画框],target: 'map',view: new ol.View({center: [0, 0],zoom: 2})});
</script>

interactions是交互的意思,如果不设置默认为 ol.interaction.defaults()。接下来看官网的例子:
未完待续...

混合模式

Blend Modes

提示框

Custom Tooltips

调试瓦片

Canvas Tiles

给元素添加渐变样式

Styling feature with CanvasGradient or CanvasPattern

CartoDB 图源

CartoDB source example
这个东西可以通过 sql 语句来筛选元素。

显示的密集元素

Clustered Features

根据元素定位视图

Advanced View Positioning

调整地图的颜色

Color Manipulation

自定义控件

Custom Controls

自定义logo

Custom Icon

自定义交互

Custom Interactions

整合 D3 来绘图

d3 Integration

设备方向

Device Orientation

Drag-and-Drop Image Vector

Drag-and-Drop Image Vector

Drag-and-Drop

Drag-and-Drop

Drag, Rotate, and Zoom

Drag, Rotate, and Zoom

用鼠标交互绘制点、线、面、圆

Draw Features

用鼠标交互绘和修改制点、线、面、圆

Draw and Modify Features

用鼠标绘制线、面

Freehand Drawing
与上面「用鼠标交互绘制点、线、面、圆」不同的是,上面是点两点就成为线了,这里的线要拖着鼠标绘制,不是直线,是纯手绘的。

用鼠标绘制形状

Draw Shapes

动画的实现

Dynamic Data

postcompose 在地图渲染的时候会触发。

KML 文件绘制元素---- 地震集中区

Earthquake Clusters

KML文件绘制元素---- 自定义地震点的元素

Earthquakes with custom symbols

EPSG:4326

EPSG:4326

OpenLayers 官网例子的中文详解相关推荐

  1. layer添加元素 openlayer_OpenLayers 官网例子的中文详解

    当你希望实现某种功能的时候,即使你对 openlayers 几乎一窍不通,照着官网的例子做,也可以很快的实现想要的效果. 问题在于,官网的例子都是英文啊,不能很快定位到想要的效果是在哪个例子里面!!( ...

  2. 小米官网搜索框部分详解

    <!DOCTYPE html> <html>     <head>         <meta charset="utf-8" /> ...

  3. 瑞芯微RK PX30中文详解(带开源资料)简介

    瑞芯微RK PX30中文详解(带开源资料)简介 非常感谢您选择九鼎创展PX30开发平台,本文档讲述PX30开发平台的硬件资源,电路原理以及支持的接口等. PX30开发板是基于瑞芯微PX30的一款高端开 ...

  4. ABP框架官网例子实践(2)(ASP.NET core+Multi Page Web Application)

    ABP框架官网例子实践(1)(ASP.NET core+Multi Page Web Application) 第三步:开始在Application中进行编写代码 1.为app service定义一个 ...

  5. AT指令(中文详解版)(二)

    AT指令(中文详解版)(二) 常 用 AT 命 令 手 册   1.常用操作 1.1 AT 命令解释:检测 Module 与串口是否连通,能否接收 AT 命令: 命令格式:AT<CR> 命 ...

  6. php.ini配置中文详解

    php.ini配置中文详解 ;;;;;;;;;;; ; 警告 ; ;;;;;;;;;;; ; 此配置文件是对于新安装的PHP的默认设置. ; 默认情况下,PHP使用此配置文件安装 ; 此配置针对开发目 ...

  7. 技术资料收藏:Windows系统文件中文详解

    技术资料收藏:Windows系统文件中文详解 A ↑ ACCESS.CHM - Windows帮助文件 ACCSTAT.EXE - 辅助状态指示器 ADVAPI32.DLL - 高级Win32应用程序 ...

  8. USB充电规范——BC1.2 中文详解

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/yangchao315/article/ ...

  9. easyx官网例子初试

    目录 基础 easyx简介 透明贴图和三元光栅操作 精确延时 程序 自由运动的点 冰封的EasyX 火焰效果 烟花 水波 迷宫 纪念披头士摇滚乐队 基础 easyx简介 在官网安装包里面有个easyx ...

最新文章

  1. 【Python】Scrapy爬虫实战(腾讯社会招聘职位检索)
  2. MYSQL的初级使用
  3. Quartz-JobDataMap 参数传递
  4. 并发基础知识 — 线程安全性
  5. 最长子段和 11061008 谢子鸣
  6. jquery中如何实现一个li里面一排6张图片进行切换
  7. 各执一词,民用安防市场现状看法PK
  8. 特征经验分享以及管理文件,远程运行的小技巧
  9. 0MQ 事件驱动 以及 poller
  10. 是否进行“ git导出”(如“ svn导出”)?
  11. 按键精灵手机助手之字符串处理
  12. 洛谷试炼场---提高历练地
  13. c语言银行卡六位密码编译,6位随机密码生成器
  14. magisk安装失败_SyberiaOS 安装刷入教程(小白新手向)
  15. win7系统快捷键操作大全
  16. 彩光价格一般是多少_复合彩光祛痘印价格多少钱?
  17. 制作的自媒体短视频很模糊?教你3个方法,让视频变清晰
  18. ECCV 2022《Tip-Adapter: Training-free Adaption of CLIP for Few-shot Classification》
  19. Centos6 安装yum 完美安装(转载)
  20. access数据库窗体设计实验报告_access实验报告窗体和界面设计

热门文章

  1. Vue2.x通用条件搜索组件的封装及应用
  2. Vue2.0通过二级路由实现页面切换
  3. mac如何将本地服务暴露到外网?
  4. 前端那些年--npm
  5. Caffe2:段错误(核心 已转储)
  6. oracle 条件查询加排序,Java乔晓松-oracle的条件查询和排序查询
  7. [填坑手册]小程序目录结构和组件化使用心得
  8. kuangbin专题十六 KMP扩展KMP HDU3068 最长回文
  9. 【源码分享】POSCMS功能如何实现短信验证码
  10. 付费依赖专家有没有用?