editor: select geometry types to show on map
This commit is contained in:
parent
f0a2f5e058
commit
e69b0a95ec
4 changed files with 85 additions and 3 deletions
|
@ -8,13 +8,14 @@ from rest_framework.response import Response
|
||||||
from rest_framework.routers import SimpleRouter
|
from rest_framework.routers import SimpleRouter
|
||||||
|
|
||||||
from c3nav.editor.api import HosterViewSet, SubmitTaskViewSet
|
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 = SimpleRouter()
|
||||||
router.register(r'packages', PackageViewSet)
|
router.register(r'packages', PackageViewSet)
|
||||||
router.register(r'levels', LevelViewSet)
|
router.register(r'levels', LevelViewSet)
|
||||||
router.register(r'sources', SourceViewSet)
|
router.register(r'sources', SourceViewSet)
|
||||||
|
|
||||||
|
router.register(r'geometrytypes', GeometryTypeViewSet, base_name='geometrytype')
|
||||||
router.register(r'geometries', GeometryViewSet, base_name='geometry')
|
router.register(r'geometries', GeometryViewSet, base_name='geometry')
|
||||||
|
|
||||||
router.register(r'hosters', HosterViewSet, base_name='hoster')
|
router.register(r'hosters', HosterViewSet, base_name='hoster')
|
||||||
|
|
|
@ -19,6 +19,16 @@ body {
|
||||||
top:2px;
|
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 {
|
.leaflet-levels a {
|
||||||
font-size:16px;
|
font-size:16px;
|
||||||
color:#333333;
|
color:#333333;
|
||||||
|
|
|
@ -61,7 +61,8 @@ editor = {
|
||||||
source.layer = L.imageOverlay('/api/sources/' + source.name + '/image/', source.bounds);
|
source.layer = L.imageOverlay('/api/sources/' + source.name + '/image/', source.bounds);
|
||||||
layers[source.name] = source.layer;
|
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: {},
|
_geometries: {},
|
||||||
_creating: false,
|
_creating: false,
|
||||||
_editing: null,
|
_editing: null,
|
||||||
|
_geometry_types: [],
|
||||||
|
_shown_geometry_types: {},
|
||||||
init_geometries: function () {
|
init_geometries: function () {
|
||||||
// init geometries and edit listeners
|
// init geometries and edit listeners
|
||||||
editor._highlight_layer = L.layerGroup().addTo(editor.map);
|
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:drawing:commit', editor._done_creating);
|
||||||
editor.map.on('editable:editing', editor._update_editing);
|
editor.map.on('editable:editing', editor._update_editing);
|
||||||
editor.map.on('editable:drawing:cancel', editor._canceled_creating);
|
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 () {
|
get_geometries: function () {
|
||||||
// reload geometries of current level
|
// reload geometries of current level
|
||||||
|
@ -142,7 +191,13 @@ editor = {
|
||||||
if (editor._geometries_layer !== null) {
|
if (editor._geometries_layer !== null) {
|
||||||
editor.map.removeLayer(editor._geometries_layer);
|
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, {
|
editor._geometries_layer = L.geoJSON(geometries, {
|
||||||
style: editor._get_geometry_style,
|
style: editor._get_geometry_style,
|
||||||
onEachFeature: editor._register_geojson_feature
|
onEachFeature: editor._register_geojson_feature
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import mimetypes
|
import mimetypes
|
||||||
import os
|
import os
|
||||||
|
from collections import OrderedDict
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core.files import File
|
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
|
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):
|
class GeometryViewSet(ViewSet):
|
||||||
"""
|
"""
|
||||||
List all geometries.
|
List all geometries.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue