Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
U
u4py
Manage
Activity
Members
Plan
Wiki
Code
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Deploy
Releases
Package registry
Model registry
Operate
Terraform modules
Analyze
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Rudolf, Michael
u4py
Commits
07d7a45f
Commit
07d7a45f
authored
6 months ago
by
Rudolf, Michael
Browse files
Options
Downloads
Patches
Plain Diff
Added script for figure to explain workflow
parent
dcd091b3
No related branches found
No related tags found
No related merge requests found
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
u4py/plotting/axes.py
+7
-3
7 additions, 3 deletions
u4py/plotting/axes.py
u4py/scripts/examples/algorithms/contouring.py
+166
-0
166 additions, 0 deletions
u4py/scripts/examples/algorithms/contouring.py
with
173 additions
and
3 deletions
u4py/plotting/axes.py
+
7
−
3
View file @
07d7a45f
...
@@ -918,7 +918,11 @@ def add_aspect_slope(
...
@@ -918,7 +918,11 @@ def add_aspect_slope(
@_add_or_create
@_add_or_create
def
add_gpkg_data_in_axis
(
def
add_gpkg_data_in_axis
(
gpkg_path
:
os
.
PathLike
,
table
:
str
,
ax
:
Axes
,
**
plot_kwargs
gpkg_path
:
os
.
PathLike
,
table
:
str
,
ax
:
Axes
,
ax_crs
:
str
=
"
EPSG:32632
"
,
**
plot_kwargs
,
):
):
"""
Adds data from a gpkg file to the plot using the boundaries of the axis as the extend of the geometry
"""
Adds data from a gpkg file to the plot using the boundaries of the axis as the extend of the geometry
...
@@ -933,8 +937,8 @@ def add_gpkg_data_in_axis(
...
@@ -933,8 +937,8 @@ def add_gpkg_data_in_axis(
"""
"""
crs
=
u4sql
.
get_crs
(
gpkg_path
,
table
)[
0
]
crs
=
u4sql
.
get_crs
(
gpkg_path
,
table
)[
0
]
region
=
gp
.
GeoDataFrame
(
region
=
gp
.
GeoDataFrame
(
geometry
=
[
u4spatial
.
bounds_to_polygon
(
ax
)],
crs
=
crs
geometry
=
[
u4spatial
.
bounds_to_polygon
(
ax
)],
crs
=
ax_
crs
)
)
.
to_crs
(
crs
)
data
=
u4gpkg
.
load_gpkg_data_region_ogr
(
data
=
u4gpkg
.
load_gpkg_data_region_ogr
(
region
,
gpkg_path
,
table
,
clip
=
False
region
,
gpkg_path
,
table
,
clip
=
False
)
)
...
...
This diff is collapsed.
Click to expand it.
u4py/scripts/examples/algorithms/contouring.py
0 → 100644
+
166
−
0
View file @
07d7a45f
"""
This script shows how the contouring of the difference plans with the OSM data
works.
"""
import
logging
import
os
from
pathlib
import
Path
import
geopandas
as
gp
import
matplotlib.pyplot
as
plt
import
numpy
as
np
import
u4py.analysis.spatial
as
u4spatial
import
u4py.io.gpkg
as
u4gpkg
import
u4py.io.sql
as
u4sql
import
u4py.plotting.axes
as
u4ax
import
u4py.plotting.formatting
as
u4pltfmt
import
u4py.utils.config
as
u4config
u4config
.
start_logger
()
def
main
():
base_path
=
Path
(
r
"
~\Documents\ArcGIS\EndberichtWorkflowPlots
"
).
expanduser
()
output_path
=
Path
(
r
"
~\HESSENBOX-DA\Umwelt_4\Bericht_2024\images
"
).
expanduser
()
fig
,
axes
=
plt
.
subplots
(
nrows
=
2
,
ncols
=
3
,
figsize
=
(
12
,
8
),
sharex
=
True
,
sharey
=
True
)
# Original difference plan and boundary of plot
logging
.
info
(
"
Plotting Differenzenplan
"
)
axes
[
0
][
0
].
set_title
(
"
Differenzenplan
"
)
orig_folder
=
os
.
path
.
join
(
base_path
,
"
original_tiffs
"
)
orig_tiffs
=
[
os
.
path
.
join
(
orig_folder
,
f
)
for
f
in
os
.
listdir
(
orig_folder
)
if
f
.
endswith
(
"
.tif
"
)
]
bounds
=
[]
for
tile
in
orig_tiffs
:
bds
,
crs
=
u4ax
.
add_tile
(
tile
,
ax
=
axes
[
0
][
0
],
vm
=
2
,
cmap
=
"
RdBu
"
)
bounds
.
append
(
bds
)
xmin
=
np
.
min
([
bds
.
left
for
bds
in
bounds
])
xmax
=
np
.
max
([
bds
.
right
for
bds
in
bounds
])
ymin
=
np
.
min
([
bds
.
bottom
for
bds
in
bounds
])
ymax
=
np
.
max
([
bds
.
top
for
bds
in
bounds
])
axes
[
0
][
0
].
set_xlim
(
xmin
,
xmax
)
axes
[
0
][
0
].
set_ylim
(
ymin
,
ymax
)
# region_gdf = gp.GeoDataFrame(
# geometry=[u4spatial.bounds_to_polygon((xmin, ymin, xmax, ymax))],
# crs=crs,
# )
# Get and plot buffered shapes
logging
.
info
(
"
Plotting Filter Masken
"
)
axes
[
0
][
1
].
set_title
(
"
Filter Masken
"
)
shp_cfg
=
u4config
.
get_shape_config
()
shape_cache_folder
=
os
.
path
.
join
(
base_path
,
"
shape_cache
"
)
os
.
makedirs
(
shape_cache_folder
,
exist_ok
=
True
)
for
tile
in
orig_tiffs
:
fname
=
os
.
path
.
splitext
(
os
.
path
.
split
(
tile
)[
-
1
])[
0
]
shppath
=
os
.
path
.
join
(
shape_cache_folder
,
fname
+
"
.shp
"
)
if
os
.
path
.
exists
(
shppath
):
bfshp
=
gp
.
read_file
(
shppath
)
else
:
bfshp
=
u4gpkg
.
load_and_buffer_gpkg
(
os
.
path
.
join
(
base_path
,
"
all_shapes.gpkg
"
),
tile
,
shp_cfg
=
shp_cfg
,
)
bfshp
.
to_file
(
shppath
)
bfshp
.
plot
(
ax
=
axes
[
0
][
1
],
color
=
"
k
"
)
# Plot Clipped tiffs
logging
.
info
(
"
Plotting Clipped Tiffs
"
)
axes
[
0
][
2
].
set_title
(
"
Geschnittener Differenzenplan
"
)
clip_folder
=
os
.
path
.
join
(
base_path
,
"
clipped_tiffs
"
)
clip_tiffs
=
[
os
.
path
.
join
(
clip_folder
,
f
)
for
f
in
os
.
listdir
(
clip_folder
)
if
f
.
endswith
(
"
.tif
"
)
]
for
tile
in
clip_tiffs
:
u4ax
.
add_tile
(
tile
,
ax
=
axes
[
0
][
2
],
vm
=
2
,
cmap
=
"
RdBu
"
)
# Contours
logging
.
info
(
"
Plotting Contours
"
)
axes
[
1
][
0
].
set_title
(
"
Konturierung
"
)
u4ax
.
add_gpkg_data_in_axis
(
os
.
path
.
join
(
base_path
,
"
contours.gpkg
"
),
table
=
"
contours
"
,
ax
=
axes
[
1
][
0
],
ax_crs
=
crs
,
column
=
"
color_levels
"
,
fc
=
"
None
"
,
cmap
=
"
RdBu
"
,
)
# Groups
logging
.
info
(
"
Plotting Groups
"
)
axes
[
1
][
1
].
set_title
(
"
Gruppierung
"
)
u4ax
.
add_gpkg_data_in_axis
(
os
.
path
.
join
(
base_path
,
"
Classified_Shapes.gpkg
"
),
table
=
"
Classified_Shapes
"
,
ax
=
axes
[
1
][
1
],
ax_crs
=
crs
,
column
=
"
group
"
,
fc
=
"
None
"
,
cmap
=
"
tab10
"
,
)
# Klassifikation
logging
.
info
(
"
Plotting Classification
"
)
axes
[
1
][
2
].
set_title
(
"
Klassifikation
"
)
gpkg_crs
=
u4sql
.
get_crs
(
os
.
path
.
join
(
base_path
,
"
Filtered_Classified_Shapes_onlyLarge.gpkg
"
),
"
Filtered_Classified_Shapes_2410
"
,
)[
0
]
region
=
gp
.
GeoDataFrame
(
geometry
=
[
u4spatial
.
bounds_to_polygon
(
axes
[
1
][
2
])],
crs
=
crs
).
to_crs
(
gpkg_crs
)
data
=
u4gpkg
.
load_gpkg_data_region_ogr
(
region
,
os
.
path
.
join
(
base_path
,
"
Filtered_Classified_Shapes_onlyLarge.gpkg
"
),
"
Filtered_Classified_Shapes_2410
"
,
clip
=
False
,
)
data
.
plot
(
ax
=
axes
[
1
][
2
],
column
=
"
manual_class_1
"
,
fc
=
"
None
"
,
ec
=
"
C1
"
)
data
.
apply
(
lambda
x
:
axes
[
1
][
2
].
annotate
(
text
=
f
"
{
x
[
'
manual_class_1
'
]
}
\n
{
x
[
'
manual_class_2
'
]
}
\n
{
x
[
'
manual_class_3
'
]
}
"
,
xy
=
x
.
geometry
.
centroid
.
coords
[
0
],
xytext
=
(
1
,
1
),
textcoords
=
"
offset fontsize
"
,
ha
=
"
center
"
,
va
=
"
center
"
,
),
axis
=
1
,
)
# Format and save
logging
.
info
(
"
Formatting and Saving
"
)
u4ax
.
add_basemap
(
ax
=
axes
[
0
][
1
],
crs
=
crs
)
u4ax
.
add_basemap
(
ax
=
axes
[
1
][
0
],
crs
=
crs
)
u4ax
.
add_basemap
(
ax
=
axes
[
1
][
1
],
crs
=
crs
)
u4ax
.
add_basemap
(
ax
=
axes
[
1
][
2
],
crs
=
crs
)
fig
.
tight_layout
()
axes
[
0
][
0
].
yaxis
.
set_major_formatter
(
u4pltfmt
.
coordinate_formatter
)
axes
[
1
][
0
].
yaxis
.
set_major_formatter
(
u4pltfmt
.
coordinate_formatter
)
axes
[
1
][
0
].
xaxis
.
set_major_formatter
(
u4pltfmt
.
coordinate_formatter
)
axes
[
1
][
1
].
xaxis
.
set_major_formatter
(
u4pltfmt
.
coordinate_formatter
)
axes
[
1
][
2
].
xaxis
.
set_major_formatter
(
u4pltfmt
.
coordinate_formatter
)
fig
.
savefig
(
os
.
path
.
join
(
output_path
,
"
ContourWorkflow.png
"
))
fig
.
savefig
(
os
.
path
.
join
(
output_path
,
"
ContourWorkflow.pdf
"
))
if
__name__
==
"
__main__
"
:
main
()
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment