editor: select geometry types to show on map

This commit is contained in:
Laura Klünder 2016-12-06 20:47:17 +01:00
parent f0a2f5e058
commit e69b0a95ec
4 changed files with 85 additions and 3 deletions

View file

@ -8,13 +8,14 @@ from rest_framework.response import Response
from rest_framework.routers import SimpleRouter
from c3nav.editor.api import HosterViewSet, SubmitTaskViewSet
from c3nav.mapdata.api import GeometryViewSet, LevelViewSet, PackageViewSet, SourceViewSet
from c3nav.mapdata.api import GeometryTypeViewSet, GeometryViewSet, LevelViewSet, PackageViewSet, SourceViewSet
router = SimpleRouter()
router.register(r'packages', PackageViewSet)
router.register(r'levels', LevelViewSet)
router.register(r'sources', SourceViewSet)
router.register(r'geometrytypes', GeometryTypeViewSet, base_name='geometrytype')
router.register(r'geometries', GeometryViewSet, base_name='geometry')
router.register(r'hosters', HosterViewSet, base_name='hoster')

View file

@ -19,6 +19,16 @@ body {
top:2px;
}
.leaflet-control-layers-toggle {
color:#000000 !important;
font-size:14px;
text-align:center;
width:75px;
line-height:36px;
background-image:none;
padding:0 8px;
}
.leaflet-levels a {
font-size:16px;
color:#333333;

View file

@ -61,7 +61,8 @@ editor = {
source.layer = L.imageOverlay('/api/sources/' + source.name + '/image/', source.bounds);
layers[source.name] = source.layer;
}
L.control.layers([], layers).addTo(editor.map);
var control = L.control.layers([], layers).addTo(editor.map);
$(control._layersLink).text('Sources');
});
},
@ -124,6 +125,8 @@ editor = {
_geometries: {},
_creating: false,
_editing: null,
_geometry_types: [],
_shown_geometry_types: {},
init_geometries: function () {
// init geometries and edit listeners
editor._highlight_layer = L.layerGroup().addTo(editor.map);
@ -135,6 +138,52 @@ editor = {
editor.map.on('editable:drawing:commit', editor._done_creating);
editor.map.on('editable:editing', editor._update_editing);
editor.map.on('editable:drawing:cancel', editor._canceled_creating);
editor._get_geometry_types();
},
_get_geometry_types: function() {
$.getJSON('/api/geometrytypes/', function(geometrytypes) {
var layers = {};
var geometrytype, layer;
for (var i = 0; i < geometrytypes.length; i++) {
geometrytype = geometrytypes[i];
layer = L.circle([-200, -200], 0.1);
layer._c3nav_geometry_type = geometrytype.name;
layer.on('add', editor._add_geometrytype_layer);
layer.on('remove', editor._remove_geometrytype_layer);
layer.addTo(editor.map);
layers[geometrytype.title_plural] = layer;
editor._geometry_types.push(geometrytype.name)
editor._shown_geometry_types[geometrytype.name] = true;
}
var control = L.control.layers([], layers).addTo(editor.map);
$(control._layersLink).text('Types');
});
},
_add_geometrytype_layer: function(e) {
var type = e.target._c3nav_geometry_type;
if (!editor._shown_geometry_types[type]) {
if (editor._loading_geometry) {
e.target.addTo(map);
return;
}
editor._loading_geometry = true;
editor._shown_geometry_types[type] = true;
editor.get_geometries();
}
},
_remove_geometrytype_layer: function(e) {
var type = e.target._c3nav_geometry_type;
if (editor._shown_geometry_types[type]) {
if (editor._loading_geometry) {
e.target.addTo(map);
return;
}
editor._loading_geometry = true;
editor._shown_geometry_types[type] = false;
editor.get_geometries();
}
},
get_geometries: function () {
// reload geometries of current level
@ -142,7 +191,13 @@ editor = {
if (editor._geometries_layer !== null) {
editor.map.removeLayer(editor._geometries_layer);
}
$.getJSON('/api/geometries/?level='+String(editor._level), function(geometries) {
geometrytypes = '';
for (var i = 0; i < editor._geometry_types.length; i++) {
if (editor._shown_geometry_types[editor._geometry_types[i]]) {
geometrytypes += '&type=' + editor._geometry_types[i];
}
}
$.getJSON('/api/geometries/?level='+String(editor._level)+geometrytypes, function(geometries) {
editor._geometries_layer = L.geoJSON(geometries, {
style: editor._get_geometry_style,
onEachFeature: editor._register_geojson_feature

View file

@ -1,5 +1,6 @@
import mimetypes
import os
from collections import OrderedDict
from django.conf import settings
from django.core.files import File
@ -13,6 +14,21 @@ from c3nav.mapdata.permissions import filter_queryset_by_package_access
from c3nav.mapdata.serializers.main import LevelSerializer, PackageSerializer, SourceSerializer
class GeometryTypeViewSet(ViewSet):
"""
Lists all geometry types.
"""
def list(self, request):
return Response([
OrderedDict((
('name', name),
('title', str(mapitemtype._meta.verbose_name)),
('title_plural', str(mapitemtype._meta.verbose_name_plural)),
)) for name, mapitemtype in GEOMETRY_MAPITEM_TYPES.items()
])
class GeometryViewSet(ViewSet):
"""
List all geometries.