Viktigt

Översättning är en gemenskapsinsats du kan gå med i. Den här sidan är för närvarande översatt till 82.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

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).

For further information, have a look at the OGC Simple Feature for SQL standard.

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');

Why? geometry_columns is used by certain applications to be aware of which tables in the database contain geometry data.

Observera

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

select * from geometry_columns;

If the column f_table_name contains the value people, then this table has already been registered and you don’t need to do anything more.

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

The value 4326 refers to the projection we are using; in this case, WGS 84, which is referred to by the number 4326 (refer to the earlier discussion about the EPSG).

★☆☆ Prova själv:

Add an appropriate geometry_columns entry for your new cities layer

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.

Now is probably a good time to open QGIS and try to view your people table. Also, we should try editing / adding / deleting records and then performing select queries in the database to see how the data has changed.

To load a PostgreSQL layer in QGIS, use the Layer ► Add PostgreSQL Layers menu option or toolbar button:

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:

To see whether QGIS has found the address database and that your username and password are correct, click Test Connect. If it works, check the boxes next to Save Username and Save Password. Then click OK to create this connection.

Back in the Add PostgreSQL Layers dialog, click Connect and add layers to your project as usual.

★★☆ 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 spatiala 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.