De (interne) FlexMap wordt getoond indien
Is dat het geval dan wordt met de kaartknop of met een tekenopdracht uit een menulijstje de FlexMap getoond door een aanroep naar de OpenWave-API getFlexMap.
Daarbij wordt met parameters aangegeven of de kaart alleen in kijkmodus wordt geopend, of dat de kaart geopend wordt om een punt aan te wijzen of om een polygoon of lijn te tekenen.
Ook wordt met een parameter geregeld waarvandaan de kaart wordt geopend en wat er op te zien is, door de naam van een xml-file mee te geven, waarin deze informatie staat.
voorbeelden aanroep
De api getFlexmap heeft dus 3 of 4 parameters:
In de aangeroepen MDMC_*.xml is geregeld:
In de programmatuur van OpenWave zijn hiertoe standaard de volgende xml's opgenomen
OpenWave zoekt bij het openen van de kaart eerst naar de waarde van param3 van de FlexMap-aanroep in de tabel tbscreencolumns in de kolom dvscreenfilename (beheerportaal: tegel Alle schermkolomdefinities) en als de kolom dvscreenxml gevuld is, dan wordt die (xml-)definitie genomen.
Niet gevonden, of de kolom dvscreenxml is leeg, dan gebruikt OpenWave de default xml-kaartdefinitie, maar dit alleen indien param3 één van de bovenstaande namen heeft.
Indien de kaart wordt aangeroepen op basis van een xml die niet goed in elkaar zit, dan
De xml moet in ieder geval aan de volgende xsd voldoen
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="document">
<xs:complexType>
<xs:sequence>
<xs:element ref="center" minOccurs="1" maxOccurs="1"/>
<xs:element name="zoom" type="xs:integer" minOccurs="1" maxOccurs="1"/>
<xs:element ref="widgetinfo" minOccurs="1" maxOccurs="1"/>
<xs:element ref="basisobjecten" minOccurs="0" maxOccurs="1"/>
<xs:element ref="widgetopdracht" minOccurs="0" maxOccurs="1"/>
<xs:element ref="openwavelayers" minOccurs="0" maxOccurs="1"/>
<xs:element ref="wfslayers" minOccurs="0" maxOccurs="1"/>
<xs:element ref="wmslayers" minOccurs="0" maxOccurs="1"/>
<xs:element ref="widgetbuttons" minOccurs="0" maxOccurs="1"/>
<xs:element ref="actions" minOccurs="0" maxOccurs="1"/>
<xs:element ref="punten" minOccurs="0" maxOccurs="1"/>
<xs:element ref="lijnen" minOccurs="0" maxOccurs="1"/>
<xs:element ref="vlakken" minOccurs="0" maxOccurs="1"/>
<xs:element ref="cirkels" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="center">
<xs:complexType>
<xs:sequence>
<xs:element name="point" type="xs:string" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="widgetinfo">
<xs:complexType>
<xs:sequence>
<xs:element ref="koptekst" minOccurs="1" maxOccurs="1"/>
<xs:element ref="body" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="koptekst">
<xs:complexType>
<xs:sequence>
<xs:element name="regel" type="koptekstregeltype" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="koptekstregeltype">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="id" use="required" type="xs:integer"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name="body">
<xs:complexType>
<xs:sequence>
<xs:element name="regel" type="koptekstregeltype" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="basisobjecten">
<xs:complexType>
<xs:sequence>
<xs:element ref="basisobject" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="basisobject">
<xs:complexType>
<xs:sequence>
<xs:element name="resultset" type="xs:string" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
<xs:attribute name="type" use="required" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="widgetopdracht">
<xs:complexType>
<xs:all>
<xs:element ref="point" minOccurs="0" maxOccurs="1"/>
<xs:element ref="linestring" minOccurs="0" maxOccurs="1"/>
<xs:element ref="polygon" minOccurs="0" maxOccurs="1"/>
</xs:all>
</xs:complexType>
</xs:element>
<xs:element name="polygon">
<xs:complexType>
<xs:sequence>
<xs:element ref="koptekst" minOccurs="1" maxOccurs="1"/>
<xs:element ref="opdracht" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="opdracht">
<xs:complexType>
<xs:sequence>
<xs:element name="resultset" type="xs:string" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="point">
<xs:complexType>
<xs:sequence>
<xs:element ref="koptekst" minOccurs="1" maxOccurs="1"/>
<xs:element ref="opdracht" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="linestring">
<xs:complexType>
<xs:sequence>
<xs:element ref="koptekst" minOccurs="1" maxOccurs="1"/>
<xs:element ref="opdracht" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="openwavelayers">
<xs:complexType>
<xs:sequence>
<xs:element name="layer" type="owlayertype" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="owlayertype">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="id" use="required" type="xs:integer"/>
<xs:attribute name="active" use="required" type="xs:boolean"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name="wfslayers">
<xs:complexType>
<xs:sequence>
<xs:element name="layer" type="wfslayertype" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="wfslayertype">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="id" use="required" type="xs:integer"/>
<xs:attribute name="active" use="required" type="xs:boolean"/>
<xs:attribute name="isbasislaag" use="required" type="xs:boolean"/>
<xs:attribute name="opacity" use="required" type="xs:integer"/>
<xs:attribute name="index" use="required" type="xs:integer"/>
<xs:attribute name="layer" use="required" type="xs:string"/>
<xs:attribute name="source" use="required" type="xs:string"/>
<xs:attribute name="color" use="required" type="xs:string"/>
<xs:attribute name="icon" use="required" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name="wmslayers">
<xs:complexType>
<xs:sequence>
<xs:element name="layer" type="wmslayertype" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="wmslayertype">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="id" use="required" type="xs:integer"/>
<xs:attribute name="active" use="required" type="xs:boolean"/>
<xs:attribute name="isbasislaag" use="required" type="xs:boolean"/>
<xs:attribute name="opacity" use="required" type="xs:integer"/>
<xs:attribute name="index" use="required" type="xs:integer"/>
<xs:attribute name="layer" use="required" type="xs:string"/>
<xs:attribute name="source" use="required" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name="widgetbuttons">
<xs:complexType>
<xs:all>
<xs:element ref="opdrachtpoint" minOccurs="0" maxOccurs="1"/>
<xs:element ref="opdrachtlinestring" minOccurs="0" maxOccurs="1"/>
<xs:element ref="opdrachtpolygon" minOccurs="0" maxOccurs="1"/>
</xs:all>
</xs:complexType>
</xs:element>
<xs:element name="opdrachtpoint">
<xs:complexType>
<xs:sequence>
<xs:element name="button" type="buttontype" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="buttontype">
<xs:simpleContent>
<xs:extension base="xs:boolean">
<xs:attribute name="id" use="required" type="xs:integer"/>
<xs:attribute name="hint" use="required" type="xs:string"/>
<xs:attribute name="icoon" use="required" type="xs:integer"/>
<xs:attribute name="action" use="required" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name="opdrachtlinestring">
<xs:complexType>
<xs:sequence>
<xs:element name="button" type="buttontype" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="opdrachtpolygon">
<xs:complexType>
<xs:sequence>
<xs:element name="button" type="buttontype" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="actions">
<xs:complexType>
<xs:all>
<xs:element ref="actionpoint" minOccurs="0" maxOccurs="1"/>
<xs:element ref="actionpolygon" minOccurs="0" maxOccurs="1"/>
<xs:element ref="actionlinestring" minOccurs="0" maxOccurs="1"/>
</xs:all>
</xs:complexType>
</xs:element>
<xs:element name="actionpoint">
<xs:complexType>
<xs:sequence>
<xs:element name="action" type="actiontype" minOccurs="2" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="actionlinestring">
<xs:complexType>
<xs:sequence>
<xs:element name="action" type="actiontype" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="actionpolygon">
<xs:complexType>
<xs:sequence>
<xs:element name="action" type="actiontype" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="actiontype">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="id" use="required" type="xs:integer"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name="punten">
<xs:complexType>
<xs:sequence>
<xs:element ref="punt" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="punt">
<xs:complexType>
<xs:sequence>
<xs:element name="resultset" type="xs:string" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="layer" use="required" type="xs:integer"/>
</xs:complexType>
</xs:element>
<xs:element name="lijnen">
<xs:complexType>
<xs:sequence>
<xs:element ref="lijn" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="lijn">
<xs:complexType>
<xs:sequence>
<xs:element name="resultset" type="xs:string" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="layer" use="required" type="xs:integer"/>
</xs:complexType>
</xs:element>
<xs:element name="vlakken">
<xs:complexType>
<xs:sequence>
<xs:element ref="vlak" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="vlak">
<xs:complexType>
<xs:sequence>
<xs:element name="resultset" type="xs:string" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="layer" use="required" type="xs:integer"/>
</xs:complexType>
</xs:element>
<xs:element name="cirkels">
<xs:complexType>
<xs:sequence>
<xs:element ref="cirkel" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="cirkel">
<xs:complexType>
<xs:sequence>
<xs:element name="resultset" type="xs:string" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="layer" use="required" type="xs:integer"/>
</xs:complexType>
</xs:element>
</xs:schema>
(Op basis van mdmc_tbmilinrichtingen.xml)
De xml is verdeeld in de volgende blokken:
OpenWave evalueert voordat de kaart geopend wordt de SQL-statements in de xml en vervangt deze statements door hun resultaat.
De variabele %keypointer% wordt overal vervangen door param1 van de FlexMap-aanroep (dus in onderstaande voorbeelden een dnkey van tbmilinrichtingen).
voorbeeld center
<center>
<point>select case when b.dvxrdcoordinaat is null and substr(b.dvgmlrdpolygoon, 1, position(' 'IN b.dvgmlrdpolygoon) - 1) is null then coalesce(a.dnxcoordinaat,155600) ||','|| coalesce(a.dnycoordinaat,465175)
when b.dvxrdcoordinaat is null then substr(b.dvgmlrdpolygoon, 1, position(' 'IN b.dvgmlrdpolygoon) - 1)
else b.dvxrdcoordinaat ||','|| b.dvyrdcoordinaat
end dvpos
from vwfrmmilinrichtingen a left outer join tbzaakkadperc b
on (a.dnkeymilinrichtingen = b.dnkeymilinrichtingen and b.dlhoofdprojectlocatie = 'T')
where a.dnkeymilinrichtingen = %keypointer%
</point>
</center>
Het blok <center> moet één keer voorkomen.
Het blok <center> bevat één tag <point> dat gevuld wordt door de evaluatie van het SQL-statement. Het resultaat van de SQL bestaat uit één rij bestaande uit één string die een x-coördinaat en een y-coördinaat gescheiden door een komma bevat. In rijksdriehoek.
De kaart wordt gecentreerd op dat punt.
voorbeeld zoom
<zoom>12</zoom>
De tag <zoom> moet één keer voorkomen.
In de tag <zoom> moet rechtsreeks een integer waarde staan (dus geen SQL-statement). De kaart wordt gestart met dit zoomlevel.
voorbeeld widgetinfo
<widgetinfo>
<koptekst>
<regel id="1">select 'Locatiedossier:' || dvinrichtingnaam from vwfrmmilinrichtingen where
dnkeymilinrichtingen = %keypointer%</regel>
<regel id="2">select coalesce(dvobjadres,'') ||' ' || coalesce(dvobjplaats,'') from vwfrmmilinrichtingen
where dnkeymilinrichtingen = %keypointer%</regel>
</koptekst>
<body>
<regel id="1"> select 'Handelsnaam:' || dvhandelsnaam from vwfrmmilinrichtingen where
dnkeymilinrichtingen = %keypointer%</regel>
</body>
</widgetinfo>
Het blok <widgetinfo> moet één keer voorkomen.
Het blok <widgetinfo> moet één blok <koptekst> bevatten en elk blok <koptekst> moet bestaan uit één of meer regels die in het attribuut id oplopend genummerd moeten worden. Het SQL-statement per regel moet één rij opleveren bestaande uit één string.
Het blok widgetinfo moet ook één blok <body> bevatten en elk blok <body> moet bestaan uit één of meer regels die in het attribuut id oplopend genummerd moeten worden. Het SQL-statement per regel moet één rij opleveren bestaande uit één string.
Op de kaart verschijnt een widget met als titel Zaakinformatie met daarin de opgegeven kop- en bodyteksten.
voorbeeld basisobjecten
<basisobjecten>
<basisobject type="point">
<!--kolommen dvcolorname, dvdescription en dvpos zijn verplicht -->
<resultset>select 'Adrespunt: '|| coalesce(a.dvinrichtingnaam,'') dvdescription,
case when b.dvxrdcoordinaat is null then a.dnxcoordinaat ||','|| a.dnycoordinaat
else b.dvxrdcoordinaat ||','|| b.dvyrdcoordinaat
end dvpos, 'Red' dvcolorname
from vwfrmmilinrichtingen a left outer join tbzaakkadperc b
on (a.dnkeymilinrichtingen = b.dnkeymilinrichtingen and b.dlhoofdprojectlocatie = 'T')
where a.dnkeymilinrichtingen = %keypointer%
</resultset>
</basisobject>
<basisobject type="polygon">
<!--kolommen dvfillcolorname, dvstrokecolorname, dvdescription en dvposlist en dfopacity zijn verplicht -->
<resultset>select 'Grondvlak: '|| coalesce(a.dvinrichtingnaam,'') dvdescription,
coalesce(a.dvgmlpolygoon,b.dvgmlrdpolygoon) dvposlist, 'Red'
dvfillcolorname, 'Black' dvstrokecolorname, 0.5 dfopacity from vwfrmmilinrichtingen a left outer join tbzaakkadperc b
on (a.dnkeymilinrichtingen = b.dnkeymilinrichtingen and b.dlhoofdprojectlocatie = 'T') where
a.dnkeymilinrichtingen = %keypointer% and coalesce(b.dvgmlrdpolygoon,a.dvgmlpolygoon) is not null and fn_islinestring(coalesce(b.dvgmlrdpolygoon,a.dvgmlpolygoon)) != 1</resultset>
</basisobject>
<basisobject type="linestring">
<!--kolommen dvstrokecolorname, dvdescription en dvposlist en dfopacity zijn verplicht -->
<resultset>select 'Grondvlak: '|| coalesce(a.dvinrichtingnaam,'') dvdescription,
coalesce(a.dvgmlpolygoon,b.dvgmlrdpolygoon) dvposlist, 'Red'
dvfillcolorname, 'Black' dvstrokecolorname, 0.5 dfopacity, 3 dfstrokewidth from vwfrmmilinrichtingen a left outer join tbzaakkadperc b
on (a.dnkeymilinrichtingen = b.dnkeymilinrichtingen and b.dlhoofdprojectlocatie = 'T') where
a.dnkeymilinrichtingen = %keypointer% and coalesce(b.dvgmlrdpolygoon,a.dvgmlpolygoon) is not null and fn_islinestring(coalesce(b.dvgmlrdpolygoon,a.dvgmlpolygoon)) = 1 </resultset>
</basisobject>
</basisobjecten>
Het blok <basisobjecten> mag één keer voorkomen (maar hoeft niet).
Binnen het blok <basisobjecten> moet één of meer keer een blok <basisobject> zijn gedefinieerd.
Een blok <basisobject> heeft het attribuut type dat mag bestaan uit point of polygon of linestring.
Een blok <basisobject> van type point bevat één tag <resultset> waarachter een SQL-statement die na evaluatie één rij oplevert met de kolommen dvcolorname, dvdescription en dvpos waarbij dvpos gevuld moet zijn met een x-coördinaat en een y-coördinaat, in rijksdriehoek, gescheiden door een komma en dvcolorname met een html-color-name.
Een blok <basisobject> van type polygon bevat één tag <resultset> waarachter een SQL-statement die na evaluatie één rij oplevert met de kolommen dvfillcolorname, dvstrokecolorname, dvdescription en dvposlist en dfopacity waarbij:
Een blok <basisobject> van type linestring bevat één tag <resultset> waarachter een SQL-statement die na evaluatie één rij oplevert met de kolommen dvfillcolorname, dvstrokecolorname, dvdescription en dvposlist en dfopacity waarbij:
De uitkomst van de SQL-statements mag null zijn. In dat geval wordt het betreffende vlak, punt of lijn niet geprojecteerd op de map.
De SQL-statements die wel valide punt(en) en of vlak(ken) en of lijn(en) retourneren worden geprojecteerd op de kaart en daarvan zijn de omschrijvingen (dvdescription) terug te vinden in de widget met de titel Legenda.
voorbeeld widgetopdracht
<widgetopdracht>
<linestring>
<koptekst>
<regel id="1">select case when dvgmlpolygoon is null then 'Teken nieuwe lijn' else 'Wijzig lijn' end from vwfrmmilinrichtingen where
dnkeymilinrichtingen = %keypointer%</regel>
</koptekst>
<opdracht>
<!--kolommen dvstrokecolorname, dvdescription en dvposlist zijn verplicht -->
<resultset>select 'Lijn:' dvdescription,
dvgmlpolygoon dvposlist, 'Fuchsia' dvstrokecolorname, 0.5
dfopacity, 3 dfstrokewidthfrom vwfrmmilinrichtingen where dnkeymilinrichtingen = %keypointer% and fn_islinestring(dvgmlpolygoon) = 1</resultset>
</opdracht>
</linestring>
<polygon>
<koptekst>
<regel id="1">select case when dvgmlpolygoon is null then 'Teken nieuw inrichtingcontour' else 'Wijzig inrichtingcontour' end from vwfrmmilinrichtingen where
dnkeymilinrichtingen = %keypointer%</regel>
</koptekst>
<opdracht>
<!--kolommen dvcolorname, dvdescription en dvpos zijn verplicht -->
<resultset>select 'Inrichtingscontour:' || dvinrichtingnaam dvdescription,
dvgmlpolygoon dvposlist, 'Fuchsia' dvfillcolorname, 'Black' dvstrokecolorname, 0.5
dfopacity from vwfrmmilinrichtingen where dnkeymilinrichtingen = %keypointer%</resultset>
</opdracht>
</polygon>
</widgetopdracht>
Het blok <widgetopdracht> mag één keer voorkomen (maar hoeft niet).
Indien het blok niet voorkomt is er geen extra informatie over de tekenopdracht (zie hieronder blok <koptekst>) beschikbaar, wanneer de vierde parameter van de FlexMap-aanroep is gevuld.
Binnen het blok <widgetopdracht> mag één keer een blok <point> en mag één keer een blok <linestring> en mag één keer een blok <polygon> zijn gedefinieerd.
Binnen een blok <widgetopdracht><point> of <widgetopdracht><polygon> of <widgetopdracht><linestring> moet
De evaluatie van de tag <resultset> mag null zijn. Dus select null is een geldig statement. Met deze informatie wordt in deze OpenWave versie (namelijk nog) niets gedaan.
De koptekst wordt gebruikt als tekst in de widget met de titel tekenen en bewerken die zichtbaar wordt indien de aanroep van de FlexMap in de vierde parameter de waarde Polygon of Point of LineString bevat (indien point dan wordt de koptekst van <widgetopdracht><point> gebruikt, indien linestring dan die van <widgetopdracht><linestring> en bij Polygon die van <widgetopdracht><polygon>.
voorbeeld openwavelayers
<openwavelayers>
<layer id="3" active="false">select 'REV Referentieobjecten'</layer>
<layer id="4" active="false">select 'REV EvContouren'</layer>
<layer id="5" active="false">select 'Stallen'</layer>
<layer id="6" active="false">select 'Projectlocaties'</layer>
<layer id="7" active="false">select 'Perceeladrespunt bij inrichting'</layer>
</openwavelayers>
Het blok <openwavelayers> mag één keer voorkomen (maar hoeft niet).
het blok <openwavelayers> bestaat uit een of meer tags <layer>.
Elke tag <layer> heeft een attribuut id (elke layer heeft hierin een unieke integer waarde) waarnaar wordt verwezen in de blokken <vlakken>, <punten>, <lijnen> en cirkels (zie verderop).
Elke tag <layer> heeft een attribuut active die de waarde false of true kan hebben: de layer staat standaard aan of uit.
Achter de tag <layer> staat een SQL-statement dat na evaluatie één rij oplevert bestaande uit één string: de laagnaam.
Deze laagnamen zijn aan en uit te vinken op de kaart in de widget met de titel filter & kaartlagen onder het subkopje data-objecten.
Indien een laagnaam is aangevinkt dan zal OpenWave de punten, vlakken, lijnen en cirkels tonen van de blokken vlak, lijn, punt en cirkel met een overeenkomstig attribuut layer id (zie verderop). Deze getoonde OpenWave-lagen bestaan uit data die komen uit de OpenWave database.
voorbeeld wfslayers
<wfslayers>
<layer active="false" id="5" index="5" isbasislaag="false" layer="ad:address"
opacity="50" source="https://service.pdok.nl/kadaster/ad/wfs/v1_0?" icon="2"
color="Aquamarine">adressen</layer>
</wfslayers>
Het blok <wfslayers> mag één keer voorkomen (maar hoeft niet). het blok <wfslayers> bestaat uit een of meer tags <layer>. Elke tag <layer> heeft een attribuut:
Achter de tag <layer> staat een string (dus geen SQL-statement) met de naam zoals de laag op de kaart moet heten: de laagnaam.
Deze laagnamen zijn aan en uit te vinken op de kaart in de widget met de titel filter & kaartlagen onder het subkopje WFS-lagen.
Indien een laagnaam is aangevinkt dan zal OpenWave de betreffende externe laag ophalen en tonen.
Waarschuwing
De WFS-lagen die in de tabel tbgeowms (beheerportaal tegel: Geo kaartlagen) aangemerkt zijn
die lagen worden onder water automatisch opgenomen in de xml ook als het blok <wfslayers> niet bestaat.
voorbeeld wmslayers
<wmslayers>
<layer active="false" id="1" index="1" isbasislaag="false" layer="pand" opacity="50" source="https://service.pdok.nl/lv/bag/wms/v2_0">BAG-panden</layer>
<layer active="false" id="2" index="2" isbasislaag="false" layer="Kadastralekaart" opacity="50" source="https://service.pdok.nl/kadaster/kadastralekaart/wms/v5_0">Kadaster</layer>
<layer active="true" id="3" index="3" isbasislaag="false" layer="OpenWave:GeotestVanAnnelies" opacity="70" source="/geoserver/OpenWave/wms">GeotestVanAnnelies</layer>
<layer active="false" id="4" index="4" isbasislaag="false" layer="OpenWave:GEO_Actuele_vergunning" opacity="100" source="/geoserver/OpenWave/wms?">Alle vergunningszaken</layer>
</wmslayers>
Het blok <wmslayers> mag één keer voorkomen (maar hoeft niet). het blok <wmslayers> bestaat uit een of meer tags <layer>. Elke tag <layer> heeft een attribuut:
Achter de tag <layer> staat een string (dus geen SQL-statement) met de naam zoals de laag op de kaart moet heten: de laagnaam.
Deze laagnamen zijn aan en uit te vinken op de kaart in de widget met de titel filter & kaartlagen onder het subkopje WMS-lagen.
Indien een laagnaam is aangevinkt dan zal OpenWave de betreffende externe laag ophalen en tonen.
Waarschuwing
De WMS-lagen die in de tabel tbgeowms (beheerportaal tegel: Geo kaartlagen) aangemerkt zijn
die lagen worden onder water automatisch opgenomen in de xml ook als het blok <wmslayers> niet bestaat.
De objecten van een WMS-laag kunnen in OpenWave geselecteerd worden en die selectie(s) kunnen vervolgens gebruikt worden om bijvoorbeeld een vlak te tekenen. =
voorbeeld widgetbuttons
<widgetbuttons>
<!--er kan een blok opdrachtlinestring, of opdrachtpolygon of opdrachtpoint volgen -->
<opdrachtlinestring>
<button id="1" hint="Lijn opslaan" icoon="177" action="3">true</button>
<button id="2" hint="Refresh" icoon="192" action="4">true</button>
</opdrachtlinestring>
<opdrachtpolygon>
<button id="1" hint="Vlak opslaan" icoon="177" action="3">true</button>
<button id="2" hint="Refresh" icoon="192" action="4">true</button>
</opdrachtpolygon>
</widgetbuttons>
Het blok <widgetbuttons> mag één keer voorkomen (maar hoeft niet).
Indien het blok niet voorkomt dan zijn er geen knoppen waarmee een tekenopdracht afgesloten kan worden, terwijl de vierde parameter van de FlexMap-aanroep is gevuld.
Binnen het blok <widgetbuttons> mag één keer een blok <opdrachtpoint> en mag één keer een blok <opdrachtlinestring> en mag één keer een blok <opdrachtpolygon> zijn gedefinieerd. In bovenstaand voorbeeld ontbreekt een blok <opdrachtpoint> omdat in de inrichtingstabel alleen een vlak of lijn kan worden opgeslagen.
Binnen een blok <widgetbuttons><opdrachtpoint> of <widgetbuttons><opdrachtpolygon> of <widgetbuttons><opdrachtlinestring> moet één of meer keer de tag <button> voorkomen.
Elke tag <opdrachtpolygon><button> heeft een attribuut id met een unieke ophogende integer waarde.
Elke tag <opdrachtpoint><button> heeft een attribuut id met een unieke ophogende integer waarde.
Elke tag <opdrachtlinestring><button> heeft een attribuut id met een unieke ophogende integer waarde.
Elke button heeft een attribuut hint voor de betreffende knop
Elke button heeft een attribuut icoon met een integer waarde dat verwijst naar een OpenWave icoon zie: Iconenlijst
Elke tag <opdrachtpolygon><button> heeft een attribuut action met een unieke integer waarde waarnaar wordt verwezen in de blokken <actions><actionpolygon> (zie verderop).
Elke tag <opdrachtpoint><button> heeft een attribuut action met een unieke integer waarde waarnaar wordt verwezen in de blokken <actions><actionpoint> (zie verderop).
Elke tag <opdrachtlinestring><button> heeft een attribuut action met een unieke integer waarde waarnaar wordt verwezen in de blokken <actions><actionlinestring> (zie verderop).
Indien de vierde parameter van de FlexMap aanroep de waarde Polygon heeft, dan kijk OpenWave alleen naar het blok <opdrachtpolygon>.
Indien de vierde parameter van de FlexMap aanroep de waarde Point heeft, dan kijk OpenWave alleen naar het blok <opdrachtpoint>.
Indien de vierde parameter van de FlexMap aanroep de waarde Point heeft, dan kijk OpenWave alleen naar het blok <opdrachtlinestring>.
Indien de vierde parameter van de FlexMap aanroep een lege waarde, dan wordt het hele blok widgetbuttons genegeerd.
De FlexMap heeft zelf ook standaard een aantal knoppen: zie voor de werking daarvan Flexmap knoppen en widgets.
Deze zelf gedefinieerde knoppen in het blok < widgetbuttons> zijn nodig om een getekend object op de juiste plaats in de OpenWave database te laten landen.
Attribuut action opdrachtpoint
Bij een button om een aangewezen punt op te slaan in twee kolommen (dat is meestal het geval in OpenWave: een x-kolom en een y-kolom zoals bijv. het centrale punt van een stal) heeft het attribuut action twee verwijzingen achter elkaar gescheiden door een komma;
<opdrachtpoint>
<!-- action 1,2 wil zeggen dat de PHP bij deze knop twee acties moet uitvoeren action 1 en action 2 -->
<button id="1" hint="Wijzigingen opslaan" icoon="177" action="1,2">true</button>
<button id="2" hint="Refresh" icoon="192" action="3">true</button>
</opdrachtpoint>
voorbeeld actions
<actions>
<actionpolygon>
<action id="3">setcolumnvalue(tbmilinrichtingen, %keypointer%, dvgmlpolygoon, {poslist},V))</action>
<action id="4">refreshActiveDialog</action>
</actionpolygon>
<actionlinestring>
<action id="3">setcolumnvalue(tbmilinrichtingen, %keypointer%, dvgmlpolygoon, {poslist},V))</action>
<action id="4">refreshActiveDialog</action>
</actionlinestring>
</actions>
Het blok <actions> mag één keer voorkomen (maar hoeft niet).
Indien het blok niet voorkomt dan kan een tekenopdracht niet afgesloten kan worden (het aangewezen of getekende object wordt dan niet opgeslagen), terwijl de vierde parameter van de FlexMap-aanroep is gevuld.
Binnen het blok <actions> mag één keer een blok <actionpoint> en mag één keer een blok <actionlinestring> en mag één keer een blok <actionpolygon> zijn gedefinieerd. In bovenstaand voorbeeld ontbreekt een blok <actionpoint> omdat in de inrichtingstabel alleen een vlak of lijn kan worden opgeslagen.
Binnen een blok <action><actionpoint> of <action><actionpolygon> of <action><actionlinestring> moet één of meer keer de tag <action> voorkomen.
Elke tag <actionpolygon><action> heeft een attribuut id met een integer waarde, die correspondeert met een integer waarde van het attribuut action bij de tag <widgetbuttons><opdrachtpolygon><button>.
Zo ook correspondeert attribuut id van <actionlinestring><action> met het attribuut action van de tag <widgetbuttons><opdrachtlinestring><button>.
En correspondeert attribuut id van <actionpoint><action> met het attribuut action van de tag <widgetbuttons><opdrachtpoint><button>.
Attribuut id actiontpoint
Bij een button om een aangewezen punt op te slaan in twee kolommen (dat is meestal het geval in OpenWave: een x-kolom en een y-kolom zoals bijv. het centrale punt van een stal) heeft het attribuut action twee verwijzingen achter elkaar gescheiden door een komma bijvoorbeeld:
<button id="1" hint="Wijzigingen opslaan" icoon="177" action="1,2">true</button>
Dat leidt tot een action definitie voor het opslaan van de X kolom (id = 1) EN eentje voor de Y-kolom (id =2)“:
<actionpoint>
<action id="1">setcolumnvalue(tbmilstal, %keypointer%, dvxcrd,{pos(x)},V)</action>
<!-- {pos(x)} wordt door PHPvervangen door aangwezen x coordinaat -->
<action id="2">setcolumnvalue(tbmilstal, %keypointer%, dvycrd,{pos(y)},V)</action>
<action id="3">refreshActiveDialog()</action>
</actionpoint>
De waarde van de tag <action> moet de aanroep van een OpenWave-action zijn met de juiste parameters (zie ook: Actions).
Voor het opslaan van een aangewezen of getekend object moet setcolumnvalue worden aangeroepen met de volgende parameters:
Het blok <punten> mag hooguit één keer voorkomen (maar hoeft niet).
Binnen het blok <punten> bestaan één of meer blokken <punt> met een attribuut id waarvan de integer waarde verwijst naar de attributen id achter de tag <layer> in het blok <openwavelayers>. Indien die layer-id de waarde 3 heeft (en aangevinkt is) dan wordt de tags <punt> met id-waarde 3 getoond.
Binnen een blok <punten><punt> moet één tag <resultset> zijn gedefinieerd met als waarde een SQL-statement dat na evaluatie één rij met de kolommen dvcolorname, dvdescription en dvpos bevat (zie hierboven bij <basisobject type=“point”>).
voorbeeld punt
<punt layer="3"> <!--rev referentieobjecten punten -->
<!--kolommen dvcolorname, dvdescription en dvpos zijn verplicht -->
<resultset>select a.dvrefcontournaaminrev ||': ' || coalesce(a.dvnaamopslag,'') dvdescription, a.dvxcrd
||','|| a.dvycrd dvpos, coalesce(a.dvcsscolorname,'Blue') dvcolorname from vwfrmmilopslag a inner join
tbmilinrichtingen b on (a.dnkeymilinrichtingen = b.dnkey)
where
a.dnkeymilinrichtingen = %keypointer%
and a.dnkeymilbklactiviteiten is not null
and a.dvycrd is not null
and a.dvxcrd is not null
and a.dvgmlpolygoon is null
</resultset>
</punt>
De evaluatie van de tag <resultset> mag null zijn: in dat geval wordt het betreffende point NIET geprojecteerd.
Het blok <lijnen> mag hooguit één keer voorkomen (maar hoeft niet).
Binnen het blok <lijnen> bestaan één of meer blokken <lijn> met een attribuut id waarvan de integerwaarde verwijst naar de attribuuten id achter de tag <layer> in het blok <openwavelayers>. Indien die layer-id de waarde 3 heeft (en aangevinkt is) dan wordt de tags <lijn> met id-waarde 3 getoond.
Binnen een blok <lijnen><lijn> moet één tag <resultset> zijn gedefinieerd met als waarde een sqlstatement dat na evaluatie één rij met de kolommen dvstrokecolorname, dvdescription en dvposlist en dfopacity bevat (zie hierboven bij <basisobject type=“linestring”>)
voorbeeld lijn
<lijn layer="3"> <!--rev referentieobjecten lijnen -->
<!--kolommen dvstrokecolorname, dvdescription en dvposlist zijn verplicht -->
<resultset>select a.dvrefcontournaaminrev ||': ' || coalesce(a.dvnaamopslag,'') dvdescription, a.dvgmlpolygoon dvposlist,
coalesce(a.dvcsscolorname,'Blue') dvstrokecolorname from vwfrmmilopslag a inner join
tbmilinrichtingen b on (a.dnkeymilinrichtingen = b.dnkey)
where a.dnkeymilinrichtingen = %keypointer%
and a.dnkeymilbklactiviteiten is not null
and fn_islinestring(a.dvgmlpolygoon) = 1
</resultset>
</lijn>
De evaluatie van de tag <resultset> mag null zijn: in dat geval wordt de betreffende linestring NIET geprojecteerd.
Het blok <vlakken> mag hooguit één keer voorkomen (maar hoeft niet).
Binnen het blok <vlakken> bestaan één of meer blokken <vlak> met een attribuut id waarvan de integerwaarde verwijst naar de attribuuten id achter de tag <layer> in het blok <openwavelayers>. Indien die layer-id de waarde 3 heeft (en aangevinkt is) dan wordt de tags <vlak> met id-waarde 3 getoond.
Binnen een blok <vlakken><vlak> moet één tag <resultset> zijn gedefinieerd met als waarde een SQL-statement dat na evaluatie één rij met de kolommen dvfillcolorname, dvstrokecolorname, dvdescription en dvposlist en dfopacity (zie hierboven bij <basisobject type = “polygon”>).
Radius
De kolom dfradius is optioneel. Indien gevuld dan beschouwt OpenWave deze waarde in meters en wordt het te tekenen polygoon daarmee vergroot
voorbeeld vlak
<vlak layer="3"> <!--rev referentieobjecten vlakken -->
<!--kolommen dvfillcolorname, dvstrokecolorname. dvdescription en dvposlist en dfopacity en dfradius zijn verplicht -->
<resultset>select a.dvrefcontournaaminrev ||': ' || coalesce(a.dvnaamopslag,'') dvdescription, a.dvgmlpolygoon
dvposlist, coalesce(a.dvcsscolorname,'Blue') dvfillcolorname, 'Black' dvstrokecolorname, 0.5 dfopacity, 1 dfradius
from vwfrmmilopslag a inner join
tbmilinrichtingen b on (a.dnkeymilinrichtingen = b.dnkey)
where
a.dnkeymilinrichtingen = %keypointer%
and a.dnkeymilbklactiviteiten is not null
and a.dvgmlpolygoon is not null and fn_islinestring(a.dvgmlpolygoon) != 1
</resultset>
</vlak>
De evaluatie van de tag <resultset> mag null zijn: in dat geval wordt de betreffende polygon NIET geprojecteerd.
Het blok <cirkels> mag hooguit één keer voorkomen (maar hoeft niet).
Binnen het blok <cirkels> bestaan één of meer blokken <cirkel> met een attribuut id waarvan de integerwaarde verwijst naar de attribuuten id achter de tag <layer> in het blok <openwavelayers>. Indien die layer-id de waarde 4 heeft (en aangevinkt is) dan wordt de tags <cirkel> met id-waarde 4 getoond.
Binnen een blok <cirkels><cirkel> moet één tag <resultset> zijn gedefinieerd met als waarde een sqlstatement dat na evaluatie één rij met de kolommen dvfillcolorname, dvstrokecolorname, dvdescription, dvpos, dfradius en dfopacity retourbeert (zie hierboven bij <basisobjecten>).
De dfradius is in meters. Er wordt een cirkel van dfradius meters om het punt dvpos geprojecteerd.
voorbeeld cirkel
<cirkel layer="4"> <!--REV EVContouren cirkels -->
<!--kolommen dvfillcolorname, dvstrokecolorname. dvdescription en dvpos en dfradius en dfopacity zijn verplicht -->
<resultset>select a.dvevcontournaaminrev || ' '|| coalesce( a.dv_waarde_3_string,'')
dvdescription, b.dvxcrd ||','|| b.dvycrd dvpos, a.df_waarde_2_float dfradius,
'Yellow' dvfillcolorname, 'Black' dvstrokecolorname, 0.5 dfopacity
from vwfrmmilopslagevcontour a
inner join tbmilopslag b
on a.dnkeymilopslag = b.dnkey
inner join tbmilinrichtingen c
on b.dnkeymilinrichtingen = c.dnkey
where b.dnkeymilinrichtingen = %keypointer%
and a.df_waarde_2_float is not null
and b.dvgmlpolygoon is null
and b.dvycrd is not null
and b.dvxcrd is not null
</resultset>
</cirkel>
De evaluatie van de tag <resultset> mag null zijn: in dat geval wordt de betreffende cirkel NIET geprojecteerd.
Als de instelling Sectie: Flexmap en Item: opslaanXML is aangevinkt en er zijn geen fouten opgetreden dan wordt de geëvalueerde versie van de MDMC_*.xml (dus waarin alle SQL-statements zijn geëvalueerd) opgeslagen op de tempmap TussenMapUploadFiles die te benaderen is in het beheerportaal: servicecentrum, tegel: Up- en downloadmappen.
Bijvoorbeeld onder de naam 5abd522941f1484ba9669e669c77d6c4_MDMC_tbperceeladressen.xml.
Dit is uiteindelijk de xml die OpenWave gebruikt om alle Geo-informatie te tonen. Daarin is de oorspronkelijke xml uitgebreid met de namespace xmlns:gml="http://www.opengis.net/gml".