<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <div class="moz-cite-prefix">Nap Osm je 11.4.2020 ob 22:40 napisal:<br>
    </div>
    <blockquote type="cite"
cite="mid:DBBPR09MB2999A4BA94621AEB7B03162E8CDF0@DBBPR09MB2999.eurprd09.prod.outlook.com">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).</blockquote>
    <br>
    <tt>Se può servire posso consigliare di usare la libreria
      GeographicLib.<br>
      <br>
      Ecco qui sotto un esempio come usarla in javascript.<br>
      <br>
      Saluti<br>
      Damjan<br>
    </tt><br>
    <font color="#800000"><tt>=======================================================================</tt><tt><br>
      </tt></font>
    <pre id="line1"><font color="#800000"><span></span><span><<span class="start-tag">script</span> <span class="attribute-name">src</span>="<a class="attribute-value" style="">https://geographiclib.sourceforge.io/scripts/geographiclib.min.js</a>"></span><span></span><span></<span class="end-tag">script</span>></span><span>
<span id="line365"></span>        </span><span><<span class="start-tag">script</span>></span><span>
<span id="line366"></span>
<span id="line367"></span>var geod = GeographicLib.Geodesic.WGS84,
<span id="line368"></span>        dms = GeographicLib.DMS;
<span id="line369"></span>
function formatpoint(lat, lon, azi, dmsformat, prec) {
<span id="line374"></span>        var trail;
<span id="line375"></span>        prec += 5;
<span id="line376"></span>        if (dmsformat) {
<span id="line377"></span>                trail = prec </span><span>< </span><span>2 ? dms.DEGREE :
<span id="line378"></span>                (prec </span><span>< </span><span>4 ? dms.MINUTE : dms.SECOND);
<span id="line379"></span>                prec = prec </span><span>< </span><span>2 ? prec : (prec </span><span>< </span><span>4 ? prec - 2 : prec - 4);
<span id="line380"></span>                return (dms.Encode(lat, trail, prec, dms.LATITUDE) + " " +
<span id="line381"></span>                        dms.Encode(lon, trail, prec, dms.LONGITUDE) + " " +
<span id="line382"></span>                        dms.Encode(azi, trail, prec, dms.AZIMUTH));
<span id="line383"></span>        } else {
<span id="line384"></span>                return (lat.toFixed(prec) + " " +
<span id="line385"></span>                        lon.toFixed(prec) + " " +
<span id="line386"></span>                        azi.toFixed(prec));
<span id="line387"></span>        }
<span id="line388"></span>};
<span id="line389"></span>
<span id="line390"></span>function GeodesicInverse(lat1, lon1, lat2, lon2, dmsformat, prec) {
<span id="line391"></span>        var result = {},
<span id="line392"></span>        t, p1, p2;
<span id="line393"></span>        try {
<span id="line394"></span>                // Input is a blank-delimited line: lat1 lon1 lat2 lon2
<span id="line395"></span>                t = [ lat1, lon1, lat2, lon2];
<span id="line396"></span>                //t = t.replace(/^\s+/,"").replace(/\s+$/,"").split(/[\s,]+/,6);
<span id="line397"></span>                if (t.length != 4)
<span id="line398"></span>                        throw new Error("Need 4 input items");
<span id="line399"></span>                p1 = GeographicLib.DMS.DecodeLatLon(t[0], t[1]);
<span id="line400"></span>                p2 = GeographicLib.DMS.DecodeLatLon(t[2], t[3]);
<span id="line401"></span>                t = geod.Inverse(p1.lat, p1.lon, p2.lat, p2.lon,
<span id="line402"></span>                        GeographicLib.Geodesic.ALL |
<span id="line403"></span>                        GeographicLib.Geodesic.LONG_UNROLL);
<span id="line404"></span>                result.status = "OK";
<span id="line405"></span>                result.p1 = formatpoint(t.lat1, t.lon1, t.azi1, dmsformat, prec);
<span id="line406"></span>                result.p2 = formatpoint(t.lat2, t.lon2, t.azi2, dmsformat, prec);
<span id="line407"></span>                result.s12 = t.s12.toFixed(prec);
<span id="line408"></span>                result.a12 = t.a12.toFixed(prec + 5);
<span id="line409"></span>                result.m12 = t.m12.toFixed(prec);
<span id="line410"></span>                result.M1221 = t.M12.toFixed(prec + 7) + " " + t.M21.toFixed(prec + 6);
<span id="line411"></span>                result.S12 = t.S12.toFixed(Math.max(prec - 7, 0));
<span id="line412"></span>        }
<span id="line413"></span>        catch (e) {
<span id="line414"></span>                result.status = "ERROR: " + e.message;
<span id="line415"></span>                result.p1 = "";
<span id="line416"></span>                result.p2 = "";
<span id="line417"></span>                result.s12 = "";
<span id="line418"></span>                result.a12 = "";
<span id="line419"></span>                result.m12 = "";
<span id="line420"></span>                result.M1221 = "";
<span id="line421"></span>                result.S12 = "";
<span id="line422"></span>        }
<span id="line423"></span>        return result;
<span id="line424"></span>};

</span>=======================================================================
</font>
<span></span><span></span>

<span></span></pre>
  </body>
</html>