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

Вземете полигони близо до широчина, дълга в MySQL

Бавна версия (без пространствени индекси):

SELECT  *
FROM    mytable
WHERE   MBRIntersects(mypolygon, LineString(Point(@X - @distance, @Y - @distance), Point(@X + @distance, @Y + @distance))

За да използвате пространствените индекси, трябва да денормализирате вашата таблица, така че всеки многоъгълен връх да се съхранява в собствен запис.

След това създайте SPATIAL INDEX в полето, което съдържа координатите на върховете и просто издайте тази заявка:

SELECT  DISTINCT polygon_id
FROM    vertices
WHERE   MBRContains(vertex, LineString(Point(@X - @distance, @Y - @distance), Point(@X + @distance, @Y + @distance))

Нещата ще бъдат много по-лесни, ако съхранявате UTM координати във вашата база данни, а не географска ширина и дължина.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Лимит за качване на документи

  2. Предупреждение:mysql_real_escape_string():Достъпът е отказан за потребител ''@'localhost' (използвайки парола:НЕ)

  3. Как да изпълним mysqldump без подкана за парола?

  4. Как да инсталирате MySQL на Ubuntu

  5. java.sql.SQLException:Не е намерен подходящ драйвер за тест на localhost