Ik heb er eindelijk even een dag goed voor kunnen zitten, dus ook op verzoek van @marco_duiker even de uitkomsten tot nu toe.
Mijn doel. Ik wil zoekresultaten organiseren op afstand van een plaats. Kortom ik wil een punt hebben van elke plaats in het “midden” van de bebouwde kom.
Daarnaast wil ik ook simpele reversegeo kunnen doen, iemand deelt positie van telefoon. Sta je in een bebouwde kom, dan wil ik die plaats terughebben. Sta je buiten de een bebouwde kom, dan wil ik de plaats van de dichtstbijzijnde bebouwde kom terugkrijgen.
Ik wil de geojson als uitkomst om te importeren in MongoDB.
Dank voor de QGIS tip, fijn en visueel programma. En eigenlijk alle problemen, vragen die ik heb zijn al ooit eens gesteld en dus te Googlen (en dan kom ik eigenlijk standaard uit bij https://gis.stackexchange.com/).
Ik gebruik de top10 geopackage van het BRT met daarin de bebouwde kommen.
top10nl_Plaats.gpkg
Even een overzicht van de stappen die ik heb genomen.
Punten in midden van bebouwde kom.
1. Filteren (right click layer):
In de layers “plaats_vlak” en “plaatsmultivlak” filteren op woonkern en recreatiekern.
DMV: “TYPEGEBIED” = “woonkern” OR “TYPEGEBIED” = “recreatiekern”
2. Mergen en conversie naar EPSG:4326
De BRT kaart is in EPSG:28992. LAT/LON gebruikt EPSG 4326
Je kan gelijk layers mergen en converteren naar een ander coordinaat systeem.
- Vector > Data Management Tools > Merge Vector layers…
- Set destination CRS naar de default EPSG:4326.
- Save as a shape file.
3. Velden opschonen
Ik kwam er bij export achter dat velden met hele getallen in 1 keer decimalen kregen.
Door column type aan te passen kon ik dat oplossen (change type of a column).
Processing > Toolbox > QGIS geoalgorithms > Vector table tools > Refactor fields
Hier komt dan een nieuwe laag van terug, waarmee ik verder werk.
4. Centroid layer maken
Dit was erg eenvouding.
Vector > Geometry Tools > Centroids
Ik heb ook een 2e manier gevonden, door velden lat/lon te calculeren. _
> Field calculator, create new field, decimal number: precision 6
_ 1. lon: y(centroid($geometry))
_ 2. lat: x(centroid($geometry))_
Uiteindelijk voor de eerste optie gegaan, omdat ik geojson nodig heb, kortom ik ga de centroid layer exporteren als geojson en dan heb ik gelijk het point type te pakken.
5. Opslaan
Export > Save Features As…
- Velden selecteren die ik wil behouden.
- decimalen achter komma op 6 zetten (15 is te precies, 6 is voldoende).
Polygons van bebouwde kommen (Voor simpele reversegeo)
Polygonen hoeven niet heel precies te zijn, kortom wat opschoonwerk om data te besparen.
1. Simplify
Op basis van de refactored layer (na punt 3) ga ik verder.
Via simplify data gereduceerd how to simplify geometries.
Visueel gekeken naar het effect. Uiteindelijk Area als methode gebruikt en tolerance of 0,001.
2. Drop z/m
Na inspectie van een file export lijkt het z-coordinaat altijd 0, kortom die data kan weg. Via Drop z/m functie.
QGIS 3 tool is called Drop m/z values. It’s in the Processing Toolbox, under Vector Geometry.
BAG woonplaatsnaam als field in centroid file
Een aantal “bebouwde kommen” vallen onder één woonplaats in de bag. Die wilde ik ook graag in de set hebben. Om even bij mij in de regio te blijven (Enschede). Zowel Lonneker en Usselo zijn dorpen die in de bag als woonplaats Enschede zijn. Ze zijn ook niet apart als woonplaats te vinden in het georegister: https://geodata.nationaalgeoregister.nl/locatieserver/v3/free?fq=type:woonplaats&fl=*&q=lonneker&rows=10
Via geoparaat heb ik de nieuwste BAG als geopackage download. Hierin zit de woonplaats layer.
Ik kijk welke centroids in de polygon van de woonplaats liggen, dan voeg ik dat woonplaats veld toe aan de centroid.
Data management tools > Join attributes by location.
- Input laag: centroids
- Join laag: bag
- within selecteren.
- Join type: Take attributes of the feature with largest overlap only…
Ik moest de BAG laag nog wel even fixen qua geometry, anders werkte dat niet.
Via “fix geometries”.
Conclusie
Goed dit ging dus redelijk makkelijk, heb er 1,5 dag aanbesteed.
Ik heb nu 2 geojson files polygonen is ongeveer 2.5mb en de centroids iets van 600kb.
Eén vraag die ik nog heb.
Is het gebruikelijk om zowel de centroids als de polygonen in 1 file te zetten? GeoJSON heeft iets als een GeometryCollection. Dan kan ik daar zowel de centroid in zetten als de multipolygon.
Geen idee of dit standaard is en in QGIS kwam ik hier ook niet helemaal uit (merge vector layers gaf de fout: All layers must have same geometry type! Encountered a Polygon layer when expecting a Point layer. ).
Wat zijn best practices in dit opzicht?