Initial commit
No files matched your search
@@ -0,0 +1,165 @@
|
||||
import { radToDeg } from "./Helpers.js";
|
||||
|
||||
export class Equipment {
|
||||
|
||||
constructor(equipmentNr, height, lat, lon, participantId) {
|
||||
this.equipmentNr = equipmentNr;
|
||||
this.height = height;
|
||||
this.lat = lat;
|
||||
this.lon = lon;
|
||||
this.participantId = participantId;
|
||||
this.partyId;
|
||||
this.typeId;
|
||||
this.partyColor;
|
||||
this.designator;
|
||||
this.tacticalIdentifier;
|
||||
this.marker;
|
||||
this.tracked = false;
|
||||
this.visible = false;
|
||||
}
|
||||
|
||||
updatePosition(height, lat, lon){
|
||||
this.height = height;
|
||||
this.lat = lat;
|
||||
this.lon = lon;
|
||||
}
|
||||
|
||||
toggleMarkerVisibility(map) {
|
||||
if (!this.visible) {
|
||||
this.marker.addTo(map);
|
||||
this.visible = true;
|
||||
document.getElementById(`icon-${this.equipmentNr}`).src = `./res/eye.svg`;
|
||||
} else {
|
||||
this.marker.remove();
|
||||
this.visible = false;
|
||||
document.getElementById(`icon-${this.equipmentNr}`).src = `./res/eye-slash.svg`;
|
||||
}
|
||||
}
|
||||
|
||||
focusMarker(map){
|
||||
if (!this.visible) {
|
||||
this.toggleMarkerVisibility(map);
|
||||
}
|
||||
map.panTo([this.getLatDeg(), this.getLonDeg()]);
|
||||
}
|
||||
|
||||
|
||||
followMarker(map){
|
||||
if (!this.visible) {
|
||||
this.toggleMarkerVisibility(map);
|
||||
}
|
||||
map.panTo([this.getLatDeg(), this.getLonDeg()]);
|
||||
}
|
||||
|
||||
//Setter
|
||||
setHeight(height) {
|
||||
this.height = height;
|
||||
}
|
||||
|
||||
setLat(lat) {
|
||||
this.lat = lat;
|
||||
}
|
||||
|
||||
setLon(lon) {
|
||||
this.lon = lon;
|
||||
}
|
||||
|
||||
setPartyId(partyId) {
|
||||
this.partyId = partyId;
|
||||
}
|
||||
|
||||
setTypeId(typeId){
|
||||
this.typeId = typeId;
|
||||
}
|
||||
|
||||
setPartyColor(partyColor) {
|
||||
this.partyColor = partyColor;
|
||||
}
|
||||
|
||||
setDesignator(designator) {
|
||||
this.designator = designator;
|
||||
}
|
||||
|
||||
setTatcicalIdentifier (tacticalIdentifier) {
|
||||
this.tacticalIdentifier = tacticalIdentifier;
|
||||
}
|
||||
|
||||
resetLatLng(followedEquipment) {
|
||||
this.marker.setLatLng([this.getLatDeg(),this.getLonDeg()]);
|
||||
if (followedEquipment == this.equipmentNr) {
|
||||
document.getElementById('infoOverlay').innerHTML = "Equipment <b>" + this.equipmentNr + "</b> Lat: " + this.getLatDeg().toFixed(5) + " Lon: " + this.getLonDeg().toFixed(5) + " Height: " + this.height.toFixed(2);
|
||||
}
|
||||
}
|
||||
|
||||
setMarker(){
|
||||
|
||||
// Marker
|
||||
|
||||
const svgIcon = L.divIcon({
|
||||
html: `
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50 50" style="enable-background:new 0 0 50 50" xml:space="preserve"><path id=svgIcon-${this.equipmentNr} transform="rotate(-45 25 25)" style="fill:${this.partyColor};stroke:#000;stroke-miterlimit:10; stroke-width:1" d="M7.7 7.7h34.6v34.6H9.7z"/></svg>`,
|
||||
className: "",
|
||||
iconSize: [34, 34],
|
||||
iconAnchor: [17, 4],
|
||||
});
|
||||
|
||||
this.marker = L.marker([this.getLatDeg(), this.getLonDeg()], {
|
||||
icon: svgIcon
|
||||
});
|
||||
|
||||
this.marker.bindTooltip(this.tacticalIdentifier, {
|
||||
className: 'tooltip',
|
||||
permanent: true,
|
||||
direction : 'right',
|
||||
offset: [0, 0]
|
||||
});
|
||||
|
||||
this.marker.bindTooltip(this.designator, {
|
||||
className: 'tooltip',
|
||||
permanent: true,
|
||||
direction : 'left',
|
||||
offset: [0, 0]
|
||||
});
|
||||
|
||||
this.marker.bindTooltip(this.designator + " | " + this.tacticalIdentifier, {
|
||||
className: 'tooltip',
|
||||
permanent: true,
|
||||
direction : 'top',
|
||||
offset: [0, -6]
|
||||
});
|
||||
|
||||
}
|
||||
//Getter
|
||||
getHeight(){
|
||||
return this.height;
|
||||
}
|
||||
|
||||
getLat() {
|
||||
return this.lat
|
||||
}
|
||||
|
||||
getLon() {
|
||||
return this.lon;
|
||||
}
|
||||
|
||||
getPartyId() {
|
||||
return this.partyId;
|
||||
}
|
||||
|
||||
getTypeId() {
|
||||
return this.typeId;
|
||||
}
|
||||
|
||||
getLatDeg() {
|
||||
return radToDeg(this.lat); //Lat in Gradmass
|
||||
}
|
||||
|
||||
getLonDeg() {
|
||||
return radToDeg(this.lon); //Lon in Gradmass
|
||||
}
|
||||
getMarker() {
|
||||
return this.marker;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
export function degToRad (deg) {
|
||||
return (deg / 180 * Math.PI);
|
||||
}
|
||||
|
||||
export function radToDeg (rad) {
|
||||
return (rad /Math.PI * 180);
|
||||
}
|
||||
|
||||
//Funktion addiert 'color'-Wert aus PartyBaseData zu 256^3 und gibt gueltigen Hex Color Code zurück.
|
||||
|
||||
export function paintIt (color) {
|
||||
var hex = (16777216 + color).toString(16);
|
||||
if (hex.toString().length < 6) {
|
||||
var i = hex.toString().length;
|
||||
for (i; i < 6; i++) {
|
||||
hex = "0" + hex;
|
||||
}
|
||||
}
|
||||
return "#" + hex;
|
||||
}
|
||||
@@ -0,0 +1,113 @@
|
||||
// Karten
|
||||
|
||||
export var OpenStreetMap_Mapnik = L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
|
||||
maxZoom: 19,
|
||||
attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors',
|
||||
});
|
||||
|
||||
export var Esri_WorldImagery = L.tileLayer('https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', {
|
||||
attribution: 'Tiles © Esri — Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community',
|
||||
});
|
||||
|
||||
|
||||
|
||||
// GeoJSON
|
||||
|
||||
export var KatarGeoJSON = L.geoJSON(JSON.parse("{\"type\":\"FeatureCollection\",\"features\":[\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3708362,25.4564295],[51.370907,25.4556692],[51.3712691,25.4549728],[51.3713635,25.4540774],[51.3715996,25.4534805],[51.3720954,25.4533668],[51.3727959,25.4535445],[51.373331,25.4536795],[51.3728667,25.4579929],[51.3719223,25.457801],[51.3708362,25.4564295]]},\"properties\":{\"landuse\":\"farmland\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3561526,25.4613161],[51.3560137,25.4614027],[51.3559604,25.4614421]]},\"properties\":{\"lanes\":\"2\",\"oneway\":\"yes\",\"source\":\"Bing\",\"highway\":\"secondary\",\"surface\":\"paved\",\"maxspeed\":\"80\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3559238,25.4609743],[51.3559784,25.4609225],[51.3560485,25.4608893],[51.3561277,25.4608781],[51.3562163,25.4608942],[51.3562923,25.4609383],[51.3563453,25.4610044],[51.3563622,25.4610487],[51.3563683,25.4610953],[51.3563577,25.461162],[51.3563252,25.4612227],[51.3562738,25.4612716],[51.3562084,25.4613042],[51.3561526,25.4613161],[51.3560736,25.4613125],[51.3560001,25.4612863],[51.3559397,25.4612401],[51.3558989,25.4611789],[51.3558821,25.4611097],[51.3558906,25.4610391],[51.3559238,25.4609743]]},\"properties\":{\"highway\":\"secondary\",\"junction\":\"roundabout\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.361919,25.4527232],[51.361972,25.4526678],[51.3620402,25.4526281],[51.362118,25.4526074],[51.3621991,25.4526073],[51.3622769,25.4526278],[51.3623452,25.4526673],[51.3623984,25.4527226],[51.3624322,25.4527892],[51.3624374,25.4528216],[51.3624439,25.4528617],[51.3624324,25.4529342],[51.3623988,25.4530008],[51.3623458,25.4530563],[51.3622776,25.4530959],[51.3621998,25.4531167],[51.3621187,25.4531168],[51.3620408,25.4530962],[51.3619725,25.4530567],[51.3619194,25.4530014],[51.3618856,25.4529348],[51.3618739,25.4528623],[51.3618854,25.4527898],[51.361919,25.4527232]]},\"properties\":{\"highway\":\"secondary\",\"junction\":\"roundabout\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3621998,25.4531167],[51.3620331,25.4532021],[51.3619436,25.4532799],[51.3595372,25.4565367],[51.3590213,25.457236],[51.3564171,25.4607991],[51.3563712,25.4609194],[51.3563453,25.4610044]]},\"properties\":{\"lanes\":\"2\",\"oneway\":\"yes\",\"source\":\"Bing\",\"highway\":\"secondary\",\"surface\":\"paved\",\"maxspeed\":\"80\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3561277,25.4608781],[51.3561928,25.4608187],[51.3594409,25.4564154],[51.3618055,25.4531974],[51.3618422,25.4530923],[51.3618856,25.4529348]]},\"properties\":{\"lanes\":\"2\",\"oneway\":\"yes\",\"source\":\"Bing\",\"highway\":\"secondary\",\"surface\":\"paved\",\"maxspeed\":\"80\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3625172,25.4524822],[51.3624546,25.452621],[51.3624322,25.4527892]]},\"properties\":{\"lanes\":\"2\",\"oneway\":\"yes\",\"source\":\"Bing\",\"highway\":\"secondary\",\"surface\":\"asphalt\",\"maxspeed\":\"80\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3620402,25.4526281],[51.3621609,25.4525617],[51.3622359,25.4525229],[51.3623111,25.4524696],[51.3623768,25.4524176],[51.3626082,25.4521117]]},\"properties\":{\"lanes\":\"2\",\"oneway\":\"yes\",\"source\":\"Bing\",\"highway\":\"secondary\",\"surface\":\"asphalt\",\"maxspeed\":\"80\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3558103,25.4613431],[51.3558989,25.4611789]]},\"properties\":{\"lanes\":\"2\",\"oneway\":\"yes\",\"source\":\"Bing\",\"highway\":\"secondary\",\"surface\":\"paved\",\"maxspeed\":\"80\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3622417,25.4513747],[51.3620032,25.4521647],[51.3618883,25.4524545]]},\"properties\":{\"highway\":\"unclassified\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3554808,25.4547014],[51.3555881,25.4545173],[51.3558188,25.4541347],[51.3561085,25.4538949],[51.3564116,25.4536987],[51.3566315,25.4535631],[51.3576534,25.4531296],[51.3585708,25.4526864],[51.3592494,25.4523861],[51.3599333,25.4521512],[51.3600916,25.4520373],[51.3602123,25.4518896],[51.3603812,25.4518678],[51.3606092,25.451955],[51.3608372,25.452093],[51.3610035,25.4521705],[51.3613093,25.4523062],[51.3615292,25.4523764],[51.3617974,25.4524394],[51.3618883,25.4524545],[51.3620013,25.4524733],[51.3621408,25.4524297],[51.3622534,25.4523425],[51.3623634,25.4522069],[51.3624492,25.4520979],[51.3625243,25.4520712],[51.3626082,25.4521117]]},\"properties\":{\"highway\":\"unclassified\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3554687,25.4607021],[51.3556715,25.4608089],[51.3558202,25.460876],[51.3559249,25.4608883],[51.3560485,25.4608893]]},\"properties\":{\"oneway\":\"yes\",\"highway\":\"unclassified\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3558906,25.4610391],[51.3557323,25.4609279],[51.3554721,25.4607784]]},\"properties\":{\"oneway\":\"yes\",\"highway\":\"unclassified\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3595679,25.4570575],[51.3597591,25.4571769]]},\"properties\":{\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3595679,25.4570575],[51.3594665,25.4570422],[51.3594141,25.4570391],[51.3593533,25.4570376],[51.3592942,25.4570514],[51.3592131,25.457088],[51.3591539,25.4571261],[51.3591117,25.457178],[51.3590796,25.45721],[51.3590213,25.457236]]},\"properties\":{\"oneway\":\"yes\",\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3595372,25.4565367],[51.3595003,25.4566394],[51.3594631,25.4567249],[51.359453,25.456792],[51.3594597,25.4568698],[51.3594885,25.4569476],[51.3595679,25.4570575]]},\"properties\":{\"oneway\":\"yes\",\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3649666,25.459208],[51.3648188,25.4591195],[51.3640974,25.4586876],[51.3640639,25.4586513],[51.3640653,25.4586089],[51.3640988,25.4585569],[51.3641377,25.4585242],[51.3641967,25.4585181],[51.3643093,25.4585799],[51.3649061,25.458948],[51.3649182,25.458971],[51.3649155,25.4589976],[51.3648188,25.4591195]]},\"properties\":{\"highway\":\"service\",\"service\":\"parking_aisle\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3652883,25.4568522],[51.3652588,25.4568277],[51.3649454,25.4566377],[51.3640425,25.4560903],[51.3640347,25.4560813],[51.3639942,25.4560346],[51.3639419,25.4559426],[51.3639097,25.4558978],[51.3638735,25.4558614],[51.3636368,25.4557101],[51.3635689,25.4556672],[51.3635429,25.4556507],[51.3633531,25.4555296],[51.36327,25.4554764],[51.3632029,25.4554376],[51.3631372,25.4554194],[51.3630621,25.4554279],[51.3630071,25.4554582],[51.362985,25.4554994],[51.362829,25.4557074],[51.3623667,25.456324],[51.3618873,25.4570021],[51.3618685,25.4570566],[51.3618685,25.4571292],[51.3618632,25.4574567],[51.3618605,25.4575547],[51.3618618,25.4582832],[51.3618605,25.4583292],[51.3618726,25.4583668],[51.3618994,25.4584043],[51.3619356,25.4584297],[51.3623785,25.4587005],[51.3634685,25.4593669],[51.3643536,25.4599034],[51.3643952,25.459913],[51.364426,25.4599106],[51.3644595,25.4598937],[51.3649666,25.459208],[51.3652925,25.4587673],[51.3653353,25.4587094]]},\"properties\":{\"oneway\":\"yes\",\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3654077,25.4587482],[51.365364,25.458807],[51.3645199,25.4599421],[51.3644904,25.4599687],[51.3644287,25.4599845],[51.3643858,25.4599881],[51.3643375,25.4599784],[51.3623275,25.4587653],[51.3618699,25.4584891],[51.3618122,25.4584358],[51.3617827,25.4583873],[51.3617639,25.4583135],[51.3617693,25.4582009],[51.3617773,25.4575547],[51.36178,25.4574567],[51.3617869,25.4571886],[51.3617907,25.4570372],[51.3618097,25.45698],[51.3618135,25.4569682],[51.3618605,25.4569004],[51.361899,25.4568493],[51.3622609,25.4563693],[51.362358,25.4562404],[51.3627811,25.4556761],[51.3629763,25.4554158],[51.3630138,25.4553952],[51.3630648,25.4553734],[51.3631345,25.4553601],[51.3631949,25.4553637],[51.3632673,25.4553892],[51.3633598,25.4554437],[51.3636146,25.4556047],[51.3636831,25.4556475],[51.3639446,25.4557985],[51.3639794,25.455836],[51.3640143,25.455905],[51.3640706,25.4560031],[51.3641068,25.4560418],[51.3653098,25.4567738],[51.3653351,25.4567862]]},\"properties\":{\"oneway\":\"yes\",\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3627847,25.4575763],[51.3627429,25.4575543],[51.3622025,25.4575545],[51.3618605,25.4575547],[51.3617773,25.4575547],[51.3602659,25.4575555],[51.3601555,25.4575683]]},\"properties\":{\"oneway\":\"yes\",\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3628351,25.4576526],[51.3627981,25.4576073],[51.3627847,25.4575763],[51.3627754,25.4575549],[51.3627684,25.457499],[51.3627778,25.4574434],[51.3628027,25.4573918],[51.3628416,25.4573478],[51.3628918,25.4573145],[51.3629498,25.4572939],[51.3629713,25.4572918],[51.3630117,25.4572877],[51.3630733,25.4572961],[51.3631304,25.4573186],[51.3631791,25.4573537],[51.3632161,25.457399],[51.3632388,25.4574514],[51.3632457,25.4575073],[51.3632364,25.457563],[51.3632115,25.4576145],[51.3631726,25.4576585],[51.3631224,25.4576918],[51.3630644,25.4577124],[51.3630025,25.4577186],[51.3629409,25.4577102],[51.3628838,25.4576877],[51.3628351,25.4576526]]},\"properties\":{\"oneway\":\"yes\",\"highway\":\"service\",\"junction\":\"roundabout\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3602636,25.4574075],[51.3603169,25.4574392],[51.3603799,25.4574598],[51.3604912,25.4574659],[51.3611068,25.4574562],[51.36178,25.4574567],[51.3618632,25.4574567],[51.3623272,25.4574571],[51.3627268,25.4574574],[51.3627778,25.4574434]]},\"properties\":{\"oneway\":\"yes\",\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3604912,25.456967],[51.360341,25.4571486],[51.3602632,25.4572491],[51.3602486,25.4573108]]},\"properties\":{\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.360117,25.4572413],[51.3601948,25.4572128],[51.3603021,25.4571389],[51.3604912,25.456967]]},\"properties\":{\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3598408,25.4578303],[51.359881,25.4577371],[51.3599226,25.457639],[51.3599521,25.4575664]]},\"properties\":{\"oneway\":\"yes\",\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3600647,25.4576051],[51.3599829,25.4576741],[51.3599145,25.457748],[51.3598408,25.4578303]]},\"properties\":{\"oneway\":\"yes\",\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3597591,25.4571769],[51.3598207,25.4572007],[51.3598971,25.457231],[51.3599615,25.4572503],[51.3600387,25.4572553]]},\"properties\":{\"oneway\":\"yes\",\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3599038,25.4574622],[51.3598797,25.4573775],[51.3598408,25.4572951],[51.3598005,25.4572237],[51.3597591,25.4571769]]},\"properties\":{\"oneway\":\"yes\",\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3599038,25.4574622],[51.3599119,25.4574065],[51.3599467,25.4573339],[51.3600057,25.457283],[51.3600387,25.4572553],[51.3600807,25.4572412],[51.360117,25.4572413],[51.3601465,25.4572413],[51.3602056,25.4572652],[51.3602391,25.4572951],[51.3602486,25.4573108],[51.3602592,25.457328],[51.3602699,25.4573823],[51.3602636,25.4574075],[51.3602498,25.4574622],[51.3601962,25.4575397],[51.3601555,25.4575683],[51.3601291,25.457587],[51.3600647,25.4576051],[51.3600031,25.457593],[51.3599521,25.4575664],[51.3599199,25.4575204],[51.3599038,25.4574622]]},\"properties\":{\"oneway\":\"yes\",\"highway\":\"service\",\"junction\":\"roundabout\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3661869,25.4586864],[51.3661467,25.458707],[51.3660943,25.458753],[51.3659307,25.4589843],[51.3658972,25.4590109],[51.3658516,25.4590194],[51.365802,25.4590231],[51.3657443,25.4590182],[51.365692,25.4589976],[51.365364,25.458807],[51.3652925,25.4587673],[51.3649973,25.4585762],[51.3649419,25.458555]]},\"properties\":{\"oneway\":\"yes\",\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3649927,25.4584886],[51.3650429,25.458523],[51.3653353,25.4587094],[51.3654077,25.4587482],[51.3657644,25.4589613],[51.3658033,25.4589686],[51.3658369,25.4589637],[51.365861,25.4589468],[51.3660394,25.4586998],[51.3660689,25.4586743],[51.3661051,25.458661],[51.366148,25.4586598],[51.3661869,25.4586864]]},\"properties\":{\"oneway\":\"yes\",\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3649544,25.4582856],[51.3649666,25.4583959]]},\"properties\":{\"oneway\":\"yes\",\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3648853,25.4583616],[51.3649155,25.4583389],[51.3649303,25.4583171],[51.3649544,25.4582856]]},\"properties\":{\"oneway\":\"yes\",\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3649864,25.4585121],[51.3649593,25.4585454],[51.3649419,25.458555],[51.3649202,25.4585668],[51.364875,25.4585731],[51.3648305,25.4585633],[51.3647936,25.4585389],[51.3647699,25.4585035],[51.364763,25.4584627],[51.3647739,25.4584226],[51.3648009,25.4583893],[51.36484,25.4583679],[51.3648853,25.4583616],[51.3649297,25.4583714],[51.3649666,25.4583959],[51.3649903,25.4584312],[51.3649972,25.458472],[51.3649927,25.4584886],[51.3649864,25.4585121]]},\"properties\":{\"oneway\":\"yes\",\"highway\":\"service\",\"junction\":\"roundabout\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3649638,25.4572497],[51.3649454,25.4566377]]},\"properties\":{\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3652568,25.457013],[51.3651522,25.4570572],[51.3650939,25.4570832],[51.3650483,25.4571202],[51.3649967,25.4571752],[51.3649705,25.4572225],[51.3649638,25.4572497],[51.3649584,25.4573072],[51.3649544,25.4582856]]},\"properties\":{\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3653749,25.4569783],[51.3652568,25.457013]]},\"properties\":{\"oneway\":\"yes\",\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3652568,25.457013],[51.3652749,25.4569936],[51.365289,25.4569718],[51.3652964,25.4569518],[51.3652957,25.4569367],[51.3652975,25.4569227]]},\"properties\":{\"oneway\":\"yes\",\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3653653,25.4567723],[51.3653986,25.4567667],[51.3654323,25.4567698],[51.3654637,25.4567813],[51.3654902,25.4568003],[51.3655097,25.4568253],[51.3655206,25.4568543],[51.365522,25.4568849],[51.3655138,25.4569145],[51.3654967,25.4569409],[51.3654721,25.4569619],[51.3654419,25.4569758],[51.3654086,25.4569814],[51.3653749,25.4569783],[51.3653435,25.4569668],[51.365317,25.4569477],[51.3652975,25.4569227],[51.3652866,25.4568938],[51.3652852,25.4568632],[51.3652883,25.4568522],[51.3652934,25.4568335],[51.3653105,25.4568071],[51.3653351,25.4567862],[51.3653653,25.4567723]]},\"properties\":{\"oneway\":\"yes\",\"highway\":\"service\",\"junction\":\"roundabout\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3635689,25.4556672],[51.3636146,25.4556047],[51.3642034,25.4548007],[51.3642503,25.4547486],[51.3643,25.4547183],[51.3643804,25.4547038],[51.3644662,25.4547038],[51.3645896,25.4547498],[51.364609,25.4547608],[51.364705,25.4548152],[51.3667917,25.4560939]]},\"properties\":{\"oneway\":\"yes\",\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3667508,25.4561545],[51.3647137,25.4548988],[51.3645983,25.4548334],[51.3645296,25.4548077],[51.364475,25.4547873],[51.3643891,25.4547873],[51.3643087,25.4548019],[51.3636831,25.4556475],[51.3636368,25.4557101]]},\"properties\":{\"oneway\":\"yes\",\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3598408,25.4578303],[51.3595668,25.4583097],[51.3594581,25.458461],[51.3590542,25.4590102],[51.3584949,25.459773],[51.3571435,25.4615853],[51.3570054,25.4617853]]},\"properties\":{\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3624374,25.4528216],[51.3624988,25.4529322],[51.3625646,25.4530097],[51.362637,25.4530872],[51.3627483,25.4532083]]},\"properties\":{\"oneway\":\"yes\",\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3627483,25.4532083],[51.362574,25.4531393],[51.3624774,25.453109],[51.3623976,25.453089],[51.3623399,25.4530854],[51.3622776,25.4530959]]},\"properties\":{\"oneway\":\"yes\",\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.363223,25.4535026],[51.3631211,25.4534529],[51.3627483,25.4532083]]},\"properties\":{\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3604912,25.456967],[51.3607407,25.4566752],[51.361416,25.455761],[51.3631211,25.4534529]]},\"properties\":{\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3622749,25.4553841],[51.3620898,25.4556314],[51.362071,25.4556338],[51.3620523,25.4556338],[51.3620402,25.4556398],[51.3620254,25.4556556],[51.3618645,25.4558554],[51.3618135,25.4559232]]},\"properties\":{\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.362829,25.4557074],[51.3627811,25.4556761],[51.3622749,25.4553841],[51.3620214,25.4552379]]},\"properties\":{\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3686103,25.4568858],[51.3669554,25.4558802],[51.3633934,25.4537157],[51.3633411,25.4536963],[51.3632888,25.4536866],[51.3632351,25.4536878],[51.3631801,25.4537011],[51.3631265,25.4537266],[51.3630903,25.4537641],[51.3620214,25.4552379],[51.3618001,25.455543],[51.3617907,25.4555732],[51.3617827,25.4556604],[51.3617907,25.4557997],[51.3618149,25.4558251],[51.3618645,25.4558554]]},\"properties\":{\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3645296,25.4548077],[51.364609,25.4547608],[51.3646848,25.4547086],[51.3647452,25.4546977],[51.3647948,25.4547183],[51.3655727,25.4552003],[51.3668682,25.4559825]]},\"properties\":{\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3669219,25.4591202],[51.3668143,25.4592625]]},\"properties\":{\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3662312,25.4589082],[51.3668143,25.4592625],[51.366906,25.4593182]]},\"properties\":{\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3668177,25.4594394],[51.366207,25.4590872],[51.3661775,25.459063],[51.3661721,25.4590025],[51.3661963,25.4589565],[51.3662312,25.4589082],[51.3663304,25.4587711]]},\"properties\":{\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3623785,25.4587005],[51.3623275,25.4587653],[51.3619959,25.459235],[51.3619892,25.4592616],[51.362,25.4592943],[51.3620228,25.459319700000003],[51.3653085,25.4613164],[51.3653406,25.4613219],[51.3653842,25.4613213],[51.3654285,25.4613098],[51.3654567,25.4612934],[51.3654949,25.4612547],[51.3668177,25.4594394],[51.366906,25.4593182],[51.3670117,25.4591732],[51.3686062,25.4570142],[51.3686196,25.4569767],[51.368621,25.4569246],[51.3686183,25.4568992],[51.3686103,25.4568858]]},\"properties\":{\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3661869,25.4586864],[51.3663304,25.4587711],[51.3669219,25.4591202],[51.3670117,25.4591732]]},\"properties\":{\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3612074,25.4569755],[51.361312,25.4569803],[51.3613737,25.4569791],[51.3614045,25.4569694],[51.3614273,25.4569403],[51.3615208,25.4568028]]},\"properties\":{\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3613079,25.4572975],[51.3613079,25.4571886],[51.361312,25.4569803]]},\"properties\":{\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3617869,25.4571886],[51.3613079,25.4571886]]},\"properties\":{\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3610721,25.4565276],[51.3615208,25.4568028],[51.3618097,25.45698]]},\"properties\":{\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.361899,25.4568493],[51.3611746,25.4563878]]},\"properties\":{\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3617358,25.4559086],[51.3616955,25.4559958],[51.3616714,25.4560067],[51.3616325,25.4560079],[51.3615923,25.4559922],[51.3615547,25.455970400000003],[51.3615319,25.4559631],[51.3615078,25.4559619],[51.3614903,25.4559668],[51.3614742,25.4559789],[51.3611746,25.4563878],[51.3610721,25.4565276],[51.3606401,25.4571171],[51.360624,25.4571583],[51.3606159,25.4571946],[51.3606159,25.4573181]]},\"properties\":{\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3622609,25.4563693],[51.3616955,25.4559958]]},\"properties\":{\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.361416,25.455761],[51.3616218,25.4558723],[51.3616633,25.4558953],[51.3617022,25.4559074],[51.3617358,25.4559086],[51.3617693,25.4559086],[51.3617881,25.4559111],[51.3618135,25.4559232],[51.362358,25.4562404]]},\"properties\":{\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3622025,25.4575545],[51.3622078,25.4579587]]},\"properties\":{\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3629675,25.4568882],[51.3624318,25.4568858],[51.3623956,25.4568967],[51.362358,25.4569246],[51.3623352,25.4569597],[51.3623245,25.4570045],[51.3623272,25.4574571]]},\"properties\":{\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3632236,25.4565551],[51.3630018,25.4567309],[51.3629803,25.4567551],[51.3629696,25.4567829],[51.3629669,25.4568289],[51.3629675,25.4568882],[51.3629713,25.4572918]]},\"properties\":{\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3632494,25.4563906],[51.363211,25.4563627],[51.3631694,25.4563494],[51.3631265,25.4563518],[51.3630849,25.4563676],[51.3629736,25.4564523],[51.3626558,25.45672],[51.3626128,25.4567393],[51.3625257,25.4567417],[51.362173,25.4567309]]},\"properties\":{\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3638111,25.4561417],[51.3636777,25.4563409],[51.3636442,25.4563664],[51.3635999,25.4563809],[51.3635369,25.456393]]},\"properties\":{\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3635369,25.456393],[51.3634913,25.4564184],[51.3634537,25.4564487],[51.3634195,25.4564962]]},\"properties\":{\"oneway\":\"yes\",\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3633707,25.4563959],[51.3634242,25.4563979],[51.3634779,25.4563979],[51.3635369,25.456393]]},\"properties\":{\"oneway\":\"yes\",\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3631997,25.4565235],[51.3631901,25.4564862],[51.3631961,25.4564483],[51.3632168,25.4564149],[51.3632494,25.4563906],[51.3632897,25.4563785],[51.363332,25.4563803],[51.3633707,25.4563959],[51.3634006,25.456423],[51.3634176,25.456458],[51.3634195,25.4564962],[51.3634059,25.4565325],[51.3633788,25.4565619],[51.3633417,25.4565804],[51.3632997,25.4565856],[51.3632585,25.4565768],[51.3632236,25.4565551],[51.3631997,25.4565235]]},\"properties\":{\"oneway\":\"yes\",\"highway\":\"service\",\"junction\":\"roundabout\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3638111,25.4561417],[51.3638332,25.4560891],[51.363905,25.4559662],[51.3639097,25.4559426],[51.3639097,25.4558978]]},\"properties\":{\"oneway\":\"yes\",\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3640347,25.4560813],[51.3640022,25.4560776],[51.3639566,25.4560788],[51.3639097,25.456086],[51.3638614,25.456106],[51.3638111,25.4561417]]},\"properties\":{\"oneway\":\"yes\",\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3669554,25.4558802],[51.3668682,25.4559825],[51.3667917,25.4560939],[51.3667508,25.4561545],[51.3666561,25.4562856],[51.3665637,25.4564136],[51.3665664,25.4564439]]},\"properties\":{\"highway\":\"unclassified\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3668019,25.4563732],[51.366692,25.4565343]]},\"properties\":{\"highway\":\"service\",\"service\":\"parking_aisle\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.366958,25.4564669],[51.3668199,25.4566582]]},\"properties\":{\"highway\":\"service\",\"service\":\"parking_aisle\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3665664,25.4564439],[51.3665906,25.4564754],[51.366692,25.4565343],[51.3667823,25.4565868],[51.3668038,25.4566073],[51.3668159,25.456634],[51.3668199,25.4566582],[51.3668159,25.456686],[51.3666335,25.4569282],[51.3666335,25.4569609],[51.3666522,25.4569948],[51.3666764,25.4570215],[51.3667019,25.457036],[51.3667367,25.4570433],[51.366785,25.4570421],[51.3668159,25.4570166],[51.3670881,25.4566303],[51.3670921,25.456611],[51.3670894,25.4565855],[51.3670787,25.4565601],[51.3670506,25.4565298],[51.3670237,25.4565093],[51.366958,25.4564669],[51.3668019,25.4563732],[51.3666561,25.4562856]]},\"properties\":{\"highway\":\"service\",\"service\":\"parking_aisle\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3569613,25.4615948],[51.3570097,25.4616044],[51.3570468,25.4616115],[51.3570928,25.461605],[51.3571435,25.4615853]]},\"properties\":{\"oneway\":\"yes\",\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3570054,25.4617853],[51.3570075,25.4617112],[51.356999,25.4616654],[51.3569832,25.4616255],[51.3569613,25.4615948]]},\"properties\":{\"oneway\":\"yes\",\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3565924,25.4613734],[51.3569613,25.4615948]]},\"properties\":{\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3563683,25.4610953],[51.3564172,25.4611796],[51.3564703,25.4612454],[51.3565461,25.461322],[51.3565924,25.4613734]]},\"properties\":{\"oneway\":\"yes\",\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[51.3565924,25.4613734],[51.3565349,25.4613505],[51.3564285,25.46132],[51.3563423,25.4613093],[51.3562084,25.4613042]]},\"properties\":{\"oneway\":\"yes\",\"highway\":\"service\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[51.3708362,25.4564295],[51.370907,25.4556692],[51.3712691,25.4549728],[51.3713635,25.4540774],[51.3715996,25.4534805],[51.3720954,25.4533668],[51.3727959,25.4535445],[51.373331,25.4536795],[51.3728667,25.4579929],[51.3719223,25.457801],[51.3708362,25.4564295]]]]},\"properties\":{\"landuse\":\"farmland\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[51.3558821,25.4611097],[51.3558906,25.4610391],[51.3559238,25.4609743],[51.3559784,25.4609225],[51.3560485,25.4608893],[51.3561277,25.4608781],[51.3562163,25.4608942],[51.3562923,25.4609383],[51.3563453,25.4610044],[51.3563622,25.4610487],[51.3563683,25.4610953],[51.3563577,25.461162],[51.3563252,25.4612227],[51.3562738,25.4612716],[51.3562084,25.4613042],[51.3561526,25.4613161],[51.3560736,25.4613125],[51.3560001,25.4612863],[51.3559397,25.4612401],[51.3558989,25.4611789],[51.3558821,25.4611097]]]]},\"properties\":{\"highway\":\"secondary\",\"junction\":\"roundabout\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[51.3618739,25.4528623],[51.3618854,25.4527898],[51.361919,25.4527232],[51.361972,25.4526678],[51.3620402,25.4526281],[51.362118,25.4526074],[51.3621991,25.4526073],[51.3622769,25.4526278],[51.3623452,25.4526673],[51.3623984,25.4527226],[51.3624322,25.4527892],[51.3624374,25.4528216],[51.3624439,25.4528617],[51.3624324,25.4529342],[51.3623988,25.4530008],[51.3623458,25.4530563],[51.3622776,25.4530959],[51.3621998,25.4531167],[51.3621187,25.4531168],[51.3620408,25.4530962],[51.3619725,25.4530567],[51.3619194,25.4530014],[51.3618856,25.4529348],[51.3618739,25.4528623]]]]},\"properties\":{\"highway\":\"secondary\",\"junction\":\"roundabout\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[51.3627684,25.457499],[51.3627778,25.4574434],[51.3628027,25.4573918],[51.3628416,25.4573478],[51.3628918,25.4573145],[51.3629498,25.4572939],[51.3629713,25.4572918],[51.3630117,25.4572877],[51.3630733,25.4572961],[51.3631304,25.4573186],[51.3631791,25.4573537],[51.3632161,25.457399],[51.3632388,25.4574514],[51.3632457,25.4575073],[51.3632364,25.457563],[51.3632115,25.4576145],[51.3631726,25.4576585],[51.3631224,25.4576918],[51.3630644,25.4577124],[51.3630025,25.4577186],[51.3629409,25.4577102],[51.3628838,25.4576877],[51.3628351,25.4576526],[51.3627981,25.4576073],[51.3627847,25.4575763],[51.3627754,25.4575549],[51.3627684,25.457499]]]]},\"properties\":{\"oneway\":\"yes\",\"highway\":\"service\",\"junction\":\"roundabout\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[51.3599038,25.4574622],[51.3599119,25.4574065],[51.3599467,25.4573339],[51.3600057,25.457283],[51.3600387,25.4572553],[51.3600807,25.4572412],[51.360117,25.4572413],[51.3601465,25.4572413],[51.3602056,25.4572652],[51.3602391,25.4572951],[51.3602486,25.4573108],[51.3602592,25.457328],[51.3602699,25.4573823],[51.3602636,25.4574075],[51.3602498,25.4574622],[51.3601962,25.4575397],[51.3601555,25.4575683],[51.3601291,25.457587],[51.3600647,25.4576051],[51.3600031,25.457593],[51.3599521,25.4575664],[51.3599199,25.4575204],[51.3599038,25.4574622]]]]},\"properties\":{\"oneway\":\"yes\",\"highway\":\"service\",\"junction\":\"roundabout\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[51.364763,25.4584627],[51.3647739,25.4584226],[51.3648009,25.4583893],[51.36484,25.4583679],[51.3648853,25.4583616],[51.3649297,25.4583714],[51.3649666,25.4583959],[51.3649903,25.4584312],[51.3649972,25.458472],[51.3649927,25.4584886],[51.3649864,25.4585121],[51.3649593,25.4585454],[51.3649419,25.458555],[51.3649202,25.4585668],[51.364875,25.4585731],[51.3648305,25.4585633],[51.3647936,25.4585389],[51.3647699,25.4585035],[51.364763,25.4584627]]]]},\"properties\":{\"oneway\":\"yes\",\"highway\":\"service\",\"junction\":\"roundabout\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[51.3652852,25.4568632],[51.3652883,25.4568522],[51.3652934,25.4568335],[51.3653105,25.4568071],[51.3653351,25.4567862],[51.3653653,25.4567723],[51.3653986,25.4567667],[51.3654323,25.4567698],[51.3654637,25.4567813],[51.3654902,25.4568003],[51.3655097,25.4568253],[51.3655206,25.4568543],[51.365522,25.4568849],[51.3655138,25.4569145],[51.3654967,25.4569409],[51.3654721,25.4569619],[51.3654419,25.4569758],[51.3654086,25.4569814],[51.3653749,25.4569783],[51.3653435,25.4569668],[51.365317,25.4569477],[51.3652975,25.4569227],[51.3652866,25.4568938],[51.3652852,25.4568632]]]]},\"properties\":{\"oneway\":\"yes\",\"highway\":\"service\",\"junction\":\"roundabout\"}},\
|
||||
{\"type\":\"Feature\",\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[51.3631901,25.4564862],[51.3631961,25.4564483],[51.3632168,25.4564149],[51.3632494,25.4563906],[51.3632897,25.4563785],[51.363332,25.4563803],[51.3633707,25.4563959],[51.3634006,25.456423],[51.3634176,25.456458],[51.3634195,25.4564962],[51.3634059,25.4565325],[51.3633788,25.4565619],[51.3633417,25.4565804],[51.3632997,25.4565856],[51.3632585,25.4565768],[51.3632236,25.4565551],[51.3631997,25.4565235],[51.3631901,25.4564862]]]]},\"properties\":{\"oneway\":\"yes\",\"highway\":\"service\",\"junction\":\"roundabout\"}}\
|
||||
]}\
|
||||
"));
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
After Width: | Height: | Size: 261 KiB |
@@ -0,0 +1,78 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Tracking Tool</title>
|
||||
<link rel="stylesheet" href="../include/leaflet/leaflet.css">
|
||||
<link rel="stylesheet" href="../include/bootstrap/css/bootstrap.css">
|
||||
<link rel="stylesheet" href="style.css">
|
||||
</head>
|
||||
<body>
|
||||
<div class="d-flex" id="wrapper">
|
||||
|
||||
<!--Sidebar-->
|
||||
<div class="border-end" id="sidebar-wrapper">
|
||||
<div id="sideber-header" class="container-fluid bg-light border-bottom">
|
||||
<div class="h3 p-1 pt-2 text-muted">Tracked Equipment</div>
|
||||
</div>
|
||||
<div id="sidebar-body">
|
||||
<div class="accordion accordion-flush" id="accordionParty">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--Page Content Wrapper-->
|
||||
<div id="page-content-wrapper">
|
||||
<div id="content-header" class="container-fluid bg-light border-bottom">
|
||||
<div class="d-flex align-items-center p-1">
|
||||
<button id="sidebarToggle" class="btn btn-outline-secondary" >/</button>
|
||||
<div class="sidebar-heading px-3 pt-1 h3">Tracking Tool</div>
|
||||
<span id="equipmentInfo" class="ms-auto"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div id="content-map">
|
||||
<div id="infoOverlay" class="h4" hidden></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Modal -->
|
||||
|
||||
<!-- Button trigger modal
|
||||
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#staticBackdrop">
|
||||
Launch static backdrop modal
|
||||
</button>-->
|
||||
|
||||
<div class="modal fade" id="staticBackdrop" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="staticBackdropLabel" aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="staticBackdropLabel">Connect to Exercise</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form class="input-group" action="input">
|
||||
<span class="input-group-text">IP-Adresse</span>
|
||||
<input id="connectInput" class="form-control" type="text" value="ws://localhost:7300">
|
||||
<button id="connectStaticBtn" type="button" class="btn btn-outline-danger">Connect</button>
|
||||
</form>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<form class="input-group" action="input">
|
||||
<select id="exerciseSelect" class="form-select" aria-label="Default select example" disabled>
|
||||
<option selected>Choose Exercise</option>
|
||||
</select>
|
||||
<button id="connectDynamicBtn" type="button" class="btn btn-outline-danger" disabled>Connect</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="../include/leaflet/leaflet.js"></script>
|
||||
<script src="../include/bootstrap/js/bootstrap.js"></script>
|
||||
<script type="module" src="./script.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,7 @@
|
||||
Folgende Einstellung im Firefox ist nötig: URL about:config
|
||||
|
||||
security.fileuri.strict_origin_policy=false
|
||||
|
||||
Firefox neustarten
|
||||
|
||||
Zur Zeit funktioniert es nur mit localhost
|
||||
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 50 50" style="enable-background:new 0 0 50 50;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#4FA0CA;stroke:#000000;stroke-miterlimit:10;}
|
||||
</style>
|
||||
<rect id="XMLID_1_" x="7.7" y="7.7" transform="matrix(0.7071 -0.7071 0.7071 0.7071 -10.3553 25)" class="st0" width="34.6" height="34.6"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 589 B |
@@ -0,0 +1,6 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-bullseye" viewBox="0 0 16 16">
|
||||
<path d="M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z"/>
|
||||
<path d="M8 13A5 5 0 1 1 8 3a5 5 0 0 1 0 10zm0 1A6 6 0 1 0 8 2a6 6 0 0 0 0 12z"/>
|
||||
<path d="M8 11a3 3 0 1 1 0-6 3 3 0 0 1 0 6zm0 1a4 4 0 1 0 0-8 4 4 0 0 0 0 8z"/>
|
||||
<path d="M9.5 8a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 441 B |
@@ -0,0 +1,6 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-bullseye" viewBox="0 0 16 16">
|
||||
<path d="M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z"/>
|
||||
<path d="M8 13A5 5 0 1 1 8 3a5 5 0 0 1 0 10zm0 1A6 6 0 1 0 8 2a6 6 0 0 0 0 12z"/>
|
||||
<path d="M8 11a3 3 0 1 1 0-6 3 3 0 0 1 0 6zm0 1a4 4 0 1 0 0-8 4 4 0 0 0 0 8z"/>
|
||||
<path d="M9.5 8a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 441 B |
@@ -0,0 +1,43 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="32.668px" height="32.668px" viewBox="0 0 32.668 32.668" style="enable-background:new 0 0 32.668 32.668;"
|
||||
xml:space="preserve">
|
||||
<g>
|
||||
<path d="M32.668,14.335h-4.011c-0.854-5.29-5.033-9.468-10.322-10.324v-4.01h-4V4.01C9.045,4.866,4.866,9.044,4.01,14.333H0v4
|
||||
h4.009c0.855,5.291,5.035,9.473,10.326,10.327v4.007h4v-4.008c5.289-0.856,9.468-5.034,10.322-10.324h4.011V14.335L32.668,14.335z
|
||||
M18.335,26.64v-3.639h-4v3.639c-4.188-0.812-7.494-4.115-8.305-8.307h3.636v-4H6.03c0.812-4.188,4.117-7.491,8.305-8.302v3.636h4
|
||||
V6.031c4.188,0.812,7.49,4.115,8.304,8.304h-3.638v4h3.638C25.825,22.522,22.521,25.827,18.335,26.64z"/>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-412 587.5 16 16" style="enable-background:new -412 587.5 16 16" xml:space="preserve" width="16" height="16"><path d="M-404 601.5c-3.3 0-6-2.7-6-6s2.7-6 6-6 6 2.7 6 6-2.7 6-6 6zm0 .9c3.8 0 6.8-3 6.8-6.8s-3-6.8-6.8-6.8-6.8 3-6.8 6.8 3 6.8 6.8 6.8z"/><path d="M-404 587.5v3.7m0 8.7v3.6m-8-8h3.7m8.6 0h3.7" style="fill:none;stroke:#000;stroke-width:2;stroke-miterlimit:10"/></svg>
|
||||
|
After Width: | Height: | Size: 426 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-412 587.5 16 16" style="enable-background:new -412 587.5 16 16" xml:space="preserve" width="16" height="16"><path d="M-404 601.5c-3.3 0 -6 -2.7 -6 -6s2.7 -6 6 -6 6 2.7 6 6 -2.7 6 -6 6zm0 0.9c3.8 0 6.8 -3 6.8 -6.8s-3 -6.8 -6.8 -6.8 -6.8 3 -6.8 6.8 3 6.8 6.8 6.8z" style="fill:#a6a6a6"/><path d="M-404 587.5v3.7m0 8.7v3.6m-8 -8h3.7m8.6 0h3.7" style="fill:none;stroke:#a6a6a6;stroke-width:2;stroke-miterlimit:10"/></svg>
|
||||
|
After Width: | Height: | Size: 467 B |
@@ -0,0 +1,5 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-eye-slash" viewBox="0 0 16 16">
|
||||
<path d="M13.359 11.238C15.06 9.72 16 8 16 8s-3-5.5-8-5.5a7.028 7.028 0 0 0-2.79.588l.77.771A5.944 5.944 0 0 1 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.134 13.134 0 0 1 14.828 8c-.058.087-.122.183-.195.288-.335.48-.83 1.12-1.465 1.755-.165.165-.337.328-.517.486l.708.709z"/>
|
||||
<path d="M11.297 9.176a3.5 3.5 0 0 0-4.474-4.474l.823.823a2.5 2.5 0 0 1 2.829 2.829l.822.822zm-2.943 1.299.822.822a3.5 3.5 0 0 1-4.474-4.474l.823.823a2.5 2.5 0 0 0 2.829 2.829z"/>
|
||||
<path d="M3.35 5.47c-.18.16-.353.322-.518.487A13.134 13.134 0 0 0 1.172 8l.195.288c.335.48.83 1.12 1.465 1.755C4.121 11.332 5.881 12.5 8 12.5c.716 0 1.39-.133 2.02-.36l.77.772A7.029 7.029 0 0 1 8 13.5C3 13.5 0 8 0 8s.939-1.721 2.641-3.238l.708.709zm10.296 8.884-12-12 .708-.708 12 12-.708.708z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 891 B |
@@ -0,0 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-eye" viewBox="0 0 16 16">
|
||||
<path d="M16 8s-3-5.5-8-5.5S0 8 0 8s3 5.5 8 5.5S16 8 16 8zM1.173 8a13.133 13.133 0 0 1 1.66-2.043C4.12 4.668 5.88 3.5 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.133 13.133 0 0 1 14.828 8c-.058.087-.122.183-.195.288-.335.48-.83 1.12-1.465 1.755C11.879 11.332 10.119 12.5 8 12.5c-2.12 0-3.879-1.168-5.168-2.457A13.134 13.134 0 0 1 1.172 8z"/>
|
||||
<path d="M8 5.5a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5zM4.5 8a3.5 3.5 0 1 1 7 0 3.5 3.5 0 0 1-7 0z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 569 B |
@@ -0,0 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-geo-alt" viewBox="0 0 16 16">
|
||||
<path d="M12.166 8.94c-.524 1.062-1.234 2.12-1.96 3.07A31.493 31.493 0 0 1 8 14.58a31.481 31.481 0 0 1-2.206-2.57c-.726-.95-1.436-2.008-1.96-3.07C3.304 7.867 3 6.862 3 6a5 5 0 0 1 10 0c0 .862-.305 1.867-.834 2.94zM8 16s6-5.686 6-10A6 6 0 0 0 2 6c0 4.314 6 10 6 10z"/>
|
||||
<path d="M8 8a2 2 0 1 1 0-4 2 2 0 0 1 0 4zm0 1a3 3 0 1 0 0-6 3 3 0 0 0 0 6z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 483 B |
@@ -0,0 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-vinyl-fill" viewBox="0 0 16 16">
|
||||
<path d="M8 6a2 2 0 1 0 0 4 2 2 0 0 0 0-4zm0 3a1 1 0 1 1 0-2 1 1 0 0 1 0 2z"/>
|
||||
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM4 8a4 4 0 1 0 8 0 4 4 0 0 0-8 0z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 299 B |
@@ -0,0 +1,5 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-vinyl" viewBox="0 0 16 16">
|
||||
<path d="M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z"/>
|
||||
<path d="M8 6a2 2 0 1 0 0 4 2 2 0 0 0 0-4zM4 8a4 4 0 1 1 8 0 4 4 0 0 1-8 0z"/>
|
||||
<path d="M9 8a1 1 0 1 1-2 0 1 1 0 0 1 2 0z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 343 B |
@@ -0,0 +1,339 @@
|
||||
import { Equipment } from "./EquipmentClass.js";
|
||||
import { paintIt } from "./Helpers.js";
|
||||
import * as mapLayers from "./Map.js";
|
||||
var exercises = {};
|
||||
var participantBaseData = {};
|
||||
var partyBaseData = {};
|
||||
var parties = {}; //Ersatzobjekt statt 'equipments'-Map
|
||||
|
||||
popup();
|
||||
|
||||
document.getElementById('connectStaticBtn').addEventListener ('click', webSocketConnectStatic);
|
||||
|
||||
document.getElementById('connectDynamicBtn').addEventListener ('click', webSocketConnectDynamic);
|
||||
|
||||
// Map
|
||||
var map = L.map('content-map', {
|
||||
layers: [mapLayers.OpenStreetMap_Mapnik], // only add one!
|
||||
zoomControl: false
|
||||
})
|
||||
.setView([53.055311, 8.896582], 16);
|
||||
|
||||
var baseLayers = {
|
||||
"Gelände": mapLayers.OpenStreetMap_Mapnik,
|
||||
"Sattelit": mapLayers.Esri_WorldImagery
|
||||
};
|
||||
|
||||
var overlays = {
|
||||
"Katar": mapLayers.KatarGeoJSON
|
||||
}
|
||||
|
||||
L.control.layers(baseLayers, overlays).addTo(map);
|
||||
|
||||
L.control.zoom({position: 'bottomright'}).addTo(map);
|
||||
|
||||
// WebSocket Static Port
|
||||
function webSocketConnectStatic() {
|
||||
var ws = new WebSocket (document.getElementById('connectInput').value);
|
||||
ws.onopen = function () {
|
||||
document.getElementById('connectStaticBtn').classList.replace("btn-outline-danger", "btn-outline-success")
|
||||
servicePortsInformationRequest(ws);
|
||||
}
|
||||
|
||||
ws.onmessage = function(msg) {
|
||||
var object = (JSON.parse(msg.data)).data;
|
||||
object.forEach((item, index, array) => {
|
||||
if (item.exerciseId != 0) {
|
||||
exercises[item.exerciseId] = item;
|
||||
document.getElementById('exerciseSelect').innerHTML += `<option value=${item.exerciseId}>Exercise ${item.exerciseId}</option>`
|
||||
}
|
||||
})
|
||||
|
||||
document.getElementById('exerciseSelect').disabled = false;
|
||||
document.getElementById('connectDynamicBtn').disabled = false;
|
||||
}
|
||||
|
||||
ws.onclose = function() {
|
||||
document.getElementById('connectStaticBtn').classList.replace("btn-outline-success", "btn-outline-danger")
|
||||
}
|
||||
}
|
||||
|
||||
// WebSocket Dynamic Port
|
||||
function webSocketConnectDynamic() {
|
||||
var exerciseId = parseInt(document.getElementById("exerciseSelect").value);
|
||||
var dynamicPort1 = exercises[exerciseId].services[0].ports[1].number; //Objekt-Pfad zum dynamischen Port, der Teilnehmerinfos enthaelt.
|
||||
var dynamicPort2 = exercises[exerciseId].services[0].ports[0].number; //Objekt-Pfad zum dynamischen Port, der Positionsdaten empfaengt.
|
||||
var wsPort2 = new WebSocket (`ws://localhost:${dynamicPort2}`);
|
||||
// Positionsdaten empfangen (PortId 2)
|
||||
wsPort2.onopen = function () {
|
||||
document.getElementById('connectDynamicBtn').classList.replace("btn-outline-danger", "btn-outline-success")
|
||||
window.setTimeout(popdown, 1000);
|
||||
}
|
||||
|
||||
wsPort2.onmessage = function(msg) {
|
||||
processEquipment(msg);
|
||||
}
|
||||
|
||||
wsPort2.onclose = function() {
|
||||
document.getElementById('connectDynamicBtn').classList.replace("btn-outline-success", "btn-outline-danger")
|
||||
}
|
||||
|
||||
// einmalig Participant-Informationen abfragen (PortId 1)
|
||||
var wsPort1 = new WebSocket (`ws://localhost:${dynamicPort1}`);
|
||||
wsPort1.onopen = function () {
|
||||
BaseDlRequest(wsPort1);
|
||||
}
|
||||
|
||||
wsPort1.onmessage = function (msg) {
|
||||
if (JSON.parse(msg.data).type == "partyBaseData") {
|
||||
JSON.parse(msg.data).data.forEach (partyInfo => {
|
||||
partyBaseData[partyInfo.id] = partyInfo; //Objekt
|
||||
})
|
||||
}
|
||||
|
||||
if (JSON.parse(msg.data).type == "participantBaseData") {
|
||||
JSON.parse(msg.data).data.forEach (participantInfo => {
|
||||
if (!participantInfo.equipmentNumber == 0) { //unsausgesattete Teilnehmer (= EquipNr 0) ignorieren
|
||||
participantBaseData[participantInfo.equipmentNumber] = participantInfo;
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Equipment-Informationen verarbeiten aus Positionsmeldung durch WebSocket*/
|
||||
|
||||
function processEquipment(msg) {
|
||||
var equipmentNumber = JSON.parse(msg.data).equipmentNumber;
|
||||
var height = JSON.parse(msg.data).height;
|
||||
var lat = JSON.parse(msg.data).lat;
|
||||
var lon = JSON.parse(msg.data).lon;
|
||||
var participantId = JSON.parse(msg.data).participantId;
|
||||
var partyId = participantBaseData[equipmentNumber].partyId;
|
||||
var eq = null;
|
||||
|
||||
//PartyId anzeigen: Accordion und LayerGroup
|
||||
if (!parties.hasOwnProperty(partyId)) {
|
||||
var partyName = partyBaseData[partyId].name;
|
||||
var partyColor = paintIt(partyBaseData[partyId].color);
|
||||
var partyContainer = document.getElementById('accordionParty');
|
||||
var partyDiv = document.createElement('div');
|
||||
partyDiv.id = `item-${partyId}`
|
||||
partyDiv.classList.add('border-bottom')
|
||||
partyDiv.innerHTML = `<h2 class="accordion-header" id="heading${equipmentNumber}">
|
||||
<button id="button-${partyId}" class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#collapse${equipmentNumber}" aria-expanded="true" aria-controls="collapse${equipmentNumber}">
|
||||
${partyName}
|
||||
</button>
|
||||
<a id="hide-party-${partyId}" class="hide-party" href="#" data-bs-toggle="collapse">
|
||||
<img id = "party-icon-${partyId}" src="./res/eye.svg">
|
||||
</a>
|
||||
</h2>
|
||||
<div id="collapse${equipmentNumber}" class="accordion-collapse collapse show" aria-labelledby="heading${equipmentNumber}">
|
||||
<div id="accordion-body-${partyId}" class="accordion-body p-0">
|
||||
<table class="table table-hover table-condensed">
|
||||
<tbody id="table-${partyId}">
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>`
|
||||
partyContainer.appendChild(partyDiv);
|
||||
document.getElementById(`button-${partyId}`).style.color = partyColor
|
||||
|
||||
parties[partyId] = {
|
||||
equipments: {},
|
||||
layerGroup: L.layerGroup(),
|
||||
partyName: partyName,
|
||||
partyColor: partyColor,
|
||||
tracked: true,
|
||||
visible: true,
|
||||
followedEquipment: null
|
||||
}
|
||||
|
||||
// Show / Hide Party
|
||||
document.getElementById(`hide-party-${partyId}`).addEventListener('click', () => {
|
||||
|
||||
if (!parties[partyId].visible) {
|
||||
for (var key in parties[partyId].equipments) {
|
||||
if (!parties[partyId].equipments[key].visible) {
|
||||
parties[partyId].equipments[key].toggleMarkerVisibility(map)
|
||||
}
|
||||
}
|
||||
parties[partyId].visible = true;
|
||||
document.getElementById(`party-icon-${partyId}`).src = `./res/eye.svg`;
|
||||
}
|
||||
else {
|
||||
for (var key in parties[partyId].equipments) {
|
||||
if (parties[partyId].equipments[key].visible) {
|
||||
parties[partyId].equipments[key].toggleMarkerVisibility(map);
|
||||
}
|
||||
}
|
||||
parties[partyId].visible = false;
|
||||
document.getElementById(`party-icon-${partyId}`).src = `./res/eye-slash.svg`;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//Equipment-Instanz im Party-Objekt anlegen
|
||||
if (!parties[partyId].equipments.hasOwnProperty(equipmentNumber)) {
|
||||
|
||||
parties[partyId].equipments[equipmentNumber] = new Equipment(equipmentNumber, height, lat, lon, participantId);
|
||||
parties[partyId].equipments[equipmentNumber].setPartyId(partyId);
|
||||
parties[partyId].equipments[equipmentNumber].setDesignator(participantBaseData[equipmentNumber].designator);
|
||||
parties[partyId].equipments[equipmentNumber].setTatcicalIdentifier(participantBaseData[equipmentNumber].tacticalIdentifier);
|
||||
parties[partyId].equipments[equipmentNumber].setPartyColor(parties[partyId].partyColor);
|
||||
}
|
||||
//Equipment-Position aktualisieren
|
||||
else {
|
||||
parties[partyId].equipments[equipmentNumber].updatePosition(height, lat, lon);
|
||||
if (parties.followedEquipment == equipmentNumber) {
|
||||
parties[partyId].equipments[equipmentNumber].followMarker(map);
|
||||
}
|
||||
}
|
||||
|
||||
eq = parties[partyId].equipments[equipmentNumber];
|
||||
|
||||
|
||||
//Equipment anzeigen: Accordion-Item und Marker (sortiert einfuegen)
|
||||
if (!eq.tracked) {
|
||||
var equipmentTable = document.getElementById(`table-${eq.getPartyId()}`)
|
||||
var equipmentRow = document.createElement('tr');
|
||||
equipmentRow.id = `${eq.equipmentNr}`; //ID ist EquipmentNr
|
||||
var equipmentNrCell = document.createElement('td');
|
||||
equipmentNrCell.style.paddingLeft = "1.25rem";
|
||||
equipmentNrCell.innerHTML = `<a id ="focus-${eq.equipmentNr}" href = "#">${eq.equipmentNr}</a>`
|
||||
var participantIdCell = document.createElement('td');
|
||||
participantIdCell.innerHTML = `Participant ${eq.participantId}`;
|
||||
var followCell = document.createElement('td');
|
||||
followCell.style = "text-align:right";
|
||||
followCell.style.width = "50px";
|
||||
followCell.innerHTML = `<a id ="follow-${eq.equipmentNr}" href = "#"><img id="follow-icon-${eq.equipmentNr}" src="./res/crosshair_light.svg"></a>`;
|
||||
var hideCell = document.createElement('td');
|
||||
hideCell.style = "text-align:right";
|
||||
hideCell.style.width = "50px";
|
||||
hideCell.style.paddingRight = "1.25rem";
|
||||
hideCell.innerHTML = `<a id ="visibility-${eq.equipmentNr}" href = "#"><img id="icon-${eq.equipmentNr}" src="./res/eye.svg"></a>`;
|
||||
|
||||
equipmentRow.append(equipmentNrCell);
|
||||
equipmentRow.append(participantIdCell);
|
||||
equipmentRow.append(followCell);
|
||||
equipmentRow.append(hideCell);
|
||||
|
||||
breakme: if (equipmentTable.children.length > 0){ // Nach EquipmentID in Liste einsortieren
|
||||
var children = equipmentTable.children;
|
||||
for(var i=0; i<children.length; i++){
|
||||
if (children[i].id > eq.equipmentNr) {
|
||||
equipmentTable.insertBefore(equipmentRow,children[i]);
|
||||
break breakme;
|
||||
}
|
||||
else {
|
||||
equipmentTable.append(equipmentRow);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
equipmentTable.append(equipmentRow);
|
||||
}
|
||||
|
||||
// Show / Hide
|
||||
document.getElementById(`visibility-${eq.equipmentNr}`).addEventListener('click', () => {
|
||||
eq.toggleMarkerVisibility(map);
|
||||
var allHidden = true
|
||||
for (var key in parties[partyId].equipments) {
|
||||
if (parties[partyId].equipments[key].visible){
|
||||
allHidden = false;
|
||||
}
|
||||
}
|
||||
if (allHidden) {
|
||||
parties[partyId].visible = false;
|
||||
document.getElementById(`party-icon-${partyId}`).src = `./res/eye-slash.svg`;
|
||||
}
|
||||
else {
|
||||
parties[partyId].visible = true;
|
||||
document.getElementById(`party-icon-${partyId}`).src = `./res/eye.svg`;
|
||||
}
|
||||
});
|
||||
|
||||
// Pan to
|
||||
document.getElementById(`focus-${eq.equipmentNr}`).addEventListener('click', () => {
|
||||
eq.focusMarker(map);
|
||||
parties[partyId].visible = true;
|
||||
document.getElementById(`party-icon-${partyId}`).src = `./res/eye.svg`;
|
||||
});
|
||||
|
||||
// Follow
|
||||
document.getElementById(`follow-${eq.equipmentNr}`).addEventListener('click', () => {
|
||||
if (parties.followedEquipment != eq.equipmentNr) {
|
||||
if (!parties.followedEquipment == 0) {
|
||||
document.getElementById(`follow-icon-${parties.followedEquipment}`).src = `./res/crosshair_light.svg`;
|
||||
}
|
||||
parties[partyId].visible = true;
|
||||
document.getElementById(`party-icon-${partyId}`).src = `./res/eye.svg`;
|
||||
parties.followedEquipment = equipmentNumber;
|
||||
eq.focusMarker(map);
|
||||
document.getElementById(`svgIcon-${eq.equipmentNr}`).style.strokeWidth = 3;
|
||||
document.getElementById(`follow-icon-${eq.equipmentNr}`).src = `./res/crosshair_dark.svg`;
|
||||
document.getElementById('infoOverlay').hidden = false;
|
||||
document.getElementById('infoOverlay').innerHTML = "Equipment <b>" + eq.equipmentNr + "</b> Lat: " + eq.getLatDeg().toFixed(5) + " Lon: " + eq.getLonDeg().toFixed(5) + " Height: " + eq.height.toFixed(2)
|
||||
} else {
|
||||
parties.followedEquipment = null;
|
||||
document.getElementById(`svgIcon-${eq.equipmentNr}`).style.strokeWidth = 1;
|
||||
document.getElementById(`follow-icon-${eq.equipmentNr}`).src = `./res/crosshair_light.svg`;
|
||||
document.getElementById('infoOverlay').hidden = true;
|
||||
}
|
||||
})
|
||||
|
||||
eq.setMarker(); //Marker anlegen
|
||||
|
||||
var party = parties[eq.getPartyId()].layerGroup;
|
||||
party.addLayer(eq.getMarker()).addTo(map); //Marker werden zur jeweiligen Layer-Group hinzugefuegt und auf map dargestellt
|
||||
|
||||
eq.tracked = true;
|
||||
eq.visible = true;
|
||||
}
|
||||
else {
|
||||
eq.resetLatLng(parties.followedEquipment);
|
||||
}
|
||||
}
|
||||
|
||||
/* HTML-Funktionalitaet */
|
||||
|
||||
// Modal
|
||||
var modal = new bootstrap.Modal(document.getElementById('staticBackdrop'));
|
||||
|
||||
function popup() {
|
||||
document.onreadystatechange = function () {
|
||||
modal.show();
|
||||
};
|
||||
}
|
||||
|
||||
function popdown() {
|
||||
modal.hide();
|
||||
}
|
||||
|
||||
// Sidebar on Btn
|
||||
const sidebarToggle = document.body.querySelector('#sidebarToggle');
|
||||
if (sidebarToggle) {
|
||||
sidebarToggle.addEventListener('click', event => {
|
||||
event.preventDefault();
|
||||
document.body.classList.toggle('sb-sidenav-toggled');
|
||||
localStorage.setItem('sb|sidebar-toggle', document.body.classList.contains('sb-sidenav-toggled'));
|
||||
setTimeout(function(){ map.invalidateSize({animate: true})}, 280)
|
||||
});
|
||||
}
|
||||
|
||||
// Request
|
||||
function servicePortsInformationRequest(ws) {
|
||||
|
||||
ws.send(JSON.stringify({
|
||||
type: "servicePortsInformationRequest",
|
||||
uuid: "UUID"
|
||||
}));
|
||||
}
|
||||
|
||||
function BaseDlRequest(ws) {
|
||||
|
||||
ws.send(JSON.stringify({
|
||||
type: "baseDlRequest",
|
||||
uuid: "UUID"
|
||||
}));
|
||||
}
|
||||
@@ -0,0 +1,124 @@
|
||||
#body {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#wrapper {
|
||||
position: relative;
|
||||
overflow-x: hidden;
|
||||
overflow-y: hidden;
|
||||
}
|
||||
|
||||
#sidebar-wrapper {
|
||||
width: 320px;
|
||||
height: 100%;
|
||||
position: fixed;
|
||||
margin-left: -320px;
|
||||
transition: 0.4s;
|
||||
display: flex;
|
||||
flex-flow: column;
|
||||
}
|
||||
|
||||
#sidebar-header {
|
||||
flex: 0 1 auto;
|
||||
}
|
||||
|
||||
#sidebar-body {
|
||||
flex: 0 1 auto;
|
||||
position: relative;
|
||||
overflow-y: scroll;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
#page-content-wrapper {
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
transition: 0.4s;
|
||||
display: flex;
|
||||
flex-flow: column;
|
||||
}
|
||||
|
||||
body.sb-sidenav-toggled #wrapper #sidebar-wrapper {
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
body.sb-sidenav-toggled #wrapper #page-content-wrapper {
|
||||
margin-left: 320px;
|
||||
}
|
||||
|
||||
#content-map {
|
||||
width: 100%;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
#infoOverlay {
|
||||
position: absolute;
|
||||
z-index: 1000;
|
||||
pointer-events: none;
|
||||
bottom: 0;
|
||||
margin: 10px;
|
||||
padding: 5px;
|
||||
border: 2px solid rgba(0, 0, 0, 0.2);
|
||||
border-radius: 5px;
|
||||
background: rgba(255, 255, 255, .7);
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
|
||||
#sidebar-wrapper {
|
||||
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
#page-content-wrapper {
|
||||
min-width: 0;
|
||||
width: 100%;
|
||||
margin-left: 320px;
|
||||
}
|
||||
|
||||
body.sb-sidenav-toggled #wrapper #sidebar-wrapper {
|
||||
margin-left: -320px;
|
||||
}
|
||||
|
||||
body.sb-sidenav-toggled #wrapper #page-content-wrapper {
|
||||
margin-left: 0px;
|
||||
}
|
||||
}
|
||||
|
||||
.hide-party {
|
||||
position: relative;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: flex-end;
|
||||
width: 17%;
|
||||
padding-right: 1.25rem;
|
||||
font-size: 1rem;
|
||||
color: #212529;
|
||||
text-align: right;
|
||||
background-color: #fff;
|
||||
border: 0;
|
||||
border-radius: 0;
|
||||
overflow-anchor: none;
|
||||
box-shadow: inset 1px -1px 0px rgba(0, 0, 0, 0.125);
|
||||
}
|
||||
|
||||
.tooltip {
|
||||
background: rgba(255, 255, 255, 0.65);
|
||||
padding: .1rem;
|
||||
white-space: nowrap;
|
||||
border-radius: 0;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.table-condensed{
|
||||
font-size: 12px;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.leaflet-tooltip-top:before,
|
||||
.leaflet-tooltip-bottom:before,
|
||||
.leaflet-tooltip-left:before,
|
||||
.leaflet-tooltip-right:before {
|
||||
border: none !important;
|
||||
}
|
||||