Viktigt

Översättning är en gemenskapsinsats du kan gå med i. Den här sidan är för närvarande översatt till 100.00%.

16.2. Lektion: Enkel funktionsmodell

Hur kan vi lagra och representera geografiska funktioner i en databas? I den här lektionen går vi igenom ett tillvägagångssätt, Simple Feature Model, som definieras av OGC.

Målet för den här lektionen: Att lära sig vad SFS-modellen är och hur man använder den.

16.2.1. Vad är OGC?

Open Geospatial Consortium (OGC), en internationell frivillig konsensusorganisation för standarder, bildades 1994. I OGC samarbetar mer än 370+ kommersiella, statliga, ideella och forskningsorganisationer över hela världen i en öppen konsensusprocess som uppmuntrar utveckling och implementering av standarder för geospatialt innehåll och tjänster, GIS-databehandling och datadelning. - Wikipedia (på engelska)

16.2.2. Vad är SFS-modellen?

SFS-modellen (Simple Feature for SQL) är ett icke-topologiskt sätt att lagra geospatiala data i en databas och definierar funktioner för åtkomst, drift och konstruktion av dessa data.

../../../_images/ogc_sfs.png

Modellen definierar geospatiala data från typerna Point, Linestring och Polygon (och aggregeringar av dem till Multi-objekt).

För ytterligare information, se standarden OGC Simple Feature for SQL.

16.2.3. Lägga till ett geometrifält i tabellen

Låt oss lägga till ett punktfält i vår persontabell:

alter table people add column geom geometry;

16.2.4. Lägg till en begränsning baserad på geometrityp

Du kommer att märka att fälttypen geometry inte implicit anger vilken typ av geometri som ska användas för fältet - för det behövs en begränsning:

alter table people
add constraint people_geom_point_chk
    check(st_geometrytype(geom) = 'ST_Point'::text
          OR geom IS NULL);

Detta lägger till en begränsning i tabellen så att den endast accepterar en punktgeometri eller ett nollvärde.

16.2.5. ★★★★ Prova själv:

Skapa en ny tabell som heter cities och ge den några lämpliga kolumner, inklusive ett geometrifält för lagring av polygoner (stadsgränserna). Se till att den har en begränsning som tvingar geometrier att vara polygoner.

16.2.6. Fyll i tabellen geometry_columns

Vid denna tidpunkt bör du också lägga till en post i tabellen geometry_columns:

insert into geometry_columns values
  ('','public','people','geom',2,4326,'POINT');

Varför? geometry_columns används av vissa program för att få reda på vilka tabeller i databasen som innehåller geometridata.

Observera

Om ovanstående INSERT-sats orsakar ett fel, kör den här frågan först:

select * from geometry_columns;

Om kolumnen f_table_name innehåller värdet people har den här tabellen redan registrerats och du behöver inte göra något mer.

Värdet 2 avser antalet dimensioner, i detta fall två: X och Y.

Värdet 4326 hänvisar till den projektion vi använder, i det här fallet WGS 84, som har numret 4326 (se den tidigare diskussionen om EPSG).

★☆☆ Prova själv:

Lägg till en lämplig geometry_columns-post för ditt nya stadsskikt

16.2.7. Lägga till geometripost i tabell med SQL

Nu när våra tabeller är geoaktiverade kan vi lagra geometrier i dem:

insert into people (name,house_no, street_id, phone_no, geom)
        values ('Fault Towers',
                 34,
                 3,
                 '072 812 31 28',
                 'SRID=4326;POINT(33 -33)');

Observera

I den nya posten ovan måste du ange vilken projektion (SRID) du vill använda. Detta beror på att du angav geometrin för den nya punkten med hjälp av en vanlig textsträng, som inte automatiskt lägger till rätt projektionsinformation. Självklart måste den nya punkten använda samma SRID som den datauppsättning den läggs till i, så du måste ange det.

Om du vid det här laget till exempel använder ett grafiskt gränssnitt skulle det vara automatiskt att ange projektionen för varje punkt. Med andra ord behöver du vanligtvis inte oroa dig för att använda rätt projektion för varje punkt som du vill lägga till om du redan har angett den för den aktuella datauppsättningen, som vi gjorde tidigare.

Nu är det förmodligen en bra tid att öppna QGIS och försöka visa din people-tabell. Vi bör också försöka redigera / lägga till / ta bort poster och sedan utföra utvalda frågor i databasen för att se hur data har förändrats.

För att ladda ett PostGIS-skikt i QGIS använder du menyalternativet eller knappen i verktygsfältet Layer ► Add PostGIS Layers:

addPostgisLayer

Detta öppnar dialogrutan:

../../../_images/add_postgis_layer_dialog.png

Klicka på knappen New för att öppna denna dialogruta:

../../../_images/new_postgis_connection.png

Definiera sedan en ny anslutning, t.ex.:

Name: myPG
Service:
Host: localhost
Port: 5432
Database: address
User:
Password:

För att se om QGIS har hittat databasen address och att ditt användarnamn och lösenord är korrekta, klicka på Test Connect. Om det fungerar, markera rutorna bredvid Save Username och Save Password. Klicka sedan på OK för att skapa den här anslutningen.

Tillbaka i dialogrutan Add PostGIS Layers klickar du på Connect och lägger till lager i ditt projekt som vanligt.

★★☆ Prova själv:

Formulera en fråga som visar en persons namn, gatunamn och position (från kolumnen geom) som vanlig text.

16.2.8. Sammanfattningsvis

Du har sett hur du lägger till rumsliga objekt i din databas och hur du visar dem i GIS-program.

16.2.9. Vad händer härnäst?

Nu ska du få se hur du importerar data till och exporterar data från din databas.