

Snabbstart för OpenLayers¶
I den här snabbstarten beskrivs några grundläggande steg som krävs för att börja arbeta med OpenLayers: skapa en grundläggande karta, lägga till raster- och vektorlager och utforma funktioner.
OpenLayers gör det enkelt att lägga in en dynamisk karta på en webbsida. Den kan visa kartplattor, vektordata och markörer som laddats från valfri källa. OpenLayers har utvecklats för att främja användningen av alla typer av geografisk information. Det är helt gratis, Open Source JavaScript, som släpps under 2-clause BSD License (även känd som FreeBSD).
Centrala begrepp¶
Innan vi börjar arbeta med OpenLayers är det bra att förstå OpenLayers grundläggande begrepp:
- Karta
Kartan är kärnkomponenten i OpenLayers. För att en map ska renderas behövs en view, en eller flera layers och en målcontainer.
- Visa
Vyn bestämmer hur kartan ska återges. Den används för att ställa in upplösning, mittpunkt osv. Det är som en kamera genom vilken vi tittar på kartans innehåll.
- Skikt
Lager kan läggas till på kartan i staplad ordning. Lagren kan vara antingen rasterlager (bilder) eller vektorlager (punkter/linjer/polygoner).
- Källa
Varje skikt har en källa som vet hur skiktets innehåll ska laddas. När det gäller vektorlager läser källan vektordata med hjälp av en format-klass (t.ex. GeoJSON eller KML) och förser lagret med en uppsättning funktioner.
- Funktioner
Features representerar verkliga ting och kan återges med hjälp av olika geometrier (som punkt, linje eller polygon) med en given style, som bestämmer dess utseende (linjetjocklek, fyllningsfärg etc.).
Skapa en grundläggande karta¶
Skapa en fil i t.ex. /home/user/ som heter basic-map.html , och kopiera följande innehåll till filen.
<!DOCTYPE html>
<html lang="en">
<head>
<title>Basic map</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width">
<!-- OpenLayers CSS -->
<link rel="stylesheet" href="http://localhost/openlayers/dist/ol.css" type="text/css">
<!-- Custom styles -->
<style>
#map {
width: 100%;
height: 500px;
}
</style>
</head>
<body>
<h1>Basic map</h1>
<div id="map"></div>
<!-- OpenLayers JS-->
<script src="http://localhost/openlayers/dist/ol.js" type="text/javascript"></script>
<!-- App code -->
<script>
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([2.1833, 41.3833]),
zoom: 6
})
});
</script>
</body>
</html>
Försök nu att öppna basic-map.html från en webbläsare med File->Open File. Du bör se följande:

Anteckning:
Koden följer bästa praxis för att ladda JavaScipt-kod i slutet av html-filen.
En OpenLayers-karta måste kopplas till ett HTML DOM-element, så vi har skapat ett
<div>
-element som identifieras av map-id.Kartor representeras av klassen
ol.Map
. Vi anger DOM-elementet för att rendera kartan i med hjälp av target-egenskapen.OpenLayers tillåter kartåtergivning med hjälp av två olika mekanismer: Canvas och WebGL. Standardrenderingen är canvas.
En karta visar data som finns i lager, så vi har skapat ett kaklat lager, representerat av klassen
ol.layer.Tile
, som laddar innehåll från OpenStreetMap-projektet med hjälp av källklassenol.source.OSM
.Slutligen ställer vi in kamerans ursprungliga position med hjälp av klassen
ol.View
, ställer in den ursprungliga zoomnivån och mittpositionen.
Lägg till rasterlager¶
De mest använda rasterlagren är de kaklade lagren, som tillhandahålls av OpenStreetMap, Stamen, Bing, etc. Tiled-lager representeras av klassen ol.layer.Tile
och måste använda en källa som vet hur man laddar tiles från en viss leverantör, t.ex. ol.source.OSM
eller ol.source.Stamen
:
var osm = new ol.layer.Tile({
source: new ol.source.OSM()
});
var stamen = new ol.layer.Tile({
source: new ol.source.Stamen({
layer: 'watercolor'
})
});
Du kan lägga till lager på kartan på två sätt:
När du konstruerar
ol.Map
ska du använda egenskapenlayers
:var map = new ol.Map({ ... layers: [osm, stamen] ... });
Lägg till dem manuellt med metoden
map.addLayer()
:map.addLayer(osm); map.addLayer(stamen);
Lägg till vektorlager¶
Vektorlager representeras av klassen ol.layer.Vector
och måste använda en källa som är lämplig för att läsa vektorformatet, som ol.source.GeoJSON
, ol.source.KML
eller ol.source.TopoJSON
.
var vectorLayer = new ol.layer.Vector({
source: new ol.source.GeoJSON({
url: 'url_to_geojson_file'
})
});
// Add Vector layer to map
map.addLayer(vectorLayer);

Observera att vi i den tidigare koden måste ändra url_to_file
för att peka på en giltig GeoJSON-fil placerad på vår server. Observera att Javascript-säkerhet förhindrar inköp av datauppsättningar från en extern URL på en annan domän / port (a.k.a. samma ursprungspolicy).
Funktioner kan också skapas manuellt. I det här fallet måste vi skapa en geometri som representerar funktionen:
// Geometries
var point = new ol.geom.Point(
ol.proj.transform([3,50], 'EPSG:4326', 'EPSG:3857')
);
var circle = new ol.geom.Circle(
ol.proj.transform([2.1833, 41.3833], 'EPSG:4326', 'EPSG:3857'),
1000000
);
// Features
var pointFeature = new ol.Feature(point);
var circleFeature = new ol.Feature(circle);
// Source
var vectorSource = new ol.source.Vector({
projection: 'EPSG:4326'
});
vectorSource.addFeatures([pointFeature, circleFeature]);
// Vector layer
var vectorLayer = new ol.layer.Vector({
source: vectorSource
});
// Add Vector layer to map
map.addLayer(vectorLayer);
Tillämpa stil på funktioner¶
Funktioner inom vektorlager kan stylas. Stilen bestäms av en kombination av fill, stroke, text och image, som alla är valfria. Dessutom kan en stil tillämpas på ett lager, vilket bestämmer stilen för alla ingående funktioner, eller på en enskild funktion.
En stil representeras av klassen ol.style.Style
som har egenskaper för att ställa in fill
, stroke
, text
och image
som ska tillämpas. I nästa exempel visas datauppsättningen World’s administrative limits med grön fyllning och streck:

var limitsLayer = new ol.layer.Vector({
source: new ol.source.Vector({
url: 'data/world_limits.json',
format: new ol.format.TopoJSON(),
projection: 'EPSG:3857'
}),
style: new ol.style.Style({
fill: new ol.style.Fill({
color: 'rgba(55, 155, 55, 0.3)'
}),
stroke: new ol.style.Stroke({
color: 'rgba(55, 155, 55, 0.8)',
width: 1
}),
image: new ol.style.Circle({
radius: 7,
fill: new ol.style.Fill({
color: 'rgba(55, 155, 55, 0.5)',
})
})
})
});
I koden har vi laddat en TopoJSON-fil och stylat den genom egenskapen style
. Vi har ställt in fill
och stroke
, som krävs för linjer och polygoner, och en image
(i det här fallet en cirkel) som används för punktfunktioner.
Arbeta med evenemang¶
De flesta av komponenterna, som karta, lager eller kontroller, utlöser händelser för att meddela ändringar. Vi kan t.ex. få ett meddelande varje gång musen flyttas över kartan eller när en funktion läggs till i ett vektorlager osv.
Händelser kan enkelt registreras på ett objekt med metoden on()
och avregistreras med un()
.
Följande kod registrerar en händelse på en kartinstans och kommer att meddelas varje gång pekaren flyttas. I callback-funktionen erhåller vi pekarens koordinater och skriver ut dem i webbläsarkonsolen i två olika projektioner.
map.on('pointermove', function(event) {
var coord3857 = event.coordinate;
var coord4326 = ol.proj.transform(coord3857, 'EPSG:3857', 'EPSG:4326');
console.log(coord3857, coord4326);
});
Hur vill du gå vidare?¶
Ibland är det snabbaste sättet att ta reda på hur OpenLayers fungerar att titta på exempel och deras källkod. Du hittar mer information om OpenLayers här:
dokument om API <https://localhost/openlayers/apidoc/>`_
webbplats för OpenLayers.org <https://openlayers.org/>`_