August 4, 2022
By: syh

openlayoers-入门

  1. openLayers-简单入门
    1. 1. div容器
    2. 2.创建地图
      1. 2.1.layer
        1. Tile(平铺图层) 渲染在按特定分辨率的缩放级别组织的网格中提供平铺图像的源。
        2. Vector(矢量图层) 在客户端呈现矢量数据
        3. Image(图像) 地图图像的源。
      2. 2.2.view
      3. 2.3.投影
        1. OpenLayers使用什么投影?
      4. 2.4.样式
      5. 2.5几何

openLayers-简单入门

1. div容器

<div id="map" class="map"></div>
  <style>
    .map {
      height: 400px;
      width: 100%;
    }
  </style>

2.创建地图

  var map = new ol.Map({
    target: 'map', //目标源
    layers: [ // 图层
      new ol.layer.Tile({ //平铺图层
        source: new ol.source.OSM() //开放地图
      })
    ],
    view: new ol.View({ //视图
      center: ol.proj.fromLonLat([37.41, 8.82]),//中心坐标
      zoom: 4 //缩放值
    })
  });

target: 目标元素

layers:图层

view: 视图

2.1.layer

图层列表

  1. Tile(平铺图层) 渲染在按特定分辨率的缩放级别组织的网格中提供平铺图像的源。
    1. OSM(开源地图)
    new ol.layer.Tile({ //平铺图层
    	source: new ol.source.OSM() //开发地图数据源
    })
    
  2. Vector(矢量图层) 在客户端呈现矢量数据
    new ol.layer.Vector({
    	source: ...
    })
    
  3. Image(图像) 地图图像的源。
    new ol.layer.Image({
    	source: ...
    })
    
    new ol.layer.Image({
    	   	source: new ol.source.ImageStatic({
    			projection: "EPSG:4326",	
    			url:"https://static01.imgkr.com/temp/2c146f6040d943aa997bb9a5e7897f18.png",
    			imageExtent:  [114.26445, 37.65106,117.73555263876915, 40.34893820434809] ,
    		})
    })
    

2.2.view

视图允许指定地图的中心、分辨率和旋转

view: new ol.View({ //视图
  center: ol.proj.fromLonLat([37.41, 8.82]),//中心坐标 EPSG:4326  是国际标准,GPS坐标
  zoom: 4 //缩放值
})

您会注意到center指定的是经度/纬度坐标 (EPSG:4326)。由于我们使用的唯一图层是 Spherical Mercator 投影 (EPSG:3857),因此我们可以动态重新投影它们,以便能够在正确的坐标上缩放地图。

2.3.投影

 ol.proj.transform(vector, 'EPSG:4326' ,'EPSG:3857') 转换投影
 ol.proj.fromLonLat(vector) 转换投影 

官方连接

https://openlayers.org/en/latest/doc/faq.html

OpenLayers使用什么投影?

你用OpenLayers创建的每个地图都会有一个视图,每个视图都会有一个投影。因为地球是三维的,是圆的,而地图的2D视图不是,我们需要一个数学表达式来表示它。输入的预测。

不是只有一个投影,而是有很多常见的投影。每个投影都有不同的性质,因为它准确地表示距离、角度或面积。某些预测更适合世界不同地区。

回到最初的问题:OpenLayers能够处理大多数预测。如果您没有显式设置,您的地图将使用我们的默认值,即Web墨卡托投影(EPSG:3857)。

如果你想要一个显示整个世界的地图,这种投影是一个很好的选择。

2.4.样式

创建样式

new ol.style.Style({})

背景

import {Fill} from 'ol/style';
fill: new Fill({
    color: "rgba(0, 191, 255, .2)",
}),

画笔样式

import {Stroke} from 'ol/style';
stroke: new Stroke({
    color: "rgba(255, 0, 0)",
    width: 2,
}),

文字样式

import {Text} from 'ol/style';
text: new Text({
        textAlign: 'center',            //位置
        font: 'normal 17px 微软雅黑',    //文字样式
        text: "测试",      //文本内容
        fill: new Fill({       //文本填充样式(即文字颜色)
        color: '#FFFFFF'
    })
})

2.5几何

  1. Circle(圆)
new Feature({
	geometry: new ol.geom.Circle([126, 36], opt_radius)
})
function drawStyle() {
    return new ol.style.Style({
        //背景
        fill: new ol.style.Fill({
        color: "rgba(0, 191, 255, .2)",
        }),
        //边框
        stroke: new ol.style.Stroke({
        color: "rgba(0, 191, 255, .6)",
        width: 2,
     }),
  });
}
let feature =  (feature) => {
    const createFeature = new ol.Feature({
        geometry: new ol.geom.Circle(ol.proj.fromLonLat([120, 36]),1000),
        // name: "王心凌男孩儿",
    });
    createFeature.setStyle(drawStyle)  
    return createFeature;
}
  1. Point(集合点)
new ol.Feature({
	geometry: new ol.geom.Point([126,36]),
});
  1. LineString(线)
new Feature({
	geometry: new ol.geom.LineString([126,36,200,60])
})
function createLineString(){
    return new Style({
      stroke: new Stroke({
          color: 'White',
          width: 2
      })
    })
}
let feature =  (feature) => {
    const createFeature = new ol.Feature({
        geometry: new ol.geom.LineString([ol.proj.fromLonLat([120, 36]),
                                          ol.proj.fromLonLat([95, 44])]),
    });
    createFeature.setStyle(createLineString)  
    return createFeature;
}

2.6画(Draw)

draw框区域

let source = new ol.source.Vector();
let draw = new ol.interaction.Draw({
    source: source,
    type: 'Polygon'
})
map.addLayer(new ol.layer.Vector({
    projection: "EPSG:4326",
    source: source
}));

map.addInteraction(draw);
draw.on('drawstart',(e) => {
    console.log("开始了选框了")
})

draw.on('drawend',(e) => {
    const  polygon = e.feature.getGeometry();
    console.log("结束选框了")
})

1.创建图层

2.创建Draw

3.把Draw 放到map中

4.监听事件开始选框

2.7Overlay(弹框层)

<div id="popup" title="Welcome to OpenLayers">
	hhhh
</div>
#popup {
    width: 200px;
    height: 200px;
    border: 1px solid #088;
    background-color: #0FF;
    opacity: 0.5;
}
let source = new ol.source.Vector();
let overlay = new ol.Overlay({
    element: document.getElementById('popup')
})
map.addOverlay(overlay)
map.on('singleclick',function(evt){
    const coordinate = evt.coordinate;
    console.log(coordinate)
    overlay.setPosition(coordinate);
})
const modalClose = function (){
    overlay.setPosition();
}

1.创建目标元素div容器

2.创建图层

3.创建 Overlay

4.目标元素放到 Overlay

5.把Overlay 放到map中

6.设置Overlay坐标

Tags: js