Skip to content

Commit

Permalink
[Fixes #7254] Map Legend (#7255) (#7261)
Browse files Browse the repository at this point in the history
* add ui view

* add legend as property

Co-authored-by: Alessio Fabiani <alessio.fabiani@geo-solutions.it>
(cherry picked from commit c4ff3b7)

Co-authored-by: NAGGINDA MARTHA <marthamareal@gmail.com>
  • Loading branch information
Alessio Fabiani and marthamareal authored Apr 8, 2021
1 parent 02a1d77 commit 919f66e
Show file tree
Hide file tree
Showing 8 changed files with 116 additions and 4 deletions.
2 changes: 1 addition & 1 deletion geonode/geoserver/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -540,7 +540,7 @@ def strip_prefix(path, prefix):
f"[geoserver_proxy] Updating Layer ---> url {url.geturl()}")
try:
_layer_name = os.path.splitext(os.path.basename(request.path))[0]
_layer = Layer.objects.get(name__icontains=_layer_name)
_layer = Layer.objects.get(name=_layer_name)
affected_layers = [_layer]
except Exception:
logger.warn(f"Could not find any Layer {os.path.basename(request.path)} on DB")
Expand Down
1 change: 1 addition & 0 deletions geonode/layers/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -497,6 +497,7 @@ def sld_definition(style):
"store": layer.store,
"name": layer.alternate,
"title": layer.title,
"style": layer.default_style.name if layer.default_style else '',
"queryable": True,
"storeType": layer.storeType,
"bbox": {
Expand Down
23 changes: 23 additions & 0 deletions geonode/maps/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -578,6 +578,29 @@ def local_link(self):
link = f"<span>{self.name}</span> "
return link

@property
def get_legend(self):
try:
layer_params = json.loads(self.layer_params)

capability = layer_params.get('capability', {})
style_name = capability.get('style')
if style_name:
if ':' in style_name:
style_name = style_name.split(':')[1]
href = Layer.objects.filter(title=self.layer_title).first().get_legend_url(style_name=style_name)
return {style_name: href}
else:
# use the default style on layer
layer_obj = Layer.objects.filter(alternate=self.name).first()
if layer_obj:
default_style_name = layer_obj.default_style.name
legend_url = layer_obj.get_legend_url(style_name=default_style_name)
return {default_style_name: legend_url}
except Exception as e:
logger.exception(e)
return None

class Meta:
ordering = ["stack_order"]

Expand Down
56 changes: 54 additions & 2 deletions geonode/maps/templates/maps/map_detail.html
Original file line number Diff line number Diff line change
Expand Up @@ -216,11 +216,35 @@ <h4 class="list-group-item-heading">{% trans "Map Layers" %}</h4>
<ul class="list-unstyled">
{% for layer in resource.layer_set.all %}
{% ifnotequal layer.group 'background' %}
<li class="chevron-caret" id="legend-{{layer.id}}">
<div class="map-layers">
<i class="fa fa-chevron-right"></i>
{% if layer.local %}
<li><a href="{% url "layer_detail" layer.name %}">{% if layer.layer_title %}{{ layer.layer_title }}{% else %}{{ layer.name }}{% endif %}</a></li>
<a href="{% url "layer_detail" layer.name %}">
{% if layer.layer_title %}
{{ layer.layer_title }}
{% else %}
{{ layer.name }}
{% endif %}
</a>
{% else %}
<li>{{ layer.layer_title }}</li>
{{ layer.layer_title }}
{% endif %}
</div>
<ul class="list-unstyled">
<li class="map-legend">
{% if layer.get_legend %}
<span>Legend</span>
{% for key, value in layer.get_legend.items %}
<p>{{ key }}</p>
<p class="legend-container" data-legend-src="{{ value }}"></p>
{% endfor %}
{% else %}
<p>No legend</p>
{% endif %}
</li>
</ul>
</li>
{% endifnotequal %}
{% endfor %}
</ul>
Expand Down Expand Up @@ -352,6 +376,34 @@ <h4 class="modal-title" id="myModalLabel">{% trans "Embed Iframe" %}</h4>
});
return false;
});

$(document).ready(function() {
$('.map-legend').hide();
$('.chevron-caret').each(function() {
var icon = $(this).find('i');
var id = $(this).attr('id');
var mapLegend = $(this).find('.map-legend')

icon.bind('click', function() {
if ($(this).hasClass('fa-chevron-right')) {
$(this).addClass('fa-chevron-down').removeClass('fa-chevron-right');
mapLegend.show();
var legendContainer = $('#' + id + ' .legend-container');
var legendSrc = legendContainer.attr('data-legend-src');
var legendImage = legendContainer.find('img');
if (!legendImage.length) {
var img = new Image();
img.setAttribute(id, 'legend_icon');
img.src = legendSrc;
legendContainer.append(img);
}
}else {
$(this).addClass('fa-chevron-right').removeClass('fa-chevron-down');
mapLegend.hide();
}
});
});
});
</script>

{% block thumbnail_script %}
Expand Down
11 changes: 10 additions & 1 deletion geonode/maps/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
from django.contrib.auth import get_user_model
from django.contrib.contenttypes.models import ContentType

from geonode.maps.models import Map
from geonode.maps.models import Map, MapLayer
from geonode.settings import on_travis
from geonode.maps import MapsAppConfig
from geonode.layers.models import Layer
Expand Down Expand Up @@ -961,6 +961,15 @@ def test_batch_edit(self):
for word in resource.keywords.all():
self.assertTrue(word.name in keywords.split(','))

def test_get_legend(self):
layer = Layer.objects.all().first()
map_layer = MapLayer.objects.filter(name=layer.alternate).exclude(layer_params=u'').first()
if map_layer and layer.default_style:
self.assertIsNone(map_layer.get_legend)
elif map_layer:
# when there is no style in layer_params
self.assertIsNone(map_layer.get_legend)


class MapModerationTestCase(GeoNodeBaseTestSupport):

Expand Down
1 change: 1 addition & 0 deletions geonode/maps/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -890,6 +890,7 @@ def sld_definition(style):
"store": layer.store,
"name": layer.alternate,
"title": layer.title,
"style": layer.default_style.name if layer.default_style else '',
"queryable": True,
"storeType": layer.storeType,
"bbox": {
Expand Down
13 changes: 13 additions & 0 deletions geonode/static/geonode/css/base.css
Original file line number Diff line number Diff line change
Expand Up @@ -8422,3 +8422,16 @@ form-inline {
.jumbotron .gn-container {
margin-top: -2px;
}

.map-layers {
display: flex;
word-break: break-all;
}
.map-layers i {
padding: 7px 0px;
font-size: small;
}
.map-legend {
font-size: 10px;
margin: 2px 15px;
}
13 changes: 13 additions & 0 deletions geonode/static/geonode/less/base.less
Original file line number Diff line number Diff line change
Expand Up @@ -1988,3 +1988,16 @@ form-inline {
.jumbotron .gn-container {
margin-top: -2px;
}

.map-layers {
display: flex;
word-break: break-all;
}
.map-layers i {
padding: 7px 0px;
font-size: small;
}
.map-legend {
font-size: 10px;
margin: 2px 15px;
}

0 comments on commit 919f66e

Please sign in to comment.