Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Mayer
CircularGreenSimCity
Commits
a1dacd31
Commit
a1dacd31
authored
Jul 08, 2024
by
Ehlers
Browse files
Upload New File
parent
52bf38a9
Changes
1
Show whitespace changes
Inline
Side-by-side
gml_extrusion/building_extension.ipynb
0 → 100644
View file @
a1dacd31
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# ---------------------------------------------------------------------\n",
"# File Name: building_extension.py\n",
"# Purpose: CityGML building objects are randomly choosen and extended in given height \n",
"# Author: Nico Ehlers\n",
"# Created: 2024-07-08\n",
"# ---------------------------------------------------------------------"
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import os\n",
"import ipywidgets as widgets\n",
"from IPython.display import display\n",
"from choose_extrusion_buildings import choose_building\n",
"from build_up_geonmetries import bldg_extrusion\n",
"from gml_parsing import little_parser"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {},
"outputs": [],
"source": [
"# Create input widgets\n",
"residential_code_input = widgets.Text(description='Residential Code:', value='31001_1000')# '31001_1010' Asberg)\n",
"bldg_extension_input = widgets.IntSlider(description='Building Extension:', min=0, max=5, step=1, value=2)\n",
"extrusion_percentage_input = widgets.FloatSlider(description='Extrusion Percentage:', min=0.0, max=1.0, step=0.1, value=1.0)\n",
"floor_height_input = widgets.FloatText(description='Floor Height:', value=3.5)\n",
"gml_path_input = widgets.Text(description='GML Path:', value=os.getcwd()+'\\GML_files\\\\')\n",
"gml_file_input = widgets.Text(description='GML File:', value='Grombuehl_LoD2_mini.gml')#Grafenbühl.gml"
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {},
"outputs": [],
"source": [
"# Create button widget\n",
"run_button = widgets.Button(description='Run Code')\n",
"\n",
"# Create output widget\n",
"output = widgets.Output()"
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {},
"outputs": [],
"source": [
"gml_path =os.getcwd()+'\\GML_files\\\\'\n",
"gml_file = 'Grombuehl_LoD2_mini.gml'\n",
"\n",
"save_name = gml_file.split('.')[0]+'_'\n",
"gml_info = little_parser(gml_path+gml_file)\n",
"gml_par = gml_info.little_parser()"
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {},
"outputs": [],
"source": [
"# Define function to run when button is clicked\n",
"def run_code(button):\n",
" with output:\n",
" # Get user inputs\n",
" residential_code = residential_code_input.value\n",
" bldg_extension = bldg_extension_input.value\n",
" extrusion_percentage = extrusion_percentage_input.value\n",
" floor_height = floor_height_input.value\n",
" gml_path = gml_path_input.value\n",
" gml_file = gml_file_input.value\n",
" \n",
" file_path = gml_path + gml_file\n",
" # Run choose_building and bldg_extrusion classes\n",
" #----------------------------------------------------------------------------\n",
" ### GML PARSING\n",
" #----------------------------------------------------------------------------\n",
" save_name = gml_file.split('.')[0]+'_'\n",
" gml_info = little_parser(file_path)\n",
" gml_par = gml_info.little_parser()\n",
" #----------------------------------------------------------------------------\n",
" ### choose buildings for extrusion\n",
" #----------------------------------------------------------------------------\n",
" # TODO: at the moment all construction massive\n",
" gml_par['construction_type'] = 'massive'\n",
" extr = choose_building(gml_par, bldg_extension, residential_code, extrusion_percentage)\n",
" gml_par = extr.choose_building()\n",
" # filter buildings with residential code\n",
" gml_par = gml_par[gml_par['function'] == residential_code].reset_index(drop=True)\n",
" #----------------------------------------------------------------------------\n",
" ### GML extrusion\n",
" #----------------------------------------------------------------------------\n",
" # Example usage\n",
" output_file_path = gml_path + gml_file.replace('.gml', '_extruded.gml')\n",
"\n",
" extrude_gml = bldg_extrusion(gml_par, file_path, output_file_path, floor_height, residential_code)\n",
" extrude_gml.bldg_extrusion()\n",
" \n",
" # Print confirmation message\n",
" print('Code executed successfully!')"
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "f3b8a4b0a13049b8b3d4f2b6a5341b37",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Text(value='31001_1000', description='Residential Code:')"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "0bf67b5105144554930a549da784f462",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"IntSlider(value=2, description='Building Extension:', max=5)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "46100a95792546249024ad1f86e93d84",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"FloatSlider(value=1.0, description='Extrusion Percentage:', max=1.0)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "5abedb2d0f41428fb9b8b12431e279b6",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"FloatText(value=3.5, description='Floor Height:')"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "5a5c0fa620444bc9b86e9ffa100fb6a0",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Text(value='c:\\\\Users\\\\ge29duf\\\\Documents\\\\02_Forschung\\\\P62\\\\Tool_ne\\\\gml_changes\\\\GML_files\\\\', description=…"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "6e25579ba32a4aadb06b4ef9e9895553",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Text(value='Grombuehl_LoD2_mini.gml', description='GML File:')"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "306f5b8b537b4d288d29f571ea25bf67",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Button(description='Run Code', style=ButtonStyle())"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "b77571c755904f1083458c6490b8d738",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Output()"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Attach function to button click event\n",
"run_button.on_click(run_code)\n",
"\n",
"# Display the widgets\n",
"display(residential_code_input, bldg_extension_input, extrusion_percentage_input, floor_height_input, gml_path_input, gml_file_input, run_button, output)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "base",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.13"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
%% Cell type:markdown id: tags:
# ---------------------------------------------------------------------
# File Name: building_extension.py
# Purpose: CityGML building objects are randomly choosen and extended in given height
# Author: Nico Ehlers
# Created: 2024-07-08
# ---------------------------------------------------------------------
%% Cell type:code id: tags:
```
python
import
pandas
as
pd
import
os
import
ipywidgets
as
widgets
from
IPython.display
import
display
from
choose_extrusion_buildings
import
choose_building
from
build_up_geonmetries
import
bldg_extrusion
from
gml_parsing
import
little_parser
```
%% Cell type:code id: tags:
```
python
# Create input widgets
residential_code_input
=
widgets
.
Text
(
description
=
'Residential Code:'
,
value
=
'31001_1000'
)
# '31001_1010' Asberg)
bldg_extension_input
=
widgets
.
IntSlider
(
description
=
'Building Extension:'
,
min
=
0
,
max
=
5
,
step
=
1
,
value
=
2
)
extrusion_percentage_input
=
widgets
.
FloatSlider
(
description
=
'Extrusion Percentage:'
,
min
=
0.0
,
max
=
1.0
,
step
=
0.1
,
value
=
1.0
)
floor_height_input
=
widgets
.
FloatText
(
description
=
'Floor Height:'
,
value
=
3.5
)
gml_path_input
=
widgets
.
Text
(
description
=
'GML Path:'
,
value
=
os
.
getcwd
()
+
'\GML_files
\\
'
)
gml_file_input
=
widgets
.
Text
(
description
=
'GML File:'
,
value
=
'Grombuehl_LoD2_mini.gml'
)
#Grafenbühl.gml
```
%% Cell type:code id: tags:
```
python
# Create button widget
run_button
=
widgets
.
Button
(
description
=
'Run Code'
)
# Create output widget
output
=
widgets
.
Output
()
```
%% Cell type:code id: tags:
```
python
gml_path
=
os
.
getcwd
()
+
'\GML_files
\\
'
gml_file
=
'Grombuehl_LoD2_mini.gml'
save_name
=
gml_file
.
split
(
'.'
)[
0
]
+
'_'
gml_info
=
little_parser
(
gml_path
+
gml_file
)
gml_par
=
gml_info
.
little_parser
()
```
%% Cell type:code id: tags:
```
python
# Define function to run when button is clicked
def
run_code
(
button
):
with
output
:
# Get user inputs
residential_code
=
residential_code_input
.
value
bldg_extension
=
bldg_extension_input
.
value
extrusion_percentage
=
extrusion_percentage_input
.
value
floor_height
=
floor_height_input
.
value
gml_path
=
gml_path_input
.
value
gml_file
=
gml_file_input
.
value
file_path
=
gml_path
+
gml_file
# Run choose_building and bldg_extrusion classes
#----------------------------------------------------------------------------
### GML PARSING
#----------------------------------------------------------------------------
save_name
=
gml_file
.
split
(
'.'
)[
0
]
+
'_'
gml_info
=
little_parser
(
file_path
)
gml_par
=
gml_info
.
little_parser
()
#----------------------------------------------------------------------------
### choose buildings for extrusion
#----------------------------------------------------------------------------
# TODO: at the moment all construction massive
gml_par
[
'construction_type'
]
=
'massive'
extr
=
choose_building
(
gml_par
,
bldg_extension
,
residential_code
,
extrusion_percentage
)
gml_par
=
extr
.
choose_building
()
# filter buildings with residential code
gml_par
=
gml_par
[
gml_par
[
'function'
]
==
residential_code
].
reset_index
(
drop
=
True
)
#----------------------------------------------------------------------------
### GML extrusion
#----------------------------------------------------------------------------
# Example usage
output_file_path
=
gml_path
+
gml_file
.
replace
(
'.gml'
,
'_extruded.gml'
)
extrude_gml
=
bldg_extrusion
(
gml_par
,
file_path
,
output_file_path
,
floor_height
,
residential_code
)
extrude_gml
.
bldg_extrusion
()
# Print confirmation message
print
(
'Code executed successfully!'
)
```
%% Cell type:code id: tags:
```
python
# Attach function to button click event
run_button
.
on_click
(
run_code
)
# Display the widgets
display
(
residential_code_input
,
bldg_extension_input
,
extrusion_percentage_input
,
floor_height_input
,
gml_path_input
,
gml_file_input
,
run_button
,
output
)
```
%% Output
Write
Preview
Supports
Markdown
0%
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!
Cancel
Please
register
or
sign in
to comment