diff --git a/arho-feature-template.code-workspace b/arho-feature-template.code-workspace index 550bf75..8a65baf 100644 --- a/arho-feature-template.code-workspace +++ b/arho-feature-template.code-workspace @@ -29,6 +29,9 @@ "yaml.schemas": { "./arho_feature_template/resources/template_libraries/schema/template_library.schema.json": [ "**/template_libraries/*.yaml" + ], + "./arho_feature_template/resources/libraries/feature_templates/schema/lisatiedonlaji.schema.json": [ + "**/libraries/additional_information.yaml" ] } }, @@ -55,7 +58,7 @@ "pathMappings": [ { "localRoot": "${workspaceFolder}/arho_feature_template", - "remoteRoot": "${env:APPDATA}/QGIS/QGIS3/profiles/default/python/plugins/arho_feature_template" + "remoteRoot": "${env:APPDATA}/QGIS/QGIS3/profiles/arho-dev/python/plugins/arho_feature_template" } ] }, diff --git a/arho_feature_template/core/models.py b/arho_feature_template/core/models.py index 416fb40..21fc449 100644 --- a/arho_feature_template/core/models.py +++ b/arho_feature_template/core/models.py @@ -1,16 +1,16 @@ from __future__ import annotations +import enum import logging import os from dataclasses import dataclass, field -from enum import Enum from pathlib import Path from typing import TYPE_CHECKING import yaml from arho_feature_template.exceptions import ConfigSyntaxError -from arho_feature_template.project.layers.code_layers import UndergroundTypeLayer +from arho_feature_template.project.layers.code_layers import AdditionalInformationTypeLayer, UndergroundTypeLayer from arho_feature_template.qgis_plugin_tools.tools.resources import resources_path from arho_feature_template.utils.misc_utils import LANGUAGE, get_layer_by_name, iface @@ -23,14 +23,25 @@ logger = logging.getLogger(__name__) DEFAULT_PLAN_REGULATIONS_CONFIG_PATH = Path(os.path.join(resources_path(), "libraries", "kaavamaaraykset.yaml")) - - -class ValueType(Enum): - DECIMAL = "desimaali" - POSITIVE_DECIMAL = "positiivinen desimaali" - POSITIVE_INTEGER = "positiivinen kokonaisluku" - POSITIVE_INTEGER_RANGE = "positiivinen kokonaisluku arvoväli" - VERSIONED_TEXT = "kieliversioitu teksti" +ADDITIONAL_INFORMATION_CONFIG_PATH = Path(os.path.join(resources_path(), "libraries", "additional_information.yaml")) + + +class AttributeValueDataType(str, enum.Enum): + LOCALIZED_TEXT = "LocalizedText" + TEXT = "Text" + NUMERIC = "Numeric" + NUMERIC_RANGE = "NumericRange" + POSITIVE_NUMERIC = "PositiveNumeric" + POSITIVE_NUMERIC_RANGE = "PositiveNumericRange" + DECIMAL = "Decimal" + DECIMAL_RANGE = "DecimalRange" + POSITIVE_DECIMAL = "PositiveDecimal" + POSITIVE_DECIMAL_RANGE = "PositiveDecimalRange" + CODE = "Code" + IDENTIFIER = "Identifier" + SPOT_ELEVATION = "SpotElevation" + TIME_PERIOD = "TimePeriod" + TIME_PERIOD_DATE_ONLY = "TimePeriodDateOnly" class TemplateSyntaxError(Exception): @@ -198,8 +209,10 @@ def initialize( data = regulation_data.get(regulation_config.regulation_code) if data: regulation_config.category_only = data.get("category_only", False) - regulation_config.value_type = ValueType(data["value_type"]) if "value_type" in data else None - regulation_config.unit = data["unit"] if "unit" in data else None + regulation_config.default_value = AttributeValue( + value_data_type=(AttributeValueDataType(data["value_type"]) if "value_type" in data else None), + unit=data["unit"] if "unit" in data else None, + ) # Top-level, add to list if not regulation_config.parent_id: @@ -242,8 +255,7 @@ class RegulationConfig: # Data from config file category_only: bool = False - value_type: ValueType | None = None - unit: str | None = None + default_value: AttributeValue | None = None # NOTE: Perhaps this ("model_from_feature") should be method of PlanTypeLayer class? @classmethod @@ -256,8 +268,8 @@ def from_feature(cls, feature: QgsFeature) -> RegulationConfig: return cls( id=feature["id"], regulation_code=feature["value"], - name=feature["name"][LANGUAGE], - description=feature["description"][LANGUAGE] if feature["description"] else "", + name=feature["name"].get(LANGUAGE) if feature["name"] else None, + description=feature["description"].get(LANGUAGE) if feature["description"] else None, status=feature["status"], level=feature["level"], parent_id=feature["parent_id"], @@ -270,18 +282,152 @@ def add_to_dictionary(self, dictionary: dict[str, RegulationConfig]): regulation.add_to_dictionary(dictionary) +@dataclass +class AdditionalInformationConfig: + # From layer + id: str + additional_information_type: str + name: str + description: str + status: str + level: int + parent_id: str | None + + children: list[str] = field(default_factory=list) + + # From config file + default_value: AttributeValue | None = None + + +@dataclass +class AdditionalInformationConfigLibrary: + version: str + configs: dict[str, AdditionalInformationConfig] = field(default_factory=dict) + top_level_codes: list[str] = field(default_factory=list) + + _id_to_configs: dict[str, AdditionalInformationConfig] = field(default_factory=dict) + _instance: AdditionalInformationConfigLibrary | None = None + + @classmethod + def get_instance(cls) -> AdditionalInformationConfigLibrary: + """Get the singleton instance, if initialized.""" + if cls._instance is None: + cls._instance = cls.initialize(ADDITIONAL_INFORMATION_CONFIG_PATH) + return cls._instance + + @classmethod + def initialize(cls, config_fp: Path = ADDITIONAL_INFORMATION_CONFIG_PATH) -> AdditionalInformationConfigLibrary: + with config_fp.open(encoding="utf-8") as f: + data = yaml.safe_load(f) + if data.get("version") != 1: + msg = "Version must be 1" + raise ConfigSyntaxError(msg) + config_file_configs = { + ai_config_data["code"]: ai_config_data for ai_config_data in data["additional_information"] + } + + code_to_configs: dict[str, AdditionalInformationConfig] = {} + id_to_cofigs: dict[str, AdditionalInformationConfig] = {} + for feature in AdditionalInformationTypeLayer.get_features(): + ai_code = feature["value"] + congig_file_config = config_file_configs.get(ai_code) + + default_value = ( + AttributeValue( + value_data_type=AttributeValueDataType(congig_file_config["data_type"]), + unit=congig_file_config.get("unit"), + ) + if congig_file_config is not None + else None + ) + + ai_config = AdditionalInformationConfig( + id=feature["id"], + additional_information_type=ai_code, + name=feature["name"].get(LANGUAGE) if feature["name"] else None, + description=feature["description"].get(LANGUAGE) if feature["description"] else None, + status=feature["status"], + level=feature["level"], + parent_id=feature["parent_id"], + default_value=default_value, + ) + code_to_configs[ai_code] = ai_config + id_to_cofigs[feature["id"]] = ai_config + + top_level_codes = [] + for ai_config in code_to_configs.values(): + if ai_config.parent_id: + id_to_cofigs[ai_config.parent_id].children.append(ai_config.additional_information_type) + else: + top_level_codes.append(ai_config.additional_information_type) + + return cls( + version=data["version"], + configs=code_to_configs, + top_level_codes=top_level_codes, + _id_to_configs=id_to_cofigs, + ) + + @classmethod + def get_config_by_code(cls, code: str) -> AdditionalInformationConfig: + """Get a regulation by it's regulation code. + + Raises a KeyError if code not exists. + """ + return cls.get_instance().configs[code] + + @classmethod + def get_config_by_id(cls, id_: str) -> AdditionalInformationConfig: + """Get a regulation by it's regulation code. + + Raises a KeyError if code not exists. + """ + + return cls.get_instance()._id_to_configs[id_] # noqa: SLF001 + + +@dataclass +class AttributeValue: + value_data_type: AttributeValueDataType | None = None + + numeric_value: int | float | None = None + numeric_range_min: int | float | None = None + numeric_range_max: int | float | None = None + + unit: str | None = None + + text_value: str | None = None + text_syntax: str | None = None + + code_list: str | None = None + code_value: str | None = None + code_title: str | None = None + + height_reference_point: str | None = None + + +@dataclass +class AdditionalInformation: + config: AdditionalInformationConfig # includes code and unit among other needed data for saving feature + + id_: str | None = None + plan_regulation_id: str | None = None + type_additional_information_id: str | None = None + value: AttributeValue | None = None + + @dataclass class Regulation: config: RegulationConfig # includes regulation_code and unit among other needed data for saving feature - value: str | float | int | tuple[int, int] | None = None - additional_information: dict[str, str | float | int | None] | None = None + value: AttributeValue | None = None + additional_information: list[AdditionalInformation] = field(default_factory=list) regulation_number: int | None = None files: list[str] = field(default_factory=list) theme: str | None = None topic_tag: str | None = None verbal_regulation_type_id: str | None = None - regulation_group_id_: int | None = None - id_: int | None = None + regulation_group_id: str | None = None + id_: str | None = None @dataclass @@ -289,8 +435,8 @@ class Proposition: value: str theme_id: str | None = None proposition_number: int | None = None - regulation_group_id_: int | None = None - id_: int | None = None + regulation_group_id: str | None = None + id_: str | None = None @dataclass @@ -302,7 +448,33 @@ class RegulationGroup: group_number: int | None = None regulations: list[Regulation] = field(default_factory=list) propositions: list[Proposition] = field(default_factory=list) - id_: int | None = None + id_: str | None = None + + @staticmethod + def _additional_information_model_from_config(info_data: dict) -> AdditionalInformation: + ai_config = AdditionalInformationConfigLibrary.get_config_by_code(info_data["type"]) + return AdditionalInformation( + config=ai_config, + value=AttributeValue( + value_data_type=info_data.get( + "value_data_type", + ai_config.default_value.value_data_type if ai_config.default_value is not None else None, + ), + numeric_value=info_data.get("numeric_value"), + numeric_range_min=info_data.get("numeric_range_min"), + numeric_range_max=info_data.get("numeric_range_max"), + unit=info_data.get( + "unit", + ai_config.default_value.unit if ai_config.default_value is not None else None, + ), + text_value=info_data.get("text_value"), + text_syntax=info_data.get("text_syntax"), + code_list=info_data.get("code_list"), + code_value=info_data.get("code_value"), + code_title=info_data.get("code_title"), + height_reference_point=info_data.get("height_reference_point"), + ), + ) @classmethod def from_config_data(cls, data: dict) -> RegulationGroup: @@ -311,19 +483,19 @@ def from_config_data(cls, data: dict) -> RegulationGroup: reg_code = reg_data["regulation_code"] config = RegulationLibrary.get_regulation_by_code(reg_code) if config: - info_data = reg_data.get("additional_information") regulations.append( Regulation( config=config, value=reg_data.get("value"), - additional_information={info["type"]: info.get("value") for info in info_data} - if info_data - else None, + additional_information=[ + cls._additional_information_model_from_config(info) + for info in reg_data.get("additional_information", []) + ], regulation_number=reg_data.get("regulation_number"), files=reg_data.get("files") if reg_data.get("files") else [], theme=reg_data.get("theme"), topic_tag=reg_data.get("topic_tag"), - regulation_group_id_=None, + regulation_group_id=None, id_=None, ) ) @@ -351,7 +523,7 @@ class PlanFeature: description: str | None = None regulation_groups: list[RegulationGroup] = field(default_factory=list) plan_id: int | None = None - id_: int | None = None + id_: str | None = None @classmethod def from_config_data(cls, data: dict) -> PlanFeature: @@ -373,7 +545,7 @@ class Plan: general_regulations: list[RegulationGroup] = field(default_factory=list) documents: list[Document] = field(default_factory=list) geom: QgsGeometry | None = None - id_: int | None = None + id_: str | None = None @dataclass @@ -393,4 +565,4 @@ class Document: confirmation_date: datetime | None = None arrival_date: datetime | None = None plan_id: int | None = None - id_: int | None = None + id_: str | None = None diff --git a/arho_feature_template/core/plan_manager.py b/arho_feature_template/core/plan_manager.py index ccac6e4..4a90e2d 100644 --- a/arho_feature_template/core/plan_manager.py +++ b/arho_feature_template/core/plan_manager.py @@ -10,6 +10,7 @@ from arho_feature_template.core.lambda_service import LambdaService from arho_feature_template.core.models import ( + AdditionalInformation, Document, FeatureTemplateLibrary, Plan, @@ -29,6 +30,7 @@ from arho_feature_template.gui.tools.inspect_plan_features_tool import InspectPlanFeatures from arho_feature_template.project.layers.code_layers import PlanRegulationGroupTypeLayer, code_layers from arho_feature_template.project.layers.plan_layers import ( + AdditionalInformationLayer, DocumentLayer, LandUseAreaLayer, LandUsePointLayer, @@ -461,7 +463,7 @@ def regulation_group_library_from_active_plan() -> RegulationGroupLibrary: ) -def _save_feature(feature: QgsFeature, layer: QgsVectorLayer, id_: int | None, edit_text: str = ""): +def _save_feature(feature: QgsFeature, layer: QgsVectorLayer, id_: str | None, edit_text: str = ""): if not layer.isEditable(): layer.startEditing() layer.beginEditCommand(edit_text) @@ -529,8 +531,8 @@ def save_plan(plan: Plan) -> QgsFeature: return feature -def save_plan_feature(plan_feature: PlanFeature, plan_id: str | None = None) -> QgsFeature: - layer_name = plan_feature.layer_name +def save_plan_feature(plan_model: PlanFeature, plan_id: str | None = None) -> QgsFeature: + layer_name = plan_model.layer_name if not layer_name: msg = "Cannot save plan feature without a target layer" raise ValueError(msg) @@ -539,21 +541,21 @@ def save_plan_feature(plan_feature: PlanFeature, plan_id: str | None = None) -> msg = f"Could not find plan feature layer class for layer name {layer_name}" raise ValueError(msg) - feature = layer_class.feature_from_model(plan_feature, plan_id) + plan_feature = layer_class.feature_from_model(plan_model, plan_id) layer = layer_class.get_from_project() - editing = plan_feature.id_ is not None + editing = plan_model.id_ is not None _save_feature( - feature=feature, + feature=plan_feature, layer=layer, - id_=plan_feature.id_, + id_=plan_model.id_, edit_text="Kaavakohteen muokkaus" if editing else "Kaavakohteen lisäys", ) # Check for deleted regulation groups if editing: for association in RegulationGroupAssociationLayer.get_dangling_associations( - plan_feature.regulation_groups, feature["id"], layer_name + plan_model.regulation_groups, plan_feature["id"], layer_name ): _delete_feature( association, @@ -562,11 +564,11 @@ def save_plan_feature(plan_feature: PlanFeature, plan_id: str | None = None) -> ) # Save regulation groups - for group in plan_feature.regulation_groups: + for group in plan_model.regulation_groups: regulation_group_feature = save_regulation_group(group) - save_regulation_group_association(regulation_group_feature["id"], layer_name, feature["id"]) + save_regulation_group_association(regulation_group_feature["id"], layer_name, plan_feature["id"]) - return feature + return plan_feature def save_regulation_group(regulation_group: RegulationGroup, plan_id: str | None = None) -> QgsFeature: @@ -599,13 +601,13 @@ def save_regulation_group(regulation_group: RegulationGroup, plan_id: str | None # Save regulations if regulation_group.regulations: for regulation in regulation_group.regulations: - regulation.regulation_group_id_ = feature["id"] # Updating regulation group ID + regulation.regulation_group_id = feature["id"] # Updating regulation group ID save_regulation(regulation) # Save propositions if regulation_group.propositions: for proposition in regulation_group.propositions: - proposition.regulation_group_id_ = feature["id"] # Updating regulation group ID + proposition.regulation_group_id = feature["id"] # Updating regulation group ID save_proposition(proposition) return feature @@ -649,23 +651,50 @@ def save_regulation_group_association(regulation_group_id: str, layer_name: str, def save_regulation(regulation: Regulation) -> QgsFeature: - feature = PlanRegulationLayer.feature_from_model(regulation) + regulation_feature = PlanRegulationLayer.feature_from_model(regulation) layer = PlanRegulationLayer.get_from_project() _save_feature( - feature=feature, + feature=regulation_feature, layer=layer, id_=regulation.id_, edit_text="Kaavamääräyksen lisäys" if regulation.id_ is None else "Kaavamääräyksen muokkaus", ) + for additional_information in regulation.additional_information: + additional_information.plan_regulation_id = regulation_feature["id"] + save_additional_information(additional_information) + + return regulation_feature + + +def save_additional_information(additional_information: AdditionalInformation) -> QgsFeature: + feature = AdditionalInformationLayer.feature_from_model(additional_information) + layer = AdditionalInformationLayer.get_from_project() + + _save_feature( + feature=feature, + layer=layer, + id_=additional_information.id_, + edit_text="Lisätiedon lisäys" if additional_information.id_ is None else "Lisätiedon muokkaus", + ) return feature +def delete_additional_information(additional_information: AdditionalInformation): + feature = AdditionalInformationLayer.feature_from_model(additional_information) + layer = AdditionalInformationLayer.get_from_project() + + _delete_feature(feature, layer, "Lisätiedon poisto") + + def delete_regulation(regulation: Regulation): feature = PlanRegulationLayer.feature_from_model(regulation) layer = PlanRegulationLayer.get_from_project() + for ai in regulation.additional_information: + delete_additional_information(ai) + _delete_feature(feature, layer, "Kaavamääräyksen poisto") diff --git a/arho_feature_template/gui/components/additional_information_widget.py b/arho_feature_template/gui/components/additional_information_widget.py new file mode 100644 index 0000000..fdd5590 --- /dev/null +++ b/arho_feature_template/gui/components/additional_information_widget.py @@ -0,0 +1,107 @@ +from __future__ import annotations + +from importlib import resources +from typing import TYPE_CHECKING + +from qgis.core import QgsApplication +from qgis.PyQt import uic +from qgis.PyQt.QtCore import Qt, pyqtSignal +from qgis.PyQt.QtWidgets import ( + QFormLayout, + QLabel, + QLineEdit, + QToolButton, + QWidget, +) + +from arho_feature_template.core.models import AdditionalInformation +from arho_feature_template.gui.components.value_input_widgets import ( + ValueWidgetManager, +) + +if TYPE_CHECKING: + from qgis.PyQt.QtWidgets import QPushButton + +ui_path = resources.files(__package__) / "additional_information_widget.ui" +FormClass, _ = uic.loadUiType(ui_path) + + +class AdditionalInformationWidget(QWidget, FormClass): # type: ignore + """A widget representation of a plan regulation.""" + + # TYPES + type_of_additional_information_name: QLineEdit + form_layout: QFormLayout + del_btn: QPushButton + expand_hide_btn: QToolButton + + delete_signal = pyqtSignal(QWidget) + + def __init__(self, additional_information: AdditionalInformation, parent=None): + super().__init__(parent) + self.setupUi(self) + + # INIT + self.config = additional_information.config + self.additional_information = additional_information + + self.value_widget_manager = ( + ValueWidgetManager( + self.additional_information.value, + self.config.default_value, + ) + if self.config and self.config.default_value + else None + ) + + # List of widgets for hiding / showing + self.widgets: list[tuple[QLabel, QWidget]] = [] + + self.expanded = True + + self.type_of_additional_information_name.setText(self.config.name) + self.type_of_additional_information_name.setReadOnly(True) + self.del_btn.setIcon(QgsApplication.getThemeIcon("mActionDeleteSelected.svg")) + self.del_btn.setDisabled(True) # TODO: Implement delete + self.del_btn.clicked.connect(lambda: self.delete_signal.emit(self)) + self.expand_hide_btn.clicked.connect(self._on_expand_hide_btn_clicked) + + if self.value_widget_manager is not None: + widget = ( + self.value_widget_manager.value_widget + if self.value_widget_manager.value_widget is not None + else QLabel("Syötekenttää tälle tyypille ei ole vielä toteutettu") + ) + self._add_widget(QLabel("Arvo"), widget) + + def _add_widget(self, label: QLabel, widget: QWidget): + self.form_layout.addRow(label, widget) + self.widgets.append((label, widget)) + if not self.expanded: + self._on_expand_hide_btn_clicked() + + def _on_expand_hide_btn_clicked(self): + if self.expanded: + for label, value_widget in self.widgets: + # self.form_layout.removeWidget(label) + label.hide() + # self.form_layout.removeWidget(value_widget) + value_widget.hide() + self.expand_hide_btn.setArrowType(Qt.ArrowType.DownArrow) + self.expanded = False + else: + for label, value_widget in self.widgets: + # self.form_layout.addRow(label, value_widget) + label.show() + value_widget.show() + self.expand_hide_btn.setArrowType(Qt.ArrowType.UpArrow) + self.expanded = True + + def into_model(self) -> AdditionalInformation: + return AdditionalInformation( + config=self.config, + id_=self.additional_information.id_, + plan_regulation_id=self.additional_information.plan_regulation_id, + type_additional_information_id=self.additional_information.type_additional_information_id, + value=self.value_widget_manager.into_model() if self.value_widget_manager else None, + ) diff --git a/arho_feature_template/gui/components/additional_information_widget.ui b/arho_feature_template/gui/components/additional_information_widget.ui new file mode 100644 index 0000000..2e1d78f --- /dev/null +++ b/arho_feature_template/gui/components/additional_information_widget.ui @@ -0,0 +1,129 @@ + + + Form + + + + 0 + 0 + 475 + 101 + + + + + 0 + 0 + + + + Form + + + + + + + 6 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + 9 + 75 + true + + + + Lisätieto + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + Poista kaavamääräys + + + + + + + + + + + + + + Laji + + + + + + + + + + + + Laajenna + + + false + + + Qt::UpArrow + + + + + + + + + + + + diff --git a/arho_feature_template/gui/components/code_combobox.py b/arho_feature_template/gui/components/code_combobox.py index 5368aad..b4a8e83 100644 --- a/arho_feature_template/gui/components/code_combobox.py +++ b/arho_feature_template/gui/components/code_combobox.py @@ -102,9 +102,16 @@ def populate_from_code_layer(self, layer_type: type[AbstractCodeLayer]) -> None: self.tree_widget.expandAll() - def value(self) -> str: - item = self.tree_widget.selectedItems()[0] - return item.data(0, Qt.UserRole) + def value(self) -> str | None: + """Return the value of the current item. + + Currently might be None, if the current item is not selectable.""" + + selected = self.tree_widget.selectedItems() # TODO: Find a way to get the current item even if not selectable + if selected: # current item might not be selectable + item = selected[0] + return item.data(0, Qt.UserRole) + return None def _find_item_recursive(self, item: QTreeWidgetItem, value: str) -> QTreeWidgetItem: """Recursively try to find item with given value and return the item if found.""" diff --git a/arho_feature_template/gui/components/plan_proposition_widget.py b/arho_feature_template/gui/components/plan_proposition_widget.py index 986df25..3ccd582 100644 --- a/arho_feature_template/gui/components/plan_proposition_widget.py +++ b/arho_feature_template/gui/components/plan_proposition_widget.py @@ -10,7 +10,7 @@ from arho_feature_template.core.models import Proposition from arho_feature_template.gui.components.code_combobox import CodeComboBox -from arho_feature_template.gui.components.plan_regulation_input_widgets import IntegerInputWidget +from arho_feature_template.gui.components.value_input_widgets import IntegerInputWidget from arho_feature_template.project.layers.code_layers import PlanThemeLayer if TYPE_CHECKING: diff --git a/arho_feature_template/gui/components/plan_regulation_input_widgets.py b/arho_feature_template/gui/components/plan_regulation_input_widgets.py deleted file mode 100644 index 1d65659..0000000 --- a/arho_feature_template/gui/components/plan_regulation_input_widgets.py +++ /dev/null @@ -1,115 +0,0 @@ -from __future__ import annotations - -from qgis.gui import QgsDoubleSpinBox, QgsSpinBox -from qgis.PyQt.QtWidgets import QHBoxLayout, QLineEdit, QSizePolicy, QTextEdit, QWidget - - -def initialize_numeric_input_widget( - widget: QgsSpinBox | QgsDoubleSpinBox, - default_value: float | None, - unit: str | None, - positive: bool, # noqa: FBT001 -): - if unit: - widget.setSuffix(f" {unit}") - - if positive: - widget.setMinimum(0) - else: - widget.setMinimum(-99999) - - widget.setMaximum(99999) - - if default_value: - widget.setValue(default_value) - - widget.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) - - -def initialize_text_input_widget( - widget: QTextEdit | QLineEdit, - default_value: str | None, - editable: bool, # noqa: FBT001 -): - if default_value: - widget.setText(str(default_value)) - - if not editable: - widget.setReadOnly(True) - - -class DecimalInputWidget(QgsDoubleSpinBox): - def __init__( - self, - default_value: float | None = None, - unit: str | None = None, - positive: bool = False, # noqa: FBT001, FBT002 - ): - super().__init__() - self.unit = unit - initialize_numeric_input_widget(self, default_value, unit, positive) - - def get_value(self) -> float: - return self.value() - - -class IntegerInputWidget(QgsSpinBox): - def __init__( - self, - default_value: int | None = None, - unit: str | None = None, - positive: bool = False, # noqa: FBT001, FBT002 - ): - super().__init__() - self.unit = unit - initialize_numeric_input_widget(self, default_value, unit, positive) - - def get_value(self) -> int: - return self.value() - - -class IntegerRangeInputWidget(QWidget): - def __init__( - self, - default_value: tuple[int, int] | list[int] | None = None, - unit: str | None = None, - positive: bool = False, # noqa: FBT001, FBT002 - ): - super().__init__() - if isinstance(default_value, list): - default_value = (default_value[0], default_value[1]) - self.min_widget = IntegerInputWidget(default_value[0] if default_value else None, unit, positive) - self.max_widget = IntegerInputWidget(default_value[1] if default_value else None, unit, positive) - layout = QHBoxLayout() - layout.addWidget(self.min_widget) - layout.addWidget(self.max_widget) - self.setLayout(layout) - - def get_value(self) -> tuple[int, int]: - return (self.min_widget.get_value(), self.max_widget.get_value()) - - -class SinglelineTextInputWidget(QLineEdit): - def __init__( - self, - default_value: str | None = None, - editable: bool = False, # noqa: FBT001, FBT002 - ): - super().__init__() - initialize_text_input_widget(self, default_value, editable) - - def get_value(self) -> str | None: - return self.text() if self.text() else None - - -class MultilineTextInputWidget(QTextEdit): - def __init__( - self, - default_value: str | None = None, - editable: bool = True, # noqa: FBT001, FBT002 - ): - super().__init__() - initialize_text_input_widget(self, default_value, editable) - - def get_value(self) -> str | None: - return self.toPlainText() if self.toPlainText() else None diff --git a/arho_feature_template/gui/components/plan_regulation_widget.py b/arho_feature_template/gui/components/plan_regulation_widget.py index 866ee73..34eab7a 100644 --- a/arho_feature_template/gui/components/plan_regulation_widget.py +++ b/arho_feature_template/gui/components/plan_regulation_widget.py @@ -7,26 +7,22 @@ from qgis.gui import QgsFileWidget from qgis.PyQt import uic from qgis.PyQt.QtCore import Qt, pyqtSignal -from qgis.PyQt.QtWidgets import ( - QFormLayout, - QLabel, - QLineEdit, - QMenu, - QToolButton, - QWidget, -) +from qgis.PyQt.QtWidgets import QFormLayout, QFrame, QLabel, QLineEdit, QMenu, QToolButton, QVBoxLayout, QWidget -from arho_feature_template.core.models import Regulation, ValueType +from arho_feature_template.core.models import ( + AdditionalInformation, + AdditionalInformationConfigLibrary, + Regulation, +) +from arho_feature_template.gui.components.additional_information_widget import AdditionalInformationWidget from arho_feature_template.gui.components.code_combobox import HierarchicalCodeComboBox -from arho_feature_template.gui.components.plan_regulation_input_widgets import ( - DecimalInputWidget, +from arho_feature_template.gui.components.value_input_widgets import ( IntegerInputWidget, - IntegerRangeInputWidget, - MultilineTextInputWidget, SinglelineTextInputWidget, + ValueWidgetManager, ) -from arho_feature_template.project.layers.code_layers import AdditionalInformationTypeLayer, VerbalRegulationType -from arho_feature_template.utils.misc_utils import LANGUAGE, get_layer_by_name, iface +from arho_feature_template.project.layers.code_layers import VerbalRegulationType +from arho_feature_template.utils.misc_utils import LANGUAGE, get_layer_by_name if TYPE_CHECKING: from qgis.PyQt.QtWidgets import QPushButton @@ -38,39 +34,44 @@ class RegulationWidget(QWidget, FormClass): # type: ignore """A widget representation of a plan regulation.""" + # TYPES + plan_regulation_name: QLineEdit + form_layout: QFormLayout + add_additional_information_btn: QPushButton + add_field_btn: QPushButton + del_btn: QPushButton + expand_hide_btn: QToolButton + additional_information_frame: QFrame + additional_information_layout: QVBoxLayout + delete_signal = pyqtSignal(QWidget) def __init__(self, regulation: Regulation, parent=None): super().__init__(parent) self.setupUi(self) - # TYPES - self.plan_regulation_name: QLineEdit - self.form_layout: QFormLayout - self.add_additional_information_btn: QPushButton - self.add_field_btn: QPushButton - self.del_btn: QPushButton - self.expand_hide_btn: QToolButton - self.code_label: QLabel - self.code: QLineEdit - # INIT self.config = regulation.config self.regulation = regulation + self.value_widget_manager = ( + ValueWidgetManager(self.regulation.value, self.config.default_value) if self.config.default_value else None + ) + # List of widgets for hiding / showing self.widgets: list[tuple[QLabel, QWidget]] = [] # For accessing correct widgets when data is sent self.value_widget: QWidget | None = None self.regulation_number_widget: IntegerInputWidget | None = None - self.additional_information_widgets: dict[str, QWidget | None] = {} # Key = information type, value = widget + self.additional_information_widgets: list[AdditionalInformationWidget] = [] self.file_widgets: list[QgsFileWidget] = [] self.theme_widget: SinglelineTextInputWidget | None = None self.topic_tag_widget: SinglelineTextInputWidget | None = None self.type_of_verbal_regulation_widget: HierarchicalCodeComboBox | None = None self.expanded = True + self.additional_information_frame.hide() self.plan_regulation_name.setText(self.config.name) self.plan_regulation_name.setReadOnly(True) self.del_btn.setIcon(QgsApplication.getThemeIcon("mActionDeleteSelected.svg")) @@ -82,73 +83,41 @@ def __init__(self, regulation: Regulation, parent=None): def _init_widgets(self): # Value input - value_type = self.config.value_type - if value_type: - self._add_value_input(value_type, self.config.unit, self.regulation.value) + if self.config.default_value: + self._add_widget(QLabel("Arvo"), self.value_widget_manager.value_widget) + if self.config.regulation_code == "sanallinenMaarays": self.type_of_verbal_regulation_widget = HierarchicalCodeComboBox() self.type_of_verbal_regulation_widget.populate_from_code_layer(VerbalRegulationType) - self._add_widgets(QLabel("Sanallisen määräyksen laji"), self.type_of_verbal_regulation_widget) + self._add_widget(QLabel("Sanallisen määräyksen laji"), self.type_of_verbal_regulation_widget) if self.regulation.verbal_regulation_type_id is not None: self.type_of_verbal_regulation_widget.set_value(self.regulation.verbal_regulation_type_id) # Additional information - if self.regulation.additional_information: - for info_type, info_value in self.regulation.additional_information.items(): - self._add_additional_info(info_type, info_value) - - def _add_value_input( - self, value_type: ValueType, unit: str | None, default_value: str | float | list[int] | None = None - ): - base_error_msg = f"Invalid type for default value {type(default_value)}." - if value_type in [ValueType.DECIMAL, ValueType.POSITIVE_DECIMAL]: - if not isinstance(default_value, float) and default_value is not None: - raise ValueError(base_error_msg) - self._add_decimal_input(value_type, unit, default_value) - elif value_type == ValueType.POSITIVE_INTEGER: - if not isinstance(default_value, (int, float)) and default_value is not None: - raise ValueError(base_error_msg) - self._add_integer_input(value_type, unit, default_value) - elif value_type == ValueType.POSITIVE_INTEGER_RANGE: - if not isinstance(default_value, list) and default_value is not None: - raise ValueError(base_error_msg) - if isinstance(default_value, list) and len(default_value) != 2: # noqa: PLR2004 - error_msg = f"Invalid number of values in default value {type(default_value)}." - raise ValueError(error_msg) - self._add_integer_range_input(value_type, unit, default_value) - elif value_type == ValueType.VERSIONED_TEXT: - if not isinstance(default_value, str) and default_value is not None: - raise ValueError(base_error_msg) - self._add_versioned_text_input(default_value) - else: - msg = f"Invalid input value type for plan regulation: {value_type}" - raise ValueError(msg) + for info in self.regulation.additional_information: + self._add_additional_info(info) - def _init_additional_information_btn(self): + def _init_additional_information_btn(self) -> None: informations_dict: dict[str, QMenu] = {} - add_later: dict[str, list[str]] = {} - - def _add_action(informations_dict: dict[str, QMenu], parent_id: str, info_type: str): - action = informations_dict[parent_id].addAction(info_type) - action.triggered.connect(lambda _: self._add_additional_info(info_type)) - - # Iterate code layer and build menus - for feature in get_layer_by_name("Lisätiedonlaji").getFeatures(): - if feature["level"] == 1: - menu = QMenu(feature["name"][LANGUAGE], self) - informations_dict[feature["id"]] = menu - else: - parent_id = feature["parent_id"] - info_type = feature["name"][LANGUAGE] - if parent_id in informations_dict: - _add_action(informations_dict, parent_id, info_type) - else: - if parent_id not in add_later: - add_later[parent_id] = [] - add_later[parent_id].append(info_type) - for parent_id, additional_information_types in add_later.items(): - for info_type in additional_information_types: - _add_action(informations_dict, parent_id, info_type) + + def _add_action(parent_id: str, info_type: str, display_name: str): + action = informations_dict[parent_id].addAction(display_name) + action.triggered.connect( + lambda _: self._add_additional_info( + AdditionalInformation(config=AdditionalInformationConfigLibrary.get_config_by_code(info_type)) + ) + ) + + ai_config_library = AdditionalInformationConfigLibrary.get_instance() + for top_level_code in ai_config_library.top_level_codes: + top_level_config = ai_config_library.get_config_by_code(top_level_code) + + menu = QMenu(top_level_config.name, self) + informations_dict[top_level_code] = menu + + for child_code in top_level_config.children: + config = ai_config_library.get_config_by_code(child_code) + _add_action(top_level_code, config.additional_information_type, config.name) # Create main menu for btn and add submenus additional_information_type_menu = QMenu(self) @@ -176,95 +145,61 @@ def _init_other_information_btn(self): def _on_expand_hide_btn_clicked(self): if self.expanded: for label, value_widget in self.widgets: - self.form_layout.removeWidget(label) + # self.form_layout.removeWidget(label) label.hide() - self.form_layout.removeWidget(value_widget) + # self.form_layout.removeWidget(value_widget) value_widget.hide() + self.additional_information_frame.hide() self.expand_hide_btn.setArrowType(Qt.ArrowType.DownArrow) self.expanded = False else: for label, value_widget in self.widgets: - self.form_layout.addRow(label, value_widget) + # self.form_layout.addRow(label, value_widget) label.show() value_widget.show() + self.additional_information_frame.show() self.expand_hide_btn.setArrowType(Qt.ArrowType.UpArrow) self.expanded = True - def _add_widgets(self, label: QLabel, widget: QWidget): + def _add_widget(self, label: QLabel, widget: QWidget): self.form_layout.addRow(label, widget) self.widgets.append((label, widget)) if not self.expanded: self._on_expand_hide_btn_clicked() - def _add_decimal_input(self, value_type: ValueType, unit: str | None, default_value: float | None = None): - positive = value_type == ValueType.POSITIVE_DECIMAL - self.value_widget = DecimalInputWidget(default_value, unit, positive) - self._add_widgets(QLabel("Arvo"), self.value_widget) - - def _add_integer_input(self, value_type: ValueType, unit: str | None, default_value: float | None = None): - positive = value_type == ValueType.POSITIVE_INTEGER - default_value = int(default_value) if default_value else None - self.value_widget = IntegerInputWidget(default_value=default_value, unit=unit, positive=positive) - self._add_widgets(QLabel("Arvo"), self.value_widget) - - def _add_integer_range_input( - self, value_type: ValueType, unit: str | None, default_value: tuple[int, int] | list[int] | None = None - ): - # NOTE: There is no ValueType.INTEGER_RANGE currently, so is always positive - positive = value_type == ValueType.POSITIVE_INTEGER_RANGE - self.value_widget = IntegerRangeInputWidget(default_value, unit, positive) - self._add_widgets(QLabel("Arvo"), self.value_widget) - - def _add_versioned_text_input(self, default_value: str | None = None): - self.value_widget = MultilineTextInputWidget(default_value=default_value, editable=True) - self._add_widgets(QLabel("Arvo"), self.value_widget) - - def _add_additional_info(self, info_type: str, default_value: str | float | None = None): - # TODO: Extend and make sure all additional information types are properly handled - - # NOTE: Now info type is the name / readable version when this is triggered by user - # Might need to refactor this later.. - name = AdditionalInformationTypeLayer.get_additional_information_name(info_type) - self._add_widgets(QLabel("Lisätiedonlaji"), SinglelineTextInputWidget(name, False)) - - # NOTE: Does not support multiple instances of same additional information kind, - # for example if multiple Käyttötarkoituskohdistus are added, they overwrite each other - value_widget = None - if name == "Käyttötarkoituskohdistus": - if isinstance(default_value, float): - iface.messageBar().pushWarning("Warning: ", f"Unexpected value type for {name}: float") - else: - value_widget = SinglelineTextInputWidget(default_value, True) - self._add_widgets(QLabel(name), value_widget) - - self.additional_information_widgets[info_type] = value_widget + def _add_additional_info(self, additional_information: AdditionalInformation): + widget = AdditionalInformationWidget(additional_information, self) + widget.delete_signal.connect(lambda widget: self.additional_information_widgets.remove(widget)) #### + + self.additional_information_frame.show() + + self.additional_information_widgets.append(widget) + self.additional_information_layout.addWidget(widget) def _add_regulation_number(self): if not self.regulation_number_widget: self.regulation_number_widget = IntegerInputWidget(None, None, True) - self._add_widgets(QLabel("Määräysnumero"), self.regulation_number_widget) + self._add_widget(QLabel("Määräysnumero"), self.regulation_number_widget) def _add_file(self): widget = QgsFileWidget() - self._add_widgets(QLabel("Liiteasiakirja"), widget) + self._add_widget(QLabel("Liiteasiakirja"), widget) self.file_widgets.append(widget) def _add_topic_tag(self): self.topic_tag_widget = SinglelineTextInputWidget(None, True) - self._add_widgets(QLabel("Aihetunniste"), self.topic_tag_widget) + self._add_widget(QLabel("Aihetunniste"), self.topic_tag_widget) def _add_theme(self, theme_name: str): self.theme_widget = SinglelineTextInputWidget(theme_name, False) - self._add_widgets(QLabel("Kaavoitusteema"), self.theme_widget) + self._add_widget(QLabel("Kaavoitusteema"), self.theme_widget) def into_model(self) -> Regulation: return Regulation( config=self.config, - value=self.value_widget.get_value() if self.value_widget else None, + value=self.value_widget_manager.into_model() if self.value_widget_manager else None, regulation_number=self.regulation_number_widget.get_value() if self.regulation_number_widget else None, - additional_information={ - name: widget.get_value() for name, widget in self.additional_information_widgets.items() if widget - }, + additional_information=[ai_widget.into_model() for ai_widget in self.additional_information_widgets], files=[file.filePath() for file in self.file_widgets], theme=self.theme_widget.get_value() if self.theme_widget else None, topic_tag=self.topic_tag_widget.get_value() if self.topic_tag_widget else None, diff --git a/arho_feature_template/gui/components/plan_regulation_widget.ui b/arho_feature_template/gui/components/plan_regulation_widget.ui index 8bcc1ba..ec97b39 100644 --- a/arho_feature_template/gui/components/plan_regulation_widget.ui +++ b/arho_feature_template/gui/components/plan_regulation_widget.ui @@ -6,8 +6,8 @@ 0 0 - 489 - 131 + 487 + 195 @@ -127,6 +127,57 @@ + + + + QFrame::NoFrame + + + QFrame::Raised + + + + 6 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 9 + 75 + true + + + + Lisätiedot: + + + + + + + 6 + + + 9 + + + + + + diff --git a/arho_feature_template/gui/components/value_input_widgets.py b/arho_feature_template/gui/components/value_input_widgets.py new file mode 100644 index 0000000..673b8e8 --- /dev/null +++ b/arho_feature_template/gui/components/value_input_widgets.py @@ -0,0 +1,238 @@ +from __future__ import annotations + +import logging + +from qgis.gui import QgsDoubleSpinBox, QgsSpinBox +from qgis.PyQt.QtWidgets import QFormLayout, QHBoxLayout, QLabel, QLineEdit, QSizePolicy, QTextEdit, QWidget + +from arho_feature_template.core.models import AttributeValue, AttributeValueDataType + +logger = logging.getLogger(__name__) + + +def initialize_numeric_input_widget( + widget: QgsSpinBox | QgsDoubleSpinBox, + default_value: float | None, + unit: str | None, + positive: bool, # noqa: FBT001 +): + if unit: + widget.setSuffix(f" {unit}") + + if positive: + widget.setMinimum(0) + else: + widget.setMinimum(-99999) + + widget.setMaximum(99999) + + if default_value: + widget.setValue(default_value) + + widget.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + + +def initialize_text_input_widget( + widget: QTextEdit | QLineEdit, + default_value: str | None, + editable: bool, # noqa: FBT001 +): + if default_value: + widget.setText(str(default_value)) + + if not editable: + widget.setReadOnly(True) + + +class DecimalInputWidget(QgsDoubleSpinBox): + def __init__( + self, + default_value: float | None = None, + unit: str | None = None, + positive: bool = False, # noqa: FBT001, FBT002 + ): + super().__init__() + self.unit = unit + initialize_numeric_input_widget(self, default_value, unit, positive) + + def get_value(self) -> float: + return self.value() + + +class IntegerInputWidget(QgsSpinBox): + def __init__( + self, + default_value: int | None = None, + unit: str | None = None, + positive: bool = False, # noqa: FBT001, FBT002 + ): + super().__init__() + self.unit = unit + initialize_numeric_input_widget(self, default_value, unit, positive) + + def get_value(self) -> int: + return self.value() + + +class IntegerRangeInputWidget(QWidget): + def __init__( + self, + range_min: int | None = None, + range_max: int | None = None, + unit: str | None = None, + positive: bool = False, # noqa: FBT001, FBT002 + ): + super().__init__() + + self.min_widget = IntegerInputWidget(range_min, unit, positive) + self.max_widget = IntegerInputWidget(range_max, unit, positive) + layout = QHBoxLayout() + layout.addWidget(self.min_widget) + layout.addWidget(QLabel("-")) + layout.addWidget(self.max_widget) + self.setLayout(layout) + + def get_value(self) -> tuple[int, int]: + return (self.min_widget.get_value(), self.max_widget.get_value()) + + +class SinglelineTextInputWidget(QLineEdit): + def __init__( + self, + default_value: str | None = None, + editable: bool = False, # noqa: FBT001, FBT002 + ): + super().__init__() + initialize_text_input_widget(self, default_value, editable) + + def get_value(self) -> str | None: + return self.text() if self.text() else None + + +class MultilineTextInputWidget(QTextEdit): + def __init__( + self, + default_value: str | None = None, + editable: bool = True, # noqa: FBT001, FBT002 + ): + super().__init__() + initialize_text_input_widget(self, default_value, editable) + + def get_value(self) -> str | None: + text = self.toPlainText() + return text if text else None + + +class CodeInputWidget(QWidget): + def __init__(self, title: str | None = None, code_list: str | None = None, code_value: str | None = None): + super().__init__() + + self.title_widget = SinglelineTextInputWidget(default_value=title, editable=True) + self.code_list_widget = SinglelineTextInputWidget(default_value=code_list, editable=True) + self.code_value_widget = SinglelineTextInputWidget(default_value=code_value, editable=True) + + layout = QFormLayout() + layout.addRow("Otsikko", self.title_widget) + layout.addRow("Koodisto", self.code_list_widget) + layout.addRow("Koodiarvo", self.code_value_widget) + self.setLayout(layout) + + def get_value(self) -> tuple[str | None, str | None, str | None]: + title = self.title_widget.get_value() + code_list = self.code_list_widget.get_value() + code_value = self.code_value_widget.get_value() + return (title if title else None, code_list if code_list else None, code_value if code_value else None) + + +class ValueWidgetManager: + def __init__(self, value: AttributeValue | None, default_value: AttributeValue): + if value is None: + value = AttributeValue() + self.value_data_type = default_value.value_data_type + self.unit = default_value.unit + self.default_value = default_value + + self.value_widget: QWidget | None = None + + if self.value_data_type in (AttributeValueDataType.DECIMAL, AttributeValueDataType.POSITIVE_DECIMAL): + positive = self.value_data_type == AttributeValueDataType.POSITIVE_DECIMAL + self.value_widget = DecimalInputWidget( + value.numeric_value or default_value.numeric_value, self.unit, positive + ) + + elif self.value_data_type in (AttributeValueDataType.NUMERIC, AttributeValueDataType.POSITIVE_NUMERIC): + positive = self.value_data_type == AttributeValueDataType.POSITIVE_NUMERIC + numeric_value = value.numeric_value or default_value.numeric_value + self.value_widget = IntegerInputWidget( + default_value=int(numeric_value) if numeric_value is not None else None, + unit=self.unit, + positive=positive, + ) + + elif self.value_data_type in ( + AttributeValueDataType.NUMERIC_RANGE, + AttributeValueDataType.POSITIVE_NUMERIC_RANGE, + ): + positive = self.value_data_type == AttributeValueDataType.POSITIVE_NUMERIC_RANGE + + value_min = value.numeric_range_min or default_value.numeric_range_min + value_max = value.numeric_range_max or default_value.numeric_range_max + self.value_widget = IntegerRangeInputWidget( + int(value_min) if value_min is not None else None, + int(value_max) if value_max is not None else None, + self.unit, + positive, + ) + + elif self.value_data_type == AttributeValueDataType.LOCALIZED_TEXT: + self.value_widget = MultilineTextInputWidget(default_value=default_value.text_value, editable=True) + + elif self.value_data_type == AttributeValueDataType.CODE: + self.value_widget = CodeInputWidget( + value.code_title or default_value.code_title, + value.code_list or default_value.code_list, + value.code_value or default_value.code_value, + ) + + else: + logger.warning("No value input implemented for data type: %s", default_value.value_data_type) + + def into_model(self) -> AttributeValue: + if self.value_data_type in ( + AttributeValueDataType.DECIMAL, + AttributeValueDataType.POSITIVE_DECIMAL, + AttributeValueDataType.NUMERIC, + AttributeValueDataType.POSITIVE_NUMERIC, + ): + return AttributeValue( + value_data_type=self.value_data_type, + numeric_value=self.value_widget.get_value() if self.value_widget else None, + unit=self.unit, + ) + + if self.value_data_type in ( + AttributeValueDataType.NUMERIC_RANGE, + AttributeValueDataType.POSITIVE_NUMERIC_RANGE, + ): + range_min, range_max = self.value_widget.get_value() if self.value_widget else (None, None) + return AttributeValue( + value_data_type=self.value_data_type, + numeric_range_min=range_min, + numeric_range_max=range_max, + unit=self.unit, + ) + + if self.value_data_type == AttributeValueDataType.LOCALIZED_TEXT: + return AttributeValue( + value_data_type=self.value_data_type, + text_value=self.value_widget.toPlainText() if self.value_widget else None, + text_syntax=None, + ) + + if self.value_data_type == AttributeValueDataType.CODE: + title, code_list, code_value = self.value_widget.get_value() if self.value_widget else (None, None, None) + return AttributeValue( + value_data_type=self.value_data_type, code_title=title, code_list=code_list, code_value=code_value + ) + + return AttributeValue() diff --git a/arho_feature_template/project/layers/__init__.py b/arho_feature_template/project/layers/__init__.py index 0f75997..8de94ec 100644 --- a/arho_feature_template/project/layers/__init__.py +++ b/arho_feature_template/project/layers/__init__.py @@ -8,7 +8,7 @@ from arho_feature_template.utils.project_utils import get_vector_layer_from_project if TYPE_CHECKING: - from qgis.core import QgsFeature, QgsFeatureIterator + from qgis.core import QgsFeature class AbstractLayer(ABC): @@ -31,7 +31,7 @@ def get_from_project(cls) -> QgsVectorLayer: return get_vector_layer_from_project(cls.name) @classmethod - def get_features(cls) -> QgsFeatureIterator: + def get_features(cls): return cls.get_from_project().getFeatures() @classmethod diff --git a/arho_feature_template/project/layers/code_layers.py b/arho_feature_template/project/layers/code_layers.py index cd6bce8..611555d 100644 --- a/arho_feature_template/project/layers/code_layers.py +++ b/arho_feature_template/project/layers/code_layers.py @@ -48,7 +48,7 @@ class AdditionalInformationTypeLayer(AbstractCodeLayer): @classmethod def get_additional_information_name(cls, info_type: str) -> str | None: attribute_value = cls.get_attribute_value_by_another_attribute_value("name", "value", info_type) - return cast(str, attribute_value[LANGUAGE]) if attribute_value else None + return cast(str, attribute_value.get(LANGUAGE)) if attribute_value else None class PlanRegulationGroupTypeLayer(AbstractCodeLayer): diff --git a/arho_feature_template/project/layers/plan_layers.py b/arho_feature_template/project/layers/plan_layers.py index 3657541..67b2345 100644 --- a/arho_feature_template/project/layers/plan_layers.py +++ b/arho_feature_template/project/layers/plan_layers.py @@ -2,15 +2,17 @@ import logging from abc import abstractmethod -from numbers import Number from string import Template from textwrap import dedent from typing import Any, ClassVar, Generator -from qgis.core import NULL, QgsExpressionContextUtils, QgsFeature, QgsProject, QgsVectorLayerUtils +from qgis.core import QgsExpressionContextUtils, QgsFeature, QgsProject, QgsVectorLayerUtils from qgis.utils import iface from arho_feature_template.core.models import ( + AdditionalInformation, + AdditionalInformationConfigLibrary, + AttributeValue, Document, Plan, PlanFeature, @@ -22,7 +24,7 @@ from arho_feature_template.exceptions import FeatureNotFoundError, LayerEditableError, LayerNotFoundError from arho_feature_template.project.layers import AbstractLayer from arho_feature_template.project.layers.code_layers import PlanRegulationTypeLayer -from arho_feature_template.utils.misc_utils import LANGUAGE +from arho_feature_template.utils.misc_utils import LANGUAGE, get_active_plan_id logger = logging.getLogger(__name__) @@ -77,8 +79,8 @@ def feature_from_model(cls, model: Plan) -> QgsFeature: feature = cls.initialize_feature_from_model(model) feature.setGeometry(model.geom) - feature["name"] = {LANGUAGE: model.name} - feature["description"] = {LANGUAGE: model.description} + feature["name"] = {LANGUAGE: model.name if model.name else None} + feature["description"] = {LANGUAGE: model.description if model.description else None} feature["permanent_plan_identifier"] = model.permanent_plan_identifier feature["record_number"] = model.record_number feature["producers_plan_identifier"] = model.producers_plan_identifier @@ -97,8 +99,8 @@ def model_from_feature(cls, feature: QgsFeature) -> Plan: ] return Plan( geom=feature.geometry(), - name=feature["name"][LANGUAGE], - description=feature["description"][LANGUAGE], + name=feature["name"].get(LANGUAGE) if feature["name"] else None, + description=feature["description"].get(LANGUAGE) if feature["description"] else None, permanent_plan_identifier=feature["permanent_plan_identifier"], record_number=feature["record_number"], producers_plan_identifier=feature["producers_plan_identifier"], @@ -121,7 +123,7 @@ def model_from_feature(cls, feature: QgsFeature) -> Plan: @classmethod def get_plan_name(cls, plan_id: str) -> str: attribute_value = cls.get_attribute_value_by_another_attribute_value("name", "id", plan_id) - return attribute_value[LANGUAGE] if attribute_value else "Nimetön" + return attribute_value.get(LANGUAGE, "Nimetön") if attribute_value else "Nimetön" class PlanFeatureLayer(AbstractPlanLayer): @@ -133,14 +135,10 @@ def feature_from_model(cls, model: PlanFeature, plan_id: str | None = None) -> Q feature = cls.initialize_feature_from_model(model) feature.setGeometry(model.geom) - feature["name"] = {LANGUAGE: model.name if model.name else ""} + feature["name"] = {LANGUAGE: model.name if model.name else None} feature["type_of_underground_id"] = model.type_of_underground_id - feature["description"] = {LANGUAGE: model.description if model.description else ""} - feature["plan_id"] = ( - plan_id - if plan_id - else QgsExpressionContextUtils.projectScope(QgsProject.instance()).variable("active_plan_id") - ) + feature["description"] = {LANGUAGE: model.description if model.description else None} + feature["plan_id"] = plan_id if plan_id else get_active_plan_id() return feature @@ -154,8 +152,8 @@ def model_from_feature(cls, feature: QgsFeature) -> PlanFeature: geom=feature.geometry(), type_of_underground_id=feature["type_of_underground_id"], layer_name=cls.get_from_project().name(), - name=feature["name"][LANGUAGE], - description=feature["description"][LANGUAGE], + name=feature["name"].get(LANGUAGE) if feature["name"] else None, + description=feature["description"].get(LANGUAGE), regulation_groups=[ RegulationGroupLayer.model_from_feature(feat) for feat in regulation_group_features if feat is not None ], @@ -198,7 +196,7 @@ def feature_from_model(cls, model: RegulationGroup, plan_id: str | None = None) feature = cls.initialize_feature_from_model(model) feature["short_name"] = model.short_name if model.short_name else None - feature["name"] = {LANGUAGE: model.name} + feature["name"] = {LANGUAGE: model.name if model.name else None} feature["type_of_plan_regulation_group_id"] = model.type_code_id feature["plan_id"] = ( plan_id @@ -212,7 +210,7 @@ def feature_from_model(cls, model: RegulationGroup, plan_id: str | None = None) def model_from_feature(cls, feature: QgsFeature) -> RegulationGroup: return RegulationGroup( type_code_id=feature["type_of_plan_regulation_group_id"], - name=feature["name"][LANGUAGE], + name=feature["name"].get(LANGUAGE) if feature["name"] else None, short_name=feature["short_name"], color_code=None, group_number=None, @@ -313,6 +311,38 @@ def get_dangling_associations( # by_feature return [assoc for assoc in associations if assoc["plan_regulation_group_id"] not in updated_group_ids] +def attribute_value_model_from_feature(feature: QgsFeature) -> AttributeValue: + return AttributeValue( + value_data_type=feature["value_data_type"], + numeric_value=feature["numeric_value"], + numeric_range_min=feature["numeric_range_min"], + numeric_range_max=feature["numeric_range_max"], + unit=feature["unit"], + text_value=feature["text_value"].get(LANGUAGE) if feature["text_value"] else None, + text_syntax=feature["text_syntax"], + code_list=feature["code_list"], + code_value=feature["code_value"], + code_title=feature["code_title"].get(LANGUAGE) if feature["code_title"] else None, + height_reference_point=feature["height_reference_point"], + ) + + +def update_feature_from_attribute_value_model(value: AttributeValue | None, feature: QgsFeature): + if value is None: + return + feature["value_data_type"] = value.value_data_type.value if value.value_data_type is not None else None + feature["numeric_value"] = value.numeric_value + feature["numeric_range_min"] = value.numeric_range_min + feature["numeric_range_max"] = value.numeric_range_max + feature["unit"] = value.unit + feature["text_value"] = {LANGUAGE: value.text_value if value.text_value else None} + feature["text_syntax"] = value.text_syntax + feature["code_list"] = value.code_list + feature["code_value"] = value.code_value + feature["code_title"] = {LANGUAGE: value.code_title if value.code_title else None} + feature["height_reference_point"] = value.height_reference_point + + class PlanRegulationLayer(AbstractPlanLayer): name = "Kaavamääräys" filter_template = Template( @@ -332,15 +362,13 @@ class PlanRegulationLayer(AbstractPlanLayer): def feature_from_model(cls, model: Regulation) -> QgsFeature: feature = cls.initialize_feature_from_model(model) - feature["plan_regulation_group_id"] = model.regulation_group_id_ + feature["plan_regulation_group_id"] = model.regulation_group_id feature["type_of_plan_regulation_id"] = model.config.id - feature["unit"] = model.config.unit - feature["text_value"] = {LANGUAGE: model.value if isinstance(model.value, str) else ""} - feature["numeric_value"] = model.value if isinstance(model.value, Number) else NULL - # feature["name"] = {LANGUAGE: model.topic_tag if model.topic_tag else ""} + + feature["subject_identifiers"] = model.topic_tag.split(",") if model.topic_tag else None feature["type_of_verbal_plan_regulation_id"] = model.verbal_regulation_type_id - feature["id"] = model.id_ if model.id_ else feature["id"] - # feature["plan_theme_id"] + + update_feature_from_attribute_value_model(model.value, feature) return feature @@ -356,14 +384,18 @@ def model_from_feature(cls, feature: QgsFeature) -> Regulation: raise ValueError(msg) return Regulation( config=config, - # Assuming only either text_value or numeric_value is defined - value=feature["text_value"][LANGUAGE] if feature["text_value"][LANGUAGE] else feature["numeric_value"], - additional_information=None, + value=attribute_value_model_from_feature(feature), + additional_information=[ + AdditionalInformationLayer.model_from_feature(ai_feat) + for ai_feat in AdditionalInformationLayer.get_features_by_attribute_value( + "plan_regulation_id", feature["id"] + ) + ], regulation_number=None, files=[], theme=None, topic_tag=None, - regulation_group_id_=feature["plan_regulation_group_id"], + regulation_group_id=feature["plan_regulation_group_id"], verbal_regulation_type_id=feature["type_of_verbal_plan_regulation_id"], id_=feature["id"], ) @@ -403,8 +435,8 @@ class PlanPropositionLayer(AbstractPlanLayer): def feature_from_model(cls, model: Proposition) -> QgsFeature: feature = cls.initialize_feature_from_model(model) - feature["text_value"] = {LANGUAGE: model.value} - feature["plan_regulation_group_id"] = model.regulation_group_id_ + feature["text_value"] = {LANGUAGE: model.value if model.value else None} + feature["plan_regulation_group_id"] = model.regulation_group_id feature["ordering"] = model.proposition_number feature["plan_theme_id"] = model.theme_id feature["id"] = model.id_ if model.id_ else feature["id"] @@ -414,8 +446,8 @@ def feature_from_model(cls, model: Proposition) -> QgsFeature: @classmethod def model_from_feature(cls, feature: QgsFeature) -> Proposition: return Proposition( - value=feature["text_value"][LANGUAGE], - regulation_group_id_=feature["plan_regulation_group_id"], + value=feature["text_value"].get(LANGUAGE) if feature["text_value"] else None, + regulation_group_id=feature["plan_regulation_group_id"], proposition_number=feature["ordering"], theme_id=feature["plan_theme_id"], id_=feature["id"], @@ -445,7 +477,7 @@ class DocumentLayer(AbstractPlanLayer): def feature_from_model(cls, model: Document) -> QgsFeature: feature = cls.initialize_feature_from_model(model) - feature["name"] = {LANGUAGE: model.name} + feature["name"] = {LANGUAGE: model.name if model.name else None} feature["url"] = model.url feature["type_of_document_id"] = model.type_of_document_id feature["decision"] = model.decision @@ -464,7 +496,7 @@ def feature_from_model(cls, model: Document) -> QgsFeature: @classmethod def model_from_feature(cls, feature: QgsFeature) -> Document: return Document( - name=feature["name"][LANGUAGE], + name=feature["name"].get(LANGUAGE) if feature["name"] else None, url=feature["url"], type_of_document_id=feature["type_of_document_id"], decision=feature["decision"], @@ -494,6 +526,46 @@ class SourceDataLayer(AbstractPlanLayer): filter_template = Template("plan_id = '$plan_id'") +class AdditionalInformationLayer(AbstractPlanLayer): + name = "Kaavamääräyksen lisätiedot" + filter_template = Template( + dedent( + """\ + EXISTS ( + SELECT 1 + FROM + hame.plan_regulation_group prg + JOIN hame.plan_regulation pr + ON (prg.id = pr.plan_regulation_group_id) + WHERE + hame.additional_information.plan_regulation_id = pr.id + AND prg.plan_id = '$plan_id' + )""" + ) + ) + + @classmethod + def feature_from_model(cls, model: AdditionalInformation) -> QgsFeature: + feature = cls.initialize_feature_from_model(model) + + feature["plan_regulation_id"] = model.plan_regulation_id + feature["type_additional_information_id"] = model.config.id + + update_feature_from_attribute_value_model(model.value, feature) + + return feature + + @classmethod + def model_from_feature(cls, feature: QgsFeature) -> AdditionalInformation: + return AdditionalInformation( + config=AdditionalInformationConfigLibrary.get_config_by_id(feature["type_additional_information_id"]), + id_=feature["id"], + plan_regulation_id=feature["plan_regulation_id"], + type_additional_information_id=feature["type_additional_information_id"], + value=attribute_value_model_from_feature(feature), + ) + + plan_layers = AbstractPlanLayer.__subclasses__() plan_layers.remove(PlanFeatureLayer) diff --git a/arho_feature_template/resources/libraries/additional_information.yaml b/arho_feature_template/resources/libraries/additional_information.yaml new file mode 100644 index 0000000..6c37486 --- /dev/null +++ b/arho_feature_template/resources/libraries/additional_information.yaml @@ -0,0 +1,27 @@ +version: 1 +additional_information: + - code: poisluettavaKayttotarkoitus + data_type: Code + - code: kerroksetJotaMaaraysKoskee + data_type: NumericRange + - code: kayttotarkoituskohdistus + data_type: Code + - code: kayttotarkoituksenOsuusKerrosalastaK-m2 + data_type: PositiveNumeric + unit: k-m2 + - code: kayttotarkoituksenOsuusKerrosalastaPros + data_type: PositiveNumeric + unit: "%" + - code: kayttotarkoituksenOsuusRakennustilavuudestaK-m3 + data_type: PositiveNumeric + unit: m3 + - code: kayttotarkoituksenOsuusRakennustilavuudestaPros + data_type: PositiveNumeric + unit: "%" + - code: kayttotarkoituksenOsuusMaapintaAlasta + data_type: PositiveNumeric + unit: "%" + - code: rakennusluvanPeruste + data_type: Code + - code: autopaikkojenSijoittuminenSallittu + data_type: PositiveNumeric diff --git a/arho_feature_template/resources/libraries/feature_templates/schema/lisatiedonlaji.schema.json b/arho_feature_template/resources/libraries/feature_templates/schema/lisatiedonlaji.schema.json new file mode 100644 index 0000000..c6ca261 --- /dev/null +++ b/arho_feature_template/resources/libraries/feature_templates/schema/lisatiedonlaji.schema.json @@ -0,0 +1,118 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://gispocoding.com/featuretemplate/lisatiedonlaji.schema.json", + "title": "Kaavamääräyksen lisätiedon konfiguraatio", + "type": "object", + "required": [ + "version", + "additional_information" + ], + "additionalProperties": false, + "properties": { + "version": { + "description": "The version of the template library syntax used in the file", + "type": "integer" + }, + "additional_information": { + "description": "The list of configuations of additiona information objects", + "type": "array", + "items": { + "$ref": "#/$defs/additional_information_object" + } + } + }, + "$defs": { + "additional_information_object": { + "type": "object", + "additionalProperties": false, + "properties": { + "code": { + "description": "Kaavamääräyksen lisätiedon laji", + "enum": [ + "tyyppi", + "hairionTorjuntatarve", + "merkittavyys", + "eriTahojenTarpeisiinVaraaminen", + "ymparistomuutoksenLaji", + "rakentamisenOhjaus", + "valiaikainenMaarays", + "vaihtoehtoinen", + "ohjeellinenSijainti", + "ehdottomastiNoudatettava", + "poisluettavaKayttotarkoitus", + "meluntorjuntatarve", + "ymparistoTaiMaisemavaurionKorjaustarve", + "terveyshaitanPoistamistarve", + "kansainvalinen", + "valtakunnallinen", + "maakunnallinen", + "seudullinen", + "alueellinen", + "paikallinen", + "varattuKunnanKayttoon", + "varattuValtionKayttoon", + "varattuYleiseenKayttoon", + "varattuYksityiseenKayttoon", + "varattuAlueenSisaiseenKayttoon", + "kayttotarkoituksenOsuusMaapintaAlasta", + "kerroksetJotaMaaraysKoskee", + "kayttotarkoituskohdistus", + "kayttotarkoituksenOsuusKerrosalastaK-m2", + "kayttotarkoituksenOsuusKerrosalastaPros", + "kayttotarkoituksenOsuusRakennustilavuudestaK-m3", + "kayttotarkoituksenOsuusRakennustilavuudestaPros", + "rakennusluvanPeruste", + "rakentamistapaohjeHuomioitava", + "sitovaTonttijakoLaadittava", + "tontilleAjoSallittu", + "VaarallistenKemikaalienValmistusJaVarastointiSallittu", + "ymparistoAsettaaToiminnanLaadulleErityisiaVaatimuksia", + "melunLahde", + "autopaikkojenSijoittuminenSallittu", + "maanalainenTila", + "kayttotarkoitus", + "yhteystarve", + "paakayttotarkoitus", + "osaAlue", + "olemassaolo", + "olemassaOleva", + "sailytettava", + "uusi", + "olennaisestiMuuttuva", + "kehittaminen", + "eheytettavaTaiTiivistettava", + "reservialue", + "merkittavastiParannettava", + "kehitettava" + ] + }, + "data_type": { + "enum": [ + "LocalizedText", + "Text", + "Numeric", + "NumericRange", + "PositiveNumeric", + "PositiveNumericRange", + "Decimal", + "DecimalRange", + "PositiveDecimal", + "PositiveDecimalRange", + "Code", + "Identifier", + "SpotElevation", + "TimePeriod", + "TimePeriodDateOnly" + ] + }, + "unit": { + "type": "string" + } + }, + "required": [ + "code", + "data_type" + ] + } + } +} diff --git a/arho_feature_template/resources/libraries/kaavamaaraykset.yaml b/arho_feature_template/resources/libraries/kaavamaaraykset.yaml index d5593c5..03d63a1 100644 --- a/arho_feature_template/resources/libraries/kaavamaaraykset.yaml +++ b/arho_feature_template/resources/libraries/kaavamaaraykset.yaml @@ -1,6 +1,5 @@ version: 1 plan_regulations: - # Asumisen alue (valmis) # Taajamatoiminnan alue (valmis) @@ -14,7 +13,7 @@ plan_regulations: category_only: true - regulation_code: vihertehokkuus - value_type: positiivinen desimaali + value_type: PositiveDecimal unit: m2/m2 # Maa- ja metsätalousalue (valmis) @@ -68,121 +67,121 @@ plan_regulations: category_only: true - regulation_code: kadunTaiTienNimi - value_type: kieliversioitu teksti + value_type: LocalizedText - regulation_code: torinTaiKatuaukionNimi - value_type: kieliversioitu teksti + value_type: LocalizedText - regulation_code: puistonTaiMuunYleisenAlueenNimi - value_type: kieliversioitu teksti + value_type: LocalizedText - regulation_code: kaupunginTaiKunnanosanNimi - value_type: kieliversioitu teksti + value_type: LocalizedText # Aluetunnukset (valmis) - regulation_code: aluetunnukset category_only: true - regulation_code: korttelinNumero - value_type: positiivinen kokonaisluku + value_type: PositiveNumeric - regulation_code: tontinTaiRakennuspaikanNumero - value_type: positiivinen kokonaisluku + value_type: PositiveNumeric - regulation_code: kaupunginTaiKunnanosanNumero - value_type: positiivinen kokonaisluku + value_type: PositiveNumeric # Rakentamisen määrä (valmis) - regulation_code: rakentamisenMaara category_only: true - regulation_code: sallittuKerrosala - value_type: positiivinen kokonaisluku + value_type: PositiveNumeric unit: k-m2 - regulation_code: sallittuRakennustilavuus - value_type: positiivinen kokonaisluku + value_type: PositiveNumeric unit: m3 - regulation_code: tehokkuusluku - value_type: positiivinen desimaali + value_type: PositiveDecimal unit: k-m2/m2 - regulation_code: rakentamisenSuhdeAlueenPintaAlaan - value_type: positiivinen kokonaisluku + value_type: PositiveNumeric unit: prosentti - regulation_code: valjyysluku - value_type: positiivinen desimaali + value_type: PositiveDecimal unit: m2/k-m2 - regulation_code: maanpaallinenKerroslukuLuku - value_type: positiivinen kokonaisluku + value_type: PositiveNumeric - regulation_code: maanpaallinenKerroslukuArvovali - value_type: positiivinen kokonaisluku arvoväli + value_type: PositiveNumericRange - regulation_code: maanalainenKerroslukuLuku - value_type: positiivinen kokonaisluku + value_type: PositiveNumeric - regulation_code: maanalainenKerroslukuArvovali - value_type: positiivinen kokonaisluku arvoväli + value_type: PositiveNumericRange - regulation_code: kellarinSallittuOsuusKerrosalasta - value_type: positiivinen kokonaisluku + value_type: PositiveNumeric unit: prosentti - regulation_code: ullakonSallittuOsuusKerrosalasta - value_type: positiivinen kokonaisluku + value_type: PositiveNumeric unit: prosentti - regulation_code: asuntojenMaara - value_type: positiivinen kokonaisluku + value_type: PositiveNumeric - regulation_code: rakennuspaikkojenMaara - value_type: positiivinen kokonaisluku + value_type: PositiveNumeric - regulation_code: tuulivoimaloidenMaara - value_type: positiivinen kokonaisluku + value_type: PositiveNumeric # Korkeusasema (valmis) - regulation_code: korkeusasema category_only: true - regulation_code: maanpinnanKorkeusasema - value_type: desimaali + value_type: Decimal unit: m - regulation_code: vesikatonYlimmanKohdanKorkeusasema - value_type: desimaali + value_type: Decimal unit: m - regulation_code: julkisivupinnanJaVesikatonLeikkauskohdanKorkeusasema - value_type: desimaali + value_type: Decimal unit: m - regulation_code: julkisivunEnimmaiskorkeus - value_type: desimaali + value_type: Decimal unit: m - regulation_code: rakennustenRakenteidenJaLaitteidenYlinKorkeusasema - value_type: desimaali + value_type: Decimal unit: m - regulation_code: alinPainovoimainenViemarointitaso - value_type: desimaali + value_type: Decimal unit: m - regulation_code: rakennustenRakenteidenJaLaitteidenAlinKorkeusasema - value_type: desimaali + value_type: Decimal unit: m - regulation_code: kosteudelleAlttiidenRakenteidenAlinRakentamiskorkeus - value_type: desimaali + value_type: Decimal unit: m - regulation_code: tuulivoimalanEnimmaiskorkeus - value_type: positiivinen kokonaisluku + value_type: PositiveNumeric unit: m # Rakentamisen tapa (valmis) @@ -190,11 +189,11 @@ plan_regulations: category_only: true - regulation_code: kattokaltevuus - value_type: desimaali + value_type: Decimal unit: ° - regulation_code: aaneneristavyys - value_type: positiivinen desimaali + value_type: PositiveDecimal unit: dB # Liikenteen suureet (valmis) @@ -205,25 +204,25 @@ plan_regulations: category_only: true - regulation_code: autopaikkojenMaara - value_type: positiivinen kokonaisluku + value_type: PositiveNumeric - regulation_code: autopaikkojenMaaraAsuntoaKohden - value_type: positiivinen desimaali + value_type: PositiveDecimal - regulation_code: kerrosneliomaaraYhtaAutopaikkaaKohden - value_type: positiivinen kokonaisluku + value_type: PositiveNumeric unit: k-m2 - regulation_code: pyorapaikkojenMaara - value_type: positiivinen kokonaisluku + value_type: PositiveNumeric - regulation_code: pyorapaikkojenMaaraAsuntoaKohden - value_type: positiivinen desimaali + value_type: PositiveDecimal - regulation_code: kerrosneliomaaraYhtaPyorapaikkaaKohden - value_type: positiivinen kokonaisluku + value_type: PositiveNumeric unit: k-m2 # Sanallinen määräys - regulation_code: sanallinenMaarays - value_type: kieliversioitu teksti + value_type: LocalizedText diff --git a/arho_feature_template/resources/libraries/regulation_groups/katja_asemakaava.yaml b/arho_feature_template/resources/libraries/regulation_groups/katja_asemakaava.yaml index 6566e37..5be0e32 100644 --- a/arho_feature_template/resources/libraries/regulation_groups/katja_asemakaava.yaml +++ b/arho_feature_template/resources/libraries/regulation_groups/katja_asemakaava.yaml @@ -1,2082 +1,2075 @@ name: Asemakaavan kaavamääräysryhmät (Katja) version: 1 categories: - - category_code: aluevaraukset name: Aluevaraukset plan_regulation_groups: - - - name: Asuinrakennusten alue - geometry: Alue - short_name: A - plan_regulations: - - regulation_code: asumisenAlue - additional_information: - - type: paakayttotarkoitus - - - name: Asuinkerrostalojen alue - geometry: Alue - short_name: AK - plan_regulations: - - regulation_code: asuinkerrostaloalue - additional_information: - - type: paakayttotarkoitus - - - name: Asuinpientalojen alue - geometry: Alue - short_name: AP - plan_regulations: - - regulation_code: asuinpientaloalue - additional_information: - - type: paakayttotarkoitus - - - name: Rivitalojen ja muiden kytkettyjen asuinrakennusten alue - geometry: Alue - short_name: AR - plan_regulations: - - regulation_code: rivitalojenJaMuidenKytkettyjenAsuinpientalojenAlue - additional_information: - - type: paakayttotarkoitus - - - name: Erillispientalojen alue - geometry: Alue - short_name: AO - plan_regulations: - - regulation_code: erillistenAsuinpientalojenAlue - additional_information: - - type: paakayttotarkoitus - - - name: Asuin-, liike- ja toimistorakennusten alue - geometry: Alue - short_name: AL - plan_regulations: - - regulation_code: asumisenAlue - additional_information: - - type: paakayttotarkoitus - - regulation_code: liikerakennustenAlue - additional_information: - - type: paakayttotarkoitus - - regulation_code: toimistorakennustenAlue - additional_information: - - type: paakayttotarkoitus - - - name: Asumista palveleva yhteiskäyttöinen alue - geometry: Alue - short_name: AH - plan_regulations: - - regulation_code: asumistaPalvelevaYhteiskayttoinenAlue - additional_information: - - type: paakayttotarkoitus - - - name: Maatilojen talouskeskusten alue - geometry: Alue - short_name: AM - plan_regulations: - - regulation_code: maatilanTalouskeskuksenAlue - additional_information: - - type: paakayttotarkoitus - - - name: Keskustatoimintojen alue - geometry: Alue - short_name: C - plan_regulations: - - regulation_code: keskustatoimintojenAlue - additional_information: - - type: paakayttotarkoitus - - - name: Yleisten rakennusten alue - geometry: Alue - short_name: Y - plan_regulations: - - regulation_code: yleistenRakennustenAlue - additional_information: - - type: paakayttotarkoitus - - type: varattuYleiseenKayttoon - - - name: Palvelurakennusten alue - geometry: Alue - short_name: P - plan_regulations: - - regulation_code: palvelujenAlue - additional_information: - - type: paakayttotarkoitus - - # p. 4 - - name: Julkisten palvelurakennusten alue - geometry: Alue - short_name: PY - plan_regulations: - - regulation_code: palvelujenAlue - additional_information: - - type: paakayttotarkoitus - - type: varattuYleiseenKayttoon - - - name: Lähipalvelurakennusten alue - geometry: Alue - short_name: PL - plan_regulations: - - regulation_code: palvelujenAlue - additional_information: - - type: paakayttotarkoitus - - type: paikallinen - - - name: Julkisten lähipalvelurakennusten alue - geometry: Alue - short_name: YL - plan_regulations: - - regulation_code: palvelujenAlue - additional_information: - - type: paakayttotarkoitus - - type: varattuYleiseenKayttoon - - type: paikallinen - - - name: Toimistorakennusten alue - geometry: Alue - short_name: KT - plan_regulations: - - regulation_code: toimistorakennustenAlue - additional_information: - - type: paakayttotarkoitus - - - name: Hallinto- ja virastorakennusten alue - geometry: Alue - short_name: YH - plan_regulations: - - regulation_code: toimistorakennustenAlue - additional_information: - - type: paakayttotarkoitus - - type: varattuYleiseenKayttoon - - - name: Opetusrakennusten alue - geometry: Alue - short_name: YO - plan_regulations: - - regulation_code: opetusrakennustenAlue - additional_information: - - type: paakayttotarkoitus - - type: varattuYleiseenKayttoon - - - name: Terveydenhuolto- ja sosiaalipalvelurakennusten alue - geometry: Alue - short_name: YS - plan_regulations: - - regulation_code: hoitoalanRakennustenAlue - additional_information: - - type: paakayttotarkoitus - - type: varattuYleiseenKayttoon - - - name: Kulttuuritoiminnan rakennusten alue - geometry: Alue - short_name: YY - plan_regulations: - - regulation_code: kulttuurirakennustenAlue - additional_information: - - type: paakayttotarkoitus - - type: varattuYleiseenKayttoon - - - name: Museorakennusten alue - geometry: Alue - short_name: YM - plan_regulations: - - regulation_code: museorakennustenAlue - additional_information: - - type: paakayttotarkoitus - - type: varattuYleiseenKayttoon - - - name: Kirkkojen ja muiden seurakunnallisten rakennusten alue - geometry: Alue - short_name: YK - plan_regulations: - - regulation_code: uskonnollistenYhteisojenRakennustenAlue - additional_information: - - type: paakayttotarkoitus - - type: varattuYleiseenKayttoon - - - name: Urheilutoimintaa palvelevien rakennusten alue - geometry: Alue - short_name: YU - plan_regulations: - - regulation_code: urheiluJaLiikuntaRakennustenAlue - additional_information: - - type: paakayttotarkoitus - - type: varattuYleiseenKayttoon - - - name: Huvi- ja viihderakennusten alue - geometry: Alue - short_name: PV - plan_regulations: - - regulation_code: huviJaViihdeRakennustenAlue - additional_information: - - type: paakayttotarkoitus - - - name: Liike- ja toimistorakennusten alue - geometry: Alue - short_name: K - plan_regulations: - - regulation_code: liikerakennustenAlue - additional_information: - - type: paakayttotarkoitus - - regulation_code: toimistorakennustenAlue - additional_information: - - type: paakayttotarkoitus - - - name: Liikerakennusten alue - geometry: Alue - short_name: KL - plan_regulations: - - regulation_code: liikerakennustenAlue - additional_information: - - type: paakayttotarkoitus - - - name: Myymälärakennusten alue - geometry: Alue - short_name: KLM - plan_regulations: - - regulation_code: myymalarakennustenAlue - additional_information: - - type: paakayttotarkoitus - - - name: Myymälärakennusten alue, jolle saa sijoittaa vähittäiskaupan suuryksikön - geometry: Alue - short_name: KM - plan_regulations: - - regulation_code: vahittaiskaupanSuuryksikko - additional_information: - - type: paakayttotarkoitus - - # p. 5 - - name: Myymälärakennusten alue, jolle saa sijoittaa vähittäiskaupan myymäläkeskittymän - geometry: Alue - short_name: KMK - plan_regulations: - - regulation_code: vahittaiskaupanMyymalakeskittyma - additional_information: - - type: paakayttotarkoitus - - - name: Toimitilarakennusten alue - geometry: Alue - short_name: KTY - plan_regulations: - - regulation_code: toimitilojenAlue - additional_information: - - type: paakayttotarkoitus - - - name: Teollisuus- ja varastorakennusten alue - geometry: Alue - short_name: T - plan_regulations: - - regulation_code: teollisuusalue - additional_information: - - type: paakayttotarkoitus - - regulation_code: varastoalue - additional_information: - - type: paakayttotarkoitus - - - name: Teollisuusrakennusten alue - geometry: Alue - short_name: TT - plan_regulations: - - regulation_code: teollisuusalue - additional_information: - - type: paakayttotarkoitus - - - name: Teollisuusrakennusten alue, jolla ympäristö asettaa toiminnan laadulle erityisiä vaatimuksia - geometry: Alue - short_name: TY - plan_regulations: - - regulation_code: teollisuusalue - additional_information: - - type: paakayttotarkoitus - - type: ymparistoAsettaaToiminnanLaadulleErityisiaVaatimuksia - - - name: Varastorakennusten alue - geometry: Alue - short_name: TV - plan_regulations: - - regulation_code: varastoalue - additional_information: - - type: paakayttotarkoitus - - - name: Teollisuus- ja varastorakennusten alue, jolla on/jolle saa sijoittaa merkittävän, vaarallisia kemikaaleja valmistavan tai varastoivan laitoksen - geometry: Alue - short_name: T/kem - plan_regulations: - - regulation_code: teollisuusalue - additional_information: - - type: paakayttotarkoitus - - type: VaarallistenKemikaalienValmistusJaVarastointiSallittu - - regulation_code: varastoalue - additional_information: - - type: paakayttotarkoitus - - type: VaarallistenKemikaalienValmistusJaVarastointiSallittu - - - name: Virkistysalue - geometry: Alue - short_name: V - plan_regulations: - - regulation_code: virkistysalue - additional_information: - - type: paakayttotarkoitus - - - name: Puisto - geometry: Alue - short_name: VP - plan_regulations: - - regulation_code: puisto - additional_information: - - type: paakayttotarkoitus - - - name: Lähivirkistysalue - geometry: Alue - short_name: VL - plan_regulations: - - regulation_code: lahivirkistysalue - additional_information: - - type: paakayttotarkoitus - - - name: Leikkipuisto - geometry: Alue - short_name: VK - plan_regulations: - - regulation_code: leikkipuisto - additional_information: - - type: paakayttotarkoitus - - - name: Urheilu- ja virkistyspalvelujen alue - geometry: Alue - short_name: VU - plan_regulations: - - regulation_code: urheiluJaVirkistyspalvelujenAlue - additional_information: - - type: paakayttotarkoitus - - - name: Retkeily- ja ulkoilualue - geometry: Alue - short_name: VR - plan_regulations: - - regulation_code: retkeilyJaUlkoiluAlue - additional_information: - - type: paakayttotarkoitus - - - name: Uimaranta-alue - geometry: Alue - short_name: VV - plan_regulations: - - regulation_code: uimaranta - additional_information: - - type: paakayttotarkoitus - - - name: Vapaa-ajan asumisen ja matkailun alue - geometry: Alue - short_name: R - plan_regulations: - - regulation_code: vapaaAjanAsumisenJaMatkailunAlue - additional_information: - - type: paakayttotarkoitus - - - name: Vapaa-ajan asumisen alue - geometry: Alue - short_name: RA - plan_regulations: - - regulation_code: vapaaAjanAsumisenAlue - additional_information: - - type: paakayttotarkoitus - - - name: Matkailupalvelujen - geometry: Alue - short_name: RM - plan_regulations: - - regulation_code: matkailupalvelujenAlue - additional_information: - - type: paakayttotarkoitus - - # p. 6 - - name: Leirintäalue - geometry: Alue - short_name: RL - plan_regulations: - - regulation_code: leirintaAlue - additional_information: - - type: paakayttotarkoitus - - - name: Asuntovaunualue - geometry: Alue - short_name: RV - plan_regulations: - - regulation_code: asuntovaunualue - additional_information: - - type: paakayttotarkoitus - - - name: Siirtolapuutarha-alue - geometry: Alue - short_name: RSP - plan_regulations: - - regulation_code: siirtolapuutarhaAlue - additional_information: - - type: paakayttotarkoitus - - - name: Palstaviljelyalue - geometry: Alue - short_name: RP - plan_regulations: - - regulation_code: palstaviljelyalue - additional_information: - - type: paakayttotarkoitus - - - name: Liikennealue - geometry: Alue - short_name: L - plan_regulations: - - regulation_code: liikennealue - additional_information: - - type: paakayttotarkoitus - - - name: Maantieliikenteen alue - geometry: Alue - short_name: LT - plan_regulations: - - regulation_code: maantie - additional_information: - - type: paakayttotarkoitus - - - name: Maantiehen kuuluva jalankulku- ja pyörätie - geometry: Alue - short_name: LT/jkpp - plan_regulations: - - regulation_code: maantie - additional_information: - - type: paakayttotarkoitus - - - name: Katu - geometry: Alue - short_name: # NOTE: Check symbol - plan_regulations: - - regulation_code: katu - additional_information: - - type: paakayttotarkoitus - - - name: Jalankululle varattu katu - geometry: Alue - short_name: jk - plan_regulations: - - regulation_code: katu - additional_information: - - type: paakayttotarkoitus - - type: kayttotarkoituskohdistus - value: jalankulkualue - - - name: Jalankululle ja pyöräilylle varattu katu - geometry: Alue - short_name: jk/pp - plan_regulations: - - regulation_code: katu - additional_information: - - type: paakayttotarkoitus - - type: kayttotarkoituskohdistus - value: jalankulkualue - - type: kayttotarkoituskohdistus - value: pyorailyalue - - - name: Jalankululle varattu katu, jolla huoltoajo on sallittu - geometry: Alue - short_name: jk/h - plan_regulations: - - regulation_code: katu - additional_information: - - type: paakayttotarkoitus - - type: kayttotarkoituskohdistus - value: jalankulkualue - - type: kayttotarkoituskohdistus - value: huoltoajoalue - - - name: Jalankululle varattu katu, jolla tontille/rakennuspaikalle ajo on sallittu - geometry: Alue - short_name: jk/ajo - plan_regulations: - - regulation_code: katu - additional_information: - - type: paakayttotarkoitus - - type: kayttotarkoituskohdistus - value: jalankulkualue - - type: tontilleAjoSallittu - - - name: Joukkoliikenteelle varattu katu - geometry: Alue - short_name: jl - plan_regulations: - - regulation_code: katu - additional_information: - - type: paakayttotarkoitus - - type: kayttotarkoituskohdistus - value: joukkoliikenteenAlue - - # p. 7 - - name: Raitioliikenteelle varattu katu - geometry: Alue - short_name: rt - plan_regulations: - - regulation_code: katu - additional_information: - - type: paakayttotarkoitus - - type: kayttotarkoituskohdistus - value: raitiotie - - - name: Pihakatu - geometry: Alue - short_name: # NOTE: Check symbol - plan_regulations: - - regulation_code: katu - additional_information: - - type: paakayttotarkoitus - - type: kayttotarkoituskohdistus - value: pihakatu - - - name: Hidaskatu - geometry: Alue - short_name: jl - plan_regulations: - - regulation_code: katu - additional_information: - - type: paakayttotarkoitus - - type: kayttotarkoituskohdistus - value: hidaskatu - - - name: Katuaukio tai tori - geometry: Alue - short_name: hk - plan_regulations: - - regulation_code: katu - additional_information: - - type: paakayttotarkoitus - - type: kayttotarkoituskohdistus - value: katuaukioTaiTori - - - name: Rautatieliikenteen alue - geometry: Alue - short_name: LR - plan_regulations: - - regulation_code: raideliikenteenAlue - additional_information: - - type: paakayttotarkoitus - - - name: Lentokenttäalue - geometry: Alue - short_name: LL - plan_regulations: - - regulation_code: lentoliikenteenAlue - additional_information: - - type: paakayttotarkoitus - - - name: Satama-alue - geometry: Alue - short_name: LS - plan_regulations: - - regulation_code: satama-alue - additional_information: - - type: paakayttotarkoitus - - - name: Kanava-alue - geometry: Alue - short_name: LK - plan_regulations: - - regulation_code: satama-alue - additional_information: - - type: paakayttotarkoitus - - - name: Venesatama-alue - geometry: Alue - short_name: LV - plan_regulations: - - regulation_code: venesatama - additional_information: - - type: paakayttotarkoitus - - - name: Venevalkama - geometry: Alue - short_name: LVV - plan_regulations: - - regulation_code: venevalkama - additional_information: - - type: paakayttotarkoitus - - - name: Yleinen pysäköintialue - geometry: Alue - short_name: LP - plan_regulations: - - regulation_code: pysakoinninAlue - additional_information: - - type: paakayttotarkoitus - - type: varattuYleiseenKayttoon - - - name: Yleisten pysäköintilaitosten alue - geometry: Alue - short_name: LPY - plan_regulations: - - regulation_code: pysakointilaitostenAlue - additional_information: - - type: paakayttotarkoitus - - type: varattuYleiseenKayttoon - - - name: Autopaikkojen alue - geometry: Alue - short_name: LPA - plan_regulations: - - regulation_code: pysakoinninAlue - additional_information: - - type: paakayttotarkoitus - - - name: Pysäköintilaitosten alue - geometry: Alue - short_name: LPL - plan_regulations: - - regulation_code: pysakointilaitostenAlue - additional_information: - - type: paakayttotarkoitus - - - name: Huoltoaseman alue - geometry: Alue - short_name: LH - plan_regulations: - - regulation_code: huoltoasemaAlue - additional_information: - - type: paakayttotarkoitus - - - name: Henkilöliikenteen terminaalialue - geometry: Alue - short_name: LHA - plan_regulations: - - regulation_code: henkiloliikenteenTerminaalialue - additional_information: - - type: paakayttotarkoitus - - - name: Tavaraliikenteen terminaalialue - geometry: Alue - short_name: LTA - plan_regulations: - - regulation_code: tavaraliikenteenTerminaalialue - additional_information: - - type: paakayttotarkoitus - - - name: Varikkoalue - geometry: Alue - short_name: LVH - plan_regulations: - - regulation_code: varikko - additional_information: - - type: paakayttotarkoitus - - # p. 8 - - name: Erityisalue - geometry: Alue - short_name: E - plan_regulations: - - regulation_code: erityisalue - additional_information: - - type: paakayttotarkoitus - - - name: Yhdyskuntateknistä huoltoa palvelevien rakennusten ja laitosten alue - geometry: Alue - short_name: ET - plan_regulations: - - regulation_code: yhdyskuntateknisenHuollonAlue - additional_information: - - type: paakayttotarkoitus - - - name: Energiahuollon alue - geometry: Alue - short_name: EN - plan_regulations: - - regulation_code: energiahuollonAlue - additional_information: - - type: paakayttotarkoitus - - - name: Tuulivoimatuotantoon tarkoitettu energiatuotannon alue - geometry: Alue - short_name: EN/tv - plan_regulations: - - regulation_code: energiahuollonAlue - additional_information: - - type: paakayttotarkoitus - - type: kayttotarkoituskohdistus - value: tuulivoimalaAlue - - - name: Aurinkovoimatuotantoon tarkoitettu energiatuotannon alue - geometry: Alue - short_name: EN/au - plan_regulations: - - regulation_code: energiahuollonAlue - additional_information: - - type: paakayttotarkoitus - - type: kayttotarkoituskohdistus - value: aurinkovoimalaAlue - - - name: Jätteenkäsittelyalue - geometry: Alue - short_name: EJ - plan_regulations: - - regulation_code: jatteenkasittelyalue - additional_information: - - type: paakayttotarkoitus - - - name: Jätehuollon alue - geometry: Alue - short_name: EJH - plan_regulations: - - regulation_code: jatehuollonAlue - additional_information: - - type: paakayttotarkoitus - - - name: Maa-ainesten ottoalue - geometry: Alue - short_name: EO - plan_regulations: - - regulation_code: maaAinestenOttoalue - additional_information: - - type: paakayttotarkoitus - - - name: Turvetuotannon alue - geometry: Alue - short_name: EOT - plan_regulations: - - regulation_code: turvetuotantoalue - additional_information: - - type: paakayttotarkoitus - - - name: Kaivosalue - geometry: Alue - short_name: EK - plan_regulations: - - regulation_code: kaivosalue - additional_information: - - type: paakayttotarkoitus - - - name: Moottoriurheilun alue - geometry: Alue - short_name: EU - plan_regulations: - - regulation_code: moottoriurheilualue - additional_information: - - type: paakayttotarkoitus - - - name: Mastoalue - geometry: Alue - short_name: EMT - plan_regulations: - - regulation_code: mastoalue - additional_information: - - type: paakayttotarkoitus - - - name: Ampumarata-alue - geometry: Alue - short_name: EA - plan_regulations: - - regulation_code: ampumarataAlue - additional_information: - - type: paakayttotarkoitus - - - name: Puolustusvoimien alue - geometry: Alue - short_name: EP - plan_regulations: - - regulation_code: puolustusvoimienAlue - additional_information: - - type: paakayttotarkoitus - - - name: Hautausmaa-alue - geometry: Alue - short_name: EH - plan_regulations: - - regulation_code: hautausmaa - additional_information: - - type: paakayttotarkoitus - - - name: Suojaviheralue - geometry: Alue - short_name: EV - plan_regulations: - - regulation_code: suojaviheralue - additional_information: - - type: paakayttotarkoitus - - - name: Suojelualue - geometry: Alue - short_name: S - plan_regulations: - - regulation_code: suojelualue - additional_information: - - type: paakayttotarkoitus - - - name: Luonnonsuojelualue - geometry: Alue - short_name: SL - plan_regulations: - - regulation_code: luonnonsuojelualue - additional_information: - - type: paakayttotarkoitus - - - name: Muinaismuistoalue - geometry: Alue - short_name: SM - plan_regulations: - - regulation_code: muinaismuistoAlue - additional_information: - - type: paakayttotarkoitus - - # p. 9 - - name: Rakennussuojelualue - geometry: Alue - short_name: SR - plan_regulations: - - regulation_code: rakennussuojelualue - additional_information: - - type: paakayttotarkoitus - - - name: Rakennusperinnön suojelemisesta annetun lain nojalla suojeltujen rakennusten alue - geometry: Alue - short_name: SRS - plan_regulations: - - regulation_code: rakennusperinnonSuojelemisestaAnnetunLainNojallaSuojeltuRakennus - additional_information: - - type: paakayttotarkoitus - - - name: Maa- ja metsätalousalue - geometry: Alue - short_name: M - plan_regulations: - - regulation_code: maaJaMetsatalousAlue - additional_information: - - type: paakayttotarkoitus - - - name: Metsätalousalue - geometry: Alue - short_name: MM - plan_regulations: - - regulation_code: metsatalousalue - additional_information: - - type: paakayttotarkoitus - - - name: Maatalousalue - geometry: Alue - short_name: MT - plan_regulations: - - regulation_code: maatalousalue - additional_information: - - type: paakayttotarkoitus - - - name: Kotieläintalouden suuryksikön alue - geometry: Alue - short_name: ME - plan_regulations: - - regulation_code: kotielaintaloudenSuuryksikonAlue - additional_information: - - type: paakayttotarkoitus - - - name: Puutarha- ja kasvihuonealue - geometry: Alue - short_name: MP - plan_regulations: - - regulation_code: puutarhaJaKasvihuoneAlue - additional_information: - - type: paakayttotarkoitus - - - name: Pelto - geometry: Alue - short_name: MTP - plan_regulations: - - regulation_code: pelto - additional_information: - - type: paakayttotarkoitus - - - name: Maisemallisesti arvokas peltoalue - geometry: Alue - short_name: MA - plan_regulations: - - regulation_code: pelto - additional_information: - - type: paakayttotarkoitus - - regulation_code: maisemallisestiArvokasAlue - additional_information: # NOTE: Check if paakayttotarkoitus applies to both - - type: paakayttotarkoitus - - - name: Maa- ja metsätalousalue, jolla on erityistä ulkoilun ohjaamistarvetta - geometry: Alue - short_name: MU - plan_regulations: - - regulation_code: maaJaMetsatalousalueJollaErityistaUlkoilunOhjaamistarvetta - additional_information: - - type: paakayttotarkoitus - - - name: Maa- ja metsätalousalue, jolla on erityisiä ympäristöarvoja - geometry: Alue - short_name: MY - plan_regulations: - - regulation_code: maaJaMetsatalousalueJollaErityisiaYmparistoarvoja - additional_information: - - type: paakayttotarkoitus - - - name: Vesialue - geometry: Alue - short_name: W - plan_regulations: - - regulation_code: vesialue - additional_information: - - type: paakayttotarkoitus - - # p. 10 + - name: Asuinrakennusten alue + geometry: Alue + short_name: A + plan_regulations: + - regulation_code: asumisenAlue + additional_information: + - type: paakayttotarkoitus + + - name: Asuinkerrostalojen alue + geometry: Alue + short_name: AK + plan_regulations: + - regulation_code: asuinkerrostaloalue + additional_information: + - type: paakayttotarkoitus + + - name: Asuinpientalojen alue + geometry: Alue + short_name: AP + plan_regulations: + - regulation_code: asuinpientaloalue + additional_information: + - type: paakayttotarkoitus + + - name: Rivitalojen ja muiden kytkettyjen asuinrakennusten alue + geometry: Alue + short_name: AR + plan_regulations: + - regulation_code: rivitalojenJaMuidenKytkettyjenAsuinpientalojenAlue + additional_information: + - type: paakayttotarkoitus + + - name: Erillispientalojen alue + geometry: Alue + short_name: AO + plan_regulations: + - regulation_code: erillistenAsuinpientalojenAlue + additional_information: + - type: paakayttotarkoitus + + - name: Asuin-, liike- ja toimistorakennusten alue + geometry: Alue + short_name: AL + plan_regulations: + - regulation_code: asumisenAlue + additional_information: + - type: paakayttotarkoitus + - regulation_code: liikerakennustenAlue + additional_information: + - type: paakayttotarkoitus + - regulation_code: toimistorakennustenAlue + additional_information: + - type: paakayttotarkoitus + + - name: Asumista palveleva yhteiskäyttöinen alue + geometry: Alue + short_name: AH + plan_regulations: + - regulation_code: asumistaPalvelevaYhteiskayttoinenAlue + additional_information: + - type: paakayttotarkoitus + + - name: Maatilojen talouskeskusten alue + geometry: Alue + short_name: AM + plan_regulations: + - regulation_code: maatilanTalouskeskuksenAlue + additional_information: + - type: paakayttotarkoitus + + - name: Keskustatoimintojen alue + geometry: Alue + short_name: C + plan_regulations: + - regulation_code: keskustatoimintojenAlue + additional_information: + - type: paakayttotarkoitus + + - name: Yleisten rakennusten alue + geometry: Alue + short_name: Y + plan_regulations: + - regulation_code: yleistenRakennustenAlue + additional_information: + - type: paakayttotarkoitus + - type: varattuYleiseenKayttoon + + - name: Palvelurakennusten alue + geometry: Alue + short_name: P + plan_regulations: + - regulation_code: palvelujenAlue + additional_information: + - type: paakayttotarkoitus + + # p. 4 + - name: Julkisten palvelurakennusten alue + geometry: Alue + short_name: PY + plan_regulations: + - regulation_code: palvelujenAlue + additional_information: + - type: paakayttotarkoitus + - type: varattuYleiseenKayttoon + + - name: Lähipalvelurakennusten alue + geometry: Alue + short_name: PL + plan_regulations: + - regulation_code: palvelujenAlue + additional_information: + - type: paakayttotarkoitus + - type: paikallinen + + - name: Julkisten lähipalvelurakennusten alue + geometry: Alue + short_name: YL + plan_regulations: + - regulation_code: palvelujenAlue + additional_information: + - type: paakayttotarkoitus + - type: varattuYleiseenKayttoon + - type: paikallinen + + - name: Toimistorakennusten alue + geometry: Alue + short_name: KT + plan_regulations: + - regulation_code: toimistorakennustenAlue + additional_information: + - type: paakayttotarkoitus + + - name: Hallinto- ja virastorakennusten alue + geometry: Alue + short_name: YH + plan_regulations: + - regulation_code: toimistorakennustenAlue + additional_information: + - type: paakayttotarkoitus + - type: varattuYleiseenKayttoon + + - name: Opetusrakennusten alue + geometry: Alue + short_name: YO + plan_regulations: + - regulation_code: opetusrakennustenAlue + additional_information: + - type: paakayttotarkoitus + - type: varattuYleiseenKayttoon + + - name: Terveydenhuolto- ja sosiaalipalvelurakennusten alue + geometry: Alue + short_name: YS + plan_regulations: + - regulation_code: hoitoalanRakennustenAlue + additional_information: + - type: paakayttotarkoitus + - type: varattuYleiseenKayttoon + + - name: Kulttuuritoiminnan rakennusten alue + geometry: Alue + short_name: YY + plan_regulations: + - regulation_code: kulttuurirakennustenAlue + additional_information: + - type: paakayttotarkoitus + - type: varattuYleiseenKayttoon + + - name: Museorakennusten alue + geometry: Alue + short_name: YM + plan_regulations: + - regulation_code: museorakennustenAlue + additional_information: + - type: paakayttotarkoitus + - type: varattuYleiseenKayttoon + + - name: Kirkkojen ja muiden seurakunnallisten rakennusten alue + geometry: Alue + short_name: YK + plan_regulations: + - regulation_code: uskonnollistenYhteisojenRakennustenAlue + additional_information: + - type: paakayttotarkoitus + - type: varattuYleiseenKayttoon + + - name: Urheilutoimintaa palvelevien rakennusten alue + geometry: Alue + short_name: YU + plan_regulations: + - regulation_code: urheiluJaLiikuntaRakennustenAlue + additional_information: + - type: paakayttotarkoitus + - type: varattuYleiseenKayttoon + + - name: Huvi- ja viihderakennusten alue + geometry: Alue + short_name: PV + plan_regulations: + - regulation_code: huviJaViihdeRakennustenAlue + additional_information: + - type: paakayttotarkoitus + + - name: Liike- ja toimistorakennusten alue + geometry: Alue + short_name: K + plan_regulations: + - regulation_code: liikerakennustenAlue + additional_information: + - type: paakayttotarkoitus + - regulation_code: toimistorakennustenAlue + additional_information: + - type: paakayttotarkoitus + + - name: Liikerakennusten alue + geometry: Alue + short_name: KL + plan_regulations: + - regulation_code: liikerakennustenAlue + additional_information: + - type: paakayttotarkoitus + + - name: Myymälärakennusten alue + geometry: Alue + short_name: KLM + plan_regulations: + - regulation_code: myymalarakennustenAlue + additional_information: + - type: paakayttotarkoitus + + - name: Myymälärakennusten alue, jolle saa sijoittaa vähittäiskaupan suuryksikön + geometry: Alue + short_name: KM + plan_regulations: + - regulation_code: vahittaiskaupanSuuryksikko + additional_information: + - type: paakayttotarkoitus + + # p. 5 + - name: Myymälärakennusten alue, jolle saa sijoittaa vähittäiskaupan myymäläkeskittymän + geometry: Alue + short_name: KMK + plan_regulations: + - regulation_code: vahittaiskaupanMyymalakeskittyma + additional_information: + - type: paakayttotarkoitus + + - name: Toimitilarakennusten alue + geometry: Alue + short_name: KTY + plan_regulations: + - regulation_code: toimitilojenAlue + additional_information: + - type: paakayttotarkoitus + + - name: Teollisuus- ja varastorakennusten alue + geometry: Alue + short_name: T + plan_regulations: + - regulation_code: teollisuusalue + additional_information: + - type: paakayttotarkoitus + - regulation_code: varastoalue + additional_information: + - type: paakayttotarkoitus + + - name: Teollisuusrakennusten alue + geometry: Alue + short_name: TT + plan_regulations: + - regulation_code: teollisuusalue + additional_information: + - type: paakayttotarkoitus + + - name: Teollisuusrakennusten alue, jolla ympäristö asettaa toiminnan laadulle erityisiä vaatimuksia + geometry: Alue + short_name: TY + plan_regulations: + - regulation_code: teollisuusalue + additional_information: + - type: paakayttotarkoitus + - type: ymparistoAsettaaToiminnanLaadulleErityisiaVaatimuksia + + - name: Varastorakennusten alue + geometry: Alue + short_name: TV + plan_regulations: + - regulation_code: varastoalue + additional_information: + - type: paakayttotarkoitus + + - name: Teollisuus- ja varastorakennusten alue, jolla on/jolle saa sijoittaa merkittävän, vaarallisia kemikaaleja valmistavan tai varastoivan laitoksen + geometry: Alue + short_name: T/kem + plan_regulations: + - regulation_code: teollisuusalue + additional_information: + - type: paakayttotarkoitus + - type: VaarallistenKemikaalienValmistusJaVarastointiSallittu + - regulation_code: varastoalue + additional_information: + - type: paakayttotarkoitus + - type: VaarallistenKemikaalienValmistusJaVarastointiSallittu + + - name: Virkistysalue + geometry: Alue + short_name: V + plan_regulations: + - regulation_code: virkistysalue + additional_information: + - type: paakayttotarkoitus + + - name: Puisto + geometry: Alue + short_name: VP + plan_regulations: + - regulation_code: puisto + additional_information: + - type: paakayttotarkoitus + + - name: Lähivirkistysalue + geometry: Alue + short_name: VL + plan_regulations: + - regulation_code: lahivirkistysalue + additional_information: + - type: paakayttotarkoitus + + - name: Leikkipuisto + geometry: Alue + short_name: VK + plan_regulations: + - regulation_code: leikkipuisto + additional_information: + - type: paakayttotarkoitus + + - name: Urheilu- ja virkistyspalvelujen alue + geometry: Alue + short_name: VU + plan_regulations: + - regulation_code: urheiluJaVirkistyspalvelujenAlue + additional_information: + - type: paakayttotarkoitus + + - name: Retkeily- ja ulkoilualue + geometry: Alue + short_name: VR + plan_regulations: + - regulation_code: retkeilyJaUlkoiluAlue + additional_information: + - type: paakayttotarkoitus + + - name: Uimaranta-alue + geometry: Alue + short_name: VV + plan_regulations: + - regulation_code: uimaranta + additional_information: + - type: paakayttotarkoitus + + - name: Vapaa-ajan asumisen ja matkailun alue + geometry: Alue + short_name: R + plan_regulations: + - regulation_code: vapaaAjanAsumisenJaMatkailunAlue + additional_information: + - type: paakayttotarkoitus + + - name: Vapaa-ajan asumisen alue + geometry: Alue + short_name: RA + plan_regulations: + - regulation_code: vapaaAjanAsumisenAlue + additional_information: + - type: paakayttotarkoitus + + - name: Matkailupalvelujen + geometry: Alue + short_name: RM + plan_regulations: + - regulation_code: matkailupalvelujenAlue + additional_information: + - type: paakayttotarkoitus + + # p. 6 + - name: Leirintäalue + geometry: Alue + short_name: RL + plan_regulations: + - regulation_code: leirintaAlue + additional_information: + - type: paakayttotarkoitus + + - name: Asuntovaunualue + geometry: Alue + short_name: RV + plan_regulations: + - regulation_code: asuntovaunualue + additional_information: + - type: paakayttotarkoitus + + - name: Siirtolapuutarha-alue + geometry: Alue + short_name: RSP + plan_regulations: + - regulation_code: siirtolapuutarhaAlue + additional_information: + - type: paakayttotarkoitus + + - name: Palstaviljelyalue + geometry: Alue + short_name: RP + plan_regulations: + - regulation_code: palstaviljelyalue + additional_information: + - type: paakayttotarkoitus + + - name: Liikennealue + geometry: Alue + short_name: L + plan_regulations: + - regulation_code: liikennealue + additional_information: + - type: paakayttotarkoitus + + - name: Maantieliikenteen alue + geometry: Alue + short_name: LT + plan_regulations: + - regulation_code: maantie + additional_information: + - type: paakayttotarkoitus + + - name: Maantiehen kuuluva jalankulku- ja pyörätie + geometry: Alue + short_name: LT/jkpp + plan_regulations: + - regulation_code: maantie + additional_information: + - type: paakayttotarkoitus + + - name: Katu + geometry: Alue + short_name: # NOTE: Check symbol + plan_regulations: + - regulation_code: katu + additional_information: + - type: paakayttotarkoitus + + - name: Jalankululle varattu katu + geometry: Alue + short_name: jk + plan_regulations: + - regulation_code: katu + additional_information: + - type: paakayttotarkoitus + - type: kayttotarkoituskohdistus + code_value: jalankulkualue + + - name: Jalankululle ja pyöräilylle varattu katu + geometry: Alue + short_name: jk/pp + plan_regulations: + - regulation_code: katu + additional_information: + - type: paakayttotarkoitus + - type: kayttotarkoituskohdistus + code_value: jalankulkualue + - type: kayttotarkoituskohdistus + code_value: pyorailyalue + + - name: Jalankululle varattu katu, jolla huoltoajo on sallittu + geometry: Alue + short_name: jk/h + plan_regulations: + - regulation_code: katu + additional_information: + - type: paakayttotarkoitus + - type: kayttotarkoituskohdistus + code_value: jalankulkualue + - type: kayttotarkoituskohdistus + code_value: huoltoajoalue + + - name: Jalankululle varattu katu, jolla tontille/rakennuspaikalle ajo on sallittu + geometry: Alue + short_name: jk/ajo + plan_regulations: + - regulation_code: katu + additional_information: + - type: paakayttotarkoitus + - type: kayttotarkoituskohdistus + code_value: jalankulkualue + - type: tontilleAjoSallittu + + - name: Joukkoliikenteelle varattu katu + geometry: Alue + short_name: jl + plan_regulations: + - regulation_code: katu + additional_information: + - type: paakayttotarkoitus + - type: kayttotarkoituskohdistus + code_value: joukkoliikenteenAlue + + # p. 7 + - name: Raitioliikenteelle varattu katu + geometry: Alue + short_name: rt + plan_regulations: + - regulation_code: katu + additional_information: + - type: paakayttotarkoitus + - type: kayttotarkoituskohdistus + code_value: raitiotie + + - name: Pihakatu + geometry: Alue + short_name: # NOTE: Check symbol + plan_regulations: + - regulation_code: katu + additional_information: + - type: paakayttotarkoitus + - type: kayttotarkoituskohdistus + code_value: pihakatu + + - name: Hidaskatu + geometry: Alue + short_name: jl + plan_regulations: + - regulation_code: katu + additional_information: + - type: paakayttotarkoitus + - type: kayttotarkoituskohdistus + code_value: hidaskatu + + - name: Katuaukio tai tori + geometry: Alue + short_name: hk + plan_regulations: + - regulation_code: katu + additional_information: + - type: paakayttotarkoitus + - type: kayttotarkoituskohdistus + code_value: katuaukioTaiTori + + - name: Rautatieliikenteen alue + geometry: Alue + short_name: LR + plan_regulations: + - regulation_code: raideliikenteenAlue + additional_information: + - type: paakayttotarkoitus + + - name: Lentokenttäalue + geometry: Alue + short_name: LL + plan_regulations: + - regulation_code: lentoliikenteenAlue + additional_information: + - type: paakayttotarkoitus + + - name: Satama-alue + geometry: Alue + short_name: LS + plan_regulations: + - regulation_code: satama-alue + additional_information: + - type: paakayttotarkoitus + + - name: Kanava-alue + geometry: Alue + short_name: LK + plan_regulations: + - regulation_code: satama-alue + additional_information: + - type: paakayttotarkoitus + + - name: Venesatama-alue + geometry: Alue + short_name: LV + plan_regulations: + - regulation_code: venesatama + additional_information: + - type: paakayttotarkoitus + + - name: Venevalkama + geometry: Alue + short_name: LVV + plan_regulations: + - regulation_code: venevalkama + additional_information: + - type: paakayttotarkoitus + + - name: Yleinen pysäköintialue + geometry: Alue + short_name: LP + plan_regulations: + - regulation_code: pysakoinninAlue + additional_information: + - type: paakayttotarkoitus + - type: varattuYleiseenKayttoon + + - name: Yleisten pysäköintilaitosten alue + geometry: Alue + short_name: LPY + plan_regulations: + - regulation_code: pysakointilaitostenAlue + additional_information: + - type: paakayttotarkoitus + - type: varattuYleiseenKayttoon + + - name: Autopaikkojen alue + geometry: Alue + short_name: LPA + plan_regulations: + - regulation_code: pysakoinninAlue + additional_information: + - type: paakayttotarkoitus + + - name: Pysäköintilaitosten alue + geometry: Alue + short_name: LPL + plan_regulations: + - regulation_code: pysakointilaitostenAlue + additional_information: + - type: paakayttotarkoitus + + - name: Huoltoaseman alue + geometry: Alue + short_name: LH + plan_regulations: + - regulation_code: huoltoasemaAlue + additional_information: + - type: paakayttotarkoitus + + - name: Henkilöliikenteen terminaalialue + geometry: Alue + short_name: LHA + plan_regulations: + - regulation_code: henkiloliikenteenTerminaalialue + additional_information: + - type: paakayttotarkoitus + + - name: Tavaraliikenteen terminaalialue + geometry: Alue + short_name: LTA + plan_regulations: + - regulation_code: tavaraliikenteenTerminaalialue + additional_information: + - type: paakayttotarkoitus + + - name: Varikkoalue + geometry: Alue + short_name: LVH + plan_regulations: + - regulation_code: varikko + additional_information: + - type: paakayttotarkoitus + + # p. 8 + - name: Erityisalue + geometry: Alue + short_name: E + plan_regulations: + - regulation_code: erityisalue + additional_information: + - type: paakayttotarkoitus + + - name: Yhdyskuntateknistä huoltoa palvelevien rakennusten ja laitosten alue + geometry: Alue + short_name: ET + plan_regulations: + - regulation_code: yhdyskuntateknisenHuollonAlue + additional_information: + - type: paakayttotarkoitus + + - name: Energiahuollon alue + geometry: Alue + short_name: EN + plan_regulations: + - regulation_code: energiahuollonAlue + additional_information: + - type: paakayttotarkoitus + + - name: Tuulivoimatuotantoon tarkoitettu energiatuotannon alue + geometry: Alue + short_name: EN/tv + plan_regulations: + - regulation_code: energiahuollonAlue + additional_information: + - type: paakayttotarkoitus + - type: kayttotarkoituskohdistus + code_value: tuulivoimalaAlue + + - name: Aurinkovoimatuotantoon tarkoitettu energiatuotannon alue + geometry: Alue + short_name: EN/au + plan_regulations: + - regulation_code: energiahuollonAlue + additional_information: + - type: paakayttotarkoitus + - type: kayttotarkoituskohdistus + code_value: aurinkovoimalaAlue + + - name: Jätteenkäsittelyalue + geometry: Alue + short_name: EJ + plan_regulations: + - regulation_code: jatteenkasittelyalue + additional_information: + - type: paakayttotarkoitus + + - name: Jätehuollon alue + geometry: Alue + short_name: EJH + plan_regulations: + - regulation_code: jatehuollonAlue + additional_information: + - type: paakayttotarkoitus + + - name: Maa-ainesten ottoalue + geometry: Alue + short_name: EO + plan_regulations: + - regulation_code: maaAinestenOttoalue + additional_information: + - type: paakayttotarkoitus + + - name: Turvetuotannon alue + geometry: Alue + short_name: EOT + plan_regulations: + - regulation_code: turvetuotantoalue + additional_information: + - type: paakayttotarkoitus + + - name: Kaivosalue + geometry: Alue + short_name: EK + plan_regulations: + - regulation_code: kaivosalue + additional_information: + - type: paakayttotarkoitus + + - name: Moottoriurheilun alue + geometry: Alue + short_name: EU + plan_regulations: + - regulation_code: moottoriurheilualue + additional_information: + - type: paakayttotarkoitus + + - name: Mastoalue + geometry: Alue + short_name: EMT + plan_regulations: + - regulation_code: mastoalue + additional_information: + - type: paakayttotarkoitus + + - name: Ampumarata-alue + geometry: Alue + short_name: EA + plan_regulations: + - regulation_code: ampumarataAlue + additional_information: + - type: paakayttotarkoitus + + - name: Puolustusvoimien alue + geometry: Alue + short_name: EP + plan_regulations: + - regulation_code: puolustusvoimienAlue + additional_information: + - type: paakayttotarkoitus + + - name: Hautausmaa-alue + geometry: Alue + short_name: EH + plan_regulations: + - regulation_code: hautausmaa + additional_information: + - type: paakayttotarkoitus + + - name: Suojaviheralue + geometry: Alue + short_name: EV + plan_regulations: + - regulation_code: suojaviheralue + additional_information: + - type: paakayttotarkoitus + + - name: Suojelualue + geometry: Alue + short_name: S + plan_regulations: + - regulation_code: suojelualue + additional_information: + - type: paakayttotarkoitus + + - name: Luonnonsuojelualue + geometry: Alue + short_name: SL + plan_regulations: + - regulation_code: luonnonsuojelualue + additional_information: + - type: paakayttotarkoitus + + - name: Muinaismuistoalue + geometry: Alue + short_name: SM + plan_regulations: + - regulation_code: muinaismuistoAlue + additional_information: + - type: paakayttotarkoitus + + # p. 9 + - name: Rakennussuojelualue + geometry: Alue + short_name: SR + plan_regulations: + - regulation_code: rakennussuojelualue + additional_information: + - type: paakayttotarkoitus + + - name: Rakennusperinnön suojelemisesta annetun lain nojalla suojeltujen rakennusten alue + geometry: Alue + short_name: SRS + plan_regulations: + - regulation_code: rakennusperinnonSuojelemisestaAnnetunLainNojallaSuojeltuRakennus + additional_information: + - type: paakayttotarkoitus + + - name: Maa- ja metsätalousalue + geometry: Alue + short_name: M + plan_regulations: + - regulation_code: maaJaMetsatalousAlue + additional_information: + - type: paakayttotarkoitus + + - name: Metsätalousalue + geometry: Alue + short_name: MM + plan_regulations: + - regulation_code: metsatalousalue + additional_information: + - type: paakayttotarkoitus + + - name: Maatalousalue + geometry: Alue + short_name: MT + plan_regulations: + - regulation_code: maatalousalue + additional_information: + - type: paakayttotarkoitus + + - name: Kotieläintalouden suuryksikön alue + geometry: Alue + short_name: ME + plan_regulations: + - regulation_code: kotielaintaloudenSuuryksikonAlue + additional_information: + - type: paakayttotarkoitus + + - name: Puutarha- ja kasvihuonealue + geometry: Alue + short_name: MP + plan_regulations: + - regulation_code: puutarhaJaKasvihuoneAlue + additional_information: + - type: paakayttotarkoitus + + - name: Pelto + geometry: Alue + short_name: MTP + plan_regulations: + - regulation_code: pelto + additional_information: + - type: paakayttotarkoitus + + - name: Maisemallisesti arvokas peltoalue + geometry: Alue + short_name: MA + plan_regulations: + - regulation_code: pelto + additional_information: + - type: paakayttotarkoitus + - regulation_code: maisemallisestiArvokasAlue + additional_information: # NOTE: Check if paakayttotarkoitus applies to both + - type: paakayttotarkoitus + + - name: Maa- ja metsätalousalue, jolla on erityistä ulkoilun ohjaamistarvetta + geometry: Alue + short_name: MU + plan_regulations: + - regulation_code: maaJaMetsatalousalueJollaErityistaUlkoilunOhjaamistarvetta + additional_information: + - type: paakayttotarkoitus + + - name: Maa- ja metsätalousalue, jolla on erityisiä ympäristöarvoja + geometry: Alue + short_name: MY + plan_regulations: + - regulation_code: maaJaMetsatalousalueJollaErityisiaYmparistoarvoja + additional_information: + - type: paakayttotarkoitus + + - name: Vesialue + geometry: Alue + short_name: W + plan_regulations: + - regulation_code: vesialue + additional_information: + - type: paakayttotarkoitus + + # p. 10 - category_code: aluevarauksetYmparistoltaSailytettavat name: Ympäristöltään säilytettävät aluevaraukset plan_regulation_groups: - - - name: Asuntovaltainen alue, jolla ympäristö säilytetään - geometry: Alue - short_name: A/s - plan_regulations: - - regulation_code: asumisenAlue - additional_information: - - type: paakayttotarkoitus - - type: sailytettava - - # p. 11 + - name: Asuntovaltainen alue, jolla ympäristö säilytetään + geometry: Alue + short_name: A/s + plan_regulations: + - regulation_code: asumisenAlue + additional_information: + - type: paakayttotarkoitus + - type: sailytettava + + # p. 11 - category_code: rakennusalat name: Rakennusalat, alueiden erityisominaisuudet ja alueen osat plan_regulation_groups: - - - name: Kunnan tai kaupunginosan raja - geometry: Alue - short_name: # NOTE: Check symbol - plan_regulations: - - regulation_code: kunnanTaiKaupunginOsa - additional_information: - - type: osaAlue - - - name: Korttelialue tai korttelialueen osa - geometry: Alue - short_name: # NOTE: Check symbol - plan_regulations: - - regulation_code: korttelialueTaiKorttelialueenOsa # NOTE: Check p. 11 if "korttelialue" - additional_information: - - type: osaAlue - - - name: Sitovan tonttijaon mukainen tontti - geometry: Alue - short_name: # NOTE: Check symbol - plan_regulations: - - regulation_code: ohjeellinenRakennuspaikka - additional_information: - - type: osaAlue - - - name: Ohjeellinen tontti/rakennuspaikka - geometry: Alue - short_name: # NOTE: Check symbol - plan_regulations: - - regulation_code: sitovanTonttijaonMukainenTontti - additional_information: - - type: osaAlue - - - name: Rakennusala - geometry: Alue - short_name: # NOTE: Check symbol - plan_regulations: - - regulation_code: rakennusala - additional_information: - - type: osaAlue - - - name: Auton säilytyspaikan rakennusala - geometry: Alue - short_name: a - plan_regulations: - - regulation_code: rakennusala - additional_information: - - type: osaAlue - - type: kayttotarkoituskohdistus - value: pysakoinninAlue - - - name: Rakennusala, jolle saa sijoittaa lasten päiväkodin - geometry: Alue - short_name: pk - plan_regulations: - - regulation_code: rakennusala - additional_information: - - type: osaAlue - - type: kayttotarkoituskohdistus - value: opetusrakennustenAlue - - - name: Rakennusala, jolle saa sijoittaa myymälän - geometry: Alue - short_name: m - plan_regulations: - - regulation_code: rakennusala - additional_information: - - type: osaAlue - - type: kayttotarkoituskohdistus - value: myymalarakennustenAlue - - # p. 12 - - name: Rakennusala, jolle saa sijoittaa maatilan talouskeskuksen - geometry: Alue - short_name: am - plan_regulations: - - regulation_code: rakennusala - additional_information: - - type: osaAlue - - type: kayttotarkoituskohdistus - value: maatilanTalouskeskuksenAlue - - - name: Rakennusala, jolle saa sijoittaa talousrakennuksen - geometry: Alue - short_name: t - plan_regulations: - - regulation_code: rakennusalaJolleSaaSijoittaaTalousrakennuksen - additional_information: - - type: osaAlue - - - name: Rakennusala, jolle saa sijoittaa saunan - geometry: Alue - short_name: sa - plan_regulations: - - regulation_code: rakennusalaJolleSaaSijoittaaSaunan - additional_information: - - type: osaAlue - - - name: Kaupunki- tai kyläkuvallisesti tärkeä alue tai alueen osa - geometry: Alue - short_name: sk - plan_regulations: - - regulation_code: kaupunkiTaiKylakuvallisestiArvokasAlue - additional_information: - - type: osaAlue - - - name: Rakennetun kulttuuriympäristön ja maiseman vaalimisen kannalta tärkeä alue muinaisjäännös - geometry: Alue - short_name: kyma - plan_regulations: - - regulation_code: maisemallisestiArvokasAlue - additional_information: - - type: osaAlue - - regulation_code: merkittavaRakennettuKulttuuriymparisto - additional_information: - - type: osaAlue - - - name: Maisemallisesti arvokas alue - geometry: Alue - short_name: ma - plan_regulations: - - regulation_code: maisemallisestiArvokasAlue - additional_information: - - type: osaAlue - - - name: Kansainvälisesti arvokas maisema-alue - geometry: Alue - short_name: kvma - plan_regulations: - - regulation_code: maisemallisestiArvokasAlue - additional_information: - - type: osaAlue - - type: kansainvalinen - - - name: Valtakunnallisesti arvokas maisema-alue - geometry: Alue - short_name: vama - plan_regulations: - - regulation_code: valtakunnallisestiArvokasMaisemaAlue - additional_information: - - type: osaAlue - - type: valtakunnallinen - - - name: Maakunnallisesti arvokas maisema-alue - geometry: Alue - short_name: mma - plan_regulations: - - regulation_code: maisemallisestiArvokasAlue - additional_information: - - type: osaAlue - - type: maakunnallinen - - - name: Paikallisesti arvokas maisema-alue - geometry: Alue - short_name: pma - plan_regulations: - - regulation_code: maisemallisestiArvokasAlue - additional_information: - - type: osaAlue - - type: paikallinen - - - name: Merkittävä rakennettu kulttuuriympäristö - geometry: Alue - short_name: ky - plan_regulations: - - regulation_code: merkittavaRakennettuKulttuuriymparisto - additional_information: - - type: osaAlue - - - name: Kansainvälisesti merkittävä rakennettu kulttuuriympäristö - geometry: Alue - short_name: kvky - plan_regulations: - - regulation_code: merkittavaRakennettuKulttuuriymparisto - additional_information: - - type: osaAlue - - type: kansainvalinen - - - name: Valtakunnallisesti merkittävä rakennettu kulttuuriympäristö - geometry: Alue - short_name: rky - plan_regulations: - - regulation_code: valtakunnallisestiMerkittavaRakennettuKulttuuriymparisto - additional_information: - - type: osaAlue - - type: valtakunnallinen - - - name: Maakunnallisesti merkittävä rakennettu kulttuuriympäristö - geometry: Alue - short_name: mky - plan_regulations: - - regulation_code: merkittavaRakennettuKulttuuriymparisto - additional_information: - - type: osaAlue - - type: maakunnallinen - - - name: Paikallisesti merkittävä rakennettu kulttuuriympäristö - geometry: Alue - short_name: pky - plan_regulations: - - regulation_code: merkittavaRakennettuKulttuuriymparisto - additional_information: - - type: osaAlue - - type: paikallinen - - - name: Muu arkeologinen kohde, joka ei ole muinaismuistolain nojalla rauhoitettu kiinteä - geometry: Alue - short_name: ark - plan_regulations: - - regulation_code: muuArkeologinenKohde - additional_information: - - type: osaAlue - - - name: Valtakunnallisesti merkittävä arkeologinen kohde - short_name: vark - plan_regulations: - - regulation_code: valtakunnallisestiMerkittavaArkeologinenKohde - additional_information: - - type: osaAlue - - type: valtakunnallinen - - # p. 13 - - name: Arvokas harjualue tai muu geologinen muodostuma - geometry: Alue - short_name: ge - plan_regulations: - - regulation_code: arvokasGeologinenMuodostuma - additional_information: - - type: osaAlue - - - name: Tärkeä veden hankintaan soveltuva pohjavesialue - geometry: Alue - short_name: pv - plan_regulations: - - regulation_code: pohjavesialue - additional_information: - - type: osaAlue - - - name: Natura 2000 -verkostoon kuuluva alue - geometry: Alue - short_name: nat - plan_regulations: - - regulation_code: natura2000VerkostonAlue - additional_information: - - type: osaAlue - - - name: Luonnon monimuotoisuuden kannalta erityisen tärkeä alue - geometry: Alue - short_name: luo - plan_regulations: - - regulation_code: luonnonMonimuotoisuudenKannaltaErityisenTarkeaAlue - additional_information: - - type: osaAlue - - - name: UNESCO:n maailmanperintökohde - geometry: Alue - short_name: un - plan_regulations: - - regulation_code: unesconMaailmanperintokohde - additional_information: - - type: osaAlue - - - name: Kansallinen kaupunkipuisto - geometry: Alue - short_name: kp - plan_regulations: - - regulation_code: kansallinenKaupunkipuisto - additional_information: - - type: osaAlue - - - name: Kehittämisalue - geometry: Alue - short_name: ke - plan_regulations: - - regulation_code: kehittamisalue - additional_information: - - type: osaAlue - - - name: Alue, jolle määrätään asemakaavassa määräaikainen kielto rakennuksen rakentamiseksi - geometry: Alue - short_name: mrk - plan_regulations: - - regulation_code: maaraAikainenKieltoRakennuksenRakentamiseksi - additional_information: - - type: osaAlue - - - name: Tuulivoimaloiden alue - geometry: Alue - short_name: tv - plan_regulations: - - regulation_code: tuulivoimalaAlue - additional_information: - - type: osaAlue - - - name: Aurinkovoimaloiden alue - geometry: Alue - short_name: aur - plan_regulations: - - regulation_code: aurinkovoimalaAlue - additional_information: - - type: osaAlue - - - name: Ympäristöhäiriöalue - geometry: Alue - short_name: häiriö - plan_regulations: - - regulation_code: ymparistohairioalue - additional_information: - - type: osaAlue - - - name: Melualue - geometry: Alue - short_name: melu - plan_regulations: - - regulation_code: melualue - additional_information: - - type: osaAlue - - - name: Tärinäalue - geometry: Alue - short_name: tärinä - plan_regulations: - - regulation_code: tarinaAlue - additional_information: - - type: osaAlue - - - name: Radonriskialue - geometry: Alue - short_name: radon - plan_regulations: - - regulation_code: radonriskialue - additional_information: - - type: osaAlue - - - name: Pilaantunut maa-alue - geometry: Alue - short_name: pima - plan_regulations: - - regulation_code: pilaantunutMaaAlue - additional_information: - - type: osaAlue - - - name: Vaara-alue - geometry: Alue - short_name: vaara - plan_regulations: - - regulation_code: vaaraAlue - additional_information: - - type: osaAlue - - - name: Tulvariskialue - geometry: Alue - short_name: tulva - plan_regulations: - - regulation_code: tulvariskialue - additional_information: - - type: osaAlue - - - name: Suojavyöhyke - geometry: Alue - short_name: suojav - plan_regulations: - - regulation_code: suojavyohyke - additional_information: - - type: osaAlue - - - name: Konsultointivyöhyke - geometry: Alue - short_name: konsu - plan_regulations: - - regulation_code: konsultointivyohyke - additional_information: - - type: osaAlue - - - name: Suojeltava alueen osa - geometry: Alue - short_name: s - plan_regulations: - - regulation_code: suojelualue - additional_information: - - type: osaAlue - - # p. 14 - - name: Alueen osa, jolla sijaitsee luonnonsuojelulain mukainen luonnonsuojelualue tai -kohde - geometry: Alue - short_name: sl - plan_regulations: - - regulation_code: luonnonsuojelualue - additional_information: - - type: osaAlue - - - name: Suojeltu rakennus, jota ei saa purkaa - geometry: Alue - short_name: sr - plan_regulations: - - regulation_code: rakennussuojelualue - additional_information: - - type: osaAlue - - - name: Kansainvälisesti merkittävä suojeltu rakennus, jota ei saa purkaa - geometry: Alue - short_name: kvSR - plan_regulations: - - regulation_code: rakennussuojelualue - additional_information: - - type: osaAlue - - type: kansainvalinen - - - name: Valtakunnallisesti merkittävä suojeltu rakennus, jota ei saa purkaa - geometry: Alue - short_name: vaSR - plan_regulations: - - regulation_code: rakennussuojelualue - additional_information: - - type: osaAlue - - type: valtakunnallinen - - - name: Maakunnallisesti merkittävä suojeltu rakennus, jota ei saa purkaa - geometry: Alue - short_name: mSR - plan_regulations: - - regulation_code: rakennussuojelualue - additional_information: - - type: osaAlue - - type: maakunnallinen - - - name: Paikallisesti merkittävä suojeltu rakennus, jota ei saa purkaa - geometry: Alue - short_name: pSR - plan_regulations: - - regulation_code: rakennussuojelualue - additional_information: - - type: osaAlue - - type: paikallinen - - - name: Rakennusperinnön suojelemisesta annetun lain nojalla suojeltu rakennus, jota ei saa purkaa - geometry: Alue - short_name: srs - plan_regulations: - - regulation_code: rakennusperinnonSuojelemisestaAnnetunLainNojallaSuojeltuRakennus - additional_information: - - type: osaAlue - - - name: Alueen osa, jolla sijaitsee muinaismuistolailla rauhoitettu kiinteä muinaisjäännös - geometry: Alue - short_name: sm - plan_regulations: - - regulation_code: muinaismuistoAlue - additional_information: - - type: osaAlue - - - name: Valtion omistamien rakennusten suojelusta annetun asetuksen nojalla suojeltu rakennus, jota ei saa purkaa - geometry: Alue - short_name: sra - plan_regulations: - - regulation_code: valtionOmistamienRakennustenSuojelustaAnnetunAsetuksenNojallaSuojeltuRakennus - additional_information: - - type: osaAlue - - - name: Kirkkolain nojalla suojeltu kirkollinen rakennus - geometry: Alue - short_name: srk - plan_regulations: - - regulation_code: suojeltuKirkollinenRakennus - additional_information: - - type: osaAlue - - - name: Ortodoksisesta kirkosta annetun lain nojalla suojeltu kirkko tai rukoushuone - geometry: Alue - short_name: srko - plan_regulations: - - regulation_code: suojeltuOrtodoksinenKirkkoTaiRukoushuone - additional_information: - - type: osaAlue - - - name: Ekologisen kompensaation alue - geometry: Alue - short_name: ekok - plan_regulations: - - regulation_code: ekologisenKompensaationAlue - additional_information: - - type: osaAlue - - - name: Hulevesien hallintaan tarkoitettu alue - geometry: Alue - short_name: hule - plan_regulations: - - regulation_code: hulevesienHallintaAlue - additional_information: - - type: osaAlue - - - name: Maa-ainesten vastaanotto- tai läjitysalue - geometry: Alue - short_name: läji - plan_regulations: - - regulation_code: maaAinestenVastaanottoTaiLajitysAlue - additional_information: - - type: osaAlue - - - name: Maanalainen tila - geometry: Alue - short_name: maa - plan_regulations: - - regulation_code: rakennusala - additional_information: - - type: osaAlue - - type: maanalainenTila - - - name: Maanalainen pysäköintilaitos - geometry: Alue - short_name: maaLP - plan_regulations: - - regulation_code: pysakointilaitostenAlue - additional_information: - - type: osaAlue - - type: maanalainenTila - - # p. 15 - - name: Maanalainen yleinen pysäköintilaitos - geometry: Alue - short_name: maaLPY - plan_regulations: - - regulation_code: pysakointilaitostenAlue - additional_information: - - type: osaAlue - - type: maanalainenTila - - type: varattuYleiseenKayttoon - - - name: Liikennetunneli - geometry: Alue - short_name: lt - plan_regulations: - - regulation_code: liikennetunneli - additional_information: - - type: osaAlue - - - name: Maanalainen liikennetunneli - geometry: Alue - short_name: maalt - plan_regulations: - - regulation_code: liikennetunneli - additional_information: - - type: osaAlue - - type: maanalainenTila - - - name: Alue, jolle saa sijoittaa polttoaineen jakeluaseman - geometry: Alue - short_name: pj - plan_regulations: - - regulation_code: uloke - additional_information: - - type: osaAlue - - - name: Uloke - geometry: Alue - short_name: u - plan_regulations: - - regulation_code: polttoaineenJakeluasema - additional_information: - - type: osaAlue - - - name: Rakennukseen jätettävä kulkuaukko - geometry: Alue - short_name: # NOTE: Check symbol - plan_regulations: - - regulation_code: rakennukseenJatettavaKulkuaukko - additional_information: - - type: osaAlue - - - name: Valokatteinen tila - geometry: Alue - short_name: vk - plan_regulations: - - regulation_code: valokatteinenTila - additional_information: - - type: osaAlue - - - name: Leikki- ja oleskelualueeksi varattu alueen osa - geometry: Alue - short_name: le - plan_regulations: - - regulation_code: leikkiJaOleskelualue - additional_information: - - type: osaAlue - - - name: Istutettava alueen osa - geometry: Alue - short_name: # NOTE: Check symbol - plan_regulations: - - regulation_code: istutettavaAlue - additional_information: - - type: osaAlue - - - name: Ajoyhteys - geometry: Alue - short_name: ajo - plan_regulations: - - regulation_code: ajoyhteys - additional_information: - - type: osaAlue - - - name: Eritasoristeys - geometry: Alue - short_name: eri - plan_regulations: - - regulation_code: eritasoristeys - additional_information: - - type: osaAlue - - - name: Alueen sisäiselle huoltoliikenteelle varattu alueen osa - geometry: Alue - short_name: h - plan_regulations: - - regulation_code: huoltoajoalue - additional_information: - - type: osaAlue - - type: varattuAlueenSisaiseenKayttoon - - - name: Alueen sisäiselle jalankululle varattu alueen osa - geometry: Alue - short_name: jk - plan_regulations: - - regulation_code: jalankulkualue - additional_information: - - type: osaAlue - - type: varattuAlueenSisaiseenKayttoon - - - name: Yleiselle jalankululle varattu alueen osa - geometry: Alue - short_name: jk - plan_regulations: - - regulation_code: jalankulkualue - additional_information: - - type: osaAlue - - type: varattuYleiseenKayttoon - - - name: Yleiselle pyöräilylle varattu alueen osa - geometry: Alue - short_name: pp - plan_regulations: - - regulation_code: pyorailyalue - additional_information: - - type: osaAlue - - type: varattuYleiseenKayttoon - - - name: Yleiselle jalankululle ja pyöräilylle varattu alueen osa - geometry: Alue - short_name: jk/pp - plan_regulations: - - regulation_code: jalankulkualue - additional_information: - - type: osaAlue - - type: varattuYleiseenKayttoon - - regulation_code: pyorailyalue - additional_information: - - type: osaAlue - - type: varattuYleiseenKayttoon - - # p. 16 - - name: Maantien suoja-alueeksi varattu alueen osa - geometry: Alue - short_name: mtsu - plan_regulations: - - regulation_code: maantienSuojaAlue - additional_information: - - type: osaAlue - - - name: Maantien näkemäalueeksi varattu alueen osa - geometry: Alue - short_name: mtnä - plan_regulations: - - regulation_code: maantienNakemaAlue - additional_information: - - type: osaAlue - - - name: Rautatien suoja-alueeksi varattu alueen osa - geometry: Alue - short_name: rtsu - plan_regulations: - - regulation_code: rautatienSuojaAlue - additional_information: - - type: osaAlue - - - name: Rautatien näkemäalueeksi varattu alueen osa - geometry: Alue - short_name: rtnä - plan_regulations: - - regulation_code: rautatienNakemaAlue - additional_information: - - type: osaAlue - - - name: Alikulku - geometry: Alue - short_name: ali - plan_regulations: - - regulation_code: alikulku - additional_information: - - type: osaAlue - - - name: Ylikulku - geometry: Alue - short_name: yli - plan_regulations: - - regulation_code: ylikulku - additional_information: - - type: osaAlue - - - name: Alueen osa, jolla sijaitsee tai jolle on rakennettava melueste - geometry: Alue - short_name: mee - plan_regulations: - - regulation_code: melueste - additional_information: - - type: osaAlue - - - name: Pysäköimispaikka - geometry: Alue - short_name: p - plan_regulations: - - regulation_code: pysakoinninAlue - additional_information: - - type: osaAlue - - - name: Pysäkki - geometry: Alue - short_name: pys - plan_regulations: - - regulation_code: pysakki - additional_information: - - type: osaAlue - - - name: Johtoa varten varattu alueen osa - geometry: Alue - short_name: # NOTE: Check symbol - plan_regulations: - - regulation_code: JohtoPutkiTaiLinja - additional_information: - - type: osaAlue - - # p. 17 + - name: Kunnan tai kaupunginosan raja + geometry: Alue + short_name: # NOTE: Check symbol + plan_regulations: + - regulation_code: kunnanTaiKaupunginOsa + additional_information: + - type: osaAlue + + - name: Korttelialue tai korttelialueen osa + geometry: Alue + short_name: # NOTE: Check symbol + plan_regulations: + - regulation_code: korttelialueTaiKorttelialueenOsa # NOTE: Check p. 11 if "korttelialue" + additional_information: + - type: osaAlue + + - name: Sitovan tonttijaon mukainen tontti + geometry: Alue + short_name: # NOTE: Check symbol + plan_regulations: + - regulation_code: ohjeellinenRakennuspaikka + additional_information: + - type: osaAlue + + - name: Ohjeellinen tontti/rakennuspaikka + geometry: Alue + short_name: # NOTE: Check symbol + plan_regulations: + - regulation_code: sitovanTonttijaonMukainenTontti + additional_information: + - type: osaAlue + + - name: Rakennusala + geometry: Alue + short_name: # NOTE: Check symbol + plan_regulations: + - regulation_code: rakennusala + additional_information: + - type: osaAlue + + - name: Auton säilytyspaikan rakennusala + geometry: Alue + short_name: a + plan_regulations: + - regulation_code: rakennusala + additional_information: + - type: osaAlue + - type: kayttotarkoituskohdistus + code_value: pysakoinninAlue + + - name: Rakennusala, jolle saa sijoittaa lasten päiväkodin + geometry: Alue + short_name: pk + plan_regulations: + - regulation_code: rakennusala + additional_information: + - type: osaAlue + - type: kayttotarkoituskohdistus + code_value: opetusrakennustenAlue + + - name: Rakennusala, jolle saa sijoittaa myymälän + geometry: Alue + short_name: m + plan_regulations: + - regulation_code: rakennusala + additional_information: + - type: osaAlue + - type: kayttotarkoituskohdistus + code_value: myymalarakennustenAlue + + # p. 12 + - name: Rakennusala, jolle saa sijoittaa maatilan talouskeskuksen + geometry: Alue + short_name: am + plan_regulations: + - regulation_code: rakennusala + additional_information: + - type: osaAlue + - type: kayttotarkoituskohdistus + code_value: maatilanTalouskeskuksenAlue + + - name: Rakennusala, jolle saa sijoittaa talousrakennuksen + geometry: Alue + short_name: t + plan_regulations: + - regulation_code: rakennusalaJolleSaaSijoittaaTalousrakennuksen + additional_information: + - type: osaAlue + + - name: Rakennusala, jolle saa sijoittaa saunan + geometry: Alue + short_name: sa + plan_regulations: + - regulation_code: rakennusalaJolleSaaSijoittaaSaunan + additional_information: + - type: osaAlue + + - name: Kaupunki- tai kyläkuvallisesti tärkeä alue tai alueen osa + geometry: Alue + short_name: sk + plan_regulations: + - regulation_code: kaupunkiTaiKylakuvallisestiArvokasAlue + additional_information: + - type: osaAlue + + - name: Rakennetun kulttuuriympäristön ja maiseman vaalimisen kannalta tärkeä alue muinaisjäännös + geometry: Alue + short_name: kyma + plan_regulations: + - regulation_code: maisemallisestiArvokasAlue + additional_information: + - type: osaAlue + - regulation_code: merkittavaRakennettuKulttuuriymparisto + additional_information: + - type: osaAlue + + - name: Maisemallisesti arvokas alue + geometry: Alue + short_name: ma + plan_regulations: + - regulation_code: maisemallisestiArvokasAlue + additional_information: + - type: osaAlue + + - name: Kansainvälisesti arvokas maisema-alue + geometry: Alue + short_name: kvma + plan_regulations: + - regulation_code: maisemallisestiArvokasAlue + additional_information: + - type: osaAlue + - type: kansainvalinen + + - name: Valtakunnallisesti arvokas maisema-alue + geometry: Alue + short_name: vama + plan_regulations: + - regulation_code: valtakunnallisestiArvokasMaisemaAlue + additional_information: + - type: osaAlue + - type: valtakunnallinen + + - name: Maakunnallisesti arvokas maisema-alue + geometry: Alue + short_name: mma + plan_regulations: + - regulation_code: maisemallisestiArvokasAlue + additional_information: + - type: osaAlue + - type: maakunnallinen + + - name: Paikallisesti arvokas maisema-alue + geometry: Alue + short_name: pma + plan_regulations: + - regulation_code: maisemallisestiArvokasAlue + additional_information: + - type: osaAlue + - type: paikallinen + + - name: Merkittävä rakennettu kulttuuriympäristö + geometry: Alue + short_name: ky + plan_regulations: + - regulation_code: merkittavaRakennettuKulttuuriymparisto + additional_information: + - type: osaAlue + + - name: Kansainvälisesti merkittävä rakennettu kulttuuriympäristö + geometry: Alue + short_name: kvky + plan_regulations: + - regulation_code: merkittavaRakennettuKulttuuriymparisto + additional_information: + - type: osaAlue + - type: kansainvalinen + + - name: Valtakunnallisesti merkittävä rakennettu kulttuuriympäristö + geometry: Alue + short_name: rky + plan_regulations: + - regulation_code: valtakunnallisestiMerkittavaRakennettuKulttuuriymparisto + additional_information: + - type: osaAlue + - type: valtakunnallinen + + - name: Maakunnallisesti merkittävä rakennettu kulttuuriympäristö + geometry: Alue + short_name: mky + plan_regulations: + - regulation_code: merkittavaRakennettuKulttuuriymparisto + additional_information: + - type: osaAlue + - type: maakunnallinen + + - name: Paikallisesti merkittävä rakennettu kulttuuriympäristö + geometry: Alue + short_name: pky + plan_regulations: + - regulation_code: merkittavaRakennettuKulttuuriymparisto + additional_information: + - type: osaAlue + - type: paikallinen + + - name: Muu arkeologinen kohde, joka ei ole muinaismuistolain nojalla rauhoitettu kiinteä + geometry: Alue + short_name: ark + plan_regulations: + - regulation_code: muuArkeologinenKohde + additional_information: + - type: osaAlue + + - name: Valtakunnallisesti merkittävä arkeologinen kohde + short_name: vark + plan_regulations: + - regulation_code: valtakunnallisestiMerkittavaArkeologinenKohde + additional_information: + - type: osaAlue + - type: valtakunnallinen + + # p. 13 + - name: Arvokas harjualue tai muu geologinen muodostuma + geometry: Alue + short_name: ge + plan_regulations: + - regulation_code: arvokasGeologinenMuodostuma + additional_information: + - type: osaAlue + + - name: Tärkeä veden hankintaan soveltuva pohjavesialue + geometry: Alue + short_name: pv + plan_regulations: + - regulation_code: pohjavesialue + additional_information: + - type: osaAlue + + - name: Natura 2000 -verkostoon kuuluva alue + geometry: Alue + short_name: nat + plan_regulations: + - regulation_code: natura2000VerkostonAlue + additional_information: + - type: osaAlue + + - name: Luonnon monimuotoisuuden kannalta erityisen tärkeä alue + geometry: Alue + short_name: luo + plan_regulations: + - regulation_code: luonnonMonimuotoisuudenKannaltaErityisenTarkeaAlue + additional_information: + - type: osaAlue + + - name: UNESCO:n maailmanperintökohde + geometry: Alue + short_name: un + plan_regulations: + - regulation_code: unesconMaailmanperintokohde + additional_information: + - type: osaAlue + + - name: Kansallinen kaupunkipuisto + geometry: Alue + short_name: kp + plan_regulations: + - regulation_code: kansallinenKaupunkipuisto + additional_information: + - type: osaAlue + + - name: Kehittämisalue + geometry: Alue + short_name: ke + plan_regulations: + - regulation_code: kehittamisalue + additional_information: + - type: osaAlue + + - name: Alue, jolle määrätään asemakaavassa määräaikainen kielto rakennuksen rakentamiseksi + geometry: Alue + short_name: mrk + plan_regulations: + - regulation_code: maaraAikainenKieltoRakennuksenRakentamiseksi + additional_information: + - type: osaAlue + + - name: Tuulivoimaloiden alue + geometry: Alue + short_name: tv + plan_regulations: + - regulation_code: tuulivoimalaAlue + additional_information: + - type: osaAlue + + - name: Aurinkovoimaloiden alue + geometry: Alue + short_name: aur + plan_regulations: + - regulation_code: aurinkovoimalaAlue + additional_information: + - type: osaAlue + + - name: Ympäristöhäiriöalue + geometry: Alue + short_name: häiriö + plan_regulations: + - regulation_code: ymparistohairioalue + additional_information: + - type: osaAlue + + - name: Melualue + geometry: Alue + short_name: melu + plan_regulations: + - regulation_code: melualue + additional_information: + - type: osaAlue + + - name: Tärinäalue + geometry: Alue + short_name: tärinä + plan_regulations: + - regulation_code: tarinaAlue + additional_information: + - type: osaAlue + + - name: Radonriskialue + geometry: Alue + short_name: radon + plan_regulations: + - regulation_code: radonriskialue + additional_information: + - type: osaAlue + + - name: Pilaantunut maa-alue + geometry: Alue + short_name: pima + plan_regulations: + - regulation_code: pilaantunutMaaAlue + additional_information: + - type: osaAlue + + - name: Vaara-alue + geometry: Alue + short_name: vaara + plan_regulations: + - regulation_code: vaaraAlue + additional_information: + - type: osaAlue + + - name: Tulvariskialue + geometry: Alue + short_name: tulva + plan_regulations: + - regulation_code: tulvariskialue + additional_information: + - type: osaAlue + + - name: Suojavyöhyke + geometry: Alue + short_name: suojav + plan_regulations: + - regulation_code: suojavyohyke + additional_information: + - type: osaAlue + + - name: Konsultointivyöhyke + geometry: Alue + short_name: konsu + plan_regulations: + - regulation_code: konsultointivyohyke + additional_information: + - type: osaAlue + + - name: Suojeltava alueen osa + geometry: Alue + short_name: s + plan_regulations: + - regulation_code: suojelualue + additional_information: + - type: osaAlue + + # p. 14 + - name: Alueen osa, jolla sijaitsee luonnonsuojelulain mukainen luonnonsuojelualue tai -kohde + geometry: Alue + short_name: sl + plan_regulations: + - regulation_code: luonnonsuojelualue + additional_information: + - type: osaAlue + + - name: Suojeltu rakennus, jota ei saa purkaa + geometry: Alue + short_name: sr + plan_regulations: + - regulation_code: rakennussuojelualue + additional_information: + - type: osaAlue + + - name: Kansainvälisesti merkittävä suojeltu rakennus, jota ei saa purkaa + geometry: Alue + short_name: kvSR + plan_regulations: + - regulation_code: rakennussuojelualue + additional_information: + - type: osaAlue + - type: kansainvalinen + + - name: Valtakunnallisesti merkittävä suojeltu rakennus, jota ei saa purkaa + geometry: Alue + short_name: vaSR + plan_regulations: + - regulation_code: rakennussuojelualue + additional_information: + - type: osaAlue + - type: valtakunnallinen + + - name: Maakunnallisesti merkittävä suojeltu rakennus, jota ei saa purkaa + geometry: Alue + short_name: mSR + plan_regulations: + - regulation_code: rakennussuojelualue + additional_information: + - type: osaAlue + - type: maakunnallinen + + - name: Paikallisesti merkittävä suojeltu rakennus, jota ei saa purkaa + geometry: Alue + short_name: pSR + plan_regulations: + - regulation_code: rakennussuojelualue + additional_information: + - type: osaAlue + - type: paikallinen + + - name: Rakennusperinnön suojelemisesta annetun lain nojalla suojeltu rakennus, jota ei saa purkaa + geometry: Alue + short_name: srs + plan_regulations: + - regulation_code: rakennusperinnonSuojelemisestaAnnetunLainNojallaSuojeltuRakennus + additional_information: + - type: osaAlue + + - name: Alueen osa, jolla sijaitsee muinaismuistolailla rauhoitettu kiinteä muinaisjäännös + geometry: Alue + short_name: sm + plan_regulations: + - regulation_code: muinaismuistoAlue + additional_information: + - type: osaAlue + + - name: Valtion omistamien rakennusten suojelusta annetun asetuksen nojalla suojeltu rakennus, jota ei saa purkaa + geometry: Alue + short_name: sra + plan_regulations: + - regulation_code: valtionOmistamienRakennustenSuojelustaAnnetunAsetuksenNojallaSuojeltuRakennus + additional_information: + - type: osaAlue + + - name: Kirkkolain nojalla suojeltu kirkollinen rakennus + geometry: Alue + short_name: srk + plan_regulations: + - regulation_code: suojeltuKirkollinenRakennus + additional_information: + - type: osaAlue + + - name: Ortodoksisesta kirkosta annetun lain nojalla suojeltu kirkko tai rukoushuone + geometry: Alue + short_name: srko + plan_regulations: + - regulation_code: suojeltuOrtodoksinenKirkkoTaiRukoushuone + additional_information: + - type: osaAlue + + - name: Ekologisen kompensaation alue + geometry: Alue + short_name: ekok + plan_regulations: + - regulation_code: ekologisenKompensaationAlue + additional_information: + - type: osaAlue + + - name: Hulevesien hallintaan tarkoitettu alue + geometry: Alue + short_name: hule + plan_regulations: + - regulation_code: hulevesienHallintaAlue + additional_information: + - type: osaAlue + + - name: Maa-ainesten vastaanotto- tai läjitysalue + geometry: Alue + short_name: läji + plan_regulations: + - regulation_code: maaAinestenVastaanottoTaiLajitysAlue + additional_information: + - type: osaAlue + + - name: Maanalainen tila + geometry: Alue + short_name: maa + plan_regulations: + - regulation_code: rakennusala + additional_information: + - type: osaAlue + - type: maanalainenTila + + - name: Maanalainen pysäköintilaitos + geometry: Alue + short_name: maaLP + plan_regulations: + - regulation_code: pysakointilaitostenAlue + additional_information: + - type: osaAlue + - type: maanalainenTila + + # p. 15 + - name: Maanalainen yleinen pysäköintilaitos + geometry: Alue + short_name: maaLPY + plan_regulations: + - regulation_code: pysakointilaitostenAlue + additional_information: + - type: osaAlue + - type: maanalainenTila + - type: varattuYleiseenKayttoon + + - name: Liikennetunneli + geometry: Alue + short_name: lt + plan_regulations: + - regulation_code: liikennetunneli + additional_information: + - type: osaAlue + + - name: Maanalainen liikennetunneli + geometry: Alue + short_name: maalt + plan_regulations: + - regulation_code: liikennetunneli + additional_information: + - type: osaAlue + - type: maanalainenTila + + - name: Alue, jolle saa sijoittaa polttoaineen jakeluaseman + geometry: Alue + short_name: pj + plan_regulations: + - regulation_code: uloke + additional_information: + - type: osaAlue + + - name: Uloke + geometry: Alue + short_name: u + plan_regulations: + - regulation_code: polttoaineenJakeluasema + additional_information: + - type: osaAlue + + - name: Rakennukseen jätettävä kulkuaukko + geometry: Alue + short_name: # NOTE: Check symbol + plan_regulations: + - regulation_code: rakennukseenJatettavaKulkuaukko + additional_information: + - type: osaAlue + + - name: Valokatteinen tila + geometry: Alue + short_name: vk + plan_regulations: + - regulation_code: valokatteinenTila + additional_information: + - type: osaAlue + + - name: Leikki- ja oleskelualueeksi varattu alueen osa + geometry: Alue + short_name: le + plan_regulations: + - regulation_code: leikkiJaOleskelualue + additional_information: + - type: osaAlue + + - name: Istutettava alueen osa + geometry: Alue + short_name: # NOTE: Check symbol + plan_regulations: + - regulation_code: istutettavaAlue + additional_information: + - type: osaAlue + + - name: Ajoyhteys + geometry: Alue + short_name: ajo + plan_regulations: + - regulation_code: ajoyhteys + additional_information: + - type: osaAlue + + - name: Eritasoristeys + geometry: Alue + short_name: eri + plan_regulations: + - regulation_code: eritasoristeys + additional_information: + - type: osaAlue + + - name: Alueen sisäiselle huoltoliikenteelle varattu alueen osa + geometry: Alue + short_name: h + plan_regulations: + - regulation_code: huoltoajoalue + additional_information: + - type: osaAlue + - type: varattuAlueenSisaiseenKayttoon + + - name: Alueen sisäiselle jalankululle varattu alueen osa + geometry: Alue + short_name: jk + plan_regulations: + - regulation_code: jalankulkualue + additional_information: + - type: osaAlue + - type: varattuAlueenSisaiseenKayttoon + + - name: Yleiselle jalankululle varattu alueen osa + geometry: Alue + short_name: jk + plan_regulations: + - regulation_code: jalankulkualue + additional_information: + - type: osaAlue + - type: varattuYleiseenKayttoon + + - name: Yleiselle pyöräilylle varattu alueen osa + geometry: Alue + short_name: pp + plan_regulations: + - regulation_code: pyorailyalue + additional_information: + - type: osaAlue + - type: varattuYleiseenKayttoon + + - name: Yleiselle jalankululle ja pyöräilylle varattu alueen osa + geometry: Alue + short_name: jk/pp + plan_regulations: + - regulation_code: jalankulkualue + additional_information: + - type: osaAlue + - type: varattuYleiseenKayttoon + - regulation_code: pyorailyalue + additional_information: + - type: osaAlue + - type: varattuYleiseenKayttoon + + # p. 16 + - name: Maantien suoja-alueeksi varattu alueen osa + geometry: Alue + short_name: mtsu + plan_regulations: + - regulation_code: maantienSuojaAlue + additional_information: + - type: osaAlue + + - name: Maantien näkemäalueeksi varattu alueen osa + geometry: Alue + short_name: mtnä + plan_regulations: + - regulation_code: maantienNakemaAlue + additional_information: + - type: osaAlue + + - name: Rautatien suoja-alueeksi varattu alueen osa + geometry: Alue + short_name: rtsu + plan_regulations: + - regulation_code: rautatienSuojaAlue + additional_information: + - type: osaAlue + + - name: Rautatien näkemäalueeksi varattu alueen osa + geometry: Alue + short_name: rtnä + plan_regulations: + - regulation_code: rautatienNakemaAlue + additional_information: + - type: osaAlue + + - name: Alikulku + geometry: Alue + short_name: ali + plan_regulations: + - regulation_code: alikulku + additional_information: + - type: osaAlue + + - name: Ylikulku + geometry: Alue + short_name: yli + plan_regulations: + - regulation_code: ylikulku + additional_information: + - type: osaAlue + + - name: Alueen osa, jolla sijaitsee tai jolle on rakennettava melueste + geometry: Alue + short_name: mee + plan_regulations: + - regulation_code: melueste + additional_information: + - type: osaAlue + + - name: Pysäköimispaikka + geometry: Alue + short_name: p + plan_regulations: + - regulation_code: pysakoinninAlue + additional_information: + - type: osaAlue + + - name: Pysäkki + geometry: Alue + short_name: pys + plan_regulations: + - regulation_code: pysakki + additional_information: + - type: osaAlue + + - name: Johtoa varten varattu alueen osa + geometry: Alue + short_name: # NOTE: Check symbol + plan_regulations: + - regulation_code: JohtoPutkiTaiLinja + additional_information: + - type: osaAlue + + # p. 17 - category_code: numeerisetJaTekstimuotoiset name: Kaavamääräysryhmät, joihin liittyy jokin numeerinen tai tekstimuotoinen arvo plan_regulation_groups: - - - name: Kaupungin- tai kunnanosan numero - geometry: Alue - plan_regulations: - - regulation_code: kaupunginTaiKunnanosanNumero - - - name: Kaupungin- tai kunnanosan nimi - geometry: Alue - plan_regulations: - - regulation_code: kaupunginTaiKunnanosanNimi - - - name: Korttelin numero - geometry: Alue - plan_regulations: - - regulation_code: korttelinNumero - - - name: Tontin tai rakennuspaikan numero - geometry: Alue - plan_regulations: - - regulation_code: tontinTaiRakennuspaikanNumero - - - name: Ohjeellisen tontin tai rakennuspaikan numero - geometry: Alue - plan_regulations: - - regulation_code: tontinTaiRakennuspaikanNumero - - - name: Kadun tai tien nimi - geometry: Alue - plan_regulations: - - regulation_code: kadunTaiTienNimi - - - name: Torin tai katuaukion nimi - geometry: Alue - plan_regulations: - - regulation_code: torinTaiKatuaukionNimi - - - name: Puiston tai muun yleisen alueen nimi - geometry: Alue - plan_regulations: - - regulation_code: puistonTaiMuunYleisenAlueenNimi - - - name: Rakennusoikeus kerrosalaneliömetreinä - geometry: Alue - plan_regulations: - - regulation_code: sallittuKerrosala - - - name: Rakennusoikeus kuutiometreinä - geometry: Alue - plan_regulations: - - regulation_code: sallittuRakennustilavuus - - - name: Rakentamisen suhde alueen pinta-alaan (%) - geometry: Alue - description: Luku osoittaa, kuinka suuren osan alueesta tai rakennusalasta saa käyttää rakentamiseen - plan_regulations: - - regulation_code: rakentamisenSuhdeAlueenPintaAlaan - - - name: Väljyysluku - geometry: Alue - description: Luku osoittaa, kuinka suuri osa alueesta tai rakennusalasta tulee jättää rakentamatta - plan_regulations: - - regulation_code: valjyysluku - - - name: Suurin sallittu maanpäällinen kerrosluku (luku) - geometry: Alue - descrption: Roomalainen numero osoittaa rakennusten, rakennuksen tai sen osan suurimman sallitun kerrosluvun - plan_regulations: - - regulation_code: maanpaallinenKerroslukuLuku - - # p. 18 - - name: Maanpäällinen vähimmäis- ja enimmäiskerrosluku (arvoväli) - geometry: Alue - description: Roomalaisin numeroin ilmaistu arvoväli osoittaa rakennusten, rakennuksen tai sen osan kerrosluvun vähimmäis- ja enimmäismäärän - plan_regulations: - - regulation_code: maanpaallinenKerroslukuArvovali - - - name: Suurin sallittu maanalainen kerrosluku (luku) - geometry: Alue - description: Roomalainen numero osoittaa rakennusten, rakennuksen tai sen osan suurimman maan alle sijoitettavan sallitun kerrosluvun - plan_regulations: - - regulation_code: maanalainenKerroslukuLuku - - - name: Maanalainen vähimmäis- ja enimmäiskerrosluku (arvoväli) - geometry: Alue - description: Roomalaisin numeroin ilmaistu arvoväli osoittaa rakennusten, rakennuksen tai sen osan kerrosluvun vähimmäis- ja enimmäismäärän - plan_regulations: - - regulation_code: maanalainenKerroslukuArvovali - - - name: Kansipihan suurin sallittu kerrosluku kansipihalta ylöspäin - geometry: Alue - plan_regulations: - - regulation_code: maanpaallinenKerroslukuLuku - - - name: Kansipihan suurin sallittu kerrosluku kansipihalta alaspäin - geometry: Alue - plan_regulations: - - regulation_code: maanpaallinenKerroslukuLuku - - - name: Kellarin sallittu osuus kerrosalasta - geometry: Alue - description: Murtoluku roomalaisen numeron edessä osoittaa, kuinka suuren osan rakennuksen suurimman kerroksen alasta saa kellarikerroksessa käyttää kerrosalaan luettavaksi tilaksi - plan_regulations: - - regulation_code: kellarinSallittuOsuusKerrosalasta - - - name: Ullakon sallittu osuus kerrosalasta - geometry: Alue - description: Murtoluku roomalaisen numeron jäljessä osoittaa, kuinka suuren osan rakennuksen suurimman kerroksen alasta ullakon tasolla saa käyttää kerrosalaan laskettavaksi tilaksi - plan_regulations: - - regulation_code: ullakonSallittuOsuusKerrosalasta - - - name: Tehokkuusluku - geometry: Alue - description: Tehokkuusluku eli kerrosalan suhde tontin/kerrosalan suhde tontin/rakennuspaikan pinta-alaan - plan_regulations: - - regulation_code: tehokkuusluku - - - name: Vihertehokkuus - geometry: Alue - description: Vihertehokkuus eli kasvillisuuden peittämän pinnan suhde alueen pinta-alaan - plan_regulations: - - regulation_code: vihertehokkuus - - - name: Kattokaltevuus - geometry: Alue - plan_regulations: - - regulation_code: kattokaltevuus - - - name: Maanpinnan likimääräinen korkeusasema - geometry: Alue - plan_regulations: - - regulation_code: maanpinnanKorkeusasema - - - name: Rakennuksen vesikaton ylimmän kohdan korkeusasema - geometry: Alue - plan_regulations: - - regulation_code: vesikatonYlimmanKohdanKorkeusasema - - - name: Rakennuksen julkisivupinnan ja vesikaton leikkauskohdan ylin korkeusasema - geometry: Alue - plan_regulations: - - regulation_code: julkisivupinnanJaVesikatonLeikkauskohdanKorkeusasema - - # p. 19 - - name: Rakennuksen julkisivun enimmäiskorkeus metreinä - geometry: Alue - plan_regulations: - - regulation_code: julkisivunEnimmaiskorkeus - - - name: Rakennuksen, rakenteiden ja laitteiden ylin korkeusasema - geometry: Alue - plan_regulations: - - regulation_code: rakennustenRakenteidenJaLaitteidenYlinKorkeusasema - - - name: Rakennuksen, rakenteiden ja laitteiden alin korkeusasema - geometry: Alue - plan_regulations: - - regulation_code: rakennustenRakenteidenJaLaitteidenAlinKorkeusasema - - - name: Alin painovoimainen viemäröintitaso - geometry: Alue - plan_regulations: - - regulation_code: alinPainovoimainenViemarointitaso - - - name: Kosteudelle alttiiden rakenteiden alin rakentamiskorkeus - geometry: Alue - plan_regulations: - - regulation_code: kosteudelleAlttiidenRakenteidenAlinRakentamiskorkeus - - - name: Tuulivoimalan enimmäiskorkeus - geometry: Alue - description: Määräys osoittaa tuulivoimalan suurimman sallitun kokonaiskorkeuden - plan_regulations: - - regulation_code: tuulivoimalanEnimmaiskorkeus - - - name: Tuulivoimaloiden määrä - geometry: Alue - description: Määräys osoittaa, kuinka monta tuulivoimalaa alueelle saa rakentaa - plan_regulations: - - regulation_code: tuulivoimaloidenMaara - - - name: Asuntojen määrä - geometry: Alue - description: Määräys osoittaa, kuinka monta asuntoa alueelle on rakennettava - plan_regulations: - - regulation_code: asuntojenMaara - - - name: Pyöräpaikkojen määrä - geometry: Alue - description: Määräys osoittaa, kuinka monta pyöräpaikkaa alueelle on rakennettava - plan_regulations: - - regulation_code: pyorapaikkojenMaara - - - name: Autopaikkojen määrä - geometry: Alue - descrpition: ääräys osoittaa, kuinka monta autopaikkaa alueelle on rakennettava - plan_regulations: - - regulation_code: autopaikkojenMaara - - - name: Kerrosneliömäärä yhtä pyöräpaikkaa kohden - geometry: Alue - description: Määräys osoittaa, kuinka monta kerrosalaneliömetriä kohti on rakennettava yksi pyöräpaikka - plan_regulations: - - regulation_code: kerrosneliomaaraYhtaPyorapaikkaaKohden - - - name: Kerrosneliömäärä yhtä autopaikkaa kohden - geometry: Alue - description: Määräys osoittaa, kuinka monta kerrosalaneliömetriä kohti on rakennettava yksi autopaikka - plan_regulations: - - regulation_code: kerrosneliomaaraYhtaAutopaikkaaKohden - - - name: Pyöräpaikkojen määrä asuntoa kohden - geometry: Alue - description: Määräys osoittaa, kuinka monta pyöräpaikkaa asuntoa kohti on rakennettava - plan_regulations: - - regulation_code: pyorapaikkojenMaaraAsuntoaKohden - - - name: Autopaikkojen määrä asuntoa kohden - geometry: Alue - description: Määräys osoittaa, kuinka monta autopaikkaa asuntoa kohti on rakennettava - plan_regulations: - - regulation_code: autopaikkojenMaaraAsuntoaKohden - - - name: Alueelle sijoitettavien rakenteiden ääneneristavyys vähintään 00 dB - geometry: Alue - description: Määräys osoittaa, että alueelle sijoitettavien rakenteiden ääneneristävyyden tulee olla vähintään 00 dB - plan_regulations: - - regulation_code: aaneneristavyys - - # p. 20 + - name: Kaupungin- tai kunnanosan numero + geometry: Alue + plan_regulations: + - regulation_code: kaupunginTaiKunnanosanNumero + + - name: Kaupungin- tai kunnanosan nimi + geometry: Alue + plan_regulations: + - regulation_code: kaupunginTaiKunnanosanNimi + + - name: Korttelin numero + geometry: Alue + plan_regulations: + - regulation_code: korttelinNumero + + - name: Tontin tai rakennuspaikan numero + geometry: Alue + plan_regulations: + - regulation_code: tontinTaiRakennuspaikanNumero + + - name: Ohjeellisen tontin tai rakennuspaikan numero + geometry: Alue + plan_regulations: + - regulation_code: tontinTaiRakennuspaikanNumero + + - name: Kadun tai tien nimi + geometry: Alue + plan_regulations: + - regulation_code: kadunTaiTienNimi + + - name: Torin tai katuaukion nimi + geometry: Alue + plan_regulations: + - regulation_code: torinTaiKatuaukionNimi + + - name: Puiston tai muun yleisen alueen nimi + geometry: Alue + plan_regulations: + - regulation_code: puistonTaiMuunYleisenAlueenNimi + + - name: Rakennusoikeus kerrosalaneliömetreinä + geometry: Alue + plan_regulations: + - regulation_code: sallittuKerrosala + + - name: Rakennusoikeus kuutiometreinä + geometry: Alue + plan_regulations: + - regulation_code: sallittuRakennustilavuus + + - name: Rakentamisen suhde alueen pinta-alaan (%) + geometry: Alue + description: Luku osoittaa, kuinka suuren osan alueesta tai rakennusalasta saa käyttää rakentamiseen + plan_regulations: + - regulation_code: rakentamisenSuhdeAlueenPintaAlaan + + - name: Väljyysluku + geometry: Alue + description: Luku osoittaa, kuinka suuri osa alueesta tai rakennusalasta tulee jättää rakentamatta + plan_regulations: + - regulation_code: valjyysluku + + - name: Suurin sallittu maanpäällinen kerrosluku (luku) + geometry: Alue + descrption: Roomalainen numero osoittaa rakennusten, rakennuksen tai sen osan suurimman sallitun kerrosluvun + plan_regulations: + - regulation_code: maanpaallinenKerroslukuLuku + + # p. 18 + - name: Maanpäällinen vähimmäis- ja enimmäiskerrosluku (arvoväli) + geometry: Alue + description: Roomalaisin numeroin ilmaistu arvoväli osoittaa rakennusten, rakennuksen tai sen osan kerrosluvun vähimmäis- ja enimmäismäärän + plan_regulations: + - regulation_code: maanpaallinenKerroslukuArvovali + + - name: Suurin sallittu maanalainen kerrosluku (luku) + geometry: Alue + description: Roomalainen numero osoittaa rakennusten, rakennuksen tai sen osan suurimman maan alle sijoitettavan sallitun kerrosluvun + plan_regulations: + - regulation_code: maanalainenKerroslukuLuku + + - name: Maanalainen vähimmäis- ja enimmäiskerrosluku (arvoväli) + geometry: Alue + description: Roomalaisin numeroin ilmaistu arvoväli osoittaa rakennusten, rakennuksen tai sen osan kerrosluvun vähimmäis- ja enimmäismäärän + plan_regulations: + - regulation_code: maanalainenKerroslukuArvovali + + - name: Kansipihan suurin sallittu kerrosluku kansipihalta ylöspäin + geometry: Alue + plan_regulations: + - regulation_code: maanpaallinenKerroslukuLuku + + - name: Kansipihan suurin sallittu kerrosluku kansipihalta alaspäin + geometry: Alue + plan_regulations: + - regulation_code: maanpaallinenKerroslukuLuku + + - name: Kellarin sallittu osuus kerrosalasta + geometry: Alue + description: Murtoluku roomalaisen numeron edessä osoittaa, kuinka suuren osan rakennuksen suurimman kerroksen alasta saa kellarikerroksessa käyttää kerrosalaan luettavaksi tilaksi + plan_regulations: + - regulation_code: kellarinSallittuOsuusKerrosalasta + + - name: Ullakon sallittu osuus kerrosalasta + geometry: Alue + description: Murtoluku roomalaisen numeron jäljessä osoittaa, kuinka suuren osan rakennuksen suurimman kerroksen alasta ullakon tasolla saa käyttää kerrosalaan laskettavaksi tilaksi + plan_regulations: + - regulation_code: ullakonSallittuOsuusKerrosalasta + + - name: Tehokkuusluku + geometry: Alue + description: Tehokkuusluku eli kerrosalan suhde tontin/kerrosalan suhde tontin/rakennuspaikan pinta-alaan + plan_regulations: + - regulation_code: tehokkuusluku + + - name: Vihertehokkuus + geometry: Alue + description: Vihertehokkuus eli kasvillisuuden peittämän pinnan suhde alueen pinta-alaan + plan_regulations: + - regulation_code: vihertehokkuus + + - name: Kattokaltevuus + geometry: Alue + plan_regulations: + - regulation_code: kattokaltevuus + + - name: Maanpinnan likimääräinen korkeusasema + geometry: Alue + plan_regulations: + - regulation_code: maanpinnanKorkeusasema + + - name: Rakennuksen vesikaton ylimmän kohdan korkeusasema + geometry: Alue + plan_regulations: + - regulation_code: vesikatonYlimmanKohdanKorkeusasema + + - name: Rakennuksen julkisivupinnan ja vesikaton leikkauskohdan ylin korkeusasema + geometry: Alue + plan_regulations: + - regulation_code: julkisivupinnanJaVesikatonLeikkauskohdanKorkeusasema + + # p. 19 + - name: Rakennuksen julkisivun enimmäiskorkeus metreinä + geometry: Alue + plan_regulations: + - regulation_code: julkisivunEnimmaiskorkeus + + - name: Rakennuksen, rakenteiden ja laitteiden ylin korkeusasema + geometry: Alue + plan_regulations: + - regulation_code: rakennustenRakenteidenJaLaitteidenYlinKorkeusasema + + - name: Rakennuksen, rakenteiden ja laitteiden alin korkeusasema + geometry: Alue + plan_regulations: + - regulation_code: rakennustenRakenteidenJaLaitteidenAlinKorkeusasema + + - name: Alin painovoimainen viemäröintitaso + geometry: Alue + plan_regulations: + - regulation_code: alinPainovoimainenViemarointitaso + + - name: Kosteudelle alttiiden rakenteiden alin rakentamiskorkeus + geometry: Alue + plan_regulations: + - regulation_code: kosteudelleAlttiidenRakenteidenAlinRakentamiskorkeus + + - name: Tuulivoimalan enimmäiskorkeus + geometry: Alue + description: Määräys osoittaa tuulivoimalan suurimman sallitun kokonaiskorkeuden + plan_regulations: + - regulation_code: tuulivoimalanEnimmaiskorkeus + + - name: Tuulivoimaloiden määrä + geometry: Alue + description: Määräys osoittaa, kuinka monta tuulivoimalaa alueelle saa rakentaa + plan_regulations: + - regulation_code: tuulivoimaloidenMaara + + - name: Asuntojen määrä + geometry: Alue + description: Määräys osoittaa, kuinka monta asuntoa alueelle on rakennettava + plan_regulations: + - regulation_code: asuntojenMaara + + - name: Pyöräpaikkojen määrä + geometry: Alue + description: Määräys osoittaa, kuinka monta pyöräpaikkaa alueelle on rakennettava + plan_regulations: + - regulation_code: pyorapaikkojenMaara + + - name: Autopaikkojen määrä + geometry: Alue + descrpition: ääräys osoittaa, kuinka monta autopaikkaa alueelle on rakennettava + plan_regulations: + - regulation_code: autopaikkojenMaara + + - name: Kerrosneliömäärä yhtä pyöräpaikkaa kohden + geometry: Alue + description: Määräys osoittaa, kuinka monta kerrosalaneliömetriä kohti on rakennettava yksi pyöräpaikka + plan_regulations: + - regulation_code: kerrosneliomaaraYhtaPyorapaikkaaKohden + + - name: Kerrosneliömäärä yhtä autopaikkaa kohden + geometry: Alue + description: Määräys osoittaa, kuinka monta kerrosalaneliömetriä kohti on rakennettava yksi autopaikka + plan_regulations: + - regulation_code: kerrosneliomaaraYhtaAutopaikkaaKohden + + - name: Pyöräpaikkojen määrä asuntoa kohden + geometry: Alue + description: Määräys osoittaa, kuinka monta pyöräpaikkaa asuntoa kohti on rakennettava + plan_regulations: + - regulation_code: pyorapaikkojenMaaraAsuntoaKohden + + - name: Autopaikkojen määrä asuntoa kohden + geometry: Alue + description: Määräys osoittaa, kuinka monta autopaikkaa asuntoa kohti on rakennettava + plan_regulations: + - regulation_code: autopaikkojenMaaraAsuntoaKohden + + - name: Alueelle sijoitettavien rakenteiden ääneneristavyys vähintään 00 dB + geometry: Alue + description: Määräys osoittaa, että alueelle sijoitettavien rakenteiden ääneneristävyyden tulee olla vähintään 00 dB + plan_regulations: + - regulation_code: aaneneristavyys + + # p. 20 - category_code: rakennusalanKayttotarkoituksenOsuus name: Rakennusalaan liittyvien käyttötarkoituksen osuutta koskevat kaavamääräysryhmät plan_regulation_groups: - - - name: Rakennusalalle sallittu kerrosalan prosenttiosuus (%) asuinhuoneistoja varten - geometry: Alue - short_name: # NOTE: Check symbol - description: Määräys osoittaa, kuinka monta prosenttia rakennusalalle sallitusta kerrosalasta saadaan käyttää asuinhuoneistoja varten - plan_regulations: - - regulation_code: asumisenAlue - additional_information: - - type: kayttotarkoituksenOsuusKerrosalastaPros - - - name: Rakennusalalle sallittu kerrosalan kerrosneliömetrimäärä (k-m2) asuinhuoneistoja varten - geometry: Alue - short_name: # NOTE: Check symbol - description: Määräys osoittaa, kuinka monta kerrosneliömetriä rakennusalalle sallitusta kerrosalasta saadaan käyttää asuinhuoneistoja varten - plan_regulations: - - regulation_code: asumisenAlue - additional_information: - - type: kayttotarkoituksenOsuusKerrosalastaK-m2 - - - name: Rakennusalalle sallittu kerrostilavuuden prosenttiosuus (%) asuinhuoneistoja varten - geometry: Alue - short_name: # NOTE: Check symbol - description: Määräys osoittaa, kuinka monta prosenttia rakennusalalle sallitusta kerrostilavuudesta saadaan käyttää asuinhuoneistoja varten - plan_regulations: - - regulation_code: asumisenAlue - additional_information: - - type: kayttotarkoituksenOsuusRakennustilavuudestaPros - - - name: Rakennusalalle sallittu kerrostilavuuden kuutiometrimäärä (k-m3) asuinhuoneistoja varten - geometry: Alue - short_name: # NOTE: Check symbol - description: Määräys osoittaa, kuinka monta kuutiometriä rakennusalalle sallitusta kerrostilavuudesta saadaan käyttää asuinhuoneistoja varten - plan_regulations: - - regulation_code: asumisenAlue - additional_information: - - type: kayttotarkoituksenOsuusRakennustilavuudestaK-m3 - - - name: Rakennusalalle sallittu kerrosalan prosenttiosuus (%) myymälätiloja varten - geometry: Alue - short_name: # NOTE: Check symbol - description: Määräys osoittaa, kuinka monta prosenttia rakennusalalle sallitusta kerrosalasta saadaan käyttää myymälätiloja varten - plan_regulations: - - regulation_code: myymalarakennustenAlue - additional_information: - - type: kayttotarkoituksenOsuusKerrosalastaPros - - - name: Rakennusalalle sallittu kerrosalan kerrosneliömetrimäärä (k-m2) myymälätiloja varten - geometry: Alue - short_name: # NOTE: Check symbol - description: Määräys osoittaa, kuinka monta kerrosneliömetriä rakennusalalle sallitusta kerrosalasta saadaan käyttää myymälätiloja varten - plan_regulations: - - regulation_code: myymalarakennustenAlue - additional_information: - - type: kayttotarkoituksenOsuusKerrosalastaK-m2 - - - name: Rakennusalalle sallittu kerrostilavuuden prosenttiosuus (%) myymälätiloja varten - geometry: Alue - short_name: # NOTE: Check symbol - description: Määräys osoittaa, kuinka monta prosenttia rakennusalalle sallitusta rakennustilavuudesta saadaan käyttää myymälätiloja varten - plan_regulations: - - regulation_code: myymalarakennustenAlue - additional_information: - - type: kayttotarkoituksenOsuusRakennustilavuudestaPros - - - name: Rakennusalalle sallittu kerrostilavuuden kuutiometrimäärä (k-m3) myymälätiloja varten - geometry: Alue - short_name: # NOTE: Check symbol - description: Määräys osoittaa, kuinka monta kuutiometriä rakennusalalle sallitusta kerrostilavuudesta saadaan käyttää myymälätiloja varten - plan_regulations: - - regulation_code: myymalarakennustenAlue - additional_information: - - type: kayttotarkoituksenOsuusRakennustilavuudestaK-m3 - - # p. 21 + - name: Rakennusalalle sallittu kerrosalan prosenttiosuus (%) asuinhuoneistoja varten + geometry: Alue + short_name: # NOTE: Check symbol + description: Määräys osoittaa, kuinka monta prosenttia rakennusalalle sallitusta kerrosalasta saadaan käyttää asuinhuoneistoja varten + plan_regulations: + - regulation_code: asumisenAlue + additional_information: + - type: kayttotarkoituksenOsuusKerrosalastaPros + + - name: Rakennusalalle sallittu kerrosalan kerrosneliömetrimäärä (k-m2) asuinhuoneistoja varten + geometry: Alue + short_name: # NOTE: Check symbol + description: Määräys osoittaa, kuinka monta kerrosneliömetriä rakennusalalle sallitusta kerrosalasta saadaan käyttää asuinhuoneistoja varten + plan_regulations: + - regulation_code: asumisenAlue + additional_information: + - type: kayttotarkoituksenOsuusKerrosalastaK-m2 + + - name: Rakennusalalle sallittu kerrostilavuuden prosenttiosuus (%) asuinhuoneistoja varten + geometry: Alue + short_name: # NOTE: Check symbol + description: Määräys osoittaa, kuinka monta prosenttia rakennusalalle sallitusta kerrostilavuudesta saadaan käyttää asuinhuoneistoja varten + plan_regulations: + - regulation_code: asumisenAlue + additional_information: + - type: kayttotarkoituksenOsuusRakennustilavuudestaPros + + - name: Rakennusalalle sallittu kerrostilavuuden kuutiometrimäärä (k-m3) asuinhuoneistoja varten + geometry: Alue + short_name: # NOTE: Check symbol + description: Määräys osoittaa, kuinka monta kuutiometriä rakennusalalle sallitusta kerrostilavuudesta saadaan käyttää asuinhuoneistoja varten + plan_regulations: + - regulation_code: asumisenAlue + additional_information: + - type: kayttotarkoituksenOsuusRakennustilavuudestaK-m3 + + - name: Rakennusalalle sallittu kerrosalan prosenttiosuus (%) myymälätiloja varten + geometry: Alue + short_name: # NOTE: Check symbol + description: Määräys osoittaa, kuinka monta prosenttia rakennusalalle sallitusta kerrosalasta saadaan käyttää myymälätiloja varten + plan_regulations: + - regulation_code: myymalarakennustenAlue + additional_information: + - type: kayttotarkoituksenOsuusKerrosalastaPros + + - name: Rakennusalalle sallittu kerrosalan kerrosneliömetrimäärä (k-m2) myymälätiloja varten + geometry: Alue + short_name: # NOTE: Check symbol + description: Määräys osoittaa, kuinka monta kerrosneliömetriä rakennusalalle sallitusta kerrosalasta saadaan käyttää myymälätiloja varten + plan_regulations: + - regulation_code: myymalarakennustenAlue + additional_information: + - type: kayttotarkoituksenOsuusKerrosalastaK-m2 + + - name: Rakennusalalle sallittu kerrostilavuuden prosenttiosuus (%) myymälätiloja varten + geometry: Alue + short_name: # NOTE: Check symbol + description: Määräys osoittaa, kuinka monta prosenttia rakennusalalle sallitusta rakennustilavuudesta saadaan käyttää myymälätiloja varten + plan_regulations: + - regulation_code: myymalarakennustenAlue + additional_information: + - type: kayttotarkoituksenOsuusRakennustilavuudestaPros + + - name: Rakennusalalle sallittu kerrostilavuuden kuutiometrimäärä (k-m3) myymälätiloja varten + geometry: Alue + short_name: # NOTE: Check symbol + description: Määräys osoittaa, kuinka monta kuutiometriä rakennusalalle sallitusta kerrostilavuudesta saadaan käyttää myymälätiloja varten + plan_regulations: + - regulation_code: myymalarakennustenAlue + additional_information: + - type: kayttotarkoituksenOsuusRakennustilavuudestaK-m3 + + # p. 21 - category_code: geometrialtaanViivamaisetJaPistemaiset name: Viivamaisiin ja pistemäisiin kaavakohteisiin liittyvät kaavamääräysryhmät plan_regulation_groups: - - - name: Maanalaisiin tiloihin johtava ajoluiska - geometry: Viiva - short_name: # NOTE: Check symbol - plan_regulations: - - regulation_code: ajoluiska - - - name: Rakennusalan sivu, jota koskee tarkempi määräys - geometry: Viiva - short_name: # NOTE: Check symbol - plan_regulations: - - regulation_code: rakennusalanSivuJotaKoskeeTarkempiMaarays - - - name: Rakennusalan sivu, johon rakennus on rakennettava kiinni - geometry: Viiva - short_name: # NOTE: Check symbol - plan_regulations: - - regulation_code: rakennusalanSivuJohonRakennusOnRakennettavaKiinni - - - name: Rakennuksen sivu, jossa suora uloskäynti porrashuoneista - geometry: Viiva - short_name: # NOTE: Check symbol - plan_regulations: - - regulation_code: rakennuksenSivuJossaSuoraUloskayntiPorrashuoneista - - - name: Rakennusalan sivu, jonka puoleiseen rakennuksen seinään ei saa sijoittaa ikkunoita - geometry: Viiva - short_name: ik - plan_regulations: - - regulation_code: ikkunatonSeina - - - name: Rakennuksen harjasuuntaa osoittava viiva - geometry: Viiva - short_name: # NOTE: Check symbol - plan_regulations: - - regulation_code: rakennuksenHarjanSuunta - - - name: Istutettava puurivi - geometry: Viiva - short_name: # NOTE: Check symbol - plan_regulations: - - regulation_code: puuTaiPuurivi - - - name: Istutettava puu - geometry: Piste - short_name: # NOTE: Check symbol - plan_regulations: - - regulation_code: puuTaiPuurivi - - - name: Säilytettävä puurivi - geometry: Viiva - short_name: # NOTE: Check symbol - plan_regulations: - - regulation_code: puuTaiPuurivi - additional_information: - - type: sailytettava - - - name: Säilytettävä puu - geometry: Piste - short_name: # NOTE: Check symbol - plan_regulations: - - regulation_code: puuTaiPuurivi - additional_information: - - type: sailytettava - - - name: Ulkoilureitti - geometry: Viiva - short_name: # NOTE: Check symbol - plan_regulations: - - regulation_code: ulkoiluTaiVirkistysReitti - - - name: Katualueen rajan osa, jonka kohdalta ei saa järjestää ajoneuvoliittymää - geometry: Viiva - short_name: # NOTE: Check symbol - plan_regulations: - - regulation_code: kadunOsaJollaOnAjoneuvoliittymakielto - - - name: Meluesteen tai melusuojauksen likimääräinen sijainti - geometry: Viiva - short_name: # NOTE: Check symbol - plan_regulations: - - regulation_code: melueste - - - name: Ajoneuvoliittymän likimääräinen sijainti - geometry: Piste - short_name: # NOTE: Check symbol - plan_regulations: - - regulation_code: liittyma + - name: Maanalaisiin tiloihin johtava ajoluiska + geometry: Viiva + short_name: # NOTE: Check symbol + plan_regulations: + - regulation_code: ajoluiska + + - name: Rakennusalan sivu, jota koskee tarkempi määräys + geometry: Viiva + short_name: # NOTE: Check symbol + plan_regulations: + - regulation_code: rakennusalanSivuJotaKoskeeTarkempiMaarays + + - name: Rakennusalan sivu, johon rakennus on rakennettava kiinni + geometry: Viiva + short_name: # NOTE: Check symbol + plan_regulations: + - regulation_code: rakennusalanSivuJohonRakennusOnRakennettavaKiinni + + - name: Rakennuksen sivu, jossa suora uloskäynti porrashuoneista + geometry: Viiva + short_name: # NOTE: Check symbol + plan_regulations: + - regulation_code: rakennuksenSivuJossaSuoraUloskayntiPorrashuoneista + + - name: Rakennusalan sivu, jonka puoleiseen rakennuksen seinään ei saa sijoittaa ikkunoita + geometry: Viiva + short_name: ik + plan_regulations: + - regulation_code: ikkunatonSeina + + - name: Rakennuksen harjasuuntaa osoittava viiva + geometry: Viiva + short_name: # NOTE: Check symbol + plan_regulations: + - regulation_code: rakennuksenHarjanSuunta + + - name: Istutettava puurivi + geometry: Viiva + short_name: # NOTE: Check symbol + plan_regulations: + - regulation_code: puuTaiPuurivi + + - name: Istutettava puu + geometry: Piste + short_name: # NOTE: Check symbol + plan_regulations: + - regulation_code: puuTaiPuurivi + + - name: Säilytettävä puurivi + geometry: Viiva + short_name: # NOTE: Check symbol + plan_regulations: + - regulation_code: puuTaiPuurivi + additional_information: + - type: sailytettava + + - name: Säilytettävä puu + geometry: Piste + short_name: # NOTE: Check symbol + plan_regulations: + - regulation_code: puuTaiPuurivi + additional_information: + - type: sailytettava + + - name: Ulkoilureitti + geometry: Viiva + short_name: # NOTE: Check symbol + plan_regulations: + - regulation_code: ulkoiluTaiVirkistysReitti + + - name: Katualueen rajan osa, jonka kohdalta ei saa järjestää ajoneuvoliittymää + geometry: Viiva + short_name: # NOTE: Check symbol + plan_regulations: + - regulation_code: kadunOsaJollaOnAjoneuvoliittymakielto + + - name: Meluesteen tai melusuojauksen likimääräinen sijainti + geometry: Viiva + short_name: # NOTE: Check symbol + plan_regulations: + - regulation_code: melueste + + - name: Ajoneuvoliittymän likimääräinen sijainti + geometry: Piste + short_name: # NOTE: Check symbol + plan_regulations: + - regulation_code: liittyma diff --git a/arho_feature_template/resources/libraries/regulation_groups/katja_yleiskaava.yaml b/arho_feature_template/resources/libraries/regulation_groups/katja_yleiskaava.yaml index 5f6fc81..8c2c494 100644 --- a/arho_feature_template/resources/libraries/regulation_groups/katja_yleiskaava.yaml +++ b/arho_feature_template/resources/libraries/regulation_groups/katja_yleiskaava.yaml @@ -1,18 +1,16 @@ name: Yleiskaavan kaavamääräysryhmät (Katja) version: 1 categories: - - category_code: aluevaraukset name: Aluevaraukset plan_regulation_groups: - - name: Asuntoalue geometry: [Alue, Piste] short_name: A plan_regulations: - regulation_code: asumisenAlue additional_information: - - type: paakayttotarkoitus + - type: paakayttotarkoitus - name: Kerrostalovaltainen asuntoalue geometry: [Alue, Piste] @@ -148,11 +146,11 @@ categories: - regulation_code: teollisuusalue additional_information: - type: paakayttotarkoitus - - type: vaarallistenKemikaalienValmistusJaVarastointiSallittu + - type: VaarallistenKemikaalienValmistusJaVarastointiSallittu - regulation_code: varastoalue additional_information: - type: paakayttotarkoitus - - type: vaarallistenKemikaalienValmistusJaVarastointiSallittu + - type: VaarallistenKemikaalienValmistusJaVarastointiSallittu - name: Virkistysalue geometry: [Alue, Piste] @@ -192,7 +190,7 @@ categories: plan_regulations: - regulation_code: uimaranta additional_information: - - type: paakayttotarkoitus + - type: paakayttotarkoitus - name: Vapaa-ajan asumisen ja matkailun alue geometry: [Alue, Piste] @@ -604,7 +602,6 @@ categories: - category_code: ymparistonmuuutosAluevaraukset name: Ympäristön muutosta koskevien kaavamääräysryhmien vaikutus aluevaraukseen plan_regulation_groups: - - name: Olemassa oleva asuntovaltainen alue geometry: [Alue, Piste] short_name: A @@ -671,7 +668,6 @@ categories: - category_code: osa-alueet name: Erityisominaisuudet ja muut osa-alueet plan_regulation_groups: - - name: Rakennetun kulttuuriympäristön ja maiseman vaalimisen kannalta tärkeä alue geometry: [Alue, Piste] short_name: kyma @@ -1239,7 +1235,6 @@ categories: - category_code: kehittämisperiaatteet name: Kehittämisperiaatteita koskevat kaavamääräysryhmät plan_regulation_groups: - - name: Kaupunkikehittämisvyöhyke geometry: Alue short_name: kk @@ -1415,7 +1410,6 @@ categories: - category_code: viivat name: Eri liikennemuotojen käyttöön tarkoitetut linjaukset (Viivamaisiin ja pistemäisiin kaavakohteisiin liittyvät kaavamääräysryhmät) plan_regulation_groups: - - name: Nykyinen tie geometry: Viiva short_name: # NOTE: check symbol p. 38 @@ -1626,7 +1620,6 @@ categories: - category_code: ymparistonmuuutosLiikennemuodot name: Ympäristönmuutosta koskevien määräysten vaikutus yleiskaavan eri liikennemuotojen käyttöön tarkoitettujen linjausten esitystapaan plan_regulation_groups: - - name: Nykyinen tie geometry: Viiva short_name: # NOTE: check symbol p. 41 @@ -1769,7 +1762,6 @@ categories: - category_code: muutLinjaukset name: Muut yleiskaavassa osoitettavia linjauksia koskevat kaavamääräysryhmät plan_regulation_groups: - - name: Viheryhteys geometry: Viiva short_name: # NOTE: check symbol p. 42 @@ -1881,7 +1873,6 @@ categories: - category_code: numeerisetJaTekstimuotoiset name: Yleiskaavan kaavamääräysryhmät, joille annetaan numeerinen tai tekstimuotoinen arvo plan_regulation_groups: - - name: Kaupungin- tai kunnanosan nimi geometry: Alue plan_regulations: @@ -1908,7 +1899,6 @@ categories: - category_code: rakennuspaikka name: Rakennuspaikkaa koskevat kaavamääräysryhmät plan_regulation_groups: - - name: Rakennuspaikka geometry: Piste short_name: # NOTE: check symbol p. 44 diff --git a/qgisprojekti.qgz b/qgisprojekti.qgz index 05cce3f..a4b2297 100644 Binary files a/qgisprojekti.qgz and b/qgisprojekti.qgz differ