Gå til hovedinnhold

Optimaliseringer for WFS-kall i GeoServer

Introduksjon

Featuretypene i matrikkelens WFS-tjenester er bygd opp av database-views i Oracle. Disse er bygget på bakgrunn av tabeller og har i de fleste tilfeller joins mellom forskjellige tabeller. Oracle klarer ikke alltid å bygge en optimal kjøringsplan for spørringer basert på viewene — blant annet vil databasekall som inneholder et geometrisk filter føre til at Oracle ønsker å kombinere hele tabeller.

På bakgrunn av dette er det innført egne optimaliseringer i GeoServers kode. For WMS er det optimalisert for tilfeller der eneste filter er geometrisk. For WFS optimaliseres kall som enten er enkle geometriske kall, eller som har et AND-filter i bunn, der hvert delfilter kun filtrerer på én av tabellene som er grunnlag for featuretypen.

Definisjoner

Subfilter: En del av et AND-filter. Kan selv være oppdelt i flere biter. Eksempel: (x AND y)x er et subfilter selv om x = (z AND p).

Filterinformasjon per featuretype

TEIGWFS / ANLEGGSPFLATEWFS

Subfiltre deles i fire grupper:

  • Matrikkelenhetfilter: Filtrerer på én eller flere av GARDSNR, BRUKSNR, FESTENR, SEKSJONSNR, PUNKTFESTE, UNDERSAMMENSLAINGBESTAR eller UNDERSAMMENSLAINGUTGAR
  • Representasjonspunktfilter: Filtrerer kun på REPRESENTASJONSPUNKT
  • Flatefilter: Filtrerer kun på FLATE
  • Ikke-optimaliserte: Alt annet

VEGADRESSEWFS

Subfiltre deles i fire grupper:

  • Vegfilter: Filtrerer på ADRESSEKODE eller ADRESSENAVN
  • Adresseegenskapsfilter: Filtrerer på NR, BOKSTAV, ADRESSETILLEGGSNAVN eller TILLEGGSNAVNKILDEKODE
  • Representasjonspunktfilter: Filtrerer kun på REPRESENTASJONSPUNKT
  • Ikke-optimaliserte: Alt annet

MATRIKKELADRESSEWFS

Subfiltre deles i tre grupper:

  • Matrikkelenhetfilter: Filtrerer på GARDSNR, BRUKSNR eller FESTENR
  • Representasjonspunktfilter: Filtrerer kun på REPRESENTASJONSPUNKT
  • Ikke-optimaliserte: Alt annet

BYGNINGWFS

Ingen filteroptimalisering, men det er lagt inn en databaseindeks som bygger opp BYGNINGSNR slik det presenteres i tjenesten.

Strategi for optimalisering

For geometriske grupper (flate og punkt) er det nok med ett subfilter. For egenskapsgruppen kreves minst to subfiltre — unntaket er vegegenskaper (ADRESSEKODE/ADRESSENAVN) som anses som så begrensende at ett subfilter er nok.

KOMMUNENR-optimalisering: Der man kan optimalisere på elementer med kommunekobling, og KOMMUNENR er angitt, brukes dette til å begrense resultatsettet ytterligere. For eksempel vil GARDSNR=2 AND BRUKSNR=45 AND KOMMUNENR=0233 optimalisere på gardsnr + bruksnr, men sjekke kommune først siden det er en begrensende faktor. Systemet kan også velge å optimalisere på egenskaper selv om kravet om to egenskaper brytes, dersom KOMMUNENR er angitt.

Eksempler

TEIGWFS / ANLEGGSPFLATEWFS

Finn matrikkelenhet med gårdsnr 8 og bruksnr 2 i kommune 0605 Ringerike, innenfor en gitt boks:

/geoservergeo/wfs/MATRIKKEL?VERSION=1.1.0&SERVICE=WFS&REQUEST=GetFeature&TYPENAME=TEIGWFS&Filter=
<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml">
<And>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>GARDSNR</ogc:PropertyName>
<ogc:Literal>8</ogc:Literal>
</ogc:PropertyIsEqualTo>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>BRUKSNR</ogc:PropertyName>
<ogc:Literal>2</ogc:Literal>
</ogc:PropertyIsEqualTo>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>KOMMUNENR</ogc:PropertyName>
<ogc:Literal>0605</ogc:Literal>
</ogc:PropertyIsEqualTo>
<ogc:BBOX>
<ogc:PropertyName>FLATE</ogc:PropertyName>
<gml:Envelope srsName="urn:x-ogc:def:crs:EPSG:32632">
<gml:coordinates>565420,6658630 585662,6668517</gml:coordinates>
</gml:Envelope>
</ogc:BBOX>
</And>
</ogc:Filter>

VEGADRESSEWFS

Finn adresser i ASKVEIEN uten bokstav og med husnummer større enn 5, filtrert på kommune:

/geoservergeo/wfs/MATRIKKEL?VERSION=1.1.0&SERVICE=WFS&REQUEST=GetFeature&TYPENAME=VEGADRESSEWFS&Filter=
<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml">
<And>
<PropertyIsEqualTo>
<PropertyName>ADRESSENAVN</PropertyName>
<Literal>ASKVEIEN</Literal>
</PropertyIsEqualTo>
<PropertyIsGreaterThan>
<PropertyName>NR</PropertyName>
<Literal>5</Literal>
</PropertyIsGreaterThan>
<PropertyIsNull>
<PropertyName>BOKSTAV</PropertyName>
</PropertyIsNull>
<PropertyIsEqualTo>
<PropertyName>KOMMUNENR</PropertyName>
<Literal>0233</Literal>
</PropertyIsEqualTo>
</And>
</ogc:Filter>

MATRIKKELADRESSEWFS

Finn matrikkeladresser i Nittedal (0233) med gårdsnr 10 og festenr 0, innenfor en gitt boks:

/geoservergeo/wfs/MATRIKKEL?VERSION=1.1.0&SERVICE=WFS&REQUEST=GetFeature&TYPENAME=MATRIKKELADRESSEWFS&Filter=
<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml">
<And>
<PropertyIsEqualTo>
<PropertyName>GARDSNR</PropertyName>
<Literal>10</Literal>
</PropertyIsEqualTo>
<PropertyIsEqualTo>
<PropertyName>FESTENR</PropertyName>
<Literal>0</Literal>
</PropertyIsEqualTo>
<PropertyIsEqualTo>
<PropertyName>KOMMUNENR</PropertyName>
<Literal>0233</Literal>
</PropertyIsEqualTo>
<ogc:BBOX>
<ogc:PropertyName>REPRESENTASJONSPUNKT</ogc:PropertyName>
<gml:Envelope srsName="urn:x-ogc:def:crs:EPSG:32632">
<gml:coordinates>604350,6653300 605550,6654500</gml:coordinates>
</gml:Envelope>
</ogc:BBOX>
</And>
</ogc:Filter>