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

Výpočet, které body (zeměpisná šířka, délka) jsou v určité vzdálenosti v mysql?

Pokud hledáte aproximační algoritmus, doporučuji hledat algoritmus k-means nebo hierarchický shluk, zejména křivku monster nebo křivku vyplňování prostoru. Nejprve můžete vypočítat minimální kostru grafu a poté odstranit nejdelší a nejdražší hrany. Potom strom vytvoří mnoho malých stromů a můžete použít k-means k výpočtu skupiny bodů, tj. shluků.

"Jednolinkový algoritmus k-clusteringu... je přesně Kruskalův algoritmus... ekvivalentní nalezení MST a vymazání k-1 nejdražších hran." Viz například zde:https://stats.stackexchange.com/ otázky/1475/vizualizační-software-pro-shlukování .

Dobrým příkladem křivky monster je hilbertova křivka. Základní formou této křivky je tvar písmene U a zkopírováním mnoha z nich a jejich otáčením křivka vyplňuje euklidovský prostor. Překvapivě šedý kód může pomoci zjistit orientaci tohoto tvaru U. Můžete vyhledat Nickovu hilbertovu křivku kvadrantového indexu článek na blogu o dalších podrobnostech . Místo výpočtu indexu křivky můžete sestavit quadkey jako v bing mapách. quadkey je jedinečný pro každou souřadnici a lze jej použít s normálními operacemi s řetězci. Každá pozice v klíči je součástí křivky tvaru U, a proto můžete tuto oblast bodů vybrat z výběru částečně zleva doprava z quadkey.

Na tomto obrázku můžete vidět, jak je zelený polygon nalezen pomocí hilbertovy křivky:

Moje php třídy najdete zde:http://www.phpclasses.org/package/6202-PHP-Generate-points-of-an-Hilbert-curve.html




  1. MySQL InnoDB neuvolňuje místo na disku po smazání datových řádků z tabulky

  2. Chyba 1064 v CREATE TABLE ... TYPE=MYISAM

  3. Jak číst soubor a přidat jeho obsah do databáze?

  4. Rozpoznávání vzoru řádků v SQL