Zadejte hledaný výraz...
Jakub Glos
Webtrh.cz
Vývoj webových stránek na WordPressu a proklientský přístup pro freelancery
Třídenní infromacemi nabitý prezenční + online kurz v Praze od Webtrhu pouze za 2 871 Kč
Více informací

Jak dopočítávat vzdálenost více GPS bodů mezi sebou?

Martin
verified
rating uzivatele
(62 hodnocení)
13. 2. 2019 00:03:25
Ahoj všem.
Mám web, kde bude uložených cca 300 GPS pozic.
Chci klasicky, když budu mít zvolenou nějakou GPS souřadnici, tak abych si byl schopný zjistit např. 10 nejbližších bodů.
Potřebuji vymyslet, jak s daty pracovat, jak je ukládat... Určitě bude více možností, jak to řešit.
První co mě napadá je předem si spočítat vzdálenost mezi všemi body navzájem a to si uložit do DB. je to sice dost dat, ale u těch 300 bodů to bude ještě použitelné.
Jaké jsou další postupy, jak tohle řešit.
Díky za nápady.
13. 2. 2019 00:03:25
https://webtrh.cz/diskuse/jak-dopocitavat-vzdalenost-vice-gps-bodu-mezi-sebou/#reply1388005
node
verified
rating uzivatele
(5 hodnocení)
13. 2. 2019 00:34:00
Toto je uplne easy. Bud pouzijes priamo db ktora za teba vsetko vyriesi:
MySQL :: MySQL 8.0 Reference Manual :: 11.5.11 Using Spatial Indexes
PostgreSQL: Documentation: 8.1: Geometric Types
https://mariadb.com/kb/en/library/geographic-geometric-features/
alebo si vezmes svoj bod, vypocitas si okolo neho "bounding box" ktory ti da minimalnu a maximalnu geograficku sirku a vysku(x a y) a potom spravis query kde vyhladas body ktorych koordinaty lezia v tomto boxe(select point from points where long between minLong and maxLong and lat between minLat and maxLat. To ti vrati body ktore lezia v tomto boxe.
Problem mas potom ale s rohmy kde je vzdialenost vecsia nez v kruhu ktory konci na hrane tohto boxu, takze potom musis vysledky prefiltrovat cez "point in polygon" algoritmus a je to.
300 bodov je totalne nic, to ani nemusis davat do db, staci ti rtree.
PS: ono tiez nie je na zahodenie ukladat si body bud ako quadkey alebo ako geohash a potom nemusis robit tu range query ale len podla prefixu kachlicky ktora obsahuje pozadovany bouding box. Eventuelne mozes mat viacero indexov/stlpcov pre N urovni takze namiesto LIKE abc% robis priamy select where qk4 = abcd a pod.
13. 2. 2019 00:34:00
https://webtrh.cz/diskuse/jak-dopocitavat-vzdalenost-vice-gps-bodu-mezi-sebou/#reply1388004
Martin
verified
rating uzivatele
(62 hodnocení)
13. 2. 2019 01:04:52
Potřeboval bych ten výstup dostávat i se vzdáleností od vybraného bodu, tedy něco ve stylu,
- bod 2 : 3 km daleko
- bod 3 : 5 km daleko
- bod 4 : 5,5 km daleko
To bych jako musel ten box postupně zvětšovat třeba o max. 0,5 km, abych se dostal k tomu co potřebuju? To mi přijde dost HW náročné u větší plochy. Je to tak?
13. 2. 2019 01:04:52
https://webtrh.cz/diskuse/jak-dopocitavat-vzdalenost-vice-gps-bodu-mezi-sebou/#reply1388003
TomasX
verified
rating uzivatele
(4 hodnocení)
13. 2. 2019 09:25:02
300 bodů není tolik, podobnou úlohu počítáme pro miliony pozic v skoro reálném čase, samozřejmě s trochu rozsáhlejším sql a inkrementálními počty.
Tady jsem ti sepsal sql (nezkoušeno, mělo by v mariadb/postresql/oracle) fungovat, vzorec na výpočet vzdálenosti je patrný, případně si to dooprav a doodzkoušeji. Jedná se sice o naivní implementaci, ale v rámci naší ČR funguje s dobrou přesností, pro rozšíření na EU a svět stačí lehce poupravit, nechtěl jsem to příliš zesložiťovat.
13. 2. 2019 09:25:02
https://webtrh.cz/diskuse/jak-dopocitavat-vzdalenost-vice-gps-bodu-mezi-sebou/#reply1388002
TomasX
verified
rating uzivatele
(4 hodnocení)
13. 2. 2019 09:27:05
bounding boxy nejsou potřeba na tenhle počet lokací, dokonce nevychází ani o moc lépe o několik řádů více lokací.
13. 2. 2019 09:27:05
https://webtrh.cz/diskuse/jak-dopocitavat-vzdalenost-vice-gps-bodu-mezi-sebou/#reply1388001
Martin
verified
rating uzivatele
(62 hodnocení)
13. 2. 2019 09:50:55
Díky Tomáši Kouknu na to. Je to jenom ČR a přesnost není potřeba, takže nějaké zakřivení Země není třeba brát v potaz.
13. 2. 2019 09:50:55
https://webtrh.cz/diskuse/jak-dopocitavat-vzdalenost-vice-gps-bodu-mezi-sebou/#reply1388000
Pro odpověď se přihlašte.
Přihlásit