openlayers基础用例
http://weilin.me/ol3-primer/ch03/03-01.html#
http://weilin.me/ol3-primer/ //地址
http://openlayers.org/ //OpenLayers官网
vue安装自定义坐标系
npm install proj4
import * as proj4 from "proj4";
or//
import proj4 from "proj4";
报"xp"错误就是对象用的不对
warningevFlag: true, //隐患图标显示标志
constructonevFlag: true, //施工显示标志
allPolygonevFlag: true, //片区显示标志
insPointPointvFlag: true, //巡检点 点 显示标志
insPointLinevFlag: true, //巡检点 线 显示标志
carevFlag
switch (true) {
case this.eventFlag.warningevFlag:
this.initWarning(); //隐患icon
clearInterval(this.blink);
this.warningIconBlink(); //隐患闪烁
// break;
case this.eventFlag.constructonevFlag:
this.initConstructon(); //施工icon
// break;
case this.eventFlag.allPolygonevFlag:
this.initAllPolygon(); //片区
// break;
case this.eventFlag.insPointPointvFlag:
this.initAllPointPoint(); //巡检点
// break;
case this.eventFlag.insPointLinevFlag:
this.initAllPointLine(); //巡检 线
// break;
case this.eventFlag.carevFlag:
this.initCar(); // 车
// break;
}
图层load监听
//创建图层
createLayer() {
return new ol.layer.Vector({
source: new ol.source.Vector({
loader: function(extent, resolution, projection) {
console.log("load 1 = ");
},
strategy: ol.loadingstrategy.bbox
})
});
},
谷歌地图
// source: new ol.source.TileImage({
// url:
// "http://mt2.google.cn/vt/lyrs=y&hl=zh-CN&gl=CN&src=app&x={x}&y={y}&z={z}&s=G"
// }) //加载谷歌影像地图
//获取修改多边形的坐标
that.pointLayer.getSource().getFeatures()[0].getGeometry().getCoordinates();
//修改绘画的多边形
updateLineLayer(){
var select=new ol.interaction.Select();
this.map.addInteraction(select);
this.draw.setActive(false);
var modify = new ol.interaction.Modify({
features: select.getFeatures()
});
this.map.addInteraction(modify);
modify.on("modifyend",function (e) {
let geometrys = that.pointLayer.getSource().getFeatures()[0].getGeometry().getCoordinates();
});
},
//双击事件
this.map.addEventListener('dblclick');
this.map.removeEventListener('dblclick');
that.map.on('dblclick', function () {
that.drawSourceClear();
that.mouseMove(0);
});
设置为地图中心
this.map.getView().getZoom() //获取缩放比
ol.proj.transform(center, "EPSG:4326", "EPSG:3857")//坐标转换
setMapCenters(center, zoom) {
this.map.getView().animate({
center: center, //中心点坐标
duration: 700, //动画时长
zoom: zoom //缩放比
});
}
//获取 图层 中features 对象
XXXLayer.getSource().getFeatures();
//对象
//创建点图标
//coordinates坐标,identity图片选择标识,layer图层
createIcons(coordinates, properties, imgSrc, layer) {
//设置图标坐标
let feature = new ol.Feature({
geometry: new ol.geom.Point(coordinates),
properties: properties
});
//设置图标
feature.setStyle(
new ol.style.Style({
image: new ol.style.Icon({ src: imgSrc }) //基础图标对象
})
);
//吧图标加入图层
layer.getSource().addFeature(feature);
//根据图层放大或者缩小
this.changeIconScale(feature);
},
.transform("EPSG:4326", "EPSG:3857")
获取缩放级别,分辨率
map.getView().getZoom()
map.getView().getResolution()
// 4326 3857 坐标系转换
ol.proj.transform(coordCenter,'EPSG:4214','EPSG:4326')
ol.proj.fromLonLat([118,32]),//转4326
new ol.geom.LineString(element.geometry.coordinates)
.transform("EPSG:4326", "EPSG:3857")
.getCoordinates(),//获取转换之后的坐标
let geo = new ol.geom.LineString(lineString);
let route = geo.transform("EPSG:4326", "EPSG:3857");
//地图比例尺 默认3857坐标系(4326受影响不准确)
var scaleLineControl = new ol.control.ScaleLine({
units: "metric"//单位有5种:degrees imperial us nautical metric
});
//scaleLineControl.setUnits('metric');
// this.map.addControl(scaleLineControl);
this.map = new ol.Map({
controls: new ol.control.defaults({
attributionOptions: {
collapsible: false
}
}).extend([scaleLineControl]),
地图渲染套路
对象的数据 data
1 创建featurenew ol.Feature({
//(此处)ol.Feature 根据渲染对象的不同选择不同的对象类型
});
2 //设置feature样式
feature.setStyle(
new ol.style.Style({
//(此处)ol.style.Style 根据渲染对象的不同选择不同的对象类型
})
);
3 把feature添加到对应的图层
this.MappingLayerXXX.getSource().addFeature(feature);
4 map中引用该图层 this.MappingLayerXXX
this.MappingLayerXXX
// gis服务 所用对象
var source = new ol.source.TileWMS({
url: config.url,
params: param,
projection: nariConfig.projection,
crossOrigin: 'Anonymous',
serverType: config.serverType,
});
var wmsLayer = new ol.layer.Tile({
visible: true,
minResolution:minRes,
maxResolution:maxRes,
source: source,
});
下载的瓦片地图
initMap() {
this.map = {};
this.gaodeMapLayer = new ol.layer.Tile({
declutter: true,
source: new ol.source.XYZ({
tileUrlFunction: this.overlay_getTileURL,
type: "png"
// url: this.gaodeMapUrl,
// format: new ol.format.GeoJSON()
})
});
//比例尺控件添加
var scaleLineControl = new ol.control.ScaleLine({
units: "metric"
});
//初始化图层
this.map = new ol.Map({
layers: [
this.gaodeMapLayer,
this.peoPolygonLayer, //个人片区
],
view: new ol.View({
center: ol.proj.transform(this.mapCenter, "EPSG:4326", "EPSG:3857"),
projection: "EPSG:3857",
zoom: 10
// resolution: 152.8740565703525
}),
target: "map"
});
this.map.addControl(scaleLineControl);
},
overlay_getTileURL(xyz) {
var z = xyz[0];
var x = xyz[1];
var y = Math.pow(2, z) + xyz[2];
var url =
"http://10.0.197.142:8080/TMS/" + z + "/" + x + "/" + y + ".png";
return url;
},
eg: 基于geoserver 的地图渲染
高德 url
"http://wprd0{1-4}.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=1&style=7", //新版
// "http://webst0{1-4}.is.autonavi.com/appmaptile?style=7&x={x}&y={y}&z={z}",//老版
// "http://webst0{1-4}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=4&style=7&x={x}&y={y}&z={z}",
// "http://wprd0{1-4}.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=1&style=7", //为矢量图(含路网、含注记)
// 'http://wprd0{1-4}.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=2&style=7',//为矢量图(含路网,不含注记)
// 'http://wprd0{1-4}.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=1&style=6',//为影像底图(不含路网,不含注记)
// 'http://wprd0{1-4}.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=2&style=6',//为影像底图(不含路网、不含注记)
// 'http://wprd0{1-4}.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=1&style=8',//为影像路图(含路网,含注记)
// 'http://wprd0{1-4}.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=2&style=8',//为影像路网(含路网,不含注记)
// 'http://webst0{1-4}.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}',//为影像底图(不含路网,不含注记)
// 'http://webst0{1-4}.is.autonavi.com/appmaptile?style=7&x={x}&y={y}&z={z}',//为矢量地图(含路网,含注记)
// 'http://webst0{1-4}.is.autonavi.com/appmaptile?style=8&x={x}&y={y}&z={z}',//为影像路网(含路网,含注记)
initMap() {
//设置地图为高德地图
this.gaodeMapLayer = new ol.layer.Tile({
// source: new ol.source.XYZ({
// url: this.gaodeMapUrl,
// format: new ol.format.GeoJSON()
// })
source: new ol.source.TileWMS({
url: "http://10.0.197.142:8088/geoserver/china_osm/wms",
params: {
FORMAT: "image/png",
LAYERS: "china_osm:osm_china",
STYLES: "",
VERSION: "1.1.1",
tiled: true
},
projection: "EPSG:3857",
crossOrigin: "Anonymous",
serverType: "geoserver"
})
});
//初始化地图
this.map = new ol.Map({
layers: [
this.gaodeMapLayer,
this.lineLayer,
this.stationLayer,
this.carLayer,
this.warningLayer,
this.inspectionLayer, //巡线点
this.inspectionLineLayer, //巡线线
this.peopleLayer,
this.constructonLayer
],
view: new ol.View({
center: this.mapCenter, //地图中心
projection: "EPSG:4326",
zoom: 10
}),
target: "map"
});
},
// gis服务 所用对象 end
初始化获取地图范围坐标转换
var extent = this.map.getView().calculateExtent(this.map.getSize());
var dataExt = ol.proj.transformExtent(extent, that.srsNameMap_, that.srsNameDataSource_);
//console.log(dataExt);
if(dataExt[0] < -180){
dataExt[0] = -180
}
if(dataExt[1] < -80){
dataExt[1] = -80
}
if(dataExt[2] > 180){
dataExt[2] = 180
}
if(dataExt[3] > 80){
dataExt[3] = 80
}
//console.log(dataExt);
var bbox = [dataExt[0], dataExt[1], dataExt[0], dataExt[3], dataExt[2], dataExt[3], dataExt[2], dataExt[1]];
//地图展示区域变化监听
this.map.getView().on("change",()=>{
let dataExt = this.map.getView().calculateExtent(this.map.getSize());//获取区域的四个点
if (dataExt[0] < -180) {
dataExt[0] = -180;
}
if (dataExt[1] < -80) {
dataExt[1] = -80;
}
if (dataExt[2] > 180) {
dataExt[2] = 180;
}
if (dataExt[3] > 80) {
dataExt[3] = 80;
}
var bbox = [
dataExt[0],
dataExt[1],
dataExt[0],
dataExt[3],
dataExt[2],
dataExt[3],
dataExt[2],
dataExt[1]
];
})
//设置图标根据图层变化大小
changeIconScale(feature) {
//先初始化尺寸
let style = feature.getStyle();
// 重新设置图标的缩放率,基于层级12来做缩放
//当地图层级越来越往上时(数字变小),图标要变得更小
if (this.map.getView().getZoom() > 10) {
style.getImage().setScale(this.map.getView().getZoom() / 12);
} else {
style.getImage().setScale(this.map.getView().getZoom() / 24);
}
feature.setStyle(style);
// 监听地图层级变化
this.map.getView().on("change:resolution", function() {
//console.log(this.getZoom());
// 重新设置图标的缩放率,基于层级12来做缩放
//当地图层级越来越往上时(数字变小),图标要变得更小
if (this.getZoom() > 10) {
style.getImage().setScale(this.getZoom() / 12);
} else {
style.getImage().setScale(this.getZoom() / 24);
}
feature.setStyle(style);
});
},
//设置文字根据图层变化大小
changeTextScale(feature) {
//先初始化尺寸
let style = feature.getStyle();
// 重新设置图标的缩放率,基于层级12来做缩放
//当地图层级越来越往上时(数字变小),图标要变得更小
if (this.map.getView().getZoom() > 10) {
style.getText().setScale(this.map.getView().getZoom() / 12);
} else {
style.getText().setScale(this.map.getView().getZoom() / 24);
}
feature.setStyle(style);
// 监听地图层级变化
this.map.getView().on("change:resolution", function() {
//console.log(this.getZoom());
// 重新设置图标的缩放率,基于层级12来做缩放
//console.log(this.getZoom());
//当地图层级越来越往上时(数字变小),图标要变得更小
if (this.getZoom() > 10) {
style.getText().setScale(this.getZoom() / 12);
style.getText().setOffsetX(this.getZoom());
style.getText().setOffsetY(this.getZoom() - this.getZoom() / 3);
} else {
style.getText().setScale(this.getZoom() / 24);
style.getText().setOffsetX(4.2);
style.getText().setOffsetY(3.5);
}
feature.setStyle(style);
});
},
//创建一个带文本的图标的样式对象
createIconAndTextObject(imgSrc, color, textStr) {
//创建文本对象样式
let textStyleObj = new ol.style.Text({
text: textStr,
offsetX: 4.2,
offsetY: 3.5,
fill: new ol.style.Fill({ color })
});
return new ol.style.Style({
//基本样式对象
image: new ol.style.Icon({ src: imgSrc }),
text: textStyleObj
});
}
//地图 字体 样式 背景色 start
styleFun(pointName) {
let style = new ol.style.Style({
image: new ol.style.Icon({
src: "../../../../../../src/assets/map/img/icon/pointer.png"
}),
text: new ol.style.Text({
font: 'bold 12px 微软雅黑,sans-serif',//字体占用高度
fill: new ol.style.Fill({
color: 'rgba(237,63,20,1)'
}),
placement:'point',
backgroundStroke:new ol.style.Stroke({
color:'#feff2a',
width:1
}),
backgroundFill:new ol.style.Fill({
color:'#feff2a'
}),
textAlign:'right',
text:pointName
})
})
return style;
},
//地图 字体 样式 背景色 end
//去掉图层,添加图层
this.map.removeLayer(this.peopleLayer);
this.map.addLayer(this.peopleLayer);
//图层清除
this.lineLayer.getSource().clear();
//绘画多边形
initLine() {
this.lineLayer = new ol.layer.Vector({
source: new ol.source.Vector(),
style: new ol.style.Style({
stroke: new ol.style.Stroke({
color: "darkgreen",
size: 3
})
})
});
this.map.addLayer(this.lineLayer);
var lineDraw = new ol.interaction.Draw({
type: "Polygon",
source: this.lineLayer.getSource(),
freehand: false,
style: new ol.style.Style({
stroke: new ol.style.Stroke({
color: "green",
size: 2
})
})
});
lineDraw.on("drawend", function(event) {
document.getElementById("points").innerHTML = JSON.stringify(
event.feature.getGeometry().getCoordinates()
);
});
this.map.addInteraction(lineDraw);
},
//多边形绘画end
//创建线对象
if (element.geometry.type == "LineString") {
this.lineData.push(element);
}
//线信息
this.lineData.forEach(element => {
let feature = new ol.Feature({
geometry: new ol.geom.LineString(element.geometry.coordinates),//对应不同的类型的对象(括号内为坐标)
properties: element
});
feature.setStyle( //设置feature样式
new ol.style.Style({
stroke: new ol.style.Stroke({
color: "#ffcc33",
width: 2
})
})
);
this.lineLayer.getSource().addFeature(feature);
//创建线对象 END
//创建一个图层 this.deviveData 取到的数据 点对象
this.deviveData.forEach(element => {
给地图添加图标
let feature = new ol.Feature({
geometry: new ol.geom.Point(element.geometry.coordinates),
properties: element
});
//设置图标
feature.setStyle(
new ol.style.Style({
image: new ol.style.Icon({
src: "../../../../src/assets/map/img/icon/people1.png"
}) //基础图标对象
})
);
//把图标加入图层
this.deviveLayer.getSource().addFeature(feature);
//根据图层放大或者缩小
// this.changeIconScale(feature);
});
//coordinates坐标,identity图片选择标识,layer图层
createIconAndText(coordinates, properties, imgSrc, color, textStr, layer) {
//设置线坐标
let feature = this.createFeaturePoint(coordinates, properties);
//设置图标
feature.setStyle(this.createIconAndTextObject(imgSrc, color, textStr));
//把图标加入图层
layer.getSource().addFeature(feature);
//根据图层放大或者缩小
this.changeIconScale(feature);
},
//设置文字根据图层变化大小
changeTextScale(feature) {
//先初始化尺寸
let style = feature.getStyle();
// 重新设置图标的缩放率,基于层级12来做缩放
//当地图层级越来越往上时(数字变小),图标要变得更小
if (this.map.getView().getZoom() > 10) {
style.getText().setScale(this.map.getView().getZoom() / 12);
} else {
style.getText().setScale(this.map.getView().getZoom() / 24);
}
feature.setStyle(style);
// 监听地图层级变化
this.map.getView().on("change:resolution", function() {
//console.log(this.getZoom());
// 重新设置图标的缩放率,基于层级12来做缩放
//console.log(this.getZoom());
//当地图层级越来越往上时(数字变小),图标要变得更小
if (this.getZoom() > 10) {
style.getText().setScale(this.getZoom() / 12);
style.getText().setOffsetX(this.getZoom());
style.getText().setOffsetY(this.getZoom() - this.getZoom() / 3);
} else {
style.getText().setScale(this.getZoom() / 24);
style.getText().setOffsetX(4.2);
style.getText().setOffsetY(3.5);
}
feature.setStyle(style);
});
},
map
layer
layer: new ol.layer.Vector({
source: new ol.source.Vector()
});
雅虎
url:'https://{0-3}.base.maps.api.here.com/maptile/2.1/maptile/newest/normal.day/{z}/{x}/{y}/512/png8?lg=ENG&ppi=250&token=TrLJuXVK62IQk0vuXFzaig%3D%3D&requestid=yahoo.prod&app_id=eAdkWGYRoc4RfxVo0Z4B'
VUE中的地图
import ol from "openlayers";
import "openlayers/dist/ol.css";
瓦片地图 oms
//初始化地图
initMap() {
this.map = {};
let oms = new ol.layer.Tile({
source: new ol.source.OSM()
});
this.gaodeMapLayer = new ol.layer.Tile({
source: new ol.source.TileWMS({
url: "http://10.0.197.142:8088/geoserver/china_osm/wms",
params: {
FORMAT: "image/png",
LAYERS: "china_osm:osm_china",
STYLES: "",
VERSION: "1.1.1",
tiled: true
},
projection: "EPSG:3857",
crossOrigin: "Anonymous",
serverType: "geoserver"
})
});
//比例尺控件添加
var scaleLineControl = new ol.control.ScaleLine({
units: "metric"
});
//初始化图层
this.map = new ol.Map({
layers: [
oms,
this.gaodeMapLayer
],
view: new ol.View({
center: ol.proj.transform(this.mapCenter, "EPSG:4326", "EPSG:3857"), //3857地图中心
projection: "EPSG:3857", //3857
zoom: 10
// resolution: 152.8740565703525
}),
target: "map"
});
this.map.addControl(scaleLineControl);
},
data() {
return {
//高德地图的地址
gaodeMapUrl:
"http://webst0{1-4}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}",
map: {}, //地图对象
mapCenter: [118.766667, 32.05] //地图初始中心点的位置(经纬度)
};
},
//初始化地图
initMap() {
//设置地图为高德地图
var gaodeMapLayer = new ol.layer.Tile({
source: new ol.source.XYZ({
url: this.gaodeMapUrl,
format: new ol.format.GeoJSON()
})
});
this.map = new ol.Map({
layers: [gaodeMapLayer],
view: new ol.View({
// 设置成都为地图中心
center: [104.06, 30.67],
projection: "EPSG:4326",// 指定投影使用EPSG:4326
zoom: 10
}),
target: "map"
});
}
this.peoLocusPointLayer
warningFlag
图层的显示隐藏
var layers = this.map.getLayers().getArray(); //地图的所有图层 layers
setInterval(() => {
this.tureFlag = !this.tureFlag;
that.teturnFlag(layers);
}, 2000);
teturnFlag(layers) {
layers[11].setVisible(this.tureFlag);
layers[12].setVisible(!this.tureFlag);
},
离线瓦片地图 替换的是source的url:
source: new ol.source.XYZ({
// 设置本地离线瓦片所在路径
url: '../src/05-04/offlineMapTiles/{z}/{x}/{y}.png'
})
ol.source.Tile(TileImage)作为ol.source.XYZ的父类,可以转换坐标,修改分辨率
vue es6定时器 this.map.addLayer is not a function
setTimeout(function(){
this.map.addLayer(this.gaodeMapLayer);
}, 1500);
改为
setTimeout(() => {//ES6 优点
this.map.addLayer(this.gaodeMapLayer);
}, 1500);
动态地图加载 切花图层实现
this.map.removeLayer(this.map.getLayers().item(0));//or
this.map.removeLayer(this.gaodeMapLayer);
this.map.addLayer(this.gaodeMapLayer);//去掉之后加上新图层
地图图层
//设置地图为高德地图
this.gaodeMapLayer = new ol.layer.Tile({
source: new ol.source.XYZ({
url: "http://webst0{1-4}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}",
format: new ol.format.GeoJSON()
})
});
// 放大 缩小 地图 (API)
function zoomIn() {
var view = map.getView();
// 让地图的zoom增加1,从而实现地图放大
view.setZoom(view.getZoom() + 1);
}
// 移动到成都
function moveToChengDu() {
var view = map.getView();
// 设置地图中心为成都的坐标,即可让地图移动到成都
view.setCenter([104.06, 30.67]);//成都坐标
map.render();
}
自适应区域
function fitToChengdu() {
// 让地图最大化完全地显示区域[104, 30.6, 104.12, 30.74]
this.map.getView().fit([104, 30.6, 104.12, 30.74], this.map.getSize());
}
点击事件移动 地图展示
moveToLeft() {
var view = this.map.getView();
var mapCenter = view.getCenter();
mapCenter[0] += 1;//x值增加,即可使得地图向左右移动
mapCenter[1] -= 1;//上下移动
view.setCenter(mapCenter);
this.map.render();
},
//实现两个地图联动,两个ol.Map使用了同一个view(vue环境中测试不行)
//<p>地图1</p>
<div id="map1" style="width: 100%"></div>
<p>地图2</p>
<div id="map2" style="width: 100%"></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()})
],
view: view,
target: 'map1'
});
// 创建第二个地图
new ol.Map({
layers: [
new ol.layer.Tile({source: new ol.source.OSM()})
],
view: view,
target: 'map2'
});
</script>
//地图单机事件
map.on('singleclick',mapClick);
function mapClick(e){
var pixel = map.getEventPixel(e.originalEvent);
var featureInfo = map.forEachFeatureAtPixel(pixel,
function (feature, layer) {
return {feature:feature,layer:layer};
});
if (featureInfo!==undefined&&featureInfo!==null
&&featureInfo.layer!==null)
{
console.log('打印选择要素');
console.log(featureInfo .feature);
console.log('打印选择要素所属Layer');
console.log(featureInfo .layer);
}
}
瓦片地图是非常大的地图的解决方案 一整块非常大的地图进行切片,分成很多相同大小的小块地图,在用户访问的时候,再一块一块小地图加载,拼接在一起,从而还原成一整块大的地图 如果一次加载整个大地图,会导致加载很慢,且不可用的问题。这对于在线服务来说,是非常致命的
Source和Layer是一对一的关系,有一个Source,必然需要一个Layer,然后把这个Layer添加到Map上,就可以显示出来
官网的API搜索ol.source有很多
归纳起来共三种:ol.source.Tile,ol.source.Image和ol.source.Vector
ol.layer.Base(一级)
ol.layer.Group(二级)
ol.layer.Layer(二级)对应ol.source.Source
ol.layer.Image (三级)对应ol.source.Image
ol.layer.Tile (三级)对应ol.source.Tile
ol.layer.Vector (三级)对应ol.source.Vector
ol.layer.Heatmap (四级)对应ol.source.Vector
ol.layer.VectorTile (四级)对应ol.source.Vector
限制地图缩放级别
<body>
<div id="map" style="width: 100%"></div>
<script>
new ol.Map({
layers: [
new ol.layer.Tile({source: new ol.source.OSM()})
],
view: new ol.View({
// 设置成都为地图中心
center: [104.06, 30.67],
projection: 'EPSG:4326',
zoom: 10,
// 限制地图缩放最大级别为14,最小级别为10
minZoom: 10,
maxZoom: 14
}),
target: 'map'
});
</script>
</body>
限制地图范围
只能在经度29度到31度,纬度在102到104度之间显示
<body>
<div id="map" style="width: 100%"></div>
<script>
new ol.Map({
layers: [
new ol.layer.Tile({source: new ol.source.OSM()})
],
view: new ol.View({
// 设置地图中心范围 拖动时有边界
extent: [102, 29, 104, 31],
// 设置成都为地图中心
center: [104.06, 30.67],
projection: 'EPSG:4326',
zoom: 10
}),
target: 'map'
});
</script>
</body>
墨卡托投影
广泛用于网页地图。 目前OpenLayers3支持两种投影,一个是EPSG:4326,等同于WGS84坐标系,参见详情。另一个是EPSG:3857,等同于900913,由Mercator投影而来,经常用于web地图。
动态交换地图
function swapMap() {
// 改变两个地图的容器
map1.setTarget('map2');
map2.setTarget('map1');
}
// 创建地图
new ol.Map({
// 设置地图图层
layers: [
// 创建一个使用Open Street Map地图源的瓦片图层
new ol.layer.Tile({source: new ol.source.OSM()})
],
// 设置显示地图的视图
view: new ol.View({
center: [0, 0], // 定义地图显示中心于经度0度,纬度0度处
zoom: 2 // 并且定义地图显示层级为2
}),
// 让id为map的div作为地图的容器
target: 'map'
});
参数layers
多个图层是叠加的,在最上面的会覆盖下面的,以此类推
参数view
地图定义显示窗口,对应ol.View类,可以自定义地图显示的中心点,缩放层级等
参数target
指定地图在页面中具体哪个位置进行显示,为此要记住地图显示还是离不开使用dom来实现
核心组成部分
地图 ol.Map
视图 ol.View
图层 ol.Layer
数据源 ol.source
控件 地图交互的入口 ol.control
交互 ol.interaction
多个layers 只能一个views
openlayers基础用例的更多相关文章
- OpenLayers基础知识:
OpenLayers是一个开源的js框架,用于在您的浏览器中实现地图浏览的效果和基本的zoom,pan等功能.OpenLayers支持的地图来源 包括了WMS,GoogleMap,KaMap,MSV ...
- Testing - 测试基础 - 用例
测试用例 是指对一项特定的软件产品进行测试任务的描述,体现测试方案.方法.技术和策略. 内容包括测试目标.测试环境.输入数据.测试步骤.预期结果.测试脚本等,并形成文档. 每个具体测试用例都将包括下列 ...
- OC基础 单例
#undef AS_SINGLETON #define AS_SINGLETON( __class ) \ + (__class *)sharedInstance; #un ...
- Java基础27-单例设计模式
/* 设计模式:针对此类问题最有效的解决方法 java23种设计模式 单例设计模式:解决一个类只在内存中存在一个对象 如何让一个类在内存中只存在一个对象? 1.禁止其他的应用程序,通过此类来创建对象 ...
- Java基础--单例类创建和测试
单例模式的主要作用是保证在Java程序中,某个类只有一个实例存在.单例模式有很多好处,它能够避免实例对象的重复创建,不仅可以减少每次创建对象的时间开销,还可以节约内存空间:能够避免由于操作多个实例导致 ...
- java基础——单例设计模式(懒汉式)
public class Test7 { // 主函数 public static void main(String[] args) { Test7.getInstance().function(9, ...
- StartUML的基础的使用,用例图,序列图
转载地址 http://blog.csdn.NET/tianhai110 (下面参考了原博主的内容,也加入自己的内容,为了自己脑补,也方便其他看到的人脑补) 使用StartUML绘制用例图: ...
- Uml学习-用例建模简介
用例建模简介 用例建模是UML建模的一部分,它也是UML里最基础的部分.用例建模的最主要功能就是用来表达系统的功能性需求或行为.用例图重点描述用户需求. 它描述需求.用户和主要组件之间的关系. 它不 ...
- UML基础系列:用例图
1. 概述 用例图(Use Case Diagram)描述“用户.需求.系统功能单元”之间的关系,是参与者所能观察和使用到的系统功能模型图. 用例图用于需求分析阶段 用例图包含6个基本元素:参与者(A ...
随机推荐
- UVA - 1608 Non-boring sequences (分治)
题意:如果一个序列的任意连续子序列中至少有一个只出现一次的元素,则称这个序列式为non-boring.输入一个n(n≤200000)个元素的序列A(各个元素均为109以内的非负整数),判断它是否无聊. ...
- mysql基本知识的总结
Mysql基本sql知识 Navicat快捷方式: 选中当前行 在行尾:shift+home 在行首:shift+end 执行当前行:ctrl+shift+R 复制当前行:ctrl+D 显示所有数据库 ...
- 利用创建的sa token来创建kubectl的config文件
1.第一步 创建一sa,并授予需要的一个权限(需要授予的权限) 2.第二步 取步骤1中的sa的 secret的token文件并进行base64解码 echo "$TOKEN&quo ...
- 065-PHP函数中声明全局变量
<?php function test(){ //定义函数 global $a; //声明全局变量 $a=7; echo "函数内: ".$a . "<br& ...
- WCF基础调用
WCF学习demo代码下载 调用:启动wcf服务程序,然后建立一个控制台应用程序 建立wcf程序 添加 using System; using System.Collections.Generic; ...
- opencv目录(转)
github:https://github.com/opencv/opencv OpenCV 3 的源代码文件夹: 3rdparty/: 包含第三方库,如用视频解码用的 ffmpeg.jpg.png. ...
- Bean XML 配置(1)- 通过XML配置加载Bean
系列教程 Spring 框架介绍 Spring 框架模块 Spring开发环境搭建(Eclipse) 创建一个简单的Spring应用 Spring 控制反转容器(Inversion of Contro ...
- 初识Golang编程语言
初识Golang编程语言 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Go 是年轻而有活力的语言,有网友说:"Go语言将超过C,Java,成为未来十年最流行的语言&qu ...
- 2016蓝桥杯决赛C/C++A组第四题 路径之谜
题意: 小明冒充X星球的骑士,进入了一个奇怪的城堡.城堡里边什么都没有,只有方形石头铺成的地面. 假设城堡地面是 n x n 个方格.[如图1.png]所示. 按习俗,骑士要从西北角走到东南角.可以横 ...
- HDU - 1200 To and Fro
题意:给定一个,其实是由一个图按蛇形输出而成的字符串,要求按从左到右,从上到下的顺序输出这个图. 分析: 1.把字符串转化成图 2.按要求输出图= = #include<cstdio> # ...