OpenLayers a WFS-T¶
Poznámka
Nastavení editace vektorových dat pomocí protokolu WFS-T vyžaduje již určité programátorské schopnosti. Tento příklad berte pouze jako ilustrativní, pro reálný systém je potřeba ošetřit celou řadu krajních případů. Příklad vychází z oficiální dokumentace k TinyOWS [1].
Editace pomocí protokolu WFS-T (transakční WFS) vyžaduje jednak nastavení na straně serveru a jednak přidání editačních nástrojů do projektu OpenLayers. Pokračovat budeme na předchozím příkladě, ale poněkud jej rozšíříme. Verzi s WFS-T si můžete prohlédnout zde.
Nejprve přidáme do seznamu strategií u vrstvy WFS strategii pro ukládání:
var saveStrategy = new OpenLayers.Strategy.Save();
wfs = new OpenLayers.Layer.Vector("Budovy", {
strategies: [new OpenLayers.Strategy.Fixed(), saveStrategy],
projection: new OpenLayers.Projection("EPSG:5514"),
protocol: new OpenLayers.Protocol.WFS({
version: "1.1.0",
srsName: "EPSG:5514",
url: "/services/vugtkwfs",
featureNS : "http://www.tinyows.org/",
featureType: "mystavebniobjekty",
geometryName: "puvodnihranice", // originalnihranice, geom
schema: "/services/vugtkwfs?service=wfs&request=DescribeFeatureType&version=1.1.0&typename=tows:mystavebniobjekty"
})
});
Poznámka
Zkontrolovat název sloupce s geometrií
Přidáme nástroje pro kreslení nových prvků a změnu existujících prvků v mapě:
// vytvoříme panel nástrojů
var panel = new OpenLayers.Control.Panel(
{'displayClass': 'olControlEditingToolbar'}
);
// kreslení polygonů
var draw = new OpenLayers.Control.DrawFeature(
wfs, OpenLayers.Handler.Polygon,
{
title: "Draw Feature",
displayClass: "olControlDrawFeaturePolygon",
multi: true
});
// mazání
var del = new DeleteFeature(wfs, {title: "Delete Feature"});
// přidání nástrojů do panelu a panelu do mapy
panel.addControls([navigate, save, del, edit, draw]);
Nakonec vyrobíme tlačítko s ukládací funkcí:
// uložení
var save = new OpenLayers.Control.Button({
title: "Save Changes",
trigger: function() {
if(edit.feature) {
edit.selectControl.unselectAll();
}
saveStrategy.save();
},
displayClass: "olControlSaveFeatures"
});
Závěr¶
Tento příklad je (už při pohledu na zdrojový kód) poměrně komplexní - v úvodu souboru jsme museli nastavit kaskádové styly jednotlivých tlačítek, museli jsme definovat funkce pro mazání prvků a pro odeslání prvků protokolem WFS-T na server, přidávat tlačítka pro editaci geometrií ručně v kódu.
OpenLayers je poměrně komplexní knihovna - na úrovni jiných programátorských knihoven používaných v GIS. S její pomocí lze vytvořit velice funkční aplikace, ale jen velice málo funkcí je hotových k okamžitému použití pro laika-neprogramátora.
Další věc, která v příkladu není nijak ošetřena, je autorizace a autentifikace uživatele. Předpokládáme čtení/zápis pro všechny. Obecně je toto na webu problém, mapová aplikace musí být dostupná ze stejné URL jako WFS server - tak, aby nedocházelo k problémům s tzv. cross site scripting. V tom případě totiž není jednoduše možné předat přihlašovací údaje vzdálenému serveru, neboť jsou zachyceny právě na službě proxy.
Poznámky
[1] | Příklad pro TinyOWS a OpenLayers http://mapserver.org/tinyows/openlayershowto.html |