Stap 4: GPS een gebouw
Het is dus vrij eenvoudig GPS gegevens voor vier locaties opslaan. Ik riep hen NW, NE, SW, SE.
Probleem: Hoe Bereken afstanden en lagers (richting) tussen twee punten van de breedtegraad-lengtegraad. Het probleem is dat breedtegraden en posities niet bepaalde uniforme afstanden uit elkaar zijn. Zie foto.
Oplossing: De berekeningen zijn vrij intens. Ik vond een grote website voor dit:
http://www.Movable-Type.co.uk/scripts/LatLong.html
Voor de math Geeks, springen in de website. Voor de rest zijn er twee formules voor het berekenen van afstanden op een bol. Een heet de Haversine formule en de andere is bolvormig wet van cosinussen. Ik probeerde beide, maar de meeste van de 'deskundigen' betroffen dat de Haversine is nauwkeuriger. Hier is de functie die ik geleend van de website.
Public Function CalDistance (ByVal Lat1 als Double, ByVal Lon1 als Double,
ByVal Lat2 als dubbel, ByVal Lon2 als Double) als dubbel
RADIUS-As Double Dim = 20902231.0 ' aantal voeten in straal van de aarde, op basis van 6371kM
' Haversine formule
Dim dLat As Double = Lat2 - Lat1
Dim dLong As Double = Lon2 - Lon1
Een As Double Dim = 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)
Dim c als dubbel 2.0 = * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1.0-a))
CalDistance = straal * c
End Function
Om dit te begrijpen vereist een goed begrip van Basic programmeren, algebra en trigonometrie.
TIP: De meeste programmeertalen vereisen hoeken in radialen niet graden.
Als u wilt berekenen invloed, tweedehands mij zulks:
Public Function CalBearing (ByVal Lat1 als Double, ByVal Lon1 als dubbel, ByVal Lat2 als dubbel, ByVal Lon2 als Double) als dubbel
Dim BearingRad As Double
BearingRad = Math.Atan2 ((Math.Sin (Lon2 - Lon1) * Math.Cos(Lat2)), _
Math.Cos(Lat1) * Math.Sin(Lat2) - Math.Sin(Lat1) * _
Math.Cos(Lat2) * Math.Cos (Lon2 - Lon1))
' Radialen graden = * (PI / 180)
' graden = 180 * / HD-pi radialen
CalBearing = 180,0 * BearingRad / Math.PI
Normaliseren) ' CalBearing = (CalBearing + 360) % 360
CalBearing = (CalBearing + 360.0) Mod 360.0
End Function
Een van de leuke dingen over die website is dat het heeft een ingebouwde rekenmachine. Als u een programma als dit te schrijven, moet u controleren of uw algoritmen door het uitvoeren van sommige waarden in uw programma en het aan te sluiten op de website om ervoor te zorgen krijg je dezelfde resultaten.
Waarschuwing: Ik ingaan niet op situaties waar latitude gaat van N naar S of lengtegraad gaat van E naar W. Ik ben niet zeker dat de website beide doet.
Mijn Intstructions: Ga naar een van de vier hoeken, Start Updates, wacht totdat de GPS verzamelt verschillende monsters (ik hou om meer dan een 100), klik dan op Opslaan voor de juiste hoek, ga naar de andere drie hoeken en herhaal. Wanneer gedaan, klik op berekenen , de vier afstanden en lagers dient in te vullen. Als u wilt opslaan van de gegevens, klik op bestand (linkerbovenhoek), selecteert u Opslaan, voer een bestandsnaam voor de tekst. Het tekstbestand wordt opgemaakt in CSV (door lijstscheidingstekens gescheiden waarden) zodat het kan worden geïmporteerd in Excel.