added switching functionality between maps in mapeditor

This commit is contained in:
Balázs Vigh 2021-05-01 12:16:10 +02:00
parent ef8ad69506
commit 0bb31cbe14
4 changed files with 147 additions and 51 deletions

View File

@ -1,4 +1,5 @@
#map { #map {
display: none;
position: absolute; position: absolute;
top: 0; top: 0;
left: 0; left: 0;
@ -7,6 +8,27 @@
z-index: 1; z-index: 1;
} }
#gmap {
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
z-index: 1;
}
#mapSelection img {
display: inline;
width: 1em;
height: 1em;
vertical-align: -0.15em;
fill: #ffffff;
}
#mapSelection img svg {
fill: #28a745;
}
/* modify the cursor for the Leaflet map */ /* modify the cursor for the Leaflet map */
.leaflet-container { .leaflet-container {
cursor: crosshair; cursor: crosshair;

View File

@ -0,0 +1,4 @@
<!-- Copyright (c) 2019 The Bootstrap Authors. License can be found in 'USED_SOFTWARE' in section 'Bootstrap Icons'. -->
<svg xmlns="http://www.w3.org/2000/svg" fill="#ffffff" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M15.817.113A.5.5 0 0 1 16 .5v14a.5.5 0 0 1-.402.49l-5 1a.502.502 0 0 1-.196 0L5.5 15.01l-4.902.98A.5.5 0 0 1 0 15.5v-14a.5.5 0 0 1 .402-.49l5-1a.5.5 0 0 1 .196 0L10.5.99l4.902-.98a.5.5 0 0 1 .415.103zM10 1.91l-4-.8v12.98l4 .8V1.91zm1 12.98 4-.8V1.11l-4 .8v12.98zm-6-.8V1.11l-4 .8v12.98l4-.8z"/>
</svg>

After

Width:  |  Height:  |  Size: 530 B

View File

@ -305,6 +305,13 @@
var tempId = addedPlaces[i].tempId; var tempId = addedPlaces[i].tempId;
var placeId = addedPlaces[i].id; var placeId = addedPlaces[i].id;
places[tempId].id = placeId; places[tempId].id = placeId;
places[placeId] = places[tempId];
if(MapEditor.selectedMarker && MapEditor.selectedMarker.placeId === tempId) {
MapEditor.selectedMarker.placeId = placeId;
}
delete places[tempId];
MapEditor.map.loadMarkers(places);
} }
} }
}; };
@ -350,6 +357,8 @@
var LMapWrapper = { var LMapWrapper = {
map: null, map: null,
markers: null, markers: null,
divId: null,
loaded: false,
iconCollection: { iconCollection: {
iconGreen: L.icon({ iconGreen: L.icon({
iconUrl: STATIC_ROOT + '/img/markers/marker-green.svg?rev' + REVISION, iconUrl: STATIC_ROOT + '/img/markers/marker-green.svg?rev' + REVISION,
@ -369,7 +378,13 @@
}, },
init: function (divId, places) { init: function (divId, places) {
LMapWrapper.map = L.map('map', { document.getElementById(divId).style.display = "block";
if(LMapWrapper.loaded === true) {
LMapWrapper.invalidateSize(true);
} else {
LMapWrapper.divId = divId;
LMapWrapper.map = L.map(LMapWrapper.divId, {
zoomControl: false zoomControl: false
}); });
@ -390,15 +405,26 @@
}).addTo(LMapWrapper.map); }).addTo(LMapWrapper.map);
LMapWrapper.map.fitBounds(L.latLngBounds({ lat: mapBounds.south, lng: mapBounds.west }, { lat: mapBounds.north, lng: mapBounds.east })); LMapWrapper.map.fitBounds(L.latLngBounds({ lat: mapBounds.south, lng: mapBounds.west }, { lat: mapBounds.north, lng: mapBounds.east }));
}
LMapWrapper.loadMarkers(places); LMapWrapper.loadMarkers(places);
LMapWrapper.loaded = true;
},
destruct: function() {
document.getElementById(LMapWrapper.divId).style.display = 'none';
// LMapWrapper.divId = null;
}, },
loadMarkers: function (places) { loadMarkers: function (places) {
if(!LMapWrapper.markers) {
LMapWrapper.markers = L.markerClusterGroup({ LMapWrapper.markers = L.markerClusterGroup({
maxClusterRadius: 50 maxClusterRadius: 50
}); });
} else {
LMapWrapper.markers.clearLayers();
}
for (var placeId in places) { for (var placeId in places) {
if (!places.hasOwnProperty(placeId)) { if (!places.hasOwnProperty(placeId)) {
@ -410,9 +436,9 @@
var marker = L.marker({ lat: place.lat, lng: place.lng }, { var marker = L.marker({ lat: place.lat, lng: place.lng }, {
icon: place.noPano ? LMapWrapper.iconCollection.iconRed : LMapWrapper.iconCollection.iconGreen, icon: place.noPano ? LMapWrapper.iconCollection.iconRed : LMapWrapper.iconCollection.iconGreen,
zIndexOffset: 1000 zIndexOffset: 1000
}) });
.addTo(LMapWrapper.markers) marker.addTo(LMapWrapper.markers)
.on('click', function () { marker.on('click', function () {
MapEditor.select(this); MapEditor.select(this);
}); });
@ -446,8 +472,8 @@
}, },
changeMarkerIcon: function (marker, icon) { changeMarkerIcon: function (marker, icon) {
LMapWrapper.markers.removeLayer(marker); //LMapWrapper.markers.removeLayer(marker);
LMapWrapper.map.addLayer(marker); //LMapWrapper.map.addLayer(marker);
marker.setIcon(icon); marker.setIcon(icon);
marker.setZIndexOffset(2000); marker.setZIndexOffset(2000);
}, },
@ -460,6 +486,8 @@
var GMapWrapper = { var GMapWrapper = {
map: null, map: null,
markers: null, markers: null,
divId: null,
loaded: false,
iconCollection: { iconCollection: {
iconGreen: { iconGreen: {
url: STATIC_ROOT + '/img/markers/marker-green.svg?rev' + REVISION, url: STATIC_ROOT + '/img/markers/marker-green.svg?rev' + REVISION,
@ -482,8 +510,14 @@
}, },
init: function (divId, places) { init: function (divId, places) {
GMapWrapper.map = new google.maps.Map(document.getElementById(divId), { document.getElementById(divId).style.display = "block";
center: { lat: 48.2207779, lng: 16.3098489 },
if(GMapWrapper.loaded) {
GMapWrapper.invalidateSize();
} else {
GMapWrapper.divId = divId;
GMapWrapper.map = new google.maps.Map(document.getElementById(GMapWrapper.divId), {
center: { lat: 0., lng: 0. },
zoom: 2, zoom: 2,
fullscreenControl: false, fullscreenControl: false,
zoomControl: true, zoomControl: true,
@ -504,14 +538,29 @@
}); });
}); });
}
GMapWrapper.loadMarkers(places); GMapWrapper.loadMarkers(places);
GMapWrapper.loaded = true;
},
destruct: function() {
// GMapWrapper.map = null;
// GMapWrapper.markers = null;
document.getElementById(GMapWrapper.divId).style.display = 'none';
// GMapWrapper.divId = null;
}, },
loadMarkers: function (places) { loadMarkers: function (places) {
if(!GMapWrapper.markers) {
GMapWrapper.markers = new MarkerClusterer(GMapWrapper.map, [], { GMapWrapper.markers = new MarkerClusterer(GMapWrapper.map, [], {
imagePath: STATIC_ROOT + '/img/markers/m', imagePath: STATIC_ROOT + '/img/markers/m',
imageExtension: 'png?rev' + REVISION imageExtension: 'png?rev' + REVISION
}); });
} else {
GMapWrapper.markers.clearMarkers();
}
for (var placeId in places) { for (var placeId in places) {
if (!places.hasOwnProperty(placeId)) { if (!places.hasOwnProperty(placeId)) {
@ -583,7 +632,7 @@
// MapEditor.map = LMapWrapper; // MapEditor.map = LMapWrapper;
MapEditor.map = GMapWrapper; MapEditor.map = GMapWrapper;
MapEditor.map.init('map', places); MapEditor.map.init('gmap', places);
MapEditor.panorama = new google.maps.StreetViewPanorama(document.getElementById('panorama'), { MapEditor.panorama = new google.maps.StreetViewPanorama(document.getElementById('panorama'), {
// switch off fullscreenControl because positioning doesn't work // switch off fullscreenControl because positioning doesn't work
@ -653,4 +702,19 @@
} }
}; };
document.getElementById('mapSelector').onclick = function() {
MapEditor.closePlace();
MapEditor.map.destruct();
if(MapEditor.map === GMapWrapper) {
MapEditor.map = LMapWrapper;
MapEditor.map.init('map', places);
} else {
MapEditor.map = GMapWrapper;
MapEditor.map.init('gmap', places);
}
}
})(); })();

View File

@ -13,6 +13,11 @@
@section(subheader) @section(subheader)
<span><a href="javascript:;" id="mapName" title="Edit map data"><?= $mapName ?></a></span><!-- <span><a href="javascript:;" id="mapName" title="Edit map data"><?= $mapName ?></a></span><!--
--><span class="inline" id="mapSelection">
<button id="mapSelector">
<img src="<?= $_ENV['STATIC_ROOT'] ?>/img/map.svg?rev=<?= REVISION ?>" alt="Map Selector" />
</button>
</span><!--
--><span> --><span>
<input type="text" id="jumpCoordinates" placeholder="Insert coordinates here" /> <input type="text" id="jumpCoordinates" placeholder="Insert coordinates here" />
<button id="jumpButton" disabled >Jump</button> <button id="jumpButton" disabled >Jump</button>
@ -59,6 +64,7 @@
@section(main) @section(main)
<div id="map"></div> <div id="map"></div>
<div id="gmap"></div>
<div id="panorama"></div> <div id="panorama"></div>
<div id="noPano"> <div id="noPano">
<p class="bold">No panorama is available for this location.</p> <p class="bold">No panorama is available for this location.</p>