Étape 4: GPS un bâtiment
Donc il est assez facile d’enregistrer des données GPS pour les quatre emplacements. Je les ai appelé NW, NE, so, SE.
Problème : Comment calculer des distances et des roulements (direction) entre deux points de latitude-longitude. Le problème est que les latitudes et les longitudes ne sont pas certaines distances uniformes dehors. Voir photo.
Solution : Les calculs sont assez intenses. J’ai trouvé un excellent site pour cela :
http://www.Movable-Type.co.uk/scripts/LatLong.html
Pour les maths, Geeks, sautez dans le site Web. Pour le reste, il y a deux formules pour le calcul des distances d’atterrissage sur une sphère. L’un s’appelle la formule Haversine et l’autre est sphérique loi du cosinus. J’ai essayé les deux, mais la plupart des « experts » suggère que la Haversine est plus précis. Voici la fonction que j’ai emprunté depuis le site Web.
Public Function CalDistance (ByVal Lat1 As Double, ByVal Lon1 As Double,
ByVal Lat2 As Double, ByVal Lon2 As Double) As Double
Dim rayon As Double = 20902231.0 ' nombre de pieds dans le rayon de la terre, issu de 6371kM
"Formule Haversine
Dim dLat As Double = Lat2 - Lat1
Dim dLong As Double = Lon2 - Lon1
Dim a As Double = Math.Sin(dLat / 2.0) * Math.Sin(dLat / 2.0) + _
Math.Cos(Lat1) * Math.Cos(Lat2) * Math.Sin(dLong / 2.0) * Math.Sin(dLong / 2.0)
Protected Double c = 2. 0 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1.0-a))
CalDistance = rayon * c
End Function
Pour comprendre ceci requiert une compréhension de base de la programmation, l’algèbre et trigonométrie.
Astuce : La plupart des langages de programmation nécessitent des angles en radians pas de degrés.
Pour calculer le roulement, j’ai utilisé ceci :
Public Function CalBearing (ByVal Lat1 As Double, ByVal Lon1 As Double, ByVal Lat2 As Double, ByVal Lon2 As Double) As Double
Dim BearingRad As Double
BearingRad = Math.Atan2 ((Math.Sin (Lon1 - Lon2) * Math.Cos(Lat2)), _
Math.Cos(Lat1) * Math.Sin(Lat2) - Math.Sin(Lat1) * _
Math.Cos(Lat2) * Math.Cos (Lon1 - Lon2))
« Radians = degrés * (PI / 180)
' degrés = 180 * radians/pi
CalBearing = 180,0 * BearingRad / Math.PI
« Normaliser) ' CalBearing = (CalBearing + 360) % 360
CalBearing = (CalBearing + 360.0) Mod 360,0
End Function
Une des choses gentilles sur ce site Web est qu’il a construit dans le calculateur. Si vous écrivez un programme comme ceci, vous devriez vérifier vos algorithmes en exécutant certaines valeurs dans votre programme et brancher sur le site pour s’assurer que vous obtenez les mêmes résultats.
Avertissement : Je na pas régler des situations où latitude passe de N à S ou longitude va de E à W. Je ne suis pas sûr que le site ne soit.
Mon Intstructions : Aller à l’un de l’attente des quatre coins, mises à jour de démarrage, jusqu'à ce que le GPS rassemble plusieurs échantillons (je tiens à obtenir plus de 100), puis cliquez sur Enregistrer pour l’angle correct, passer les trois autres coins et reprendre. Une fois terminé, cliquez sur calculer , les quatre distances et roulements doivent remplir. Pour enregistrer les données, cliquez sur fichier (coin supérieur gauche), sélectionnez Enregistrer, entrez un nom de fichier texte. Le fichier texte est au format CSV (valeurs séparées par virgule) donc il peut être importé dans Excel.