mapserver/static/js/overlays/BorderOverlay.js
2019-06-14 07:46:28 +02:00

95 lines
2.3 KiB
JavaScript

import AbstractGeoJsonOverlay from './AbstractGeoJsonOverlay.js';
export default AbstractGeoJsonOverlay.extend({
initialize: function(wsChannel, layerMgr) {
AbstractGeoJsonOverlay.prototype.initialize.call(this, wsChannel, layerMgr, "border");
},
getMaxDisplayedZoom: function(){
return 1;
},
getMinDisplayedZoom: function(){
return 9;
},
createGeoJson: function(objects){
var geoJsonLayer = L.geoJSON([], {
onEachFeature: function(feature, layer){
if (feature.properties && feature.properties.popupContent) {
layer.bindPopup(feature.properties.popupContent);
}
},
style: function(feature) {
if (feature.properties && feature.properties.color){
return {
color: feature.properties.color,
fill: feature.properties.color,
opacity: 0.3
};
}
}
});
var borders = [];
var borderColors = {}; // { name: color }
objects.forEach(function(obj){
if (!obj.attributes.name)
return;
var border = borders[obj.attributes.name];
if (!border){
border = [];
borders[obj.attributes.name] = border;
borderColors[obj.attributes.name] = "#ff7800";
}
if (obj.attributes.color){
borderColors[obj.attributes.name] = obj.attributes.color;
}
border.push(obj);
});
//Order by index and display
Object.keys(borders).forEach(function(bordername){
borders[bordername].sort(function(a,b){
return parseInt(a.attributes.index) - parseInt(b.attributes.index);
});
var coords = [];
//Add stations
borders[bordername].forEach(function(entry){
coords.push([entry.x, entry.z]);
});
// closing border
coords.push([
borders[bordername][0].x,
borders[bordername][0].z
]);
var feature = {
"type":"Feature",
"geometry": {
"type":"LineString",
"coordinates":coords
},
"properties":{
"name": bordername,
"color": borderColors[bordername],
"popupContent": "<b>Border (" + bordername + ")</b>"
}
};
//line-points
geoJsonLayer.addData(feature);
});
return geoJsonLayer;
}
});