when a level, space or area is origin or destination, move marker

This commit is contained in:
Laura Klünder 2017-12-17 03:39:36 +01:00
parent 9185c999af
commit 656ad49721
2 changed files with 31 additions and 12 deletions

View file

@ -249,7 +249,7 @@ class CustomLocation:
'coordinates': (self.x, self.y)
}
def serialize(self, simple_geometry=False, geometry=True, **kwargs):
def serialize(self, include_type=False, simple_geometry=False, geometry=True, **kwargs):
result = OrderedDict((
('id', self.pk),
('slug', self.pk),
@ -258,6 +258,9 @@ class CustomLocation:
('level', self.level.pk),
('space', self.space.pk if self.space else None),
))
if include_type:
result['type'] = 'custom'
result.move_to_end('type', last=False)
if simple_geometry:
result['point'] = (self.level.pk, self.x, self.y)
result['bounds'] = ((int(math.floor(self.x)), int(math.floor(self.y))),

View file

@ -355,16 +355,22 @@ c3nav = {
$details.append(c3nav._build_location_html(result.destination));
// add origin and destination lines
c3nav._add_line_to_route(first_primary_level, c3nav._add_intermediate_point(
result.origin.point.slice(1),
result.items[0].coordinates.slice(0, 2),
result.items[1].coordinates.slice(0, 2)
), true);
c3nav._add_line_to_route(last_primary_level, c3nav._add_intermediate_point(
result.destination.point.slice(1),
result.items[result.items.length-1].coordinates.slice(0, 2),
result.items[result.items.length-2].coordinates.slice(0, 2)
).reverse(), true);
c3nav._location_point_overrides = {};
if (!c3nav._add_location_point_override(result.origin, result.items[0])) {
c3nav._add_line_to_route(first_primary_level, c3nav._add_intermediate_point(
result.origin.point.slice(1),
result.items[0].coordinates.slice(0, 2),
result.items[1].coordinates.slice(0, 2)
), true);
}
if (!c3nav._add_location_point_override(result.destination, result.items.slice(-1)[0])) {
c3nav._add_line_to_route(last_primary_level, c3nav._add_intermediate_point(
result.destination.point.slice(1),
result.items[result.items.length - 1].coordinates.slice(0, 2),
result.items[result.items.length - 2].coordinates.slice(0, 2)
).reverse(), true);
}
c3nav.update_map_locations();
c3nav._firstRouteLevel = first_primary_level;
$route.find('span').text(result.summary);
@ -374,6 +380,13 @@ c3nav = {
if (!nofly) c3nav.fly_to_bounds(true);
},
_add_location_point_override: function (location, item) {
if (location.type === 'level' || location.type === 'space' || location.type === 'area') {
c3nav._location_point_overrides[location.id] = item.coordinates.slice(0, -1);
return true;
}
return false;
},
_build_route_item: function (icon, text) {
var elem = $('<div class="routeitem">');
if (icon.indexOf('.') === -1) {
@ -1057,6 +1070,7 @@ c3nav = {
[bounds[1][0]+600/factor, bounds[1][1]+200/factor]
];
},
_location_point_overrides: {},
_add_location_to_map: function(location, icon) {
// add a location to the map as a marker
if (location.locations) {
@ -1066,7 +1080,9 @@ c3nav = {
}
return bounds;
}
var latlng = L.GeoJSON.coordsToLatLng(location.point.slice(1));
var point = c3nav._location_point_overrides[location.id] || location.point.slice(1),
latlng = L.GeoJSON.coordsToLatLng(point);
L.marker(latlng, {
icon: icon
}).bindPopup(location.elem+$('#popup-buttons').html(), c3nav._add_map_padding({