diff options
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 |
commit | e6be394f26dd7639e33da18e9522d21b48da6b54 (patch) | |
tree | 5b95b1695cf8772e547deca7313af2e9b19d3344 /ishtar_common/models_common.py | |
parent | d69e4e26fc10223ad4c2648b23b319902c16afb0 (diff) | |
download | Ishtar-e6be394f26dd7639e33da18e9522d21b48da6b54.tar.bz2 Ishtar-e6be394f26dd7639e33da18e9522d21b48da6b54.zip |
Geo: display related items on sheet
Diffstat (limited to 'ishtar_common/models_common.py')
-rw-r--r-- | ishtar_common/models_common.py | 101 |
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() |