openlayers3 自定义鹰眼缩略图
2018-01-25 00:00
411 查看
摘要: 使用calculateExtent,通过当前map的view,获得地图显示的坐标范围,并根据范围生成feature。
主要是演示map.getView().calculateExtent(map.getSize())的应用
openlayers3自带的鹰眼缩略图控件功能很局限,想到自己动手去做,结果很容易就做出来了,这里主要用到的是两个map互相联动。我粗糙的做了两种缩略图,介绍如下:
一、缩略图可点击,点击后更改地图
1.创建map和overview的html
<div id='map' src="" style="width: 100%;height: 680px;position: relative;">
<div style="position: absolute;bottom:0px;right: 0px;z-index: 200;width: 296px;height:296px;background-color: #fff;border: 1px solid #555;border-radius: 3px;" >
<div id="overview" style="background-color: #fff;width: 290px;height:290px;margin: 3px 3px 3px 3px;border:1px solid #7b98bc"></div>
</div>
</div>
2.创建两个地图
var map = new ol.Map({
target: 'map',
layers:[layer],
view: new ol.View({
projection:'EPSG:4326',
center:[121.01371765136719,29.139690399169922],
zoom:14,
maxZoom:18})
});
var overview = new ol.Map({
target: 'overview',
layers:[layer],
view: new ol.View({
projection: 'EPSG:4326',
center:[121.01371765136719,29.139690399169922],
zoom:11,
maxZoom:11,
minZoom:11})
});
3.在缩略图中添加map的extent框
var extent = map.getView().calculateExtent(map.getSize());
var coor=[[[extent[0],extent[1]],[extent[2],extent[1]],[extent[2],extent[3]],[extent[0],extent[3]],[extent[0],extent[1]]]];
var polygonFeature = new ol.Feature(new ol.geom.Polygon(coor));
var vectorSource = new ol.source.Vector({
features: [polygonFeature]
});
var vectorLayer = new ol.layer.Vector({
source:vectorSource,
style: new ol.style.Style({
fill: new ol.style.Fill({color: 'rgba(160,160,160,0.2)'}),
stroke: new ol.style.Stroke({
color: 'white', width: 2
})
})
});
overview.addLayer(vectorLayer);
4.设置map和overview互相联动
map.on('moveend',function(){
var extent = map.getView().calculateExtent(map.getSize());
var coor=[[[extent[0],extent[1]],[extent[2],extent[1]],[extent[2],extent[3]],[extent[0],extent[3]],[extent[0],extent[1]]]];
vectorLayer.getSource().getFeatures()[0].getGeometry().setCoordinates(coor);
setTimeout(function(){
var view = overview.getView();
var pan = ol.animation.pan({
duration: 250,
source: (view.getCenter())
});
overview.beforeRender(pan);
overview.getView().setCenter(map.getView().getCenter());
},300);
})
overview.on('pointermove', function (evt) {
overview.getTargetElement().style.cursor = 'pointer';
});
overview.on('click',function(e){
var coor = e.coordinate;
map.getView().setCenter(coor);
})
效果如下:
更详细,可参考:http://blog.csdn.net/u014529917/article/details/62216130
主要是演示map.getView().calculateExtent(map.getSize())的应用
openlayers3自带的鹰眼缩略图控件功能很局限,想到自己动手去做,结果很容易就做出来了,这里主要用到的是两个map互相联动。我粗糙的做了两种缩略图,介绍如下:
一、缩略图可点击,点击后更改地图
1.创建map和overview的html
<div id='map' src="" style="width: 100%;height: 680px;position: relative;">
<div style="position: absolute;bottom:0px;right: 0px;z-index: 200;width: 296px;height:296px;background-color: #fff;border: 1px solid #555;border-radius: 3px;" >
<div id="overview" style="background-color: #fff;width: 290px;height:290px;margin: 3px 3px 3px 3px;border:1px solid #7b98bc"></div>
</div>
</div>
2.创建两个地图
var map = new ol.Map({
target: 'map',
layers:[layer],
view: new ol.View({
projection:'EPSG:4326',
center:[121.01371765136719,29.139690399169922],
zoom:14,
maxZoom:18})
});
var overview = new ol.Map({
target: 'overview',
layers:[layer],
view: new ol.View({
projection: 'EPSG:4326',
center:[121.01371765136719,29.139690399169922],
zoom:11,
maxZoom:11,
minZoom:11})
});
3.在缩略图中添加map的extent框
var extent = map.getView().calculateExtent(map.getSize());
var coor=[[[extent[0],extent[1]],[extent[2],extent[1]],[extent[2],extent[3]],[extent[0],extent[3]],[extent[0],extent[1]]]];
var polygonFeature = new ol.Feature(new ol.geom.Polygon(coor));
var vectorSource = new ol.source.Vector({
features: [polygonFeature]
});
var vectorLayer = new ol.layer.Vector({
source:vectorSource,
style: new ol.style.Style({
fill: new ol.style.Fill({color: 'rgba(160,160,160,0.2)'}),
stroke: new ol.style.Stroke({
color: 'white', width: 2
})
})
});
overview.addLayer(vectorLayer);
4.设置map和overview互相联动
map.on('moveend',function(){
var extent = map.getView().calculateExtent(map.getSize());
var coor=[[[extent[0],extent[1]],[extent[2],extent[1]],[extent[2],extent[3]],[extent[0],extent[3]],[extent[0],extent[1]]]];
vectorLayer.getSource().getFeatures()[0].getGeometry().setCoordinates(coor);
setTimeout(function(){
var view = overview.getView();
var pan = ol.animation.pan({
duration: 250,
source: (view.getCenter())
});
overview.beforeRender(pan);
overview.getView().setCenter(map.getView().getCenter());
},300);
})
overview.on('pointermove', function (evt) {
overview.getTargetElement().style.cursor = 'pointer';
});
overview.on('click',function(e){
var coor = e.coordinate;
map.getView().setCenter(coor);
})
效果如下:
更详细,可参考:http://blog.csdn.net/u014529917/article/details/62216130
相关文章推荐
- openlayers3 自定义鹰眼缩略图
- php图片处理:加水印、缩略图的实现(自定义函数:watermark、thumbnail)
- openlayers3 自定义打包
- 自定义的图形格式如何在windows的文件管理器里缩略图显示出来
- 和小猪一起搞微信开发——自定义分享到朋友圈的缩略图,链接,标题和摘要
- CMFCShellList和自定义ShellList结合使用,达到“直接浏览缩略图,双击打开图片”
- asp.net上传功能(单文件,多文件,自定义生成缩略图,水印)
- 自定义一个带缩略图的背景图片设置的preference
- wordpress 自定义文章缩略图调取
- phpcms v9 调用自定义字段多图片的第一张或第N张图为缩略图
- 以缩略图的形式在Windows资源浏览器中显示自定义格式图片
- [翻]为自定义MFC文件格式创建缩略图
- 删除wordpress系统默认产生的缩略图并创建自定义缩略图
- 在openLayers中创建拥有自定义风格的googleMap
- .NET微信自定义分享标题、缩略图、超链接及描述的设置方法
- 又拍云常见使用问题(如何创建自定义缩略图并使用)
- 自定义 UISlidre 创建动态滑块缩略图
- dedecms列表页文章有图调用缩略图 无图留空或自定义图片的方法!
- php图片处理:加水印、缩略图的实现(自定义函数:watermark、thumbnail)
- javascript:自定义属性缩略图切换练习