diff --git a/package-lock.json b/package-lock.json index d284afc291b66fa545c5ca4398ef04c95122241e..4281bdf55ddebab5d46775417f9160eb1482abac 100644 --- a/package-lock.json +++ b/package-lock.json @@ -149,6 +149,46 @@ "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, "core-js": { "version": "3.6.5", "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", @@ -175,6 +215,12 @@ "path-is-absolute": "^1.0.0" } }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -187,6 +233,25 @@ "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", "dev": true }, + "postcss": { + "version": "7.0.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", + "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -256,6 +321,15 @@ "schema-utils": "^3.0.0" } }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, "tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", @@ -3188,6 +3262,15 @@ "@types/leaflet": "*" } }, + "@types/leaflet.heat": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@types/leaflet.heat/-/leaflet.heat-0.2.0.tgz", + "integrity": "sha512-j/vfitsOOR7AU63/mlshqr88a6uZUObkvc55b3XkR2p7q0FFr021NMNineVhn1uT8BYfEETFraQCo/IZZpV3QQ==", + "dev": true, + "requires": { + "@types/leaflet": "*" + } + }, "@types/marked": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/@types/marked/-/marked-2.0.2.tgz", @@ -12301,6 +12384,11 @@ "resolved": "https://registry.npmjs.org/leaflet.awesome-markers/-/leaflet.awesome-markers-2.0.5.tgz", "integrity": "sha512-Ne/xDjkGyaujwNVVkv2tyXQUV0ZW7gZ0Mo0FuQY4jp2qWrvXi0hwDBvmZyF/8YOvybyMabTMM/mFWCTd1jZIQA==" }, + "leaflet.heat": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/leaflet.heat/-/leaflet.heat-0.2.0.tgz", + "integrity": "sha1-EJ2M9Ybwre5B8Fr/Ax4np3/swik=" + }, "less": { "version": "3.12.2", "resolved": "https://registry.npmjs.org/less/-/less-3.12.2.tgz", @@ -15927,9 +16015,9 @@ "dev": true }, "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", "dev": true, "requires": { "chalk": "^2.4.2", diff --git a/package.json b/package.json index c001929f3f6d9cbc748760cc92adfb66f8d7921b..1e311149abf8f2c40974edf4d038fc0057233831 100644 --- a/package.json +++ b/package.json @@ -71,6 +71,7 @@ "leaflet": "1.2.0", "leaflet-timedimension": "^1.1.1", "leaflet.awesome-markers": "^2.0.5", + "leaflet.heat": "0.2.0", "nebular-icons": "1.1.0", "ng2-ckeditor": "^1.2.9", "ng2-smart-table": "^1.6.0", @@ -106,6 +107,7 @@ "@types/jasmine": "3.5.14", "@types/jasminewd2": "2.0.8", "@types/leaflet": "1.2.3", + "@types/leaflet.heat": "0.2.0", "@types/node": "14.11.2", "codelyzer": "^6.0.0", "conventional-changelog-cli": "1.3.4", diff --git a/src/app/pages/messina/matrix/matrix.component.ts b/src/app/pages/messina/matrix/matrix.component.ts index efe464652f99f8c94fc3f93feddaf2883a64cbe6..cd53aec005ec2dac4da22f258aedc68b05f8d6fc 100644 --- a/src/app/pages/messina/matrix/matrix.component.ts +++ b/src/app/pages/messina/matrix/matrix.component.ts @@ -1,97 +1,83 @@ import { ChangeDetectorRef, Component, OnInit } from '@angular/core'; - import * as L from 'leaflet'; -import AMTram2020 from '../../../../assets/map/am_tram_2020.json'; +import 'leaflet.heat/dist/leaflet-heat.js'; +//import { addressPoints } from '../../../../assets/map/realworld.10000'; +import geoJsonPoints from '../../../../assets/map/heatgeo.json'; @Component({ selector: 'ngx-single-map', styleUrls: ['./matrix.component.scss'], template: ` - <div class="row d-flex justify-content-between align-items-center"> - <nb-card class="col-12"> - <nb-card-header>Matrix Traffic</nb-card-header> - <nb-card-body> - <div leaflet #map - [leafletOptions]="options" - (leafletMapReady)="onMapReady($event)" - > - </div> - <div class="mt-1"> - <p>Matrix component <b>Messina</b></p> - <p>Matrix X=day/Y=Hour Value=TrafficValue[0,10] => (change color)</p> - </div> - </nb-card-body> - </nb-card> + <div style="height: 100vh;" + leaflet [leafletOptions]="options" + (leafletMapReady)="onMapReady($event)"> </div>` }) -export class MatrixComponent implements OnInit { - - public map: L.Map; - - icon = new L.Icon({ - iconSize: [25, 41], - iconAnchor: [13, 41], - iconUrl: 'assets/img/markers/marker-icon.png', - iconRetinaUrl: 'assets/img/markers/marker-icon-2x.png', - shadowUrl: 'assets/img/markers/marker-shadow.png' - }); - - topLayer = "2020"; - +export class MatrixComponent { + options = { layers: [ - L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { maxZoom: 18, attribution: '...' }), + L.tileLayer("http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", { + maxZoom: 20, + attribution: "" + }) ], - zoom: 9, - center: L.latLng({ lat: 52.372664783594274, lng: 4.8950958251953125 }), + zoom: 14, + //center: L.latLng(38.193813, 15.554015) + center: L.latLng(38.181529, 15.562588) }; - layer2020: L.GeoJSON; - - constructor(private cdRef: ChangeDetectorRef) { } - - ngOnInit(): void { - this.layer2020 = this.getLayer('2020', <any>AMTram2020); - } + onMapReady(map) { + //let newAddressPoints = addressPoints.map(function (p) { return [p[0], p[1]]; }); + + var heatOptions1: { + minOpacity: 0.05, + maxZoom: 20, + radius: 25, + blur: 15, + max: 1.0 + }; + + var heatOptions = { + radius: 15, + max: 1.0, + blur: 15, + gradient: { + 0.0: 'green', + 0.5: 'yellow', + 0.7: 'orange', + 1.0: 'red' + }, + minOpacity: 0.7 + } - onMapReady(map: L.Map) { - this.map = map; - setTimeout(() => { - this.map.invalidateSize(); - this.map.addLayer(this.layer2020); - this.map.fitBounds(this.layer2020.getBounds(), { - padding: [50, 50] - }); - }, 50); + let heatPoints = this.heatLayerConverter(geoJsonPoints); + //console.log("Ciao heat : " + this.heatLayerConverter(geoJsonPoints)); + //const heat = L.heatLayer(newAddressPoints2, this.options).addTo(map); + //var heat = L.heatLayer([ + // [ 38.16524, 15.541335, 0.2], // lat, lng, intensity + // [ 38.16841, 15.54778, 101.0], ], heatOptions).addTo(map); + var heat = L.heatLayer(heatPoints, heatOptions).addTo(map); } - public getLayer(title, l): L.GeoJSON { - - let layer = L.geoJSON(l, - { - onEachFeature: (feature, layer) => { - let text = ""; - for (let p in feature.properties) { - text += `${p}: ${feature.properties[p]}\n`; - } - layer.bindPopup(text); - }, - style: function () { - if (title == '2020') - return { color: '#248175', weight: 7, opacity: 0.8 } - else - return { color: "#242c81", weight: 5, opacity: 0.8 } - } - }, - ) - .on('popupclose', ($event) => { - }) - - layer['_id'] = title; - return layer; + private heatLayerConverter(geoJson) { + var result = []; + for (let r in geoJson['features']) { + let coord = geoJson['features'][r].geometry.coordinates; + //result.push( [ coord[1], coord[0], 80] ); // lat, lng, intensity + //result.push( [ coord[1], coord[0], Math.random()] ); // lat, lng, intensity + result.push( [ coord[1], coord[0], 0.2] ); // lat, lng, intensity + } + + //for (let r in geoJson['features']) { + // result.push( [ result[0][0], result[0][1], 1.0] ); + //} + + console.log("Points result.length ==>"+ result.length); + console.log("Points result ==>"+ result); + return result; } } - diff --git a/src/app/pages/pages-menu.ts b/src/app/pages/pages-menu.ts index 6770336e03e7cab060085770445502b7a231fdab..7e493e14c18d35aebb206b8ba09923e555c9d631 100644 --- a/src/app/pages/pages-menu.ts +++ b/src/app/pages/pages-menu.ts @@ -94,11 +94,11 @@ export const MENU_ITEMS: NbMenuItem[] = [ { title: 'Street Traffic', link: '/pages/messina/traffic', - }//, - //{ - // title: 'Matrix Traffic', - // link: '/pages/messina/matrix', - //} + }, + { + title: 'Delay HeatMap', + link: '/pages/messina/matrix', + } ], }, { diff --git a/src/assets/map/heatgeo.json b/src/assets/map/heatgeo.json new file mode 100644 index 0000000000000000000000000000000000000000..201460df5b484da91ba5904e6fe7abfaf17822cc --- /dev/null +++ b/src/assets/map/heatgeo.json @@ -0,0 +1,1175 @@ +{ + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "properties": { + "uid": "04t" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.54034, + 38.16431 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "04tbis" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.54778, + 38.16841 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "05t" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.541335, + 38.16524 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "05tbis" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.540515, + 38.164515 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "08t" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.54004, + 38.16311 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "09t" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.54011, + 38.16299 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "09tbis" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.54015, + 38.164 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "103" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.545755, + 38.170205 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "105" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.54572, + 38.16897 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "109" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.477375, + 38.062725 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "10t" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.54086, + 38.16466 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "10tbis" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.540935, + 38.16485 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "11t" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.54002, + 38.1632 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "11tbis" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.540565, + 38.164635 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "1285" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.47588, + 38.06238 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "12t" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.54017, + 38.16302 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "12tbis" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.540485, + 38.164435 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "13t" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.54016, + 38.164185 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "13tbis" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.54014, + 38.16387 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "14t" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.5408, + 38.16477 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "14tbis" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.540085, + 38.16411 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "153" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.529115, + 38.150175 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "155" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.54511, + 38.169125 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "2223" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.48097, + 38.06534 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "2244" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.54573, + 38.169825 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "2245" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.47644, + 38.06218 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "2259" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.54559, + 38.16902 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "2301" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.48666, + 38.07531 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "2302" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.475745, + 38.06246 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "2304" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.49717, + 38.0839 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "2305" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.47668, + 38.06255 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "2306" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.545225, + 38.16864 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "2307" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.545105, + 38.16919 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "2308" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.47687, + 38.06273 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "2309" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.47644, + 38.062380000000008 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "306" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.47657, + 38.06252 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "406" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.544775, + 38.16862 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "414" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.54491, + 38.16873 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "780" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.49777, + 38.12232 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "782" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.53939, + 38.165355000000008 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "783" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.53928, + 38.16534 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "784" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.54548, + 38.16864 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "786" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.52909, + 38.15015 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "789" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.550235, + 38.175185 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "790" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.51737, + 38.16551 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "792" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.54572, + 38.16853 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "795" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.54557, + 38.16861 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "799" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.54557, + 38.16859 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "800" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.54499, + 38.168465 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "801" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.54644, + 38.1711 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "802" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.54582, + 38.17041 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "803" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.50268, + 38.09568 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "804" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.48281, + 38.0669 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "805" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.535195, + 38.161045 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "807" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.54078, + 38.16533 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "808" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.54529, + 38.16874 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "809" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.546385, + 38.170845 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "810" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.48827, + 38.13235 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "811" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.513085, + 38.1194 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "812" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.50779, + 38.109 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "813" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.54242, + 38.16119 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "814" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.54612, + 38.16899 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "815" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.5026, + 38.09577 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "816" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.47867, + 38.0626 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "817" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.54591, + 38.16966 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "818" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.491445, + 38.135025 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "819" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.54563, + 38.169945 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "820" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.529345, + 38.153635 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "821" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.54494, + 38.16863 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "822" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.54592, + 38.16886 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "823" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.544955, + 38.16907 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "824" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.545745, + 38.16869 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "825" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.54579, + 38.16852 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "826" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.54577, + 38.17038 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "828" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.48893, + 38.07655 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "829" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.545515, + 38.16944 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "830" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.54582, + 38.17045 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "831" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.545795, + 38.16844 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "832" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.54615, + 38.16956 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "833" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.48885, + 38.13235 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "834" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.54612, + 38.16985 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "835" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.53541, + 38.15795 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "836" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.54609, + 38.17074 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "837" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.5459, + 38.17046 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "838" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.54573, + 38.1703 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "839" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.52304, + 38.145175 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "840" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.54597, + 38.1706 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "a20" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.47986, + 38.063065 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "a21" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.54489, + 38.16891 + ] + } + }, + { + "type": "Feature", + "properties": { + "uid": "a22" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 15.54089, + 38.16505 + ] + } + } + ] +} \ No newline at end of file