OpenLayers是一個用于開發WebGIS用戶端的JavaScript包。OpenLayers 支援的地圖來源包括Google Maps、Yahoo、 Map、微軟Virtual Earth 等,使用者還可以用簡單的圖檔地圖作為背景圖,與其他的圖層在OpenLayers 中進行疊加,在這一方面OpenLayers提供了非常多的選擇。
簡介
OpenLayers是一個用于開發WebGIS用戶端的JavaScript包。OpenLayers 支援的地圖來源包括Google Maps、Yahoo、 Map、微軟Virtual Earth 等,使用者還可以用簡單的圖檔地圖作為背景圖,與其他的圖層在OpenLayers 中進行疊加,在這一方面OpenLayers提供了非常多的選擇。
除此之外,OpenLayers實作通路地理空間資料的方法都符合行業标準。OpenLayers 支援Open GIS 協會制定的WMS(Web Mapping Service)和WFS(Web Feature Service)等網絡服務規範,可以通過遠端服務的方式,将以OGC 服務形式釋出的地圖資料加載到基于浏覽器的OpenLayers 用戶端中進行顯示。OpenLayers采用面向對象方式開發,并使用來自Prototype.js和Rico中的一些元件。
在操作方面,OpenLayers 除了可以在浏覽器中幫助開發者實作地圖浏覽的基本效果,比如放大(Zoom In)、縮小(Zoom Out)、平移(Pan)等常用操作之外,還可以進行選取面、選取線、要素選擇、圖層疊加等不同的操作,甚至可以對已有的OpenLayers 操作和資料支援類型進行擴充,為其賦予更多的功能。
簡單示例
官網位址
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<!-- 加載OpenLayers 類庫 -->
<link rel="stylesheet" href="./libs/ol.css" type="text/css">
<style>
.map {
height: 500px;
width: 100%;
}
</style>
<!-- 加載OpenLayers 類庫 -->
<script src="./libs/ol.js"></script>
<title>OpenLayers example</title>
</head>
<body>
<h2>My Map</h2>
<div class="map"></div>
<script type="text/javascript">
var map = new ol.Map({
<!-- 綁定 DIV 元素 -->
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: 1
})
});
</script>
</body>
</html>
簡單介紹
通過上面例子可以看出 openlayers 使用很簡單,首先定義一個 Map,這是 openlayers 的核心,它是一個容器,所有動作、設定等都在 Map 中展開。下面對上面 DEMO 所簡要說明:
1、将 Map 容器與 HTML 元素(這裡是 DIV 元素 rcp1_map)做綁定,Map 提供有 target 屬性來綁定;
2、将圖層 Layer 添加到 Map 中,這裡是一個瓦面圖層 ol.layer.Tile;
3、圖層是一個包裝盒,需要給圖層添加具體的資料源:new ol.source.OSM(),資料源表示一個服務,可以了解為是一個 URL;
4、最後設定 Map 容器的視圖視窗:new ol.View,就是我們初始化能看到的地圖樣子。
openlayers 其核心元件是
Map
、
Layer
、
Source
、
View
、
Control
、
Interaction
幾乎所有的動作都是圍繞這幾個核心類展開。
Map:
它是 openlayers 的使用的基礎,所有的圖層、地圖控件、地圖工具等必須添加 Map 中才能使用。往 Map 中添加圖層、地圖控件、地圖工具等可以在初始化 Map 時就添加(如上 DEMO),可以調用 Map 相關的方法添加 addControl(control)、addInteraction(interaction)、addLayer(layer)。Map 還提供了很多事件,如點選地圖(click)、輕按兩下地圖(dbclick)等。
Layer:
Layer 圖層。單單一個 Map 是沒有什麼用的,隻用綁定圖層才能顯示資料。Layer 作用能控制資料是否顯示,以及地圖可顯示的最大或最小比例尺(即放大或縮小到某個級别不顯示地圖),這裡特别說明下,圖層主要是根據資料源的不同來選擇,不同的資料源選擇不同的圖層,使用:
this.map.addLayer(new ol.layer.Vector({
source: new TileWMS({
url: "http://127.0.0.1:8086/geoserver/sf/wms",
params: {
LAYERS: "sf:streams"
}
})
}))
Source:
這是整個 openlayers 的靈魂,source 分為矢量資料源和影像資料源。資料源的使用如下:
this.map.addLayer(new ol.layer.Tile({
//加載資料
source: new ol.source.OSM()
}));
其它
vL.source.BingMaps = gd,
vL.source.BingMaps.quadKey = bd,
vL.source.CartoDB = kd,
vL.source.Cluster = zd,
vL.source.DataTile = Ld,
vL.source.GeoTIFF = ab,
vL.source.IIIF = Mb,
vL.source.Image = Ib,
vL.source.Image.ImageSourceEvent = Rb,
vL.source.Image.defaultImageLoadFunction = Pb,
vL.source.ImageArcGISRest = zb,
vL.source.ImageCanvas = Lb,
vL.source.ImageMapGuide = Db,
vL.source.ImageStatic = qb,
vL.source.ImageWMS = Yb,
vL.source.OGCMapTile = eg,
vL.source.OGCVectorTile = cg,
vL.source.OSM = lg,
vL.source.OSM.ATTRIBUTION = fg,
vL.source.Raster = Xg,
vL.source.Raster.Processor = zg,
vL.source.Raster.RasterSourceEvent = Ug,
vL.source.Raster.newImageData = Pg,
vL.source.Source = ud,
vL.source.Stamen = Zg,
vL.source.Tile = ld,
vL.source.Tile.TileSourceEvent = fd,
vL.source.TileArcGISRest = Qg,
vL.source.TileDebug = nx,
vL.source.TileImage = md,
vL.source.TileJSON = rx,
vL.source.TileWMS = ox,
vL.source.UTFGrid = ux,
vL.source.UTFGrid.CustomTile = ax,
vL.source.UrlTile = dd,
vL.source.Vector = Id,
vL.source.Vector.VectorSourceEvent = Pd,
vL.source.VectorTile = sg,
vL.source.VectorTile.defaultLoadFunction = ag,
vL.source.WMTS = lx,
vL.source.WMTS.optionsFromCapabilities
View:
view 用來設定地圖的展示位置範圍、地圖中心位置以及目前地圖使用的投影坐标系等,也可以設定地圖旋轉等,使用:
this.map.setView(new ol.View({
center: [117.604, 26.218], //坐标
zoom: 15,
projection: 'EPSG:4326' //使用的坐标,這裡是 WGS84 坐标系
}))
### Control:
Control 控件,就是與地圖相關操作的工具。如下圖:
!
### Interaction:
互動操作就是我們與地圖的互相操作,比如在地圖上繪制要素、選擇、修改、移動、拉伸等等操作。使用如下:
## 進階還得多多參考以下連結内容
[官方代碼示例](https://openlayers.org/en/latest/examples/)
[官方API文檔](https://openlayers.org/en/latest/apidoc/)