sql >> Database >  >> RDS >> Mysql

Formules om geografische nabijheid te berekenen

De wet van cosinus en de formule van Haversine geven identieke resultaten uitgaande van een machine met oneindige precisie. De Haversine-formule is robuuster voor drijvende-kommafouten. De machines van vandaag hebben echter een dubbele nauwkeurigheid in de orde van 15 significante cijfers, en de cosinusregel kan prima voor u werken. Beide formules gaan uit van bolvormige aarde, terwijl Vicenty's iteratieve oplossing (meest nauwkeurig) uitgaat van een ellipsoïde aarde (in werkelijkheid is de aarde niet eens een ellipsoïde - het is een geoïde). Enkele referenties:http://www.movable-type. co.uk/scripts/gis-faq-5.1.html

Het wordt beter:let op de breedtegraad die in de cosinusregel moet worden gebruikt, evenals de Haversine is de geocentrische breedtegraad, die verschilt van de geodetische breedtegraad. Voor een bol zijn deze twee hetzelfde.

Welke is het snelst te berekenen?

In volgorde van snelst naar langzaamst zijn:cosinusregel (5 trig. calls) -> haversine (betrekt sqrt) -> Vicenty (moet dit iteratief oplossen in een for-lus)

Welke is het meest nauwkeurig?

Vicentie.

Welke is het beste als snelheid en nauwkeurigheid beide worden overwogen?

Als je probleemdomein zodanig is dat voor de afstanden die je probeert te berekenen, de aarde als plat kan worden beschouwd, dan kun je (ik ga geen details geven) een formule uitwerken van de vorm x =kx * verschil in lengtegraad , y =ky * verschil in breedtegraad. Dan afstand =sqrt(dxdx + dy dood). Als je probleemdomein zo is dat het kan worden opgelost met het kwadraat van de afstand, dan hoef je geen sqrt te nemen, en deze formule zal zo snel mogelijk zijn. Het heeft als bijkomend voordeel dat je de vector . kunt berekenen afstand - x is afstand in oostelijke richting en y is afstand in noordelijke richting. Experimenteer anders met de 3 en kies wat het beste werkt in uw situatie.



  1. Een failback-bewerking uitvoeren voor de installatie van MySQL-replicatie

  2. Pymysql Cursor.fetchall() / Fetchone() Retourneert Geen

  3. Beheer Connection Pooling in multi-tenant web-app met Spring, Hibernate en C3P0

  4. De levensverwachting van de pagina in SQL Server bijhouden