summaryrefslogtreecommitdiff
path: root/ishtar_common/models_common.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2022-09-01 19:15:02 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2022-12-12 12:23:18 +0100
commit4798e764adf21e259e6738eaaf18c0fa7ae18bac (patch)
tree5b95b1695cf8772e547deca7313af2e9b19d3344 /ishtar_common/models_common.py
parente0bcbeaa84c2adf3b8a179cdea792dd58fa109b2 (diff)
downloadIshtar-4798e764adf21e259e6738eaaf18c0fa7ae18bac.tar.bz2
Ishtar-4798e764adf21e259e6738eaaf18c0fa7ae18bac.zip
Geo: display related items on sheet
Diffstat (limited to 'ishtar_common/models_common.py')
-rw-r--r--ishtar_common/models_common.py101
1 files changed, 45 insertions, 56 deletions
diff --git a/ishtar_common/models_common.py b/ishtar_common/models_common.py
index 83897768c..5d3cdbec2 100644
--- a/ishtar_common/models_common.py
+++ b/ishtar_common/models_common.py
@@ -48,6 +48,7 @@ from ishtar_common.utils import (
pgettext_lazy,
get_image_path,
human_date,
+ reverse_list_coordinates
)
from simple_history.models import HistoricalRecords as BaseHistoricalRecords
from simple_history.signals import (
@@ -2358,34 +2359,53 @@ class GeoVectorData(Imported, OwnPerms):
profile = get_current_profile()
return profile.srs
- def get_geo_items(self, get_polygons, rounded=5):
- label = self.label if hasattr(self, "label") else self.short_label
- dct = {"type": "Feature", "geometry": {}, "properties": {"label": label}}
- if get_polygons:
+ def get_geo_items(self, rounded=5):
+ dct = {"type": "Feature", "geometry": {}, "properties": {"label": str(self)}}
+ if self.multi_polygon:
list_coords = []
- if self.multi_polygon:
- for polygon in self.multi_polygon:
- list_coords.append([])
- for linear_ring in range(len(polygon)):
- list_coords[-1].append([])
- for coords in polygon[linear_ring].coords:
- point_2d = Point(
- coords[0], coords[1], srid=self.multi_polygon.srid
- )
- list_coords[-1][linear_ring].append(
- self.convert_coordinates(point_2d, rounded)
- )
+ for polygon in self.multi_polygon:
+ list_coords.append([])
+ for linear_ring in range(len(polygon)):
+ list_coords[-1].append([])
+ for coords in polygon[linear_ring].coords:
+ point_2d = Point(
+ coords[0], coords[1], srid=self.multi_polygon.srid
+ )
+ list_coords[-1][linear_ring].append(
+ self.convert_coordinates(point_2d, rounded)
+ )
dct["geometry"]["type"] = "MultiPolygon"
dct["geometry"]["coordinates"] = list_coords
+ elif self.multi_points:
+ list_coords = []
+ for coords in self.multi_points:
+ point_2d = Point(
+ coords.x, coords.y, srid=self.multi_points.srid
+ )
+ list_coords.append(
+ self.convert_coordinates(point_2d, rounded)
+ )
+ dct["geometry"]["type"] = "MultiPoint"
+ dct["geometry"]["coordinates"] = list_coords
+ elif self.multi_line:
+ list_coords = []
+ for idx, line in enumerate(self.multi_line):
+ if not idx:
+ list_coords.append([])
+ for coords in line:
+ point_2d = Point(
+ coords.x, coords.y, srid=self.multi_points.srid
+ )
+ list_coords[-1].append(
+ self.convert_coordinates(point_2d, rounded)
+ )
+ dct["geometry"]["type"] = "MultiLine"
+ dct["geometry"]["coordinates"] = list_coords
else:
dct["geometry"]["type"] = "Point"
- coords = self.display_coordinates()
+ coords = self.display_coordinates(srid=4326)
if coords:
dct["geometry"]["coordinates"] = coords
- elif self.multi_polygon:
- dct["geometry"]["coordinates"] = self.convert_coordinates(
- self.multi_polygon.centroid, rounded
- )
else:
return {}
return dct
@@ -3537,41 +3557,10 @@ class GeoItem(GeographicItem):
if self.multi_polygon_source == "P" and self.multi_polygon:
return self.multi_polygon, self.multi_polygon_source_item
- def get_geo_items(self, get_polygons, rounded=True):
- try:
- label = self.label
- except:
- label = self.short_label
- dict = {"type": "Feature", "geometry": {}, "properties": {"label": label}}
- if get_polygons:
- list_coords = []
- if self.multi_polygon:
- for polygon in self.multi_polygon:
- list_coords.append([])
- for linear_ring in range(len(polygon)):
- list_coords[-1].append([])
- for coords in polygon[linear_ring].coords:
- point_2d = Point(
- coords[0], coords[1], srid=self.multi_polygon.srid
- )
- list_coords[-1][linear_ring].append(
- self.convert_coordinates(point_2d, rounded)
- )
- dict["geometry"]["type"] = "MultiPolygon"
- dict["geometry"]["coordinates"] = list_coords
- else:
- dict["geometry"]["type"] = "Point"
- if self.point_2d:
- try:
- x, y = self.display_coordinates
- dict["geometry"]["coordinates"] = [x, y]
- except ValueError:
- dict["geometry"]["coordinates"] = []
- else:
- dict["geometry"]["coordinates"] = self.convert_coordinates(
- self.multi_polygon.centroid, rounded
- )
- return dict
+ def get_geo_items(self, rounded=5):
+ if not self.main_geodata:
+ return {}
+ return self.main_geodata.get_geo_items(rounded)
def convert_coordinates(self, point_2d, rounded):
profile = get_current_profile()