Union of polygon to lib

This commit is contained in:
vjrj 2018-09-16 17:06:23 +02:00
parent df47bef794
commit e96e6ee8f7
3 changed files with 57 additions and 89 deletions

View file

@ -1,55 +1,7 @@
import { check } from 'meteor/check';
import tunion from '@turf/union';
import ttrunc from '@turf/truncate';
import { rectangleAround } from 'map-common-utils';
import tcircle from '@turf/circle';
// https://stackoverflow.com/questions/35394577/leaflet-js-union-merge-circles
const truncOptions = { precision: 6, coordinates: 2 };
const unify = (polyList) => {
let unionTemp;
for (let i = 0; i < polyList.length; i += 1) {
const pol = polyList[i];
const cleanPol = ttrunc(pol, truncOptions);
if (i === 0) {
unionTemp = cleanPol;
} else {
unionTemp = ttrunc(tunion(unionTemp, cleanPol), truncOptions);
}
}
return unionTemp;
};
import { calcUnion as calcUnionWoBounds } from 'map-common-utils';
const calcUnion = (L, subs, decorated, typeCircle) => {
const unionGroup = [];
const doCircle = (typeof typeCircle !== 'undefined') ? typeCircle : true;
subs.forEach((osub) => {
try {
if (osub.location && osub.location.lat && osub.location.lon && osub.distance) {
check(osub.location.lon, Number);
check(osub.location.lat, Number);
check(osub.distance, Number);
const dsub = decorated(osub);
const jsonPolygon = doCircle ?
tcircle(
[dsub.location.lon, dsub.location.lat], dsub.distance,
{ units: 'kilometers', steps: 144 }
) :
rectangleAround(
{ lon: dsub.location.lon, lat: dsub.location.lat },
dsub.distance,
(typeof dsub.distanceY !== 'undefined') ? dsub.distanceY : dsub.distance
);
unionGroup.push(jsonPolygon);
} else {
console.info(`Wrong element to do union ${JSON.stringify(osub)}`);
}
} catch (e) {
console.error(e, `Wrong element trying to make union ${JSON.stringify(osub)}`);
}
});
const unionJson = unify(unionGroup);
const unionJson = calcUnionWoBounds(subs, decorated, typeCircle);
return [unionJson, L.geoJSON(unionJson).getBounds()];
};

89
package-lock.json generated
View file

@ -203,38 +203,6 @@
}
}
},
"@turf/truncate": {
"version": "5.1.5",
"resolved": "https://registry.npmjs.org/@turf/truncate/-/truncate-5.1.5.tgz",
"integrity": "sha1-nu37Oxi6gfLJjT6tCUMcyhiErYk=",
"requires": {
"@turf/helpers": "5.1.5",
"@turf/meta": "5.2.0"
},
"dependencies": {
"@turf/helpers": {
"version": "5.1.5",
"resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-5.1.5.tgz",
"integrity": "sha1-FTQFInq5M9AEpbuWQantmZ/L4M8="
}
}
},
"@turf/union": {
"version": "5.1.5",
"resolved": "https://registry.npmjs.org/@turf/union/-/union-5.1.5.tgz",
"integrity": "sha1-UyhbYJQEf8WNlqrA6pCGXsNNRUs=",
"requires": {
"@turf/helpers": "5.1.5",
"turf-jsts": "1.2.2"
},
"dependencies": {
"@turf/helpers": {
"version": "5.1.5",
"resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-5.1.5.tgz",
"integrity": "sha1-FTQFInq5M9AEpbuWQantmZ/L4M8="
}
}
},
"@types/node": {
"version": "8.0.57",
"resolved": "https://registry.npmjs.org/@types/node/-/node-8.0.57.tgz",
@ -10845,17 +10813,58 @@
}
},
"map-common-utils": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/map-common-utils/-/map-common-utils-0.2.0.tgz",
"integrity": "sha512-kI71M3pLACkGlrGHzOnC31tP3uSrNxyo9l1ABGXkGuvDZ4M4IvA2K1geukQih/iJLTnZXjbO5tr9/9qpqgxyqw==",
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/map-common-utils/-/map-common-utils-0.3.0.tgz",
"integrity": "sha512-JK8cnAFfyB76ufs9C/whCewsO1vjfRTy6qJ1cRpFHPD0+b9ElrbzBlnfhQfTTbUGyi9WvVEinn7FvNXh0/dnvw==",
"requires": {
"@turf/bbox": "6.0.1",
"@turf/bbox-polygon": "6.0.1",
"@turf/circle": "6.0.1",
"@turf/destination": "6.0.1",
"@turf/helpers": "6.1.4",
"@turf/invariant": "6.1.2",
"@turf/truncate": "6.0.1",
"@turf/union": "6.0.3",
"spherical": "0.2.0",
"wgs84": "0.0.0"
},
"dependencies": {
"@turf/meta": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/@turf/meta/-/meta-6.0.2.tgz",
"integrity": "sha512-VA7HJkx7qF1l3+GNGkDVn2oXy4+QoLP6LktXAaZKjuT1JI0YESat7quUkbCMy4zP9lAUuvS4YMslLyTtr919FA==",
"requires": {
"@turf/helpers": "6.1.4"
}
},
"@turf/truncate": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/@turf/truncate/-/truncate-6.0.1.tgz",
"integrity": "sha512-0n6MauRHIhnlNPKnVa65YUPNh0AExDmBfvg7v5w1corBlYHZXLew3rS9IKw7o6VqHaMUQs5RT/b3/77RlTetJg==",
"requires": {
"@turf/helpers": "6.1.4",
"@turf/meta": "6.0.2"
}
},
"@turf/union": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/@turf/union/-/union-6.0.3.tgz",
"integrity": "sha512-SJPhEvsR96k4vFqymxPPC43jcqFydTafGjHWnYzlupxqUDzIYD8X5d9Ed8mONl2T9oM4ErbNuuZ9j/eHvoWtKw==",
"requires": {
"@turf/helpers": "6.1.4",
"@turf/invariant": "6.1.2",
"martinez-polygon-clipping": "0.4.3"
}
}
}
},
"martinez-polygon-clipping": {
"version": "0.4.3",
"resolved": "https://registry.npmjs.org/martinez-polygon-clipping/-/martinez-polygon-clipping-0.4.3.tgz",
"integrity": "sha512-3ZNS0ksKhWTLsmCUkNf+/UimndZ5U2cVOS0I+IjiwF+M23E77TmeOZSmbRJbfCoQUog/vcQ42s3DXrhgOhgPqw==",
"requires": {
"splaytree": "0.1.4",
"tinyqueue": "1.2.3"
}
},
"maxmind": {
@ -19447,6 +19456,11 @@
"wgs84": "0.0.0"
}
},
"splaytree": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/splaytree/-/splaytree-0.1.4.tgz",
"integrity": "sha512-D50hKrjZgBzqD3FT2Ek53f2dcDLAQT8SSGrzj3vidNH5ISRgceeGVJ2dQIthKOuayqFXfFjXheHNo4bbt9LhRQ=="
},
"sprintf-js": {
"version": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
@ -19860,6 +19874,11 @@
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
"integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
},
"tinyqueue": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-1.2.3.tgz",
"integrity": "sha512-Qz9RgWuO9l8lT+Y9xvbzhPT2efIUIFd69N7eF7tJ9lnQl0iLj1M7peK7IoUGZL9DJHw9XftqLreccfxcQgYLxA=="
},
"tmp": {
"version": "0.0.33",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",

View file

@ -10,9 +10,6 @@
"@cleverbeagle/dates": "^0.5.1",
"@cleverbeagle/seeder": "^1.3.1",
"@turf/buffer": "^5.1.5",
"@turf/circle": "^6.0.1",
"@turf/truncate": "^5.1.5",
"@turf/union": "^5.1.5",
"babel-runtime": "^6.26.0",
"bcrypt": "^1.0.3",
"bootstrap-carousel-swipe": "0.0.6",
@ -46,7 +43,7 @@
"leaflet-sleep": "^0.5.1",
"lodash": "^4.17.4",
"loms.perlin": "^1.0.1",
"map-common-utils": "^0.2.0",
"map-common-utils": "^0.3.0",
"maxmind": "^2.3.0",
"meteor-accounts-t9n": "^2.0.3",
"meteor-node-stubs": "^0.3.2",