feature/google-maps-in-mapeditor-added #33

Merged
bence merged 9 commits from feature/google-maps-in-mapeditor-added into develop 2021-05-02 13:38:17 +02:00
4 changed files with 147 additions and 51 deletions
Showing only changes of commit 0bb31cbe14 - Show all commits

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,36 +378,53 @@
}, },
init: function (divId, places) { init: function (divId, places) {
LMapWrapper.map = L.map('map', { document.getElementById(divId).style.display = "block";
zoomControl: false
});
LMapWrapper.map.on('click', function (e) { if(LMapWrapper.loaded === true) {
LMapWrapper.placeMarker(e.latlng); LMapWrapper.invalidateSize(true);
}); } else {
LMapWrapper.divId = divId;
LMapWrapper.map = L.map(LMapWrapper.divId, {
zoomControl: false
});
var highResData = Util.getHighResData(); LMapWrapper.map.on('click', function (e) {
LMapWrapper.placeMarker(e.latlng);
});
L.tileLayer(tileUrl, { var highResData = Util.getHighResData();
attribution: tileAttribution,
subdomains: '1234',
ppi: highResData.ppi,
tileSize: highResData.tileSize,
zoomOffset: highResData.zoomOffset,
minZoom: highResData.minZoom,
maxZoom: highResData.maxZoom
}).addTo(LMapWrapper.map);
LMapWrapper.map.fitBounds(L.latLngBounds({ lat: mapBounds.south, lng: mapBounds.west }, { lat: mapBounds.north, lng: mapBounds.east })); L.tileLayer(tileUrl, {
attribution: tileAttribution,
subdomains: '1234',
ppi: highResData.ppi,
tileSize: highResData.tileSize,
zoomOffset: highResData.zoomOffset,
minZoom: highResData.minZoom,
maxZoom: highResData.maxZoom
}).addTo(LMapWrapper.map);
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,36 +510,57 @@
}, },
bence marked this conversation as resolved Outdated
Outdated
Review

I would remove this and add a permanent street view cover layer to the map so the available locations will be always shown. (This is the same how the competitor does.)

Reference: https://developers.google.com/maps/documentation/javascript/reference/street-view#StreetViewCoverageLayer

Example:

                var streetViewCover = new google.maps.StreetViewCoverageLayer();
                streetViewCover.setMap(GMapWrapper.map);

I would remove this and add a permanent street view cover layer to the map so the available locations will be always shown. (This is the same how the competitor does.) Reference: https://developers.google.com/maps/documentation/javascript/reference/street-view#StreetViewCoverageLayer Example: ```js var streetViewCover = new google.maps.StreetViewCoverageLayer(); streetViewCover.setMap(GMapWrapper.map); ``` ![](https://i.ibb.co/LPjP4rr/Bildschirmfoto-vom-2021-05-02-11-27-40.png)

I personally consider the permanent street view cover layer disturbing. Can we just add another switch to toggle it?

I personally consider the permanent street view cover layer disturbing. Can we just add another switch to toggle it?
Outdated
Review

For me it's OK, then it can be done later.

For me it's OK, then it can be done later.
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 },
zoom: 2,
fullscreenControl: false,
zoomControl: true,
zoomControlOptions: {
position: google.maps.ControlPosition.LEFT_BOTTOM
},
streetViewControl: true,
streetViewControlOptions: {
position: google.maps.ControlPosition.LEFT_BOTTOM
},
draggableCursor: 'crosshair'
});
GMapWrapper.map.addListener('click', function (mapsMouseEvent) { if(GMapWrapper.loaded) {
GMapWrapper.placeMarker({ GMapWrapper.invalidateSize();
lat: mapsMouseEvent.latLng.lat(), } else {
lng: mapsMouseEvent.latLng.lng() GMapWrapper.divId = divId;
GMapWrapper.map = new google.maps.Map(document.getElementById(GMapWrapper.divId), {
center: { lat: 0., lng: 0. },
zoom: 2,
fullscreenControl: false,
zoomControl: true,
zoomControlOptions: {
position: google.maps.ControlPosition.LEFT_BOTTOM
},
streetViewControl: true,
streetViewControlOptions: {
position: google.maps.ControlPosition.LEFT_BOTTOM
},
draggableCursor: 'crosshair'
}); });
});
GMapWrapper.map.addListener('click', function (mapsMouseEvent) {
GMapWrapper.placeMarker({
lat: mapsMouseEvent.latLng.lat(),
lng: mapsMouseEvent.latLng.lng()
});
});
}
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) {
GMapWrapper.markers = new MarkerClusterer(GMapWrapper.map, [], { if(!GMapWrapper.markers) {
imagePath: STATIC_ROOT + '/img/markers/m', GMapWrapper.markers = new MarkerClusterer(GMapWrapper.map, [], {
imageExtension: 'png?rev' + REVISION imagePath: STATIC_ROOT + '/img/markers/m',
}); 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>