diff options
| author | Étienne Loks <etienne.loks@iggdrasil.net> | 2022-03-16 11:36:15 +0100 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2022-12-12 12:21:00 +0100 | 
| commit | 3e0a73401c1307baf8813bb87eb9f94f8e3a44f1 (patch) | |
| tree | c04bf0b7c237eed0920799a2330e11dd05661737 | |
| parent | 6803fa0cb2d70eb90591ec318d9733ddea387315 (diff) | |
| download | Ishtar-3e0a73401c1307baf8813bb87eb9f94f8e3a44f1.tar.bz2 Ishtar-3e0a73401c1307baf8813bb87eb9f94f8e3a44f1.zip | |
Geodata: fix templates with geovectordata
9 files changed, 73 insertions, 36 deletions
| diff --git a/archaeological_context_records/templates/ishtar/sheet_contextrecord.html b/archaeological_context_records/templates/ishtar/sheet_contextrecord.html index c98bcef98..1c3bb4b41 100644 --- a/archaeological_context_records/templates/ishtar/sheet_contextrecord.html +++ b/archaeological_context_records/templates/ishtar/sheet_contextrecord.html @@ -149,19 +149,19 @@              {% field_flex "Depth of appearance (m)" item.depth_of_appearance '' '' has_image %}          </div> +        {% if item.main_geodata %}          <h3>{% trans "Localisation"%}</h3>          <div class='row'>              {% with geo_item=item %} -            {% include "ishtar/blocks/sheet_simple_map.html"%} +            {% include "ishtar/blocks/sheet_map.html"%}              <div class="col-12 col-lg-6 flex-wrap">                  {% field_flex_multiple_full "Towns" item.operation.towns %}                  {% include "ishtar/blocks/sheet_coordinates.html"%} -                {% if PROFILE.experimental_feature %}                  {% include "ishtar/blocks/sheet_geo_items.html"%} -                {% endif %}              </div>              {% endwith %}          </div> +        {% endif %}          <h3>{% trans "Sheet" %}</h3>          <div class="row"> diff --git a/archaeological_finds/templates/ishtar/sheet_basefind.html b/archaeological_finds/templates/ishtar/sheet_basefind.html index 0b56727ca..225d8ee83 100644 --- a/archaeological_finds/templates/ishtar/sheet_basefind.html +++ b/archaeological_finds/templates/ishtar/sheet_basefind.html @@ -73,7 +73,7 @@      <h3>{% trans "Localisation"%}</h3>      <div class='row'>          {% with geo_item=base_find %} -        {% include "ishtar/blocks/sheet_simple_map.html"%} +        {% include "ishtar/blocks/sheet_map.html"%}          <div class="col-12 col-lg-6 flex-wrap">          {% include "ishtar/blocks/sheet_coordinates.html"%}          {% field_flex_full "Point of topographic reference" base_find.topographic_localisation %} diff --git a/archaeological_operations/templates/ishtar/sheet_operation.html b/archaeological_operations/templates/ishtar/sheet_operation.html index d24bb20fe..76aadb444 100644 --- a/archaeological_operations/templates/ishtar/sheet_operation.html +++ b/archaeological_operations/templates/ishtar/sheet_operation.html @@ -287,7 +287,7 @@          <div class="row">              {% with geo_item=item %} -            {% include "ishtar/blocks/sheet_simple_map.html"%} +            {% include "ishtar/blocks/sheet_map.html"%}              <div class="col-12 col-lg-6 flex-wrap">                  {% include "ishtar/blocks/sheet_coordinates.html"%}                  {% if next %} diff --git a/archaeological_operations/templates/ishtar/sheet_site.html b/archaeological_operations/templates/ishtar/sheet_site.html index 4904b5562..a1125d202 100644 --- a/archaeological_operations/templates/ishtar/sheet_site.html +++ b/archaeological_operations/templates/ishtar/sheet_site.html @@ -63,7 +63,7 @@  <h3>{% trans "Localisation"%}</h3>  <div class="row">      {% with geo_item=item %} -    {% include "ishtar/blocks/sheet_simple_map.html"%} +    {% include "ishtar/blocks/sheet_map.html"%}      <div class="col-12 col-lg-6 flex-wrap">      {% include "ishtar/blocks/sheet_coordinates.html"%} diff --git a/archaeological_warehouse/templates/ishtar/sheet_container.html b/archaeological_warehouse/templates/ishtar/sheet_container.html index 84bbd2f14..a6a1e279b 100644 --- a/archaeological_warehouse/templates/ishtar/sheet_container.html +++ b/archaeological_warehouse/templates/ishtar/sheet_container.html @@ -152,7 +152,7 @@          <h3>{% trans "Localisation"%}</h3>          <div class='row'>              {% with geo_item=item %} -            {% include "ishtar/blocks/sheet_simple_map.html" %} +            {% include "ishtar/blocks/sheet_map.html" %}              <div class="col-12 col-lg-6 flex-wrap">                  {% include "ishtar/blocks/sheet_coordinates.html" %}              </div> diff --git a/archaeological_warehouse/templates/ishtar/sheet_warehouse.html b/archaeological_warehouse/templates/ishtar/sheet_warehouse.html index 0adf3c1b8..e03feb026 100644 --- a/archaeological_warehouse/templates/ishtar/sheet_warehouse.html +++ b/archaeological_warehouse/templates/ishtar/sheet_warehouse.html @@ -102,7 +102,7 @@          <h3>{% trans "Localisation"%}</h3>          <div class='row'>              {% with geo_item=item %} -            {% if PROFILE.locate_warehouses %}{% include "ishtar/blocks/sheet_simple_map.html"%}{% endif %} +            {% if PROFILE.locate_warehouses %}{% include "ishtar/blocks/sheet_map.html"%}{% endif %}              <div class="col-12 col-lg-6 flex-wrap">                  {% if PROFILE.locate_warehouses %}{% include "ishtar/blocks/sheet_coordinates.html"%}{% endif %}                  {% with full=True %}{% include "ishtar/blocks/sheet_address_section.html" %}{% endwith %} diff --git a/ishtar_common/models_common.py b/ishtar_common/models_common.py index 414e63c55..104e46100 100644 --- a/ishtar_common/models_common.py +++ b/ishtar_common/models_common.py @@ -2062,6 +2062,22 @@ class GeoProviderType(HierarchicalType):          ) +GEOJSON_POINT_TPL = { +    "type": "FeatureCollection", +    "features": [ +        { +            "type": "Feature", +            "geometry": { +                "type": "Point", +                "coordinates": [] +            }, +            "properties": { +            } +        } +    ] +} + +  class GeoVectorData(models.Model):      name = models.TextField(_("Name"), default=_("Default"))      source_content_type = models.ForeignKey( @@ -2272,7 +2288,7 @@ class GeoVectorData(models.Model):      def _geojson_serialize(self, geom_attr):          if not hasattr(self, geom_attr): -            return "" +            return "{}"          geojson = serialize(              "geojson",              self.__class__.objects.filter(pk=self.pk), @@ -2280,6 +2296,9 @@ class GeoVectorData(models.Model):              fields=("name",),          )          geojson_dct = json.loads(geojson) +        return self._geojson_base_serialize(geojson_dct) + +    def _geojson_base_serialize(self, geojson_dct):          profile = get_current_profile()          precision = profile.point_precision @@ -2311,6 +2330,38 @@ class GeoVectorData(models.Model):      def multi_polygon_geojson(self):          return self._geojson_serialize("multi_polygon") +    @property +    def geometry_type(self): +        if self.x or self.y or self.z or self.point_2d or self.point_3d: +            return "POINT" +        if self.multi_line: +            return "MULTILINE" +        if self.multi_points: +            return "MULTIPOINTS" +        if self.multi_polygon: +            return "MULTIPOLYGON" +        return "" + +    @property +    def geojson(self): +        if self.x or self.y or self.z: +            geo = GEOJSON_POINT_TPL.copy() +            geo["features"][0]["geometry"]["coordinates"] = [ +                self.cached_x, self.cached_y +            ] +            return self._geojson_base_serialize(geo) +        if self.point_2d: +            return self._geojson_serialize("point_2d") +        if self.point_3d: +            return self._geojson_serialize("point_3d") +        if self.multi_line: +            return self._geojson_serialize("multi_line") +        if self.multi_points: +            return self._geojson_serialize("multi_points") +        if self.multi_polygon: +            return self._geojson_serialize("multi_polygon") +        return "{}" +  post_save.connect(post_save_geodata, sender=GeoVectorData) diff --git a/ishtar_common/templates/ishtar/blocks/sheet_map.html b/ishtar_common/templates/ishtar/blocks/sheet_map.html index 296516e86..e0278b8c7 100644 --- a/ishtar_common/templates/ishtar/blocks/sheet_map.html +++ b/ishtar_common/templates/ishtar/blocks/sheet_map.html @@ -1,11 +1,18 @@ +{% if PROFILE.mapping and geo_item.main_geodata %} +<div class="col-12 col-lg-6 flex-wrap"> +    <div class="window-map" id="map-{{window_id}}-{{geo_item.SLUG}}-{{geo_item.pk}}"> +    </div> +    <div id="map-content-{{window_id}}-{{geo_item.SLUG}}-{{geo_item.pk}}"></div> +</div> +<script type="text/javascript"> +  const disp_map = function() {      const html = render_map("map-{{window_id}}-{{geo_item.SLUG}}-{{geo_item.pk}}", false, true);      $("#map-content-{{window_id}}-{{geo_item.SLUG}}-{{geo_item.pk}}").html(html); -    {% if geo_item.most_precise_geo == 'point' %} -    const {{geo_item.SLUG}}{{geo_item.pk}} = {{geo_item.point_2d_geojson|safe}}; +    const {{geo_item.SLUG}}{{geo_item.pk}} = {{geo_item.main_geodata.geojson|safe}}; +    {% if geo_item.main_geodata.geometry_type == 'POINT' %}      display_map("map-{{window_id}}-{{geo_item.SLUG}}-{{geo_item.pk}}", {{geo_item.SLUG}}{{geo_item.pk}});      {% else %} -    const {{geo_item.SLUG}}{{geo_item.pk}} = {{geo_item.multi_polygon_geojson|safe}};      display_map("map-{{window_id}}-{{geo_item.SLUG}}-{{geo_item.pk}}", null, {{geo_item.SLUG}}{{geo_item.pk}});      {% endif %}  } @@ -60,3 +67,6 @@ get_polygons.change( function () {  })  {% endif %}  {% endif %} + +</script> +{% endif %} diff --git a/ishtar_common/templates/ishtar/blocks/sheet_simple_map.html b/ishtar_common/templates/ishtar/blocks/sheet_simple_map.html deleted file mode 100644 index 93035862f..000000000 --- a/ishtar_common/templates/ishtar/blocks/sheet_simple_map.html +++ /dev/null @@ -1,24 +0,0 @@ -{% if PROFILE.mapping %} -{% if geo_item.point_2d or geo_item.multi_polygon %} -<div class="col-12 col-lg-6 flex-wrap"> -<div class="window-map" id="map-{{window_id}}-{{geo_item.SLUG}}-{{geo_item.pk}}"> -</div> -<div id="map-content-{{window_id}}-{{geo_item.SLUG}}-{{geo_item.pk}}"></div> -</div> -<script type="text/javascript"> -{% if PROFILE.experimental_feature %} -{% include "ishtar/blocks/sheet_map.html" %} -{% else %} -var html = render_map("map-{{window_id}}-{{geo_item.SLUG}}-{{geo_item.pk}}", false, true); -$("#map-content-{{window_id}}-{{geo_item.SLUG}}-{{geo_item.pk}}").html(html); -{% if geo_item.most_precise_geo == 'point' %} -var {{geo_item.SLUG}}{{geo_item.pk}} = {{geo_item.point_2d_geojson|safe}}; -display_map("map-{{window_id}}-{{geo_item.SLUG}}-{{geo_item.pk}}", {{geo_item.SLUG}}{{geo_item.pk}}); -{% else %} -var {{geo_item.SLUG}}{{geo_item.pk}} = {{geo_item.multi_polygon_geojson|safe}}; -display_map("map-{{window_id}}-{{geo_item.SLUG}}-{{geo_item.pk}}", null, {{geo_item.SLUG}}{{geo_item.pk}}); -{% endif %} -{% endif %} -</script> -{% endif %} -{% endif %} | 
