Mysql
 sql >> база данни >  >> RDS >> Mysql

Заявете стойности на базата данни въз основа на местоположението на потребителя

Има въпрос, който сравнява възможностите на различни пространствени бази данни, ГИС:PostGIS/PostgreSQL срещу MySql срещу SQL Server? , където Postgis излиза доста ясен победител над MySQL.

Независимо дали използвате MySQL или Postgis, ще бъде много по-добре, ако можете, да съхранявате стойностите си за географска ширина и дължина като геометрия/география (точка), като функциите, които могат да се използват за намиране на неща наблизо, ST_Distance , ST_Distance_Sphere и по-неясният <-> оператор , вижте Намерете n най-близките съседи за дадена точка с помощта на PostGIS? (например използване) работят директно върху геометрични/географски колони. Още по-важното е, че можете да добавите пространствен индекс , което тези функции трябва да работят правилно, което ще превъзхожда търсенето в отделно индексирани колони за географска ширина и дължина с голямо поле (това ще зависи от размера на таблицата, но ще нараства с нарастването на размера на таблицата),

В Postgis можете да конвертирате lat и lon в геометрия с:

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);

В този момент ще можете да извършвате много ефективни заявки, за да намерите точки близо до други точки, като използвате някой от примерите в горните връзки.

Можете да правите подобни неща в MySQL, въпреки че тя не поддържа пространствена референтна система, т.е. 4326 по-горе, което означава lat/lon, и му липсва функция ST_MakePoint, така че ще трябва да използвате STGeomFromText и да конкатенирате lat/ дълго заедно, за да направим ТОЧКА. Освен това прави всичко в равнинни координати, както Клаудио и други заявиха, което не е проблем с Postgis.

Извинявам се за дългия и донякъде тангенциален отговор, но след като направих различни миграции между бази данни на големи количества данни (MySQL, SQL Server и Postgres/GIS) и направих много грешки по пътя, надявам се да мога да ви насоча в правилната посока (и добавете малко бъдеща проверка, ако искате да започнете да използвате някаква друга пространствена функционалност, която Postigs има в пика).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да наложа ограничение на външния ключ от несвързани таблици в Mysql?

  2. преобразуване на часова зона в друга часова зона

  3. Създайте заявка, за да получите групата на незавършените обаждания по 2 полета

  4. Има ли механизъм за деактивиране на вмъкване в таблица?

  5. Mysql преброява екземпляри на подниз, след което подрежда по