OpenLayers 官网例子的中文详解
https://segmentfault.com/a/1190000009679800?utm_source=tag-newest
当你希望实现某种功能的时候,即使你对 openlayers 几乎一窍不通,照着官网的例子做,也可以很快的实现想要的效果。
问题在于,官网的例子都是英文啊,不能很快定位到想要的效果是在哪个例子里面!!( 英文不渣就别看这篇文章了 )
最近在学 openlayers ,我觉得非常有必要将 openlayers 官网的所有例子都看过去一遍,这篇文章就当是笔记了。
名词解释
在 openlayer 里,下面这些单词应该这么翻译。
layer:层contorl:控件feature:元素interaction:交互Vector:矢量的Tile:瓦片source:资源format:转换projection:投影
无障碍地图
当地图获得焦点之后,可以使用键盘对地图进行控制,+ 键放大地图,- 键缩小地图,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
让地图的视图拥有动画啊效果,关键点在于 loadTilesWhileAnimating 和 view.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,默认为false
target: '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 的意思是「归属」,指的是右下角那个版权控件。
为了更好的理解这一个例子,下面代码展示了如何给地图添加控件:
<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,//非必填,默认true
preload: 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 显示 layer1
setTimeout(function(){
layer1.setVisible(true);
layer2.setVisible(false);
},3000);
</script>
setVisible 主要继承于 ol.layer.Base 类,拥有这个方法的类有:
ol.layer.Base
ol.layer.Group
ol.layer.Layer
ol.layer.Image
ol.layer.Tile//我们用到的就是这个
ol.layer.Vector
ol.layer.Heatmap
ol.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()。接下来看官网的例子:
未完待续...
混合模式
提示框
调试瓦片
给元素添加渐变样式
Styling feature with CanvasGradient or CanvasPattern
CartoDB 图源
CartoDB source example
这个东西可以通过 sql 语句来筛选元素。
显示的密集元素
根据元素定位视图
调整地图的颜色
自定义控件
自定义logo
自定义交互
整合 D3 来绘图
设备方向
Drag-and-Drop Image Vector
Drag-and-Drop
Drag, Rotate, and Zoom
用鼠标交互绘制点、线、面、圆
用鼠标交互绘和修改制点、线、面、圆
用鼠标绘制线、面
Freehand Drawing
与上面「用鼠标交互绘制点、线、面、圆」不同的是,上面是点两点就成为线了,这里的线要拖着鼠标绘制,不是直线,是纯手绘的。
用鼠标绘制形状
动画的实现
postcompose 在地图渲染的时候会触发。
KML 文件绘制元素---- 地震集中区
KML文件绘制元素---- 自定义地震点的元素
Earthquakes with custom symbols
OpenLayers 官网例子的中文详解的更多相关文章
- [转]Reids配置文件redis.conf中文详解
转自: Reids配置文件redis.conf中文详解 redis的各种配置都是在redis.conf文件中进行配置的. 有关其每项配置的中文详细解释如下: 对应的中文版解释redis.conf # ...
- Nginx配置文件nginx.conf中文详解(转)
######Nginx配置文件nginx.conf中文详解##### #定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设置为等于CPU总核心数. worker_ ...
- Nginx中文详解、配置部署及高并发优化
一.Nginx常用命令: 1. 启动 Nginx /usr/local/nginx/sbin/nginxpoechant@ubuntu:sudo ./sbin/nginx2. 停 ...
- 跟我学机器视觉-HALCON学习例程中文详解-FUZZY检测用于开关引脚测量
跟我学机器视觉-HALCON学习例程中文详解-FUZZY检测用于开关引脚测量 * This example program demonstrates the basic usage of a fuzz ...
- 跟我学机器视觉-HALCON学习例程中文详解-测量圆环脚宽间距
跟我学机器视觉-HALCON学习例程中文详解-测量圆环脚宽间距 This example program demonstrates the basic usage of a circular meas ...
- 跟我学机器视觉-HALCON学习例程中文详解-开关引脚测量
跟我学机器视觉-HALCON学习例程中文详解-开关引脚测量 This example program demonstrates the basic usage of a measure object. ...
- 跟我学机器视觉-HALCON学习例程中文详解-QQ摄像头读取条码
跟我学机器视觉-HALCON学习例程中文详解-QQ摄像头读取条码 第一步:插入QQ摄像头,安装好驱动(有的可能免驱动) 第二步:打开HDevelop,点击助手-打开新的Image Acquisitio ...
- 跟我学机器视觉-HALCON学习例程中文详解-IC引脚测量
跟我学机器视觉-HALCON学习例程中文详解-IC引脚测量 Lead Measurement: Example for the application of the measure object in ...
- jQuery Pagination Ajax分页插件中文详解(摘)
jQuery Pagination Ajax分页插件中文详解 by zhangxinxu from http://www.zhangxinxu.com 本文地址:http://www.zhangxin ...
随机推荐
- (第7篇)灵活易用易维护的hadoop数据仓库工具——Hive
摘要: Hive灵活易用且易于维护,十分适合数据仓库的统计分析,什么样的结构让它具备这些特性?我们如何才能灵活操作hive呢? 博主福利 给大家推荐一套hadoop视频课程 [百度hadoop核心架构 ...
- HTML5游戏 围住神经猫 开发
所有文章搬运自我的个人主页:sheilasun.me 去年风靡微信朋友圈的小游戏"围住神经猫",我也试着做了一下,可以戳这里试玩→围住神经猫.游戏是用Egret引擎开发的,因为Eg ...
- hdu 1542
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1542 题意: 求所给矩形的覆盖面积 题解: 利用扫描线的思想,先将坐标离散化,之后以y轴分成多个矩形求解, ...
- [CQOI2017]老C的任务
题解: 裸的主席树吧 要想避免带修主席树的话先排序一下吧
- spoj694
题意:求不相同的子串个数 题解: 考虑一下后缀数组 yy一下就能发现答案就是n*(n+1)/2-sigma(i=1;i<=n;i++)height[i] 代码:
- python全栈开发day49-jquery的位置信息、事件流、事件对象,事件委托,事件绑定和解绑
一.昨日内容回顾 1. jQuery的属性操作 1) html属性操作:attr 2) DOM属性操作:prop 3) 类样式操作:addClass.removeClass.toggleClas ...
- 【noip模拟赛7】足球比赛 树
描述 在2009的中国城市足球比赛中,在2^N支队中,有一些队在开赛前宣布了退出比赛.比赛采取的是淘汰赛.比如有4支队伍参加,那么1队和2队比赛,3队和4队赛,然后1队和2队的胜者与3队和4队的胜者争 ...
- 洛谷 P1433 吃奶酪【DFS】+剪枝
题目链接:https://www.luogu.org/problemnew/show/P1433 题目描述 房间里放着n块奶酪.一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在(0,0)点处 ...
- Java开发人员必须掌握的两个Linux魔法工具(四)
子曰:"工欲善其事,必先利其器." 做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 学习应该是快乐的,在这个乐园中我努力让自己能用简洁易懂(搞笑有趣) ...
- 洛谷.3273.[SCOI2011]棘手的操作(左偏树)
题目链接 还是80分,不是很懂. /* 七个操作(用左偏树)(t2表示第二棵子树): 1.合并:直接合并(需要将一个t2中原有的根节点删掉) 2.单点加:把这个点从它的堆里删了,加了再插入回去(有负数 ...