Skip to content

Instantly share code, notes, and snippets.

@rastermanden
Last active August 29, 2015 14:16
Show Gist options
  • Save rastermanden/de2bf5da15af54afffb5 to your computer and use it in GitHub Desktop.
Save rastermanden/de2bf5da15af54afffb5 to your computer and use it in GitHub Desktop.
herlev_geom
�PNG

���
IHDR������������j.>���tRNS��v��8���IDATx���[r� �T�e��66H<��Ni�Rv��4�$ ��(�������k[�l��+g�YgZ""��E6`KdGg�z��s(�,�� 0[̒{5+�?����ć̺ٚ��n��I�jZY�7�]�A�́�m��]JSP[WsCdj��
�1,�e^瞘�vg���:�i�%".�M�p����k�S�x��:�*��3f��:L��5a�v�1c�i��(�
0��t�17��a��"�ô~s?7���9�0[sScn�/u��ie�a����?�]���U������<�a���:+���9���]Q'��VU� ��m%hߢڪ��Nk��hW��� +�`ӂ��)�8hZP[4�U��Lǝ��K��hZP[(=�@��.���M j ��W.hZP[��д��0*�>�iAmQ�6}M j ��)HhZP[ }L#�i��9�M j��ʺ 4-�-�jk_д���U]������44-��h5�@�2�{.CS�c[|�s���i�w�F�Q�D;�f��N'6ƛ�J�
����g{@�n��ie+����iT�. VJ�'����fXEӗ_��o�ի�} 3�w���4��0<U97!�%�A�Yje��f9�
����=���T(�=������?�o��s}#S0?�`�Ń ��A0�tj;V#�M�ë�h�S�À���"��0�?p[n�A8�����IEND�B`�

Korrektion af fejlbehæftede geometrier i park tabellerne

![eee](images/table 1221.png)

eeeeeee

Image of Yaktocat

BLAH BLAH BLAHBLAH BLAHBLAHBLAHBLAHBLAHBLAHBLAH

Overblikket

Tabel Ingen fejl Geometrifejl SQL
Flader.tab 2073 58 SELECT count(*), st_isvalid(wkb_geometry), ST_GeometryType(wkb_geometry) gtype FROM tmp.flader GROUP BY st_isvalid,gtype order by st_isvalid asc
Linjer.Tab 180 0 SELECT count(*), st_isvalid(wkb_geometry), ST_GeometryType(wkb_geometry) gtype FROM tmp.linier GROUP BY st_isvalid,gtype order by st_isvalid asc
Punkter.Tab 5428 0 SELECT count(*), st_isvalid(wkb_geometry), ST_GeometryType(wkb_geometry) gtype FROM tmp.punkter GROUP BY st_isvalid,gtype order by st_isvalid asc
Arbejdssted.Tab 109 15 SELECT count(*), st_isvalid(wkb_geometry), ST_GeometryType(wkb_geometry) gtype FROM tmp.arbejdssted GROUP BY st_isvalid,gtype order by st_isvalid asc

I tabellen kan vi se, at det kun er nødvendigt at rette fejlene i tabellen Flader.Tab og Arbejdssted.Tab

Flader

Tabellen kan indlæses i en PostgreSQL database med følgende kommando i kommandprompten

ogr2ogr -f "postgresql" pg:"host=pg1.septima.dk user=martin dbname=herlev" Flader.TAB -lco SCHEMA=tmp -overwrite -lco OVERWRITE=YES

Inden vi påbegynder oprettelsen fejlbehæftede geometrier skal vi have et overblik over antal af fejl fordelt på geometrityper:

SELECT count(*), st_isvalid(wkb_geometry), ST_GeometryType(wkb_geometry) gtype
 FROM tmp.flader
  GROUP BY st_isvalid,gtype
   order by st_isvalid asc

Hvilket giver følgende resultat:

count st_isvalid gtype
58 f ST_MultiPolygon
2073 t ST_MultiPolygon

Altså har vi, at tabellen som udgangspunkt kun indeholder geometrier af typen ST_MultiPolygon og af dem er der 58, der returnerer false i testen ST_Isvalid(). Dermed skal vi forsøge at finde en metode til at gøre geometrierne gyldige ved at udføre forskellige manipulationer af geometrierne.

Vi kan også undersøge, hvilke typer af fejl geometrierne indeholder

SELECT ST_IsValidReason(wkb_geometry) as aarsag,ogc_fid as id
 FROM tmp.flader
 WHERE not st_isvalid(wkb_geometry)

Ovenstående SQL forespørgsel giver følgende resultat (trunkeret)

aarsag id
Self-intersection[715210.553283185 6181676.29453083] 3
Self-intersection[715437.904062876 6180562.61435407] 11
Self-intersection[713184.042703904 6183292.0187917] 19
Ring Self-intersection[713269.156308728 6183466.97318024] 18
-- --

Vi kan se, at der er mange fejl af typerne self-intersection og Ring Self-intersection

PostGIS indeholder en indbygget funktion, som forsøger at gøre geometrierne uden at fjerne vertices

SELECT count(*),
 st_isvalid(st_makevalid) st_isvalid, 
 ST_GeometryType(st_makevalid) geomtype
  FROM (
  SELECT st_makevalid(wkb_geometry) 
  FROM tmp.flader
  ) foo
GROUP BY st_isvalid, geomtype;

Vi kan se, at vi nu har gyldige geometrier, men at funktionen st_makevalid() har resulteret i at der nu er geometrityper, der ikke længere er af typen ST_MultiPolygon. Dem vil vi i det følgende forsøge at håndtere.

count st_isvalid geomtype
2099 t ST_MultiPolygon
31 t ST_GeometryCollection
1 t ST_MultiLineString

Lad os starte med at oprette en ny tabel (tmp.flader_valid), hvor geometrierne er gyldige, men transformationen har medført nye geometrityper som ovenfor.

DROP TABLE IF EXISTS tmp.flader_valid;   
CREATE TABLE tmp.flader_valid AS   
SELECT ST_MakeValid(wkb_geometry), element, elementnavn, underelement, vedlniveau, 
       arealtype, arbejdsstednr
     FROM tmp.flader; 

Først finder vi den ene, som er blevet til en ST_MultiLineString

SELECT ST_Astext(wkb_geometry),*
 FROM tmp.flader_valid
 WHERE ST_GeometryType(wkb_geometry) ='ST_MultiLineString' 

Og vi kan se at den har id 1222. Når vi åbner den i MapInfo/QGIS eller lign kan vi se, at der mangler et linie segment i den ene side, som desværre er blevet klippet af i processen. Derved er polygonen ikke længere en Closed Linestring

d

Vi retter denne geomtri ved at tilføje et ekstra punkt samme sted som startpunktet og derefter opretter vi en polygon af linegeomtrien.

Arbejdsted

Tabellen kan indlæses i en PostgreSQL database med følgende kommando i kommandprompten

ogr2ogr -f "postgresql" pg:"host=pg1.septima.dk user=martin dbname=herlev" Arbejdssted.TAB -lco SCHEMA=tmp -overwrite -lco OVERWRITE=YES
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment