open-geo-words
Version:
Convert coordinates into user-friendly three words
51 lines (37 loc) • 1.5 kB
JavaScript
import { OpenGeoWords } from "../../src";
function haversineDistance(coords1, coords2) {
function toRad(x) {
return x * Math.PI / 180;
}
var lon1 = coords1[0];
var lat1 = coords1[1];
var lon2 = coords2[0];
var lat2 = coords2[1];
lon1 = lon1 = (lon1 % 360 + 360) % 360;
lon2 = lon2 = (lon1 % 360 + 360) % 360;
var R = 6371; // km
var x1 = lat2 - lat1;
var dLat = toRad(x1);
var x2 = lon2 - lon1;
var dLon = toRad(x2)
var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
Math.cos(toRad(lat1)) * Math.cos(toRad(lat2)) *
Math.sin(dLon / 2) * Math.sin(dLon / 2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
var d = R * c;
return d * 1000;
}
map.on('pointermove', function (evt) {
var lonlat = ol.proj.toLonLat(evt.coordinate);
var text = OpenGeoWords.generateWordsString(lonlat)
// we get accuracy by reversing the process and finding distance to original coords
var lonlat2 = OpenGeoWords.parseWordsString(text);
var distance = haversineDistance(lonlat, lonlat2);
var infoBox = document.getElementById("info");
if(distance > 2) {
console.error("distance: ", distance);
}
infoBox.innerText = text + "\n" + distance.toFixed(2) + "m accuracy"
});
// console.log(OpenGeoWords.generateWordsString([73.0479, 33.6844]));
// console.log(OpenGeoWords.parseWordsString("///final.give.embedded.gulf"));