Ottenere la distanza piana di due punti su una carta topografica

Da Gambas-it.org - Wikipedia.

Mostriamo un semplice esempio per ottenere la distanza "piana", ossia calcolata semplicemente "sulla carta", fra due punti su una carta topografica.
La carta topografica deve essere stata digitalizzata nelle sue originarie dimensioni (100%), e dovrà essere stata salvata in un formato immagine compatibile con Gambas.

 Dim rp, sn As Single
 Dim punto As new Short[4]
 
' Se si conosce la scala di rappresentazione e la risoluzione del raster in DPI, allora è possibile calcolare a quanto corrisponde un pixel in METRI, tenendo conto che le dimensioni del pixel (in cm) = (fattore di scala / DPI) * 2,54
' Poiché "2,54" è il rapporto centrimetri/pollici, il predetto calcolo va diviso per 100, per ottenere il risultato espresso in centimetri.
' Al valore dei DPI può essere anche assegnato un numero in virgola mobile.
 rp = ((fattore_di_scala / DPI) * 2.54) / 100
 
' In questo esempio usiamo la variabile vettoriale "punto[]" di 4 interi che rappresentano espressi in "pixel":
'   - punto[0] = la coordinata x del primo punto;
'   - punto[1] = la coordinata y del primo punto;
'   - punto[2] = la coordinata x del secondo punto;
'   - punto[3] = la coordinata y del secondo punto.
'  Si ottiene la distanza "piana", sulla carta, dei due punti prescelti, tenendo conto della dimensione dei "pixel" in centimetri sul terreno con i parametri immessi nella linea di comando precedente:
 sn = Sqr(((((punto[2] - punto[0]) * rp) ^ 2) + (((punto[3] - punto[1]) * rp) ^ 2)))
 
' Per ottenere una distanza un po' più realistica nel caso si conoscano le altitudini dei due punti (purché non vi sia soluzione di continuità nell'inclinazione del dislivello), si calcola con il teorema di Pitagora l'ipotenusa del triangolo rettangolo formato dai due punti in dislivello:
 sn = Sqr(CSingle(Abs(ValueBox1.Value - ValueBox2.Value) ^ 2) + (sn ^ 2))
 
 Print "m. "; Round(sn)