Overlay med GeoPandas

Viser bruk av GeoPandas overlay-funksjon

In [1]:
import pandas as pd
import geopandas as gpd
import fiona as fi

FKB ledning

In [2]:
ledning_gdb = "Basisdata_1133_Hjelmeland_5972_FKB-Ledning_FGDB.gdb"
print(fi.listlayers(ledning_gdb))
['fkb_ledning_posisjon', 'fkb_ledning_omriss', 'fkb_ledning_beliggenhet', 'fkb_ledning_eier_tabell', 'fkb_ledning_fellesforing_tabell']
In [3]:
ledning = gpd.read_file(ledning_gdb, layer = 'fkb_ledning_beliggenhet')
In [4]:
ledning.head()
Out[4]:
objtype lokalid navnerom versjonid datafangstdato driftsmerking hovedbruk hoydereferanse informasjon kopidato ... undertype tidspunktendring typeendring verifiseringsdato luftfartshindermerking trasenavn vertikalhoyde vertikalhoydenoyaktighet SHAPE_Length geometry
0 Trase aae92f1b-b89c-467e-be0e-46a5f39a43bf http://data.geonorge.no/SFKB/FKB-Ledning/so 2016-10-26 21:05:33.771000 1993-03-06T00:00:00+00:00 None høgspentnett toppUtvendig None None ... None None None None None None NaN None 845.314708 MULTILINESTRING Z ((352951.839 6574659.629 397...
1 Trase 16e543f4-9048-4ca2-badd-bd627f85a640 http://data.geonorge.no/SFKB/FKB-Ledning/so 2016-10-26 21:05:33.771000 2010-05-31T00:00:00+00:00 None høgspentnett toppUtvendig None None ... None None None None None None NaN None 51.780468 MULTILINESTRING Z ((345895.419 6571392.629 241...
2 Trase 5556e13e-7153-4d7b-95c4-b227ed5f80e5 http://data.geonorge.no/SFKB/FKB-Ledning/so 2016-10-26 21:05:33.771000 2003-04-18T00:00:00+00:00 None høgspentnett toppUtvendig None None ... None None None None None None NaN None 44.161162 MULTILINESTRING Z ((348442.799 6577579.779 121...
3 Trase 716ba708-fc6a-436d-a5ee-913b21be0648 http://data.geonorge.no/SFKB/FKB-Ledning/so 2016-10-26 21:05:33.771000 2003-04-18T00:00:00+00:00 None høgspentnett toppUtvendig None None ... None None None None None None NaN None 49.971436 MULTILINESTRING Z ((332792.829 6564377.409 154...
4 Trase 044998bd-5975-4d46-a23c-50d8575b9b9c http://data.geonorge.no/SFKB/FKB-Ledning/so 2016-10-26 21:05:33.771000 2003-04-18T00:00:00+00:00 None høgspentnett toppUtvendig None None ... None None None None None None NaN None 103.417285 MULTILINESTRING Z ((353495.409 6574871.539 387...

5 rows × 31 columns

FKB AR5 - Arealtype 30 (skog)

In [5]:
ar5_gdb = "Basisdata_1133_Hjelmeland_25832_FKB-AR5_FGDB.gdb"
print(fi.listlayers(ar5_gdb))
['fkb_ar5_omrade', 'fkb_ar5_grense']
In [6]:
ar5 = gpd.read_file(ar5_gdb, layer = 'fkb_ar5_omrade')
In [7]:
skog = ar5[(ar5["arealtype"] == "30")]
skog.head()
Out[7]:
objtype lokalid navnerom versjonid arealtype datafangstdato grunnforhold informasjon kartstandard kopidato ... prosesshistorie produkt versjon undertype skogbonitet treslag verifiseringsdato SHAPE_Length SHAPE_Area geometry
574 ArealressursFlate 6b83c813-c92d-4361-b090-9cef40a61e48 http://data.geonorge.no/SFKB/FKB-AR5/so 2021-12-16 16:04:56.998000000 30 1989-06-13T00:00:00+00:00 43 None AR5 2022-02-01T14:03:03+00:00 ... None FKB-AR5 4.5 20140301 None 14 32 1989-06-13T00:00:00+00:00 745.565342 5902.14045 MULTIPOLYGON (((355394.619 6580450.199, 355394...
575 ArealressursFlate 7a923c6b-a864-4f84-8c2a-8c21be9e6ba2 http://data.geonorge.no/SFKB/FKB-AR5/so 2021-12-16 16:04:56.998000000 30 1989-06-13T00:00:00+00:00 43 None AR5 2022-02-01T14:03:03+00:00 ... None FKB-AR5 4.5 20140301 None 11 32 1989-06-13T00:00:00+00:00 266.579110 2768.83490 MULTIPOLYGON (((355360.629 6579928.679, 355350...
576 ArealressursFlate ec4c00ff-5aea-4f0a-8780-57062b0a361c http://data.geonorge.no/SFKB/FKB-AR5/so 2021-12-16 16:04:56.998000000 30 1989-06-13T00:00:00+00:00 44 None AR5 2022-02-01T14:03:03+00:00 ... None FKB-AR5 4.5 20140301 None 13 32 1989-06-13T00:00:00+00:00 1158.407842 17561.51695 MULTIPOLYGON (((357185.809 6577138.499, 357184...
580 ArealressursFlate 6cbccbdc-d06c-4b74-9f3b-68d89d0b61cc http://data.geonorge.no/SFKB/FKB-AR5/so 2021-12-16 16:04:56.998000000 30 1989-06-13T00:00:00+00:00 43 None AR5 2022-02-01T14:03:03+00:00 ... None FKB-AR5 4.5 20140301 None 11 32 1989-06-13T00:00:00+00:00 673.178783 19518.14780 MULTIPOLYGON (((355321.719 6580386.049, 355324...
581 ArealressursFlate 7455eaef-6c53-4511-920a-cb2381779bc1 http://data.geonorge.no/SFKB/FKB-AR5/so 2021-12-16 16:04:56.998000000 30 1989-06-13T00:00:00+00:00 43 None AR5 2022-02-01T14:03:03+00:00 ... None FKB-AR5 4.5 20140301 None 11 32 1989-06-13T00:00:00+00:00 4389.875263 122852.77150 MULTIPOLYGON (((356234.679 6576648.609, 356234...

5 rows × 27 columns

Datasjekk

In [8]:
ledning.is_valid.value_counts()
Out[8]:
True    572
dtype: int64
In [9]:
# Denne gir feilmelding:

#skog.is_valid
In [10]:
# Denne koden viser at det er tre polygoner som ikke er gyldige:

for index,value in enumerate(skog.geometry):
    try:
        if value.is_valid:
            pass
    except:
        print('index: ', index)
IllegalArgumentException: Cannot compute the quadrant for point (0,0)

IllegalArgumentException: Cannot compute the quadrant for point (0,0)

IllegalArgumentException: Cannot compute the quadrant for point (0,0)

index:  513
index:  518
index:  5289

Oppretting av feil i datagrunnlag

Triks for å få etablert geometrien for ugyldige polygoner på nytt:

In [11]:
# Finner kolonne-indeks for geometry
skog.columns.get_loc('geometry')
Out[11]:
26
In [12]:
for index,value in enumerate(skog.geometry):
    try:
        if value.is_valid:
            pass
    except:
        skog.iat[index, 26] = value.buffer(0)
        print('fixed geometry at index: ', index)
IllegalArgumentException: Cannot compute the quadrant for point (0,0)

IllegalArgumentException: Cannot compute the quadrant for point (0,0)

IllegalArgumentException: Cannot compute the quadrant for point (0,0)

fixed geometry at index:  513
fixed geometry at index:  518
fixed geometry at index:  5289

Problem-polygoner etter buffer(0)-operasjon

In [13]:
skog.iloc[513].geometry
Out[13]:
In [14]:
skog.iloc[518].geometry
Out[14]:
In [15]:
skog.iloc[5289].geometry
Out[15]:

Overlay ledning + skog

In [16]:
ledning_skog = gpd.overlay(ledning, skog, how='intersection', keep_geom_type=False, make_valid=True)
ledning_skog.shape
Out[16]:
(1109, 57)
In [17]:
ledning_skog.geom_type.value_counts()
Out[17]:
LineString         892
MultiLineString    217
dtype: int64
In [18]:
base = skog.plot(column='treslag', cmap='tab20c', figsize=(25,25))

ledning.plot(ax=base, color='cyan');
ledning_skog.plot(ax=base, color='red');
In [ ]: