sql >> Databáze >  >> RDS >> Mysql

Vzorce pro výpočet zeměpisné blízkosti

Kosinový zákon a Haversinův vzorec poskytnou stejné výsledky za předpokladu stroje s nekonečnou přesností. Haversinův vzorec je odolnější vůči chybám s pohyblivou řádovou čárkou. Dnešní stroje však mají dvojnásobnou přesnost řádově 15 platných číslic a zákon kosinus vám může fungovat dobře. Oba tyto vzorce předpokládají sférickou Zemi, zatímco Vicentyho iterační řešení (nejpřesnější) předpokládá elipsoidní Zemi (ve skutečnosti země ani není elipsoid - je to geoid). Některé odkazy:http://www.movable-type. co.uk/scripts/gis-faq-5.1.html

Je to lepší:všimněte si, že zeměpisná šířka, která se má použít v zákoně kosinus, stejně jako Haversine, je geocentrická zeměpisná šířka, která se liší od geodetické zeměpisné šířky. U koule jsou tyto dvě stejné.

Který z nich je nejrychlejší?

V pořadí od nejrychlejšího po nejpomalejší jsou:zákon kosinů (5 trig. volání) -> haversine (zahrnuje sqrt) -> Vicenty (musí to vyřešit iterativně ve smyčce for)

Který z nich je nejpřesnější?

Vicenty.

Který z nich je nejlepší, když vezmeme v úvahu rychlost i přesnost?

Pokud je vaše problémová doména taková, že pro vzdálenosti, které se pokoušíte vypočítat, lze Zemi považovat za plochou, pak můžete vypracovat (nebudu uvádět podrobnosti) vzorec ve tvaru x =kx * rozdíl v zeměpisné délce , y =ky * rozdíl v zeměpisné šířce. Potom vzdálenost =sqrt(dxdx + dy dy). Pokud je vaše problémová doména taková, že ji lze vyřešit druhou mocninou vzdálenosti, pak nebudete muset brát sqrt a tento vzorec bude tak rychlý, jak jen můžete získat. Další výhodou je, že můžete vypočítat vektor vzdálenost - x je vzdálenost ve východním směru a y je vzdálenost ve směru na sever. V opačném případě experimentujte se 3 a vyberte, co ve vaší situaci funguje nejlépe.



  1. Spustit spouštěč pouze při aktualizaci určitých sloupců (SQL Server)

  2. Jak bezpečně ukládat hesla do databáze?

  3. Jak vypočítat průměrný prodej za týden v MySQL

  4. SSMS nyní přichází s Azure Data Studio