Romlig database

En **romlig database** er en generell database (vanligvis en relasjonsdatabase) som har blitt forbedret til å inkludere romlige data (geografiske data) som representerer objekter definert i et geometrisk rom, sammen med verktøy for å spørre og analysere slike data.

De fleste romlige databaser tillater representasjon av enkle geometriske objekter som punkter, linjer og polygoner. Noen romlige databaser håndterer mer komplekse strukturer som 3D-objekter, topologiske dekninger, lineære nettverk og triangulerte irregulære nettverk (TIN). Mens typiske databaser har utviklet seg for å administrere ulike numeriske og tegntyper av data krever slike databaser tilleggsfunksjonalitet for å behandle romlige datatyper effisient, og utviklere har ofte lagt til datatyper for *geometri* eller *egenskap*.

En **geografisk database** (eller **geodatabase**) er en georeferert romlig database, brukt til å lagre og manipulere geografiske data (geodata, altså data assosiert med et sted på jorden), særlig i geografiske informasjonssystemer (GIS). Nesten alle nåværende relasjons- og objektrelasjonelle databasehåndteringssystemer har nå romlige utvidelser, og noen GIS-programvareleverandører har utviklet sine egne romlige utvidelser til databasestyringssystemer.

Open Geospatial Consortium (OGC) utviklet *Simple Features-* spesifikasjonen (først utgitt i 1997) og setter standarder for å legge til romlig funksjonalitet til databasesystemer. *SQL/MM Spatial* ISO/IEC-standarden er en del av det SQL og multimediestandarden som utvider Simple Features.

## Kjennetegn
Kjernefunksjonaliteten som legges til av en romlig utvidelse til en database er én eller flere *romlige datatyper*, som tillater lagring av romlige data som attributtverdier i en tabell.  Oftest vil en enkelt romlig verdi være en geometrisk primitiv (punkt, linje, polygon, etc.) basert på vektordatamodellen . Datatypene i de fleste romlige databaser er basert på OGC Simple Features- spesifikasjonen for å representere geometriske primitiver. Noen romlige databaser støtter også lagring av rasterdata . Fordi alle geografiske steder må spesifiseres i henhold til et romlig referansesystem, må romlige databaser også tillate sporing og transformasjon av koordinatsystemer. I mange systemer, når en romlig kolonne er definert i en tabell, inkluderer den også et valg av koordinatsystem, valgt fra en liste over tilgjengelige systemer som er lagret i en oppslagstabell.

Den andre store funksjonalitetsutvidelsen i en romlig database er tillegget av romlige muligheter til spørringsspråket (f.eks. SQL ); disse gir den romlige databasen de samme spørrings-, analyse- og manipulasjonsoperasjonene som er tilgjengelige i tradisjonell GIS-programvare. I de fleste relasjonsdatabaseadministrasjonssystemer er denne funksjonaliteten implementert som et sett med nye funksjoner som kan brukes i SQL SELECT-setninger. Flere typer operasjoner er spesifisert av Open Geospatial Consortium- standarden:

* **Måling**: Beregner linjelengde, polygonareal, avstanden mellom geometrier, og så videre
* **Geoprosessering**: Endrer eksisterende funksjoner for å lage nye, for eksempel ved å lage en buffer rundt dem, kryssende funksjoner, og så videre
* **Predikater**: Tillater sann/usann-spørringer om romlige relasjoner mellom geometrier. For eksempel "overlapper to polygoner?" eller "er det en bolig innenfor en kilometer fra området vi planlegger å bygge deponiet?" (se DE-9IM)
* **Geometrikonstruktører**: Skaper nye geometrier, vanligvis ved å spesifisere toppunktene (punktene eller nodene) som definerer formen
* **Observatørfunksjoner**: Spørringer som returnerer spesifikk informasjon om en funksjon, for eksempel plasseringen av midten av en sirkel

Noen databaser støtter bare forenklede eller modifiserte mengder av disse operasjonene, særlig i tilfeller med NoSQL-systemer som MongoDB og CouchDB.

## Romlig indeks
En **romlig indeks** brukes av en romlig database for å optimere romlige spørringer. Databasesystemer bruker indekser for raskt å slå opp verdier ved å sortere dataverdier i en lineær (for eksempel alfabetisk) rekkefølge. Denne måten å indeksere data på er imidlertid ikke optimal for romlige spørringer i 2- eller 3-dimensjonale rom. I stedet bruker romlige databaser en *romlig* indeks designet spesielt for flerdimensjonal sortering. Vanlige romlig indeksmetoder inkluderer:

* Binær rompartisjonering (BSP-tre): Underinndeling av rom etter hyperplan
* Bounding volume hierarchy (BVH)
* Geohash
* Grid (romlig indeks)
* HHCode
* Hilbert R-tree
* kd-tree
* m-tree, en m-treindeks kan brukes for effisient løsing av similaritetsspørringer på komplekse objekter sammenlignet med en vilkårlig metrikk
* Octree
* PH-tre
* Quadtree
* R-tre: Vanligvis den foretrukne metoden for indeksering av romlige data. Objekter (former, linjer og punkter) grupperes ved å bruke minste begrensende rektangel (MBR). Objekter legges til en MBR innenfor indeksen som vil føre til den minste økningen i størrelsen.
* R+ tre
* R* tre
* UB-tre
* X-tre
* Z-orden (kurve)

## Romlig spørring
En **romlig spørring** er en spesiell type databasespørring som støttes av romlige databaser, inkludert geodatabaser. Spørringene skiller seg fra ikke-romlige SQL-spørringer på flere viktige måter. To av de viktigste er at de tillater bruk av geometridatatyper som punkter, linjer og polygoner, og at disse spørringene tar hensyn til den romlige relasjonen mellom disse geometriene.

Funksjonsnavnene for spørringer varierer på tvers av geodatabaser. Følgende er noen av funksjonene innebygd i PostGIS, en gratis geodatabase som er en PostgreSQL-utvidelse (begrepet "geometri" refererer til et punkt, linje, boks eller annen 2- eller 3-dimensjonal form): 

Function prototype: *functionName (parameter(s)) : return type* 

* ST_Distance(geometry, geometry) : number
* ST_Equals(geometry, geometry) : boolean
* ST_Disjoint(geometry, geometry) : boolean
* ST_Intersects(geometry, geometry) : boolean
* ST_Touches(geometry, geometry) : boolean
* ST_Crosses(geometry, geometry) : boolean
* ST_Overlaps(geometry, geometry) : boolean
* ST_Contains(geometry, geometry) : boolean
* ST_Length(geometry) : number
* ST_Area(geometry) : number
* ST_Centroid(geometry) : geometry
* ST_Intersection(geometry, geometry) : geometry

Dermed kan en romlig skjøt mellom et punktlag av byer og et polygonlag av land utføres i et romlig utvidet SQL-uttrykk som:

`SELECT * FROM cities, countries WHERE ST_Contains(countries.shape, cities.shape)`

Vektoroverleggs-operasjonen *Intersect* (et kjerneelement i GIS-programvare) kan replikeres som:

`SELECT ST_Intersection(veg.shape, soil.shape) int_poly, veg.` `*, soil.` `* FROM veg, soil where ST_Intersects(veg.shape, soil.shape)`
 
## Se også
* Geografisk informasjonssystem (GIS)
* Romlig-temporal database

## Referanser