diff --git a/config.default.php b/config.default.php index 342112f..57e33bb 100755 --- a/config.default.php +++ b/config.default.php @@ -22,8 +22,7 @@ // default map drawing framework //$mapapi = "gmaps"; // google maps -//$mapapi = "openlayers"; // openlayers 2 -$mapapi = "openlayers3"; // openlayers 3+ +$mapapi = "openlayers"; // openlayers // openlayers additional map layers in XYZ format // name => url diff --git a/index.php b/index.php index 217b39e..ea14e57 100755 --- a/index.php +++ b/index.php @@ -153,8 +153,7 @@
diff --git a/js/api_openlayers.js b/js/api_openlayers.js index bb64c59..b4677bc 100755 --- a/js/api_openlayers.js +++ b/js/api_openlayers.js @@ -16,60 +16,277 @@ * along with this program; if not, see . */ -// openlayers +// openlayers 3+ var map; var layerTrack; var layerMarkers; -var wgs84; -var mercator; +var selectedLayer; +var olStyles; var loadedAPI = 'openlayers'; function init() { - wgs84 = new OpenLayers.Projection('EPSG:4326'); // from WGS 1984 - mercator = new OpenLayers.Projection('EPSG:900913'); // to Mercator - var options = { - controls: [ - new OpenLayers.Control.ArgParser(), // default - new OpenLayers.Control.Attribution(), // default - new OpenLayers.Control.LayerSwitcher(), - new OpenLayers.Control.Navigation(), // default - new OpenLayers.Control.PanZoomBar(),// do we need it? - new OpenLayers.Control.ScaleLine() - ] - }; - map = new OpenLayers.Map('map-canvas', options); + + addCss('css/ol.css', 'ol_css'); + + var controls = [ + new ol.control.Zoom(), + new ol.control.Rotate(), + new ol.control.ScaleLine(), + new ol.control.ZoomToExtent({ label: getExtentImg() }), + ]; + + var view = new ol.View({ + center: ol.proj.fromLonLat([init_longitude, init_latitude]), + zoom: 8 + }); + + map = new ol.Map({ + target: 'map-canvas', + controls: controls, + view: view + }); + // default layer: OpenStreetMap - var osm = new OpenLayers.Layer.OSM(); + var osm = new ol.layer.Tile({ + name: 'OpenStreetMap', + visible: true, + source: new ol.source.OSM() + }); map.addLayer(osm); + selectedLayer = osm; // add extra layers for (var layerName in ol_layers) { if (ol_layers.hasOwnProperty(layerName)) { var layerUrl = ol_layers[layerName]; - var ol_layer = new OpenLayers.Layer.OSM( - layerName, - urlFromOL3(layerUrl), - { tileOptions: { crossOriginKeyword: null } } - ); + var ol_layer = new ol.layer.Tile({ + name: layerName, + visible: false, + source: new ol.source.XYZ({ + url: layerUrl + }) + }); map.addLayer(ol_layer); } } - var position = new OpenLayers.LonLat(init_longitude, init_latitude).transform(wgs84, mercator); - var zoom = 8; - map.setCenter(position, zoom); - // init layers - layerTrack = new OpenLayers.Layer.Vector('Track'); - layerMarkers = new OpenLayers.Layer.Markers('Markers'); + var lineStyle = new ol.style.Style({ + stroke: new ol.style.Stroke({ + color: hexToRGBA(strokeColor, strokeOpacity), + width: strokeWeight + }) + }); + layerTrack = new ol.layer.Vector({ + name: 'Track', + type: 'data', + source: new ol.source.Vector(), + style: lineStyle + }); + layerMarkers = new ol.layer.Vector({ + name: 'Markers', + type: 'data', + source: new ol.source.Vector() + }); + map.addLayer(layerTrack); + map.addLayer(layerMarkers); + + // styles + olStyles = {}; + var iconRed = new ol.style.Icon({ + anchor: [ 0.5, 1 ], + src: 'images/marker-red.png' + }); + var iconGreen = new ol.style.Icon({ + anchor: [ 0.5, 1 ], + src: 'images/marker-green.png' + }); + var iconWhite = new ol.style.Icon({ + anchor: [ 0.5, 1 ], + opacity: 0.7, + src: 'images/marker-white.png' + }); + var iconGold = new ol.style.Icon({ + anchor: [ 0.5, 1 ], + src: 'images/marker-gold.png' + }); + olStyles['red'] = new ol.style.Style({ + image: iconRed + }); + olStyles['green'] = new ol.style.Style({ + image: iconGreen + }); + olStyles['white'] = new ol.style.Style({ + image: iconWhite + }); + olStyles['gold'] = new ol.style.Style({ + image: iconGold + }); + + // popups + var popupContainer = document.createElement('div'); + popupContainer.id = 'popup'; + popupContainer.className = 'ol-popup'; + document.getElementsByTagName('body')[0].appendChild(popupContainer); + var popupCloser = document.createElement('a'); + popupCloser.id = 'popup-closer'; + popupCloser.className = 'ol-popup-closer'; + popupCloser.href = '#'; + popupContainer.appendChild(popupCloser); + var popupContent = document.createElement('div'); + popupContent.id = 'popup-content'; + popupContainer.appendChild(popupContent); + + var popup = new ol.Overlay({ + element: popupContainer, + autoPan: true, + autoPanAnimation: { + duration: 250 + } + }); + + popupCloser.onclick = function() { + popup.setPosition(undefined); + popupCloser.blur(); + return false; + }; + + // add click handler to map to show popup + map.on('click', function(e) { + var coordinate = e.coordinate; + var feature = map.forEachFeatureAtPixel(e.pixel, + function(feature, layer) { + if (layer.get('name') == 'Markers') { + return feature; + } + }); + if (feature) { + var p = feature.get('p'); + var i = feature.getId(); + var posLen = feature.get('posLen'); + // popup show + popup.setPosition(coordinate); + popupContent.innerHTML = getPopupHtml(p, i, posLen); + map.addOverlay(popup); + if (document.getElementById('bottom').style.display == 'block') { + var index = 0; + for (var key in altitudes) { + if (altitudes.hasOwnProperty(key) && key == i) { + chart.setSelection([{ row: index, column: null }]); + break; + } + index++; + } + } + } else { + // popup destroy + popup.setPosition(undefined); + } + }); + + // change mouse cursor when over marker + map.on("pointermove", function(e) { + var hit = map.forEachFeatureAtPixel(e.pixel, function(feature, layer) { + if (layer.get('name') == 'Markers') { + return true; + } else { + return false; + } + }); + if (hit) { + this.getTargetElement().style.cursor = 'pointer'; + } else { + this.getTargetElement().style.cursor = ''; + } + }); + + // layer switcher + var switcher = document.createElement('div'); + switcher.id = 'switcher'; + switcher.className = 'ol-control'; + document.getElementsByTagName('body')[0].appendChild(switcher); + var switcherContent = document.createElement('div'); + switcherContent.id = 'switcher-content'; + switcherContent.className = 'ol-layerswitcher'; + switcher.appendChild(switcherContent); + + map.getLayers().forEach(function (layer) { + var layerLabel = document.createElement('label'); + layerLabel.innerHTML = layer.get('name'); + switcherContent.appendChild(layerLabel); + + var layerRadio = document.createElement('input'); + if (layer.get('type') === 'data') { + layerRadio.type = 'checkbox'; + layerLabel.className = 'ol-datalayer'; + } else { + layerRadio.type = 'radio'; + } + layerRadio.name = 'layer'; + layerRadio.value = layer.get('name'); + layerRadio.onclick = switchLayer; + if (layer.getVisible()) { + layerRadio.checked = true; + } + layerLabel.insertBefore(layerRadio, layerLabel.childNodes[0]); + }); + + function switchLayer() { + var layerName = this.value; + map.getLayers().forEach(function (layer) { + if (layer.get('name') === layerName) { + if (layer.get('type') === 'data') { + if (layer.getVisible()) { + layer.setVisible(false); + } else { + layer.setVisible(true); + } + } else { + selectedLayer.setVisible(false); + selectedLayer = layer; + layer.setVisible(true); + } + return; + } + }); + }; + + var switcherButton = document.createElement('button'); + var layerImg = document.createElement('img'); + layerImg.src = 'images/layers.svg'; + layerImg.style.width = '60%'; + switcherButton.appendChild(layerImg); + + var switcherHandle = function() { + var el = document.getElementById('switcher'); + if (el.style.display === 'block') { + el.style.display = 'none'; + } else { + el.style.display = 'block'; + } + }; + + switcherButton.addEventListener('click', switcherHandle, false); + switcherButton.addEventListener('touchstart', switcherHandle, false); + + var element = document.createElement('div'); + element.className = 'ol-switcher-button ol-unselectable ol-control'; + element.appendChild(switcherButton); + + var switcherControl = new ol.control.Control({ + element: element + }); + map.addControl(switcherControl); } function cleanup() { map = undefined; layerTrack = undefined; layerMarkers = undefined; - wgs84 = undefined; - mercator = undefined; + selectedLayer = undefined; + olStyles = undefined; + removeElementById('popup'); + removeElementById('switcher'); document.getElementById("map-canvas").innerHTML = ''; } @@ -78,7 +295,6 @@ function displayTrack(xml, update) { var totalMeters = 0; var totalSeconds = 0; var points = []; - var latlngbounds = new OpenLayers.Bounds(); var positions = xml.getElementsByTagName('position'); var posLen = positions.length; for (var i = 0; i < posLen; i++) { @@ -90,24 +306,40 @@ function displayTrack(xml, update) { // set marker setMarker(p, i, posLen); // update polyline - var point = new OpenLayers.Geometry.Point(p.longitude, p.latitude).transform(wgs84, mercator); - latlngbounds.extend(point); + var point = ol.proj.fromLonLat([p.longitude, p.latitude]); points.push(point); } - var lineString = new OpenLayers.Geometry.LineString(points); - var lineStyle = { strokeColor: strokeColor, strokeOpacity: strokeOpacity, strokeWidth: strokeWeight }; - var lineFeature = new OpenLayers.Feature.Vector(lineString, null, lineStyle); - layerTrack.addFeatures([lineFeature]); - map.addLayer(layerTrack); - map.addLayer(layerMarkers); + var lineString = new ol.geom.LineString(points); + + var lineFeature = new ol.Feature({ + geometry: lineString, + }); + + layerTrack.getSource().addFeature(lineFeature); + + var extent = layerTrack.getSource().getExtent(); + + map.getControls().forEach(function (el) { + if (el instanceof ol.control.ZoomToExtent) { + map.removeControl(el); + } + }); + if (update) { - map.zoomToExtent(latlngbounds); - if (i == 1) { - // only one point, zoom out - map.zoomOut(); + map.getView().fit(extent); + var zoom = map.getView().getZoom(); + if (zoom > 20) { + map.getView().setZoom(20); + extent = map.getView().calculateExtent(map.getSize()); } } + var zoomToExtentControl = new ol.control.ZoomToExtent({ + extent: extent, + label: getExtentImg() + }); + map.addControl(zoomToExtentControl); + updateSummary(p.timestamp, totalMeters, totalSeconds); if (p.tid != trackid) { trackid = p.tid; @@ -122,53 +354,33 @@ function displayTrack(xml, update) { function clearMap() { if (layerTrack) { - layerTrack.removeAllFeatures(); + layerTrack.getSource().clear(); } if (layerMarkers) { - layerMarkers.clearMarkers(); + layerMarkers.getSource().clear(); } } function setMarker(p, i, posLen) { // marker - var lonLat = new OpenLayers.LonLat(p.longitude, p.latitude).transform(wgs84, mercator); - var size = new OpenLayers.Size(16, 25); - var offset = new OpenLayers.Pixel(-(size.w / 2), -size.h); - if (latest == 1) { var icon = new OpenLayers.Icon('images/marker-red.png', size, offset); } - else if (i == 0) { var icon = new OpenLayers.Icon('images/marker-green.png', size, offset); } - else if (i == posLen - 1) { var icon = new OpenLayers.Icon('images/marker-red.png', size, offset); } - else { - offset = new OpenLayers.Pixel(-(size.w / 2), -size.h); - var icon = new OpenLayers.Icon('images/marker-white.png', size, offset); - } - var marker = new OpenLayers.Marker(lonLat, icon); - layerMarkers.addMarker(marker); + var marker = new ol.Feature({ + geometry: new ol.geom.Point(ol.proj.fromLonLat([p.longitude, p.latitude])) + }); - // popup - var content = getPopupHtml(p, i, posLen); - marker.events.register("mousedown", marker, (function () { - return function () { - // remove popups - if (map.popups.length > 0) { - for (var j = map.popups.length - 1; j >= 0; j--) { - map.removePopup(map.popups[j]) - }; - } - // show popup - var popup = new OpenLayers.Popup.FramedCloud("popup_" + (i + 1), lonLat, null, content, icon, true); - map.addPopup(popup); - if (document.getElementById('bottom').style.display == 'block') { - var index = 0; - for (var key in altitudes) { - if (altitudes.hasOwnProperty(key) && key == i) { - chart.setSelection([{ row: index, column: null }]); - break; - } - index++; - } - } - } - })()); + if (latest == 1) { + var iconStyle = olStyles['red']; + } else if (i == 0) { + var iconStyle = olStyles['green']; + } else if (i == posLen - 1) { + var iconStyle = olStyles['red']; + } else { + var iconStyle = olStyles['white']; + } + marker.setStyle(iconStyle); + marker.setId(i); + marker.set('p', p); + marker.set('posLen', posLen); + layerMarkers.getSource().addFeature(marker); } function addChartEvent(chart, data) { @@ -176,16 +388,20 @@ function addChartEvent(chart, data) { var selection = chart.getSelection()[0]; if (selection) { var id = data.getValue(selection.row, 0) - 1; - var marker = layerMarkers.markers[id]; - var url = marker.icon.url; - marker.setUrl('images/marker-gold.png'); - altTimeout = setTimeout(function () { marker.setUrl(url); }, 2000); + var marker = layerMarkers.getSource().getFeatureById(id); + var url = marker.get('src'); + var initStyle = marker.getStyle(); + var iconStyle = olStyles['gold']; + marker.setStyle(iconStyle); + altTimeout = setTimeout(function () { marker.setStyle(initStyle); }, 2000); } }); } + //20.597985430276808,52.15547181298076,21.363595171488573,52.33750879522563 function getBounds() { - var bounds = map.getExtent().transform(mercator, wgs84).toArray(); + var extent = map.getView().calculateExtent(map.getSize()); + var bounds = ol.proj.transformExtent(extent, 'EPSG:900913', 'EPSG:4326'); var lon_sw = bounds[0]; var lat_sw = bounds[1]; var lon_ne = bounds[2]; @@ -194,41 +410,17 @@ function getBounds() { } function zoomToBounds(b) { - var bounds = new OpenLayers.Bounds(b).transform(wgs84, mercator); - map.zoomToExtent(bounds); -} - -function urlFromOL3(url) { - url = url.replace(/\{([xyz])\}/g, "$${$1}"); - return expandUrl(url); -} - -// backported from openlayers 3 -function expandUrl(url) { - var urls = []; - var match = /\{([a-z])-([a-z])\}/.exec(url); - if (match) { - // char range - var startCharCode = match[1].charCodeAt(0); - var stopCharCode = match[2].charCodeAt(0); - for (var charCode = startCharCode; charCode <= stopCharCode; ++charCode) { - urls.push(url.replace(match[0], String.fromCharCode(charCode))); - } - return urls; - } - match = match = /\{(\d+)-(\d+)\}/.exec(url); - if (match) { - // number range - var stop = parseInt(match[2], 10); - for (var i = parseInt(match[1], 10); i <= stop; i++) { - urls.push(url.replace(match[0], i.toString())); - } - return urls; - } - urls.push(url); - return urls; + var bounds = ol.proj.transformExtent(b, 'EPSG:4326', 'EPSG:900913'); + map.getView().fit(bounds); } function updateSize() { - // ignore + map.updateSize(); +} + +function getExtentImg() { + var extentImg = document.createElement('img'); + extentImg.src = 'images/extent.svg'; + extentImg.style.width = '60%'; + return extentImg; } diff --git a/js/api_openlayers3.js b/js/api_openlayers3.js deleted file mode 100755 index 0c29896..0000000 --- a/js/api_openlayers3.js +++ /dev/null @@ -1,426 +0,0 @@ -/* μlogger - * - * Copyright(C) 2017 Bartek Fabiszewski (www.fabiszewski.net) - * - * This is free software; you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, see . - */ - -// openlayers 3+ -var map; -var layerTrack; -var layerMarkers; -var selectedLayer; -var olStyles; -var loadedAPI = 'openlayers3'; - -function init() { - - addCss('css/ol.css', 'ol3css'); - - var controls = [ - new ol.control.Zoom(), - new ol.control.Rotate(), - new ol.control.ScaleLine(), - new ol.control.ZoomToExtent({ label: getExtentImg() }), - ]; - - var view = new ol.View({ - center: ol.proj.fromLonLat([init_longitude, init_latitude]), - zoom: 8 - }); - - map = new ol.Map({ - target: 'map-canvas', - controls: controls, - view: view - }); - - // default layer: OpenStreetMap - var osm = new ol.layer.Tile({ - name: 'OpenStreetMap', - visible: true, - source: new ol.source.OSM() - }); - map.addLayer(osm); - selectedLayer = osm; - - // add extra layers - for (var layerName in ol_layers) { - if (ol_layers.hasOwnProperty(layerName)) { - var layerUrl = ol_layers[layerName]; - var ol_layer = new ol.layer.Tile({ - name: layerName, - visible: false, - source: new ol.source.XYZ({ - url: layerUrl - }) - }); - map.addLayer(ol_layer); - } - } - - // init layers - var lineStyle = new ol.style.Style({ - stroke: new ol.style.Stroke({ - color: hexToRGBA(strokeColor, strokeOpacity), - width: strokeWeight - }) - }); - layerTrack = new ol.layer.Vector({ - name: 'Track', - type: 'data', - source: new ol.source.Vector(), - style: lineStyle - }); - layerMarkers = new ol.layer.Vector({ - name: 'Markers', - type: 'data', - source: new ol.source.Vector() - }); - map.addLayer(layerTrack); - map.addLayer(layerMarkers); - - // styles - olStyles = {}; - var iconRed = new ol.style.Icon({ - anchor: [ 0.5, 1 ], - src: 'images/marker-red.png' - }); - var iconGreen = new ol.style.Icon({ - anchor: [ 0.5, 1 ], - src: 'images/marker-green.png' - }); - var iconWhite = new ol.style.Icon({ - anchor: [ 0.5, 1 ], - opacity: 0.7, - src: 'images/marker-white.png' - }); - var iconGold = new ol.style.Icon({ - anchor: [ 0.5, 1 ], - src: 'images/marker-gold.png' - }); - olStyles['red'] = new ol.style.Style({ - image: iconRed - }); - olStyles['green'] = new ol.style.Style({ - image: iconGreen - }); - olStyles['white'] = new ol.style.Style({ - image: iconWhite - }); - olStyles['gold'] = new ol.style.Style({ - image: iconGold - }); - - // popups - var popupContainer = document.createElement('div'); - popupContainer.id = 'popup'; - popupContainer.className = 'ol-popup'; - document.getElementsByTagName('body')[0].appendChild(popupContainer); - var popupCloser = document.createElement('a'); - popupCloser.id = 'popup-closer'; - popupCloser.className = 'ol-popup-closer'; - popupCloser.href = '#'; - popupContainer.appendChild(popupCloser); - var popupContent = document.createElement('div'); - popupContent.id = 'popup-content'; - popupContainer.appendChild(popupContent); - - var popup = new ol.Overlay({ - element: popupContainer, - autoPan: true, - autoPanAnimation: { - duration: 250 - } - }); - - popupCloser.onclick = function() { - popup.setPosition(undefined); - popupCloser.blur(); - return false; - }; - - // add click handler to map to show popup - map.on('click', function(e) { - var coordinate = e.coordinate; - var feature = map.forEachFeatureAtPixel(e.pixel, - function(feature, layer) { - if (layer.get('name') == 'Markers') { - return feature; - } - }); - if (feature) { - var p = feature.get('p'); - var i = feature.getId(); - var posLen = feature.get('posLen'); - // popup show - popup.setPosition(coordinate); - popupContent.innerHTML = getPopupHtml(p, i, posLen); - map.addOverlay(popup); - if (document.getElementById('bottom').style.display == 'block') { - var index = 0; - for (var key in altitudes) { - if (altitudes.hasOwnProperty(key) && key == i) { - chart.setSelection([{ row: index, column: null }]); - break; - } - index++; - } - } - } else { - // popup destroy - popup.setPosition(undefined); - } - }); - - // change mouse cursor when over marker - map.on("pointermove", function(e) { - var hit = map.forEachFeatureAtPixel(e.pixel, function(feature, layer) { - if (layer.get('name') == 'Markers') { - return true; - } else { - return false; - } - }); - if (hit) { - this.getTargetElement().style.cursor = 'pointer'; - } else { - this.getTargetElement().style.cursor = ''; - } - }); - - // layer switcher - var switcher = document.createElement('div'); - switcher.id = 'switcher'; - switcher.className = 'ol-control'; - document.getElementsByTagName('body')[0].appendChild(switcher); - var switcherContent = document.createElement('div'); - switcherContent.id = 'switcher-content'; - switcherContent.className = 'ol-layerswitcher'; - switcher.appendChild(switcherContent); - - map.getLayers().forEach(function (layer) { - var layerLabel = document.createElement('label'); - layerLabel.innerHTML = layer.get('name'); - switcherContent.appendChild(layerLabel); - - var layerRadio = document.createElement('input'); - if (layer.get('type') === 'data') { - layerRadio.type = 'checkbox'; - layerLabel.className = 'ol-datalayer'; - } else { - layerRadio.type = 'radio'; - } - layerRadio.name = 'layer'; - layerRadio.value = layer.get('name'); - layerRadio.onclick = switchLayer; - if (layer.getVisible()) { - layerRadio.checked = true; - } - layerLabel.insertBefore(layerRadio, layerLabel.childNodes[0]); - }); - - function switchLayer() { - var layerName = this.value; - map.getLayers().forEach(function (layer) { - if (layer.get('name') === layerName) { - if (layer.get('type') === 'data') { - if (layer.getVisible()) { - layer.setVisible(false); - } else { - layer.setVisible(true); - } - } else { - selectedLayer.setVisible(false); - selectedLayer = layer; - layer.setVisible(true); - } - return; - } - }); - }; - - var switcherButton = document.createElement('button'); - var layerImg = document.createElement('img'); - layerImg.src = 'images/layers.svg'; - layerImg.style.width = '60%'; - switcherButton.appendChild(layerImg); - - var switcherHandle = function() { - var el = document.getElementById('switcher'); - if (el.style.display === 'block') { - el.style.display = 'none'; - } else { - el.style.display = 'block'; - } - }; - - switcherButton.addEventListener('click', switcherHandle, false); - switcherButton.addEventListener('touchstart', switcherHandle, false); - - var element = document.createElement('div'); - element.className = 'ol-switcher-button ol-unselectable ol-control'; - element.appendChild(switcherButton); - - var switcherControl = new ol.control.Control({ - element: element - }); - map.addControl(switcherControl); -} - -function cleanup() { - map = undefined; - layerTrack = undefined; - layerMarkers = undefined; - selectedLayer = undefined; - olStyles = undefined; - removeElementById('popup'); - removeElementById('switcher'); - document.getElementById("map-canvas").innerHTML = ''; -} - -function displayTrack(xml, update) { - altitudes = {}; - var totalMeters = 0; - var totalSeconds = 0; - var points = []; - var positions = xml.getElementsByTagName('position'); - var posLen = positions.length; - for (var i = 0; i < posLen; i++) { - var p = parsePosition(positions[i], i); - totalMeters += p.distance; - totalSeconds += p.seconds; - p['totalMeters'] = totalMeters; - p['totalSeconds'] = totalSeconds; - // set marker - setMarker(p, i, posLen); - // update polyline - var point = ol.proj.fromLonLat([p.longitude, p.latitude]); - points.push(point); - } - var lineString = new ol.geom.LineString(points); - - var lineFeature = new ol.Feature({ - geometry: lineString, - }); - - layerTrack.getSource().addFeature(lineFeature); - - var extent = layerTrack.getSource().getExtent(); - - map.getControls().forEach(function (el) { - if (el instanceof ol.control.ZoomToExtent) { - map.removeControl(el); - } - }); - - if (update) { - map.getView().fit(extent); - var zoom = map.getView().getZoom(); - if (zoom > 20) { - map.getView().setZoom(20); - extent = map.getView().calculateExtent(map.getSize()); - } - } - - var zoomToExtentControl = new ol.control.ZoomToExtent({ - extent: extent, - label: getExtentImg() - }); - map.addControl(zoomToExtentControl); - - updateSummary(p.timestamp, totalMeters, totalSeconds); - if (p.tid != trackid) { - trackid = p.tid; - setTrack(trackid); - } - if (document.getElementById('bottom').style.display == 'block') { - // update altitudes chart - chart.clearChart(); - displayChart(); - } -} - -function clearMap() { - if (layerTrack) { - layerTrack.getSource().clear(); - } - if (layerMarkers) { - layerMarkers.getSource().clear(); - } -} - -function setMarker(p, i, posLen) { - // marker - var marker = new ol.Feature({ - geometry: new ol.geom.Point(ol.proj.fromLonLat([p.longitude, p.latitude])) - }); - - if (latest == 1) { - var iconStyle = olStyles['red']; - } else if (i == 0) { - var iconStyle = olStyles['green']; - } else if (i == posLen - 1) { - var iconStyle = olStyles['red']; - } else { - var iconStyle = olStyles['white']; - } - marker.setStyle(iconStyle); - marker.setId(i); - marker.set('p', p); - marker.set('posLen', posLen); - layerMarkers.getSource().addFeature(marker); -} - -function addChartEvent(chart, data) { - google.visualization.events.addListener(chart, 'select', function () { - var selection = chart.getSelection()[0]; - if (selection) { - var id = data.getValue(selection.row, 0) - 1; - var marker = layerMarkers.getSource().getFeatureById(id); - var url = marker.get('src'); - var initStyle = marker.getStyle(); - var iconStyle = olStyles['gold']; - marker.setStyle(iconStyle); - altTimeout = setTimeout(function () { marker.setStyle(initStyle); }, 2000); - } - }); -} - -//20.597985430276808,52.15547181298076,21.363595171488573,52.33750879522563 -function getBounds() { - var extent = map.getView().calculateExtent(map.getSize()); - var bounds = ol.proj.transformExtent(extent, 'EPSG:900913', 'EPSG:4326'); - var lon_sw = bounds[0]; - var lat_sw = bounds[1]; - var lon_ne = bounds[2]; - var lat_ne = bounds[3]; - return [lon_sw, lat_sw, lon_ne, lat_ne]; -} - -function zoomToBounds(b) { - var bounds = ol.proj.transformExtent(b, 'EPSG:4326', 'EPSG:900913'); - map.getView().fit(bounds); -} - -function updateSize() { - map.updateSize(); -} - -function getExtentImg() { - var extentImg = document.createElement('img'); - extentImg.src = 'images/extent.svg'; - extentImg.style.width = '60%'; - return extentImg; -} diff --git a/js/main.js b/js/main.js index d31f2eb..f21c27f 100755 --- a/js/main.js +++ b/js/main.js @@ -492,11 +492,8 @@ function loadMapAPI(api) { if (mapapi == 'gmaps') { addScript('js/api_gmaps.js', 'mapapi'); urls.push('//maps.googleapis.com/maps/api/js?' + ((gkey !== null) ? ('key=' + gkey + '&') : '') + 'callback=init'); - } else if (mapapi == 'openlayers') { - addScript('js/api_openlayers.js', 'mapapi'); - urls.push('//openlayers.org/api/OpenLayers.js'); } else { - addScript('js/api_openlayers3.js', 'mapapi'); + addScript('js/api_openlayers.js', 'mapapi'); urls.push('//cdn.polyfill.io/v2/polyfill.min.js?features=requestAnimationFrame,Element.prototype.classList') urls.push('js/ol.js'); }