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.
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.
Svar
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
Svar
insert into geometry_columns values
('','public','cities','geom',2,4326,'POLYGON');
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 menu option or toolbar button:
Detta öppnar dialogrutan:
Klicka på knappen New för att öppna denna dialogruta:
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.
Svar
select people.name,
streets.name as street_name,
st_astext(people.geom) as geometry
from streets, people
where people.street_id=streets.id;
Resultat:
name | street_name | geometry
--------------+-------------+---------------
Roger Jones | High street |
Sally Norman | High street |
Jane Smith | Main Road |
Joe Bloggs | Low Street |
Fault Towers | Main Road | POINT(33 -33)
(5 rows)
Som du kan se tillåter vår begränsning att nollor läggs till i databasen.
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.
