Nap Osm je 11.4.2020 ob 22:40 napisal:
inoltre viene inserito un messaggio nella nota quando viene selezionata la posizione dalla mappa con la distanza dalla posizione originale (in qualche misura a me sconosciuta, come ho detto mi sono limitato a inserire una semplice formula geometrica, ma non sono molto bravo con la trigonometria).

Se può servire posso consigliare di usare la libreria GeographicLib.

Ecco qui sotto un esempio come usarla in _javascript_.

Saluti
Damjan

=======================================================================
<script src="https://geographiclib.sourceforge.io/scripts/geographiclib.min.js"></script>
	<script>

var geod = GeographicLib.Geodesic.WGS84,
	dms = GeographicLib.DMS;

function formatpoint(lat, lon, azi, dmsformat, prec) {
	var trail;
	prec += 5;
	if (dmsformat) {
		trail = prec < 2 ? dms.DEGREE :
		(prec < 4 ? dms.MINUTE : dms.SECOND);
		prec = prec < 2 ? prec : (prec < 4 ? prec - 2 : prec - 4);
		return (dms.Encode(lat, trail, prec, dms.LATITUDE) + " " +
			dms.Encode(lon, trail, prec, dms.LONGITUDE) + " " +
			dms.Encode(azi, trail, prec, dms.AZIMUTH));
	} else {
		return (lat.toFixed(prec) + " " +
			lon.toFixed(prec) + " " +
			azi.toFixed(prec));
	}
};

function GeodesicInverse(lat1, lon1, lat2, lon2, dmsformat, prec) {
	var result = {},
	t, p1, p2;
	try {
		// Input is a blank-delimited line: lat1 lon1 lat2 lon2
		t = [ lat1, lon1, lat2, lon2];
		//t = t.replace(/^\s+/,"").replace(/\s+$/,"").split(/[\s,]+/,6);
		if (t.length != 4)
			throw new Error("Need 4 input items");
		p1 = GeographicLib.DMS.DecodeLatLon(t[0], t[1]);
		p2 = GeographicLib.DMS.DecodeLatLon(t[2], t[3]);
		t = geod.Inverse(p1.lat, p1.lon, p2.lat, p2.lon,
			GeographicLib.Geodesic.ALL |
			GeographicLib.Geodesic.LONG_UNROLL);
		result.status = "OK";
		result.p1 = formatpoint(t.lat1, t.lon1, t.azi1, dmsformat, prec);
		result.p2 = formatpoint(t.lat2, t.lon2, t.azi2, dmsformat, prec);
		result.s12 = t.s12.toFixed(prec);
		result.a12 = t.a12.toFixed(prec + 5);
		result.m12 = t.m12.toFixed(prec);
		result.M1221 = t.M12.toFixed(prec + 7) + " " + t.M21.toFixed(prec + 6);
		result.S12 = t.S12.toFixed(Math.max(prec - 7, 0));
	}
	catch (e) {
		result.status = "ERROR: " + e.message;
		result.p1 = "";
		result.p2 = "";
		result.s12 = "";
		result.a12 = "";
		result.m12 = "";
		result.M1221 = "";
		result.S12 = "";
	}
	return result;
};

=======================================================================



_______________________________________________
Talk-it mailing list
Talk-it@openstreetmap.org
https://lists.openstreetmap.org/listinfo/talk-it

Rispondere a