16.2. Lesson: Eenvoudig object model

Hoe kunnen we geografische objecten in een database opslaan en weergeven? In deze les zullen we één benadering behandelen, het Eenvoudige object model zoals dat is gedefinieerd door de OGC.

Het doel voor deze les: Leren wat het Eenvoudig object model is en hoe het te gebruiken.

16.2.1. Wat is OGC?

Het Open Geospatial Consortium (OGC), een internationale organisatie voor standaarden onder vrijwillige consensus, werd opgericht in 1994. In de OGC werken meer dan 370+ commerciële, overheids-, non-profit- en onderzoeksorganisaties wereldwijd samen in een proces voor open consensus voor het aanmoedigen van de ontwikkeling en implementatie van standaarden voor georuimtelijke inhoud en services, het verwerken van gegevens voor GIS en het delen van gegevens. - Wikipedia

16.2.2. Wat is het SFS-model (Eenvoudig object model)

Het Simple Feature voor SQL (SFS) Model is een niet-topologische manier om georuimtelijke gegevens op te slaan in een database en definieert functies vooe toegang tot, het bewerken van en het construeren van deze gegevens.

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

Het model definieert georuimtelijke gegevens vanuit typen Punt, Lijn en Polygoon (en samenvoegingen daarvan naar Multi-objecten).

Kijk, voor meer informatie, eens naar de standaard OGC Simple Feature for SQL.

16.2.3. Een veld voor geometrie aan een tabel toevoegen

Laten we een veld point aan onze tabel people toevoegen:

alter table people add column the_geom geometry;

16.2.4. Een beperking, gebaseerd op een type geometrie, toevoegen

U zult opmerken dat het veldtype geometrie niet impliciet het type geometrie voor het veld specificeert - daarvoor hebben we een beperking (constraint) nodig:

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

Dit voegt een beperking aan de tabel toe zodat die alleen een geometrie punt of een waarde null accepteert.

16.2.5. Try Yourself hard

Maak een nieuwe tabel, genaamd cities, en geef die enkele toepasselijke kolommen, inclusief een veld voor geometrie voor het opslaan van polygonen (de stadsgrenzen). Zorg er voor dat het een beperking heeft die maakt dat de geometrieën polygonen zijn.

Controleer uw resultaten

16.2.6. Tabel geometry_columns vullen

Op dit punt zou u ook een item aan de tabel geometry_columns moeten toevoegen:

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

Waarom? geometry_columns wordt door bepaalde toepassingen gebruikt om bij te houden welke tabellen in de database gegevens met geometrie bevatten.

Notitie

Als het bovenstaande argument INSERT een fout veroorzaakt, voer dan eerst deze query uit:

select * from geometry_columns;

Als de kolom f_table_name al de waarde people bevat, dan is deze tabel al geregistreerd en hoeft u niets meer te doen.

De waarde 2 verwijst naar het aantal dimensies; in dit geval twee: X en Y.

De waarde 4326 verwijst naar de projectie die we gebruiken; in dit geval WGS 84, waarnaar wordt verwezen door het getal 4326 (bekijk de eerdere bespreking van EPSG).

Try Yourself basic

Voeg een toepasselijk item voor geometry_columns in voor uw nieuwe laag cities

Controleer uw resultaten

16.2.7. Record met geometrie toevoegen aan tabel met behulp van SQL

Nu onze tabellen ingeschakeld zijn voor geometrie, kunnen we er geometrieën in opslaan:

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

Notitie

In het nieuwe item hierboven zult u moeten specificeren welke projectie (SRID) u wilt gebruiken. Dit omdat u de geometrie van het nieuwe punt invoert met behulp van een gewone tekenreeks van tekst, wat niet automatisch de juiste informatie over de projectie toevoegt. Uiteraard dient het nieuwe punt hetzelfde SRID te gebruiken als de gegevensset waaraan het wordt toegevoegd, dus u moet het specificeren.

Als u op dit punt een grafische interface zou gebruiken, zou, bijvoorbeeld, het specificeren van de projectie voor elk punt automatisch gebeuren. Met andere woorden: u hoeft zich gewoonlijk geen zorgen te maken over het gebruiken van de juiste projectie voor elk punt dat u wilt toevoegen als u het al voor die gegevensset heeft gespecificeerd, zoals wij eerder al deden.

Nu is het waarschijnlijk een goed moment om QGIS te openen en te proberen uw tabel people te bekijken. Ook zouden we moeten proberen records te bewerken / toe te voegen / te verwijderen en dan query’s SELECT op de database uitvoeren om te zien hoe de gegevens zijn gewijzigd.

Een laag van PostGIS laden in QGIS, gebruik de menuoptie Laag ► PostGIS-laag toevoegen of de knop op de werkbalk:

addPostgisLayer

Dit zal het dialoogvenster openen:

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

Klik op de knop Nieuw om dit dialoogvenster te openen:

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

Definieer dan een nieuwe verbinding, bijv.:

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

Klik op Test verbinding om te zien of QGIS de database address heeft gevonden en of uw gebruikersnaam en wachtwoord juist zijn. Als het werkt, selecteer dan de vakken naast Gebruikersnaam opslaan en Wachtwoord opslaan. Klik dan op OK om deze verbinding te maken.

Terug in het dialoogvenster PostGIS-tabel(len) toevoegen, klik op Verbinden en voeg de lagen zoals gewoonlijk toe aan uw project.

Try Yourself moderate

Formuleer een query die de naam, straatnaam en positie (vanuit de kolom the_geom) weergeeft als gewone tekst.

Controleer uw resultaten

16.2.8. In Conclusion

U heeft gezien hoe u ruimtelijke objecten toevoegt aan uw database en ze bekijkt in GIS-software.

16.2.9. What’s Next?

Vervolgens zult u zien hoe u gegevens importeert naar en exporteert vanuit uw database.