#138 WIP First draft

* adds first working draft of netgis map client
This commit is contained in:
2022-04-19 17:22:06 +02:00
parent c6e784e6d4
commit d13c3e8094
6 changed files with 109 additions and 57 deletions

View File

@@ -5,18 +5,20 @@ Contact: michel.peltriaux@sgdnord.rlp.de
Created on: 16.11.20
"""
import json
from abc import abstractmethod
from bootstrap_modal_forms.forms import BSModalForm
from bootstrap_modal_forms.utils import is_ajax
from django import forms
from django.contrib import messages
from django.contrib.gis import gdal
from django.db.models.fields.files import FieldFile
from konova.sub_settings.lanis_settings import DEFAULT_SRID_RLP
from user.models import User
from django.contrib.gis.forms import OSMWidget, MultiPolygonField
from django.contrib.gis.geos import MultiPolygon
from django.contrib.gis.geos import MultiPolygon, GEOSGeometry, Polygon
from django.db import transaction
from django.http import HttpRequest, HttpResponseRedirect
from django.shortcuts import render
@@ -274,7 +276,7 @@ class SimpleGeomForm(BaseForm):
"""
read_only = True
geom = MultiPolygonField(
srid=DEFAULT_SRID,
srid=DEFAULT_SRID_RLP,
label=_("Geometry"),
help_text=_(""),
label_suffix="",
@@ -289,15 +291,47 @@ class SimpleGeomForm(BaseForm):
# Initialize geometry
try:
geom = self.instance.geometry.geom
geom.transform(ct=DEFAULT_SRID_RLP)
self.empty = geom.empty
geom = geom.geojson
except AttributeError:
# If no geometry exists for this form, we simply set the value to None and zoom to the maximum level
geom = None
geom = ""
self.empty = True
self.fields["geom"].widget.attrs["default_zoom"] = 1
self.initialize_form_field("geom", geom)
def is_valid(self):
super_valid = super().is_valid()
is_valid = True
# Get geojson from form
geom = self.data["geom"]
geom = json.loads(geom)
# Read geojson into gdal geometry
features = []
features_json = geom["features"]
for feature in features_json:
g = gdal.OGRGeometry(json.dumps(feature["geometry"]), srs=DEFAULT_SRID_RLP)
if g.geom_type not in ["Polygon", "MultiPolygon"]:
self.add_error("geom", _("Only surfaces allowed. Points or lines must be buffered."))
is_valid = False
return is_valid
features.append(g)
if len(features) > 0:
form_geom = features[0]
for g in features[1:]:
form_geom = form_geom.union(g)
form_geom.transform(coord_trans=DEFAULT_SRID)
if form_geom.geom_type != "MultiPolygon":
form_geom = MultiPolygon(MultiPolygon.from_ewkt(form_geom.ewkt))
self.cleaned_data = {
"geom": form_geom.wkt
}
return is_valid
def save(self, action: UserActionLogEntry):
""" Saves the form's geometry