MySQL 8.0: создание многоугольника в виде круга вокруг точки - PullRequest
3 голосов
/ 15 мая 2019

Я хочу создать многоугольник в виде круга с радиусом 10 километров вокруг определенной точки в MySQL (без PHP или других языков программирования). Точка предоставляется в виде географической координаты с долготой-широтой, например, «100,8160803 13,7538929» для города Бангкок, SRID - 4326.

Многоугольник не обязательно должен быть идеально закругленным кругом, шестиугольник или восьмиугольник тоже подойдут.

Пытался использовать ST_Buffer , но это не работает, потому что он не может обрабатывать SRID (кроме SRID 0, конечно).

Я нашел много уроков / запросов о том, как найти точки в определенном радиусе вокруг точки, как здесь: MySQL - Найти точки в радиусе от базы данных

А вот код для такого запроса:

SELECT id, 
( 6371 * 
    ACOS( 
        COS( RADIANS( db_latitude ) ) * 
        COS( RADIANS( $user_latitude ) ) * 
        COS( RADIANS( $user_longitude ) - 
        RADIANS( db_longitude ) ) + 
        SIN( RADIANS( db_latitude ) ) * 
        SIN( RADIANS( $user_latitude) ) 
    ) 
) 
AS distance FROM the_table HAVING distance <= $the_radius ORDER BY distance ASC"

Но я до сих пор не знаю, как создать круговой многоугольник вокруг точки .

1 Ответ

0 голосов
/ 15 мая 2019

Если цель - найти точки на расстоянии определенной точки, вам не нужен круговой многоугольник. Пространственные индексы используют ограничивающие прямоугольники, поэтому вы не получите лучшего индекса, используя лучшее приближение круга.

Вместо того, чтобы пытаться сделать многоугольник круга, сделайте прямоугольный, который содержит круг внутри. Точки прямоугольника для точки (x, y) будут иметь вид x-r y-r, x+r y-r, x+r y+r, x-r y+r

Затем используйте пространственный индекс (например, MBRContains), чтобы получить баллы-кандидаты (быстро), а затем используйте расчет расстояния, чтобы отфильтровать точки, которые находятся внутри ограничительного прямоугольника, но не в круге (медленно, но только для нескольких кандидатов).

Проверьте этот ответ для более подробной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...