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

Dotaz na hodnoty databáze na základě umístění uživatele

Existuje otázka, která porovnává možnosti různých prostorových databází, GIS:PostGIS/PostgreSQL vs. MySql vs. SQL Server? , kde Postgis zcela jasně vítězí nad MySQL.

Ať už používáte MySQL nebo Postgis, bylo by pro vás mnohem lepší, pokud můžete, uložit své hodnoty zeměpisné šířky a délky jako geometrii/geografii (Point), jako funkce, které lze použít k vyhledání věcí v okolí, ST_Distance , ST_Distance_Sphere a nejasnější operátor <-> , viz Najít n nejbližší sousedy pro daný bod pomocí PostGIS? (například použití) pracovat přímo na sloupcích geometrie/geografie. Ještě důležitější je, že můžete přidat prostorový index , které tyto funkce potřebují, aby správně fungovaly, což výrazně překoná vyhledávání v odděleně indexovaných sloupcích zeměpisné šířky a délky (to bude záviset na velikosti tabulky, ale bude se zvětšovat s rostoucí velikostí tabulky),

V Postgis můžete převést zeměpisnou šířku a délku na geometrii pomocí:

alter table mytable add column geom (Geometry, 4326);
update mytable set geom = ST_SetSRID(ST_MakePoint(lon, lat), 4326)
create index ix_spatial_mytable_geom on mytable using gist(geom);

V tomto okamžiku budete moci velmi efektivně vyhledávat body poblíž jiných bodů pomocí některého z příkladů ve výše uvedených odkazech.

Podobné věci můžete dělat v MySQL, i když nepodporuje prostorový referenční systém, tj. 4326 výše, což znamená lat/lon, a postrádá funkci ST_MakePoint, takže budete muset použít STGEomFromText a zřetězit lat/ lon společně udělat BOD. Vše také dělá v rovinných souřadnicích, jak uvedl Claudio a další, což u Postgis není problém.

Omlouvám se za dlouhou a poněkud okrajovou odpověď, ale protože jsem provedl různé migrace mezi databázemi na velkém množství dat (MySQL, SQL Server a Postgres/GIS) a na cestě jsem udělal spoustu chyb, doufám, že vás mohu vyvést z omylu. správným směrem (a přidejte trochu budoucího nátisku, pokud chcete začít používat nějakou další prostorovou funkcionalitu, kterou má Postigs v pravém slova smyslu).



  1. Jak nakonfigurovat AppArmor pro systémy založené na MySQL (MySQL/MariaDB Replication + Galera)

  2. Pořadí provádění SQL dotazu

  3. Jak mohu vrátit číselná data boxplotu všech výsledků pomocí 1 dotazu mySQL?

  4. Nastavení atributů připojení ODBC bez nutnosti psát kód