Ho un codice C# che genera google maps. Questo codice analizza tutti i punti che devo tracciare sulla mappa e quindi elabora i limiti di un rettangolo per includerli. Quindi passa questo limite all'API di Google Maps per impostare il livello di zoom in modo appropriato per mostrare tutti i punti sulla mappa.Come trovo il lat/long che è x km a nord di un dato lat/long?
Questo codice funziona correttamente ma ho un nuovo requisito.
Uno dei punti può avere una precisione associata ad esso. Se questo è il caso, disegno un cerchio attorno al punto con il raggio impostato sul valore di precisione. Anche questo funziona bene, ma il mio controllo dei limiti ora non sta facendo quello che voglio che faccia. Voglio che il riquadro di delimitazione includa il cerchio completo.
Ciò richiede un algoritmo per prendere un punto x e calcolare il punto y che sarebbe z metri a nord di xe anche z metri a sud di x.
Qualcuno ha questo algoritmo, preferibilmente in C#. Ho trovato un algoritmo generico here ma a quanto pare non l'ho implementato correttamente poiché le risposte che sto ottenendo sono 1000 di km alla deriva.
Questo è l'esempio generico
Lat/lon given radial and distance
A point {lat,lon} is a distance d out on the tc radial from point 1 if:
lat=asin(sin(lat1)*cos(d)+cos(lat1)*sin(d)*cos(tc))
IF (cos(lat)=0)
lon=lon1 // endpoint a pole
ELSE
lon=mod(lon1-asin(sin(tc)*sin(d)/cos(lat))+pi,2*pi)-pi
ENDIF
E questo è il mio C# traduzione.
// Extend a Point North/South by the specified distance
public static Point ExtendPoint(Point _pt, int _distance, int _bearing)
{
Decimal lat = 0.0;
Decimal lng = 0.0;
lat = Math.Asin(Math.Sin(_pt.Lat) * Math.Cos(_distance) + Math.Cos(_pt.Lat) *
Math.Sin(_distance) * Math.Cos(_bearing));
if (Math.Cos(lat) == 0)
{
lng = _pt.Lng; // endpoint a pole
}
else
{
lng = (
(_pt.Lng - Math.Asin(Math.Sin(_bearing) * Math.Sin(_distance)/Math.Cos(lat))
+ Math.PI) % (2 * Math.PI)) - Math.PI;
}
ret = new Point(lat,lng);
return ret;
}
io chiamo questa funzione con un cuscinetto da 0 a calcolare la nuova posizione a nord e un valore di 180 per calcolare la nuova posizione sud.
Qualcuno può vedere cosa ho fatto di sbagliato o forse fornire un algoritmo di lavoro noto?
Bene che sembra molto più semplice :-) Grazie. Ci proverò ora. Qual è il numero magico 40.075. È quel numero di secondi (gradi) che copre un KM? –
Questa è la circonferenza della terra, dagli un colpo però. Questo è fuori intuizione quindi potrebbe essere necessario un aggiustamento. – Sam152
40,075 è la circonferenza equatoriale della Terra. – KevDog