Belangrijk
Vertalen is een inspanning van de gemeenschap waaraan u deel kunt nemen <translation_guidelines>. Deze pagina is momenteel voor 100.00% vertaald.
16.2. Les: 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.
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. ★★★ Probeer zelf:
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.
Antwoord
create table cities (id serial not null primary key,
name varchar(50),
the_geom geometry not null);
alter table cities
add constraint cities_geom_point_chk
check (st_geometrytype(the_geom) = 'ST_Polygon'::text );
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).
★☆☆ Probeer zelf:
Voeg een toepasselijk item voor geometry_columns in voor uw nieuwe laag cities
Antwoord
insert into geometry_columns values
('','public','cities','the_geom',2,4326,'POLYGON');
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
of de knop op de werkbalk:Dit zal het dialoogvenster openen:
Klik op de knop Nieuw om dit dialoogvenster te openen:
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.
★★☆ Probeer zelf:
Formuleer een query die de naam, straatnaam en positie (vanuit de kolom the_geom) weergeeft als gewone tekst.
Antwoord
select people.name,
streets.name as street_name,
st_astext(people.the_geom) as geometry
from streets, people
where people.street_id=streets.id;
Resultaat:
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)
Zoals u kunt zien staat onze beperking toe om waarden null toe te voegen aan de database.
16.2.8. Conclusie
U heeft gezien hoe u ruimtelijke objecten toevoegt aan uw database en ze bekijkt in GIS-software.
16.2.9. Wat volgt?
Vervolgens zult u zien hoe u gegevens importeert naar en exporteert vanuit uw database.