21. Antwoordenblad
21.1. Results For Een overzicht van de interface
21.1.1. Overzicht (Deel 1)
Bekijk opnieuw de afbeelding die de opmaak van de interface laat zien en controleer of u de namen en functies van de elementen van het scherm nog weet.
21.1.2. Overzicht (Deel 2)
Opslaan als
Zoom naar laag
Selectie omdraaien
Renderen aan/uit
Meetlijn
21.2. Results For Uw eerste laag toevoegen
21.2.1. Voorbereiding
In het hoofdgebied van het dialoogvenster zou u veel vormen met verschillende kleuren moeten zien. Elke vorm behoort tot een laag die u kunt identificeren door zijn kleur in het linkerpaneel (uw kleuren zouden anders kunnen zijn dan die hieronder):
21.2.2. Gegevens laden
Uw kaart zou zeven lagen moeten hebben:
protected_areas
places
rivers
roads
landuse
buildings (genomen uit
training_data.gpkg
) enwater (genomen uit
exercise_data/shapefile
).
21.3. Results For Symbologie
21.3.1. Kleuren
Verifieer dat de kleuren zijn gewijzigd zoals u verwachtte dat ze zouden veranderen.
Het is genoeg om de laag water te selecteren in de legenda en dan te klikken op de knop Paneel Laag opmaken openen. Wijzig de kleur naar een die past in de laag water.
Notitie
Als u slechts met één laag tegelijk wilt werken en niet afgeleid wilt worden door de andere lagen, kunt u een laag verbergen door in het keuzevak naast de naam in het paneel Lagen te klikken. Als het vak leeg is, dan is de laag verborgen.
21.3.2. Symboolstructuur
Uw kaart zou er nu zo uit moeten zien:
Als u een gebruiker bent op het niveau Beginner, mag u hier stoppen.
Gebruik de bovenstaande methode om de kleuren en stijlen voor alle resterende lagen te wijzigen.
Probeer natuurlijke kleuren te gebruiken voor de objecten. Een weg zou niet rood of blauw moeten zijn, maar kan grijs of zwart zijn.
Het staat u vrij te experimenteren met verschillende instellingen voor Vullingsstijl en Randstijl voor de polygonen.
21.3.3. Symboollagen
Pas uw laag buildings aan zoals u wilt, maar onthoud dat het eenvoudig moet zijn de verschillende lagen in de kaart te onderscheiden.
Hier is een voorbeeld:
21.3.4. Symboolniveau’s
U heeft drie symboollagen nodig om het vereiste symbool te maken:
De onderste symboollaag is een brede, volle grijze lijn. Daarop ligt een enigszins dunnere volle gele lijn en tenslotte een nog dunnere volle zwarte lijn.
Als uw symboollagen er bijna uitzien zoals hierboven, maar u krijgt niet het resultaat dat u wilt:
Controleer dan of uw symboolniveau’s er ongeveer uitzien zoals dit:
Nu zou uw kaart er ongeveer zo uit moeten zien:
21.3.5. Symboolniveaus
Pas uw symboolniveaus aan naar deze waarden:
Experimenteer met verschillende waarden om verschillende resultaten te zien.
Open opnieuw uw originele kaart voordat u doorgaat met de volgende oefening.
21.4. Markeringen voor omtrek
Hier zijn voorbeelden van de structuur van de symbolen:
21.4.1. Symbologie voor Geometrie-generator
Verplaats het nieuwe symbool naar de onderzijde van de lijst door te klikken op de knop .
Kies een goede kleur om de polygonen voor water te vullen.
Klik op Markering van de symbologie voor Geometrie-generator en wijzig de cirkel naar een andere vorm zoals u dat wilt.
Probeer met andere opties te experimenteren om meer nuttiger resultaten te krijgen.
21.5. Results For Vector attributengegevens
21.5.1. Attributen van vectorgegevens verkennen
Er zouden 9 velden in de laag rivers moeten zijn:
Selecteer de laag in het paneel Lagen.
Klik met rechts en kies Attributentabel openen, of druk op de knop op de werkbalk Attributen.
Tel het aantal kolommen.
Tip
Een snellere benadering zou kunnen zijn om te dubbelklikken op de laag rivers, de tab te openen, waar u een genummerde lijst met tabelvelden zult vinden.
Informatie over plaatsen is beschikbaar op de laag places. Open de attributentabel daarvan zoals u ook deed voor de laag rivers: er zijn twee objecten waarvan het attribuut place is ingesteld op
town
: Swellendam en Buffeljagsrivier. U kunt opmerkingen toevoegen aan andere velden van deze twee records, als u dat wilt.Het veld
name
is het meest bruikbaar om als label weer te geven. Dit omdat alle waarden ervan uniek zijn voor elk object en het is zeer onwaarschijnlijk dat het NULL-waarden bevat. Als uw gegevens enkele NULL-waarden bevatten, maak u dan geen zorgen omdat de meeste van uw plaatsen namen hebben.
21.6. Results For Labels
21.6.1. Aanpassen van Label (Deel 1)
Uw kaart zou nu de markeringspunten moeten weergeven en de labels zouden verschoven moeten zijn met 2 mm: De stijl van de markeringen en labels zouden het mogelijk moeten maken beide duidelijk te zien op de kaart:
21.6.2. Aanpassen van Label (Deel 2)
Eén mogelijke oplossing heeft dit uiteindelijke product:
Dit resultaat bereiken:
Gebruik een grootte van het lettertype van
10
Gebruik een afstand voor plaatsing rondom punt van
1.5 mm
Gebruik een grootte voor de markering van
3.0 mm
In aanvulling daarop gebruikt dit voorbeeld de optie Afbrekingsteken:
Voer een
spatie
in dit veld in en klik op Toepassen om hetzelfde effect te bereiken. In ons geval zijn enkele van de plaatsnamen erg lang, wat resulteert in namen over meerdere regels, wat niet erg gebruikersvriendelijk is. U vindt misschien dat deze instelling meer toepasselijk is voor uw kaart.
21.6.3. Gegevens-bepaalde instellingen gebruiken
Stel, nog steeds in de modus bewerken,, de waarden
FONT_SIZE
in op die welke u wenst. Het voorbeeld gebruikt16
voor steden,14
voor kleinere steden,12
voor dorpen en10
voor gehuchten.Vergeet niet de bewerkingen op te slaan en verlaat de modus Bewerken
Ga terug naar de opmaakopties voor Tekst voor de laag
places
en selecteerFONT_SIZE
in het Attribuutveld van de grootte van het lettertype in de keuzelijst van Data-bepaalde ‘override’:Uw resultaten, als u bovengenoemde waarden gebruikte, zou dit moeten zijn:
21.7. Results For Classificatie
21.7.1. De classificatie verfijnen
De instellingen die u gebruikte zouden niet hetzelfde hoeven te zijn, maar met de waarden Klassen = 6
en Modus = Natuurlijke grenzen (Jenks) (en door natuurlijk dezelfde kleuren te gebruiken), zal de kaart er zo uit zien:
21.8. Results For Een nieuwe vector gegevensset maken
21.8.1. Digitialiseren
De symbologie is niet van belang, maar de resultaten zouden er min of meer als volgt uit moeten zien:
21.8.2. Topologie: Gereedschap Ring toevoegen
De exacte vorm maakt niet uit, maar u zou een gat in het midden van uw object moeten hebben, zoals dit:
Maak uw bewerking ongedaan voordat u doorgaat met de volgende oefening voor het volgende gereedschap.
21.8.3. Topologie: Gereedschap Deel toevoegen
Selecteer eerst Bontebok National Park:
Voeg nu uw nieuwe gedeelte toe:
Maak uw bewerking ongedaan voordat u doorgaat met de volgende oefening voor het volgende gereedschap.
21.8.4. Objecten samenvoegen
Gebruik het gereedschap Geselecteerde pbjecten samenvoegen, zorg er voor dat u eerst beide polygonen heeft geselecteerd die u wilt samenvoegen.
Gebruik het object met de OGC_FID 1 als de bron van uw attributen (klik op het item ervan in het dialoogvenster, klik dan op de knop Gebruik attributen van geselecteerde object):
Notitie
Als u een andere gegevensset gebruikt, is het zeer waarschijnlijk dat uw originele polygoon’s OGC_FID niet 1
zal zijn. Kies eenvoudigweg het object dat een OGC_FID heeft.
Notitie
Gebruiken van het gereedschap Attributen van geselecteerde objecten samenvoegen zal de afzonderlijke geometrieën behouden, maar ze dezelfde attributen geven.
21.8.5. Formulieren
Voor het TYPE is er uiteraard een beperkt aantal typen dat een weg kan zijn, en als u de attributentabel voor deze laag bekijkt, zult u zien dat zij vooraf gedefinieerd zijn.
Stel de widget in op Aanwezige waarden en klik op Data laden van laag.
Selecteer roads in het keuzemenu Label en highway voor de beide opties Waarde en Omschrijving:
Klik driemaal op OK.
Als u het gereedschap Objecten identificeren nu gebruikt op een straat terwijl de modus Bewerken actief is, zal het dialoogvenster dat u krijgt er nu als volgt uitzien:
21.9. Results For Vectoranalyse
21.9.1. Afstand van scholen
Uw dialoogvenster voor de buffer zou er nu ongeveer zo uit moeten zien:
De Buffer afstand is 1 kilometer.
De waarde Segmenten voor benadering is ingesteld op 20. Dit is optioneel, maar het wordt aanbevolen, omdat het de buffers in de uitvoer er gladder uit laat zien. Vergelijk dit:
met dit:
De eerste afbeelding geeft de buffer weer met de waarde Segmenten voor benadering ingesteld op 5 en de tweede geeft de waarde weer als die is ingesteld op 20. In ons voorbeeld is het verschil subtiel, maar u kunt zien dat de randen van de buffer met de hogere waarde gladder zijn.
21.9.2. Afstand vanaf restaurants
We gaan door een proces met twee stappen om de nieuwe laag houses_restaurants_500m te maken:
Maak eerst een buffer van 500 m rondom de restaurants en voeg de laag toe aan de kaart:
Neem vervolgens de gebouwen uit binnen het gebied van de buffer:
Uw kaart zou nu alleen die gebouwen moeten weergeven die binnen 50 m van een weg, 1 km vanaf een school en 500 m vanaf een restaurant liggen:
21.10. Results For Netwerkanalyse
21.11. Fastest path
Open
en vul het dialoogvenster als volgt in:Zorg er voor dat Te berekenen type pad is Snelste
.
Klik op Uitvoeren en sluit het dialoogvenster.
Open nu de attributentabel van de uitvoerlaag. Het veld cost bevat de reistijd tussen de twee punten (als deel van uren):
21.12. Results For Rasteranalyse
21.12.1. Aspect berekenen
Stel uw dialoogvenster Aspect als volgt in:
Uw resultaat:
21.12.2. Helling berekenen (minder dan 2 en 5 graden)
Stel uw dialoogvenster Rasterberekeningen in met:
de volgende expressie:
slope@1 <= 2
de laag
slope
als de Reference layer(s)
Vervang, voor de versie van 5 graden, de
2
in de expressie en bestandsnaam door5
.
Uw resultaten:
2 graden:
5 graden:
21.13. Results For De analyse voltooien
21.13.1. Raster naar vector
Open de Query bouwer door met rechts op de laag all_terrain in het paneel Lagen te klikken en selecteer selecteer de tab .
Bouw dan de query
"suitable" = 1
.Klik op OK om alle polygonen die niet aan de voorwaarde voldoen uit te filteren.
Indien bekeken over het originele raster, zouden de gebieden elkaar perfect moeten overlappen:
U kunt deze laag opslaan door met rechts te klikken op de laag all_terrain in het paneel Lagen en te kiezen voor Opslaan als…, en dan door te gaan door de instructies te volgen.
21.13.2. Inspecteren van de resultaten
Het zal u zijn opgevallen dat enkele van de gebouwen in uw laag new_solution
“in plakjes” zijn gesneden door het gereedschap Intersect. Dit geeft aan dat slechts een deel van het gebouw - en daarom slechts een gedeelte van het eigendom - op geschikt terrein ligt. We kunnen daarom deze gebouwen met een gerust hart uit onze gegevensset verwijderen.
21.13.3. De analyse verfijnen
Op dit moment zou uw analyse er ongeveer als volgt uit moeten zien:
Denk aan een cirkelvormig gebied, 100 meter doorlopend in alle richtingen.
Als het groter is dan 100 meter in straal, dan zal het aftrekken van 100 meter van de grootte (vanuit alle richtingen) resulteren in het overlaten van een deel ervan in het midden.
daarom kunt u een interne buffer van 100 meter op uw bestaande vectorlaag suitable_terrain toepassen. In de uitvoer van de bufferfunctie, wat overblijft van de originele laag zal de gebieden weergeven waar een geschikt terrein van 100 meter naast ligt.
Als demonstratie:
Ga naar
om het dialoogvenster Buffer(s) te openen.Stel dat als volgt in:
Gebruik de laag suitable_terrain met
10
segmenten en een bufferafstand van-100
. (De afstand is automatisch in meters omdat uw kaart een geprojecteerd CRS gebruikt.)Sla de uitvoer op in
exercise_data/residential_development/
alssuitable_terrain_continuous100m.shp
.Indien nodig, verplaats de nieuwe laag tot boven uw originele laag suitable_terrain.
Uw resultaten zullen er ongeveer zo uitzien:
gebruik nu het gereedschap Selecteren op plaats ( ).
Stel dat als volgt in:
Selecteer objecten in new_solution die objecten kruisen in suitable_terrain_continuous100m.shp.
Dit is het resultaat:
De gele gebouwen zijn geselecteerd. Hoewel enkele van de gebouwen gedeeltelijk buiten de nieuwe laag suitable_terrain_continuous100m vallen, liggen zij ruimschoots binnen de laag suitable_terrain en voldoen daarmee aan al onze eisen.
Sla de selectie op onder
exercise_data/residential_development/
alsfinal_answer.shp
.
21.14. Results For WMS
21.14.1. Een andere WMS-laag toevoegen
Uw kaart zou er nu ongeveer zo uit moeten zien (u moet misschien de volgorde van de lagen aanpassen):
21.14.2. Een nieuwe WMS-server toevoegen
Gebruik dezelfde benadering als eerder om de nieuwe server toe te voegen en de toepasselijke laag zoals die gehost moet worden op die server:
Als u inzoomt op het gebied Swellendam, zult u opmerken dat deze gegevensset een lage resolutie heeft:
Daarom is het beter deze gegevens niet te gebruiken voor de huidige kaart. De gegevens van Blue Marble zijn meer geschikt voor globale of nationale schalen.
21.14.3. Een WMS-server zoeken
Het zal u zijn opgevallen dat veel WMS-servers niet altijd beschikbaar zijn. Soms is dat tijdelijk, soms is dat permanent. Een voorbeeld van een WMS-server die werkte op het moment van schrijven is de WMS World Mineral Deposits op http://apps1.gdr.nrcan.gc.ca/cgi-bin/worldmin_en-ca_ows. Die vereist geen bijdrage en heeft geen beperkingen voor toegang, en is globaal. Daarom voldoet hij aan de vereisten. Onthoud echter dat dit slechts een voorbeeld is. Er zijn nog vele andere WMS-servers om uit te kiezen.
21.15. Results For Integratie van GRASS
21.15.1. Lagen toevoegen aan mapset
U kunt lagen (zowel vector als raster) toevoegen aan een mapset van GRASS Map door ze te slepen en te laten vallen in de Browser (zie Follow Along: Gegevens laden met de QGIS Browser) of met v.in.gdal.qgis
voor vector- en r.in.gdal.qgis
voor rasterlagen.
21.15.2. Opnieuw classificeren rasterlaag
Voer, om de maximale waarde van het raster te weten te komen, het gereedschap r.info uit: in de console zult u zien dat de maximale waarde 1699 is.
U bent nu klaar om de regels te schrijven. Open een tekstbewerker en voeg de volgende regels toe:
0 thru 1000 = 1
1000 thru 1400 = 2
1400 thru 1699 = 3
sla het bestand op als een bestand mijn_regels.txt
en sluit de tekstbewerker.
Voer het gereedschap r.reclass uit, kies de laag g_dem en laadt het bestand dat de regels bevat die u zojuist hebt opgeslagen.
Klik op Uitvoeren en dan op Uitvoer bekijken. U kunt de kleuren wijzigen en het uiteindelijke resultaat zou er uit moeten zien als op de volgende afbeelding:
21.16. Results For Database-concepten
21.16.1. Address tabeleigenschappen
Voor onze theoretische tabel Address, zouden we mogelijk de volgende eigenschappen willen opslaan:
House Number
Street Name
Suburb Name
City Name
Postcode
Country
Bij het maken van de tabel om een object adres weer te geven, zouden we kolommen maken om elk van deze eigenschappen weer te geven en we zouden ze aan SQL-eisen laten voldoen en mogelijk afgekorte namen geven:
house_number
street_name
suburb
city
postcode
country
21.16.2. De tabel People normaliseren
Het belangrijkste probleem met de tabel People is dat er één enkel adresveld is dat het volledige adres van een persoon bevat. denkend aan onze theoretische tabel Address eerder in deze les, weten we dat een adres is opgebouwd uit vele verschillende eigenschappen. Door al deze eigenschappen op te slaan in één veld, maken we het veel moeilijker om onze gegevens bij te werken en te bevragen. We dienen daarom het adresveld op te splitsen in de verscheidene eigenschappen. Dat zou ons een tabel geven die de volgende structuur heeft:
id | name | house_no | street_name | city | phone_no
--+---------------+----------+----------------+------------+-----------------
1 | Tim Sutton | 3 | Buirski Plein | Swellendam | 071 123 123
2 | Horst Duester | 4 | Avenue du Roix | Geneva | 072 121 122
Notitie
In het volgende gedeelte zult u meer leren over relaties met Foreign Key die in dit voorbeeld zouden kunnen worden gebruikt om de structuur van onze database te verbeteren.
21.16.3. Verdere normalisatie van de tabel People
Onze tabel People ziet er momenteel als volgt uit:
id | name | house_no | street_id | phone_no
---+--------------+----------+-----------+-------------
1 | Horst Duster | 4 | 1 | 072 121 122
De kolom street_id geeft een relatie ‘één-tot-veel’ weer tussen het object People en het gerelateerde object Street, wat in de tabel Streets staat.
Eén manier voor het verder normaliseren van de tabel is om het veld Name op te splitsen in first_name en last_name:
id | first_name | last_name | house_no | street_id | phone_no
---+------------+------------+----------+-----------+------------
1 | Horst | Duster | 4 | 1 | 072 121 122
We kunnen ook afzonderlijke tabellen maken voor de namen van stad of dorp en het land, en ze koppelen aan onze tabel People via relaties ‘één-tot-veel’:
id | first_name | last_name | house_no | street_id | town_id | country_id
---+------------+-----------+----------+-----------+---------+------------
1 | Horst | Duster | 4 | 1 | 2 | 1
Een ER-diagram om dit weer te geven zou er zo uitzien:
21.16.4. Een tabel People maken
De SQL die is vereist voor het maken van de juiste tabel People is:
create table people (id serial not null primary key,
name varchar(50),
house_no int not null,
street_id int not null,
phone_no varchar null );
Het schema voor de tabel (voer \d people in) ziet er zo uit:
Table "public.people"
Column | Type | Modifiers
-----------+-----------------------+-------------------------------------
id | integer | not null default
| | nextval('people_id_seq'::regclass)
name | character varying(50) |
house_no | integer | not null
street_id | integer | not null
phone_no | character varying |
Indexes:
"people_pkey" PRIMARY KEY, btree (id)
Notitie
Om redenen van illustratie hebben we opzettelijk de beperking fkey weggelaten.
21.16.5. De opdracht DROP
De reden dat de opdracht DROP in dit geval niet zal werken is omdat de tabel People een beperking Foreign Key heeft voor de tabel Streets. Dit betekent dat het droppen (of verwijderen) van de tabel Streets de tabel People zou achterlaten met verwijzingen naar niet-bestaande gegevens van Streets.
Notitie
Het is mogelijk om te ‘forceren’ dat de tabel Streets zal worden verwijderd met behulp van de opdracht CASCADE, maar dat zou ook de tabel People en elke andere tabel die een relatie heeft met de tabel Streets verwijderen. Gebruik het dus voorzichtig!
21.16.6. Een nieuwe straat invoeren
De opdracht voor SQL die u zou moeten gebruiken ziet er als volgt uit (u mag de straatnaam vervangen door de naam van uw keuze):
insert into streets (name) values ('Low Road');
21.16.7. Een nieuwe persoon met een relatie Foreign Key toevoegen
Hier is de juiste opdracht voor SQL:
insert into streets (name) values('Main Road');
insert into people (name,house_no, street_id, phone_no)
values ('Joe Smith',55,2,'072 882 33 21');
Als u opnieuw naar de tabel Streets kijkt (met behulp van een argument SELECT zoals eerder), zult u zien dat het id voor het item Main Road 2 is.
Dat is waarom we hierboven eenvoudigweg het nummer 2 konden invullen. Zelfs hoewel we Main Road niet volledig zien uitgeschreven in het item hierboven, zal de database in staat zijn om dat te associëren met de waarde van 2 voor street_id.
Notitie
Als u al een nieuw object street had toegevoegd, zou u kunnen merken dat de nieuwe Main Road een ID heeft van 3 en niet 2.
21.16.8. Straatnamen teruggeven
Hier is het juiste argument voor SQL dat u zou moeten gebruiken:
select count(people.name), streets.name
from people, streets
where people.street_id=streets.id
group by streets.name;
Resultaat:
count | name
------+-------------
1 | Low Street
2 | High street
1 | Main Road
(3 rows)
Notitie
Het zal u zijn opgevallen dat we veldnamen hebben met daaraan voorafgaand de tabelnaam (bijv. people.name en streets.name). Dat is altijd nodig wanneer de veldnaam niet duidelijk te onderscheiden is (d.i. niet uniek over alle tabellen in de database).
21.17. Results For Ruimtelijke query’s
21.17.1. De eenheden gebruikt in ruimtelijke query’s
De eenheden die door het voorbeeld van de query worden gebruikt zijn graden, omdat het CRS dat de laag gebruikt WGS 84 is. Dat is een Geografisch CRS, wat betekent dat de eenheden ervan in graden zijn. Een geprojecteerd CRS, zoals de projecties in UTM, is in meters.
Onthoud dat wanneer u een query schrijft, u dient te weten in welke eenheden het CRS van de laag is. Dat zal u in staat stellen een query te schrijven die de resultaten zal teruggeven die u er van verwacht.
21.17.2. Een ruimtelijke index maken
CREATE INDEX cities_geo_idx
ON cities
USING gist (the_geom);
21.18. Results For Construeren van geometrie
21.18.1. Lijnen maken
alter table streets add column the_geom geometry;
alter table streets add constraint streets_geom_point_chk check
(st_geometrytype(the_geom) = 'ST_LineString'::text OR the_geom IS NULL);
insert into geometry_columns values ('','public','streets','the_geom',2,4326,
'LINESTRING');
create index streets_geo_idx
on streets
using gist
(the_geom);
21.18.2. Tabellen koppelen
delete from people;
alter table people add column city_id int not null references cities(id);
(steden vastleggen in QGIS)
insert into people (name,house_no, street_id, phone_no, city_id, the_geom)
values ('Faulty Towers',
34,
3,
'072 812 31 28',
1,
'SRID=4326;POINT(33 33)');
insert into people (name,house_no, street_id, phone_no, city_id, the_geom)
values ('IP Knightly',
32,
1,
'071 812 31 28',
1,F
'SRID=4326;POINT(32 -34)');
insert into people (name,house_no, street_id, phone_no, city_id, the_geom)
values ('Rusty Bedsprings',
39,
1,
'071 822 31 28',
1,
'SRID=4326;POINT(34 -34)');
Als u het volgende foutbericht krijgt:
ERROR: insert or update on table "people" violates foreign key constraint
"people_city_id_fkey"
DETAIL: Key (city_id)=(1) is not present in table "cities".
dan betekent dat dat u bij het experimenteren met het maken van polygonen voor de tabel Cities, u enkele ervan verwijderd moeten hebben en overnieuw zijn begonnen. Controleer de items in uw tabel Cities en gebruik een bestaande id.
21.19. Results For Eenvoudig object model
21.19.1. Tabellen vullen
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 );
21.19.2. De tabel geometry_columns vullen
insert into geometry_columns values
('','public','cities','the_geom',2,4326,'POLYGON');
21.19.3. Geometrie toevoegen
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 nulwaarden toe te voegen aan de database.