Skip to content

Instantly share code, notes, and snippets.

@mdunham
Created September 24, 2018 21:46
Show Gist options
  • Save mdunham/4fff2f943ecd86f75e90c93e64865948 to your computer and use it in GitHub Desktop.
Save mdunham/4fff2f943ecd86f75e90c93e64865948 to your computer and use it in GitHub Desktop.
Messing up geo mapper
function calcCrow(lat1, lon1, lat2, lon2) {
var R = 6371; // km
var dLat = toRad(lat2 - lat1);
var dLon = toRad(lon2 - lon1);
var lat1 = toRad(lat1);
var lat2 = toRad(lat2);
var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
Math.sin(dLon / 2) * Math.sin(dLon / 2) * Math.cos(lat1) * Math.cos(lat2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
var d = R * c;
return d;
}
// Converts numeric degrees to radians
function toRad(Value) {
return Value * Math.PI / 180;
}
var map = [], optimized = [], ignore = [0], route = [[-96.447921,36.285688],[-96.46173974086992,36.29357481338843],[-96.46757622768376,36.299662334644594],[-96.47255440762204,36.30837773119217],[-96.46826287319172,36.30837773119217],[-96.46843453457431,36.31142097354035],[-96.47255440762204,36.31142097354035],[-96.46877785732455,36.31474073882343],[-96.46379967739378,36.31501737955841],[-96.46088143398686,36.31294255018361],[-96.43684884121602,36.34267649402784],[-96.36354943325522,36.33921964169107],[-96.40457650234225,36.309761037894475],[-96.36131783535625,36.280568062901736],[-96.41659279873517,36.31197427757705],[-96.4090396981477,36.29800214869182],[-96.3894703011748,36.23391966390764],[-96.40165825893534,36.23253501291377],[-96.5243961434612,36.24250395276002],[-96.49057885219642,36.23267347911536],[-96.46809121181661,36.29398988674231],[-96.45796319057993,36.26216119130416]];
for (var i = 0; i < route.length; i++) {
map[i] = [];
for (var ii = 0; ii < route.length; ii++) {
map[i][ii] = calcCrow(route[i][1], route[i][0], route[ii][1], route[ii][0]);
}
}
for (var i = 0; i < route.length; i++) {
var closest = { index: false, dist: false };
for (var ii = 0; ii < route.length; ii++) {
if (ignore.indexOf(ii) !== -1) continue;
if ( ! closest.dist) {
closest.dist = map[i][ii];
closest.index = ii;
} else {
if (map[i][ii] < closest.dist) {
closest.dist = map[i][ii];
closest.index = ii;
}
}
}
optimized.push({forPoint: i, gotoPoint: closest.index, distance: closest.dist + 'km'});
ignore.push(closest.index);
}
var finalRoute = [], mapCords = [];
mapCords.push(route[0]);
console.log('Starting Point: ', route[0]);
for (var rte in optimized) {
console.log('Next Point: (' + optimized[rte].gotoPoint + ')', route[optimized[rte].gotoPoint]);
if (false !== route[optimized[rte].gotoPoint]) {
mapCords.push(route[optimized[rte].gotoPoint]);
} else {
mapCords.push(route[0]);
}
finalRoute.push({
from: route[optimized[rte].forPoint],
to: route[optimized[rte].gotoPoint]
});
}
// Then use <script src='https://npmcdn.com/@turf/turf/turf.min.js'></script>
// to var lineString = turf.lineString(mapCords);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment