diff options
author | Matěj Cepl <mcepl@cepl.eu> | 2015-07-23 19:03:36 +0200 |
---|---|---|
committer | Matěj Cepl <mcepl@cepl.eu> | 2018-03-05 11:12:35 +0100 |
commit | a1e38d9111819c28d14d4c598732ca6f89c5c7b2 (patch) | |
tree | 14fb75a085db1596867692c5de4c99dc48762df4 /kostely.js | |
download | tolerancni-a1e38d9111819c28d14d4c598732ca6f89c5c7b2.tar.gz |
Originální import z https://gitlab.com/mcepl/kostely
Diffstat (limited to 'kostely.js')
-rw-r--r-- | kostely.js | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/kostely.js b/kostely.js new file mode 100644 index 0000000..49ceadf --- /dev/null +++ b/kostely.js @@ -0,0 +1,160 @@ +var vectorLayer = new ol.layer.Vector({ + title: "Románské kostely", + projection: "EPSG:3857", + source: new ol.source.Vector({ + format: new ol.format.GeoJSON() + }), + style: function(feat, res) { + var icon = feat.get('icon'); + var img_src = "img/Ol_icon_red.png"; + if (icon == 'rotunda') { + img_src = "img/Ol_icon_blue.png"; + } + else if (icon == 'question') { + img_src = "img/Ol_question_green.png"; + } + // FIXME je offset k něčemu dobrý? + var offset = feat.get('iconOffset'); + return [new ol.style.Style({ + image: new ol.style.Icon({ + src: img_src + }), + text: new ol.style.Text({ + font: 'bolder 10px serif', + text: feat.get('title'), + offsetY: 12, + textBaseLine: "bottom" + }) + })]; + } +}); + +var map = new ol.Map({ + target: "map", + projection: "EPSG:3857", + loadTilesWhileAnimating: true, + loadTilesWhileInteracting: true, + layers: [ + new ol.layer.Tile({ + title: "OSM Map", + source: new ol.source.OSM() + }), + + // to be filled in later + vectorLayer + ], + view: new ol.View({ + //Village Čihošť is the geographical center of Czechia + center: ol.proj.fromLonLat([15.338611, 49.743889]), + zoom: 8 + }) +}); + +var httpRequest = new XMLHttpRequest(); +httpRequest.onreadystatechange = function(data) { + if (httpRequest.readyState != 4 || httpRequest.status != 200) { + return; + } + else { + csv2geojson.csv2geojson(httpRequest.responseText, { + latfield: 'lat', + lonfield: 'lon', + delimiter: '\t' + }, + function(err, data) { + var geoJsonFormat = new ol.format.GeoJSON(); + var features = geoJsonFormat.readFeatures( + data, { + featureProjection: 'EPSG:3857' + } + ); + var layerSource = vectorLayer.getSource(); + layerSource.addFeatures(features); + }); +}}; +httpRequest.open('GET', 'kostely.tsv'); +httpRequest.send(); + +ol.control.WMSLegend = function(opt_options) { + var options = opt_options || {}; + this.options = options; + this.div = document.createElement('div'); + var legendP = document.createElement('p'); + legendP.innerHTML = 'Legend:'; + this.div.className = this.options.class + ' ol-unselectable'; + this.div.appendChild(legendP); + ol.control.Control.call(this, { + element: this.div + }); +}; +ol.inherits(ol.control.WMSLegend, ol.control.Control); + +ol.control.WMSLegend.prototype.drawLegendItem = function(layer) { + if (layer.get('showLegend') === true) { + try { + var url = layer.getSource().getUrls()[0]; + } + catch(err) { + var url = layer.getSource().getUrl(); + } + var legendImg = document.createElement('img'); + legendImg.src = url + '&version=' + this.options.wmsVersion + '&service=WMS&request=GetLegendGraphic&sld_version=1.1.0&layer=' + layer.getSource().getParams().layers + '&format=' + this.options.format; + this.div.appendChild(legendImg); + } +} + +ol.control.WMSLegend.prototype.setMap = function(map){ + ol.control.Control.prototype.setMap.call(this, map); + this.options.wmsVersion = this.options.wmsVersion || '1.3.0'; + this.options.format = this.options.format || 'image/png'; + var layers = map.getLayers().getArray(); + for (var i=0; i<layers.length; i++) { + if (layers[i] instanceof ol.layer.Group) { + var layersFromGroup = layers[i].getLayers().getArray(); + for (var j=0;j<layersFromGroup.length;j++) { + this.drawLegendItem(layersFromGroup[j]); + } + } else { + this.drawLegendItem(layers[i]); + } + } +}; + +map.controls = ol.control.defaults({ attribution: false }); +map.controls.extend([ + new ol.control.Attribution({ + collapsible: true + }), + new ol.control.MousePosition() +]); + +var element = document.getElementById('popup'); + +var popup = new ol.Overlay({ + element: element, + positioning: 'bottom-center', + stopEvent: false, + offset: [0, -10] +}); +map.addOverlay(popup); + +// display popup on click +map.on('click', function(evt) { +var feature = map.forEachFeatureAtPixel(evt.pixel, + function(feature) { + return feature; + }); + +if (feature) { + var coordinates = feature.getGeometry().getCoordinates(); + popup.setPosition(coordinates); + $(element).popover({ + 'placement': 'top', + 'html': true, + 'content': feature.get('description') + }); + $(element).popover('show'); +} else { + $(element).popover('destroy'); +} +}); |