|
|
|
Помогите разобраться с Spatial Extensions в MySQL
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Есть необходимость высчитывать расстояние между географическими координатами. Когда-то уже делал подобное с помощью DECIMAL полей (lat, lng), и писал сложную функцию с косинусами, синусами и т .д. Тогда мне посоветовали обратить внимание на Spatial Extensions, но тогда не было ни времени ни желания с ним разбираться. Теперь когда это нужно делать вновь, решил написать это с помощью Spatial Extensions. Итак, создаю тип POINT, в котором будет храниться географическая координата. Этому типу поля надо давать индекс? Что делать дальше, какие есть встроенные функции для того чтобы высчитывать расстояние между точками? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2013, 18:16:37 |
|
||
|
Помогите разобраться с Spatial Extensions в MySQL
|
|||
|---|---|---|---|
|
#18+
Не так все просто на самом деле Определение расстояния между географическими точками в MySQL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2013, 18:40:01 |
|
||
|
Помогите разобраться с Spatial Extensions в MySQL
|
|||
|---|---|---|---|
|
#18+
Хм., я думал уже готовые функции есть. То есть, я так понял, нет смысла заморачиваться с Spatial Extensions. Ибо по приведенной Вами ссылке вычислений даже больше, нежели то как я делал раннее ( Как работать с значением из другой строки, как с столбцом их текущей? ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2013, 19:07:29 |
|
||
|
Помогите разобраться с Spatial Extensions в MySQL
|
|||
|---|---|---|---|
|
#18+
в Mysql Spatial Ext. нужен для поиска с использованием пространственного индекса, например быстро отобрать геометрии в заданном квадрате, поскольку это стандарт, то так же для простоты отображения в сторонних программах А расстояние считать еще сложнее чем по приведенной выше ссылке, здесь формула подсчета расстояния с учетом того что Земля это шар, на самом деле это не так. Надо смотреть для чего это вам надо, на перспективу развития думаю лучше использовать Spatial Ext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2013, 19:26:57 |
|
||
|
Помогите разобраться с Spatial Extensions в MySQL
|
|||
|---|---|---|---|
|
#18+
bochkov , мне нужно в БД хранить множество объектов, в которых есть широта/долгота. Потом необходимо выбрать все строки, которые находятся на расстоянии 20 км./50 км./100км... от указанной точки (широты/долготы). В том то и дело что в Mysql Spatial Ext. все что есть, это поиск в многоугольнике, и прочие геометрические операции, но никак не то что мне нужно. То есть получается, что все что я могу взять от Spatial Extension - это только поле типа POINT (вместо двух полей lat, lng DECIMAL/FLOAT) ? А потом производить все те же сложные тригонометрические операции? bochkovздесь формула подсчета расстояния с учетом того что Земля это шар, на самом деле это не так знаю, но что поделать? Тем более мне дико далекие расстояния (на которых начинает отображаться искаженность) - не нужна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2013, 20:01:04 |
|
||
|
Помогите разобраться с Spatial Extensions в MySQL
|
|||
|---|---|---|---|
|
#18+
Scarzie bochkov , мне нужно в БД хранить множество объектов, в которых есть широта/долгота. Потом необходимо выбрать все строки, которые находятся на расстоянии 20 км./50 км./100км... от указанной точки (широты/долготы). возьмем к примеру 20 км в where помещаем все ваши тригонометрические функции и еще квадрат размером 40 км с центром в искомой точке, вот и заработает spatial индекс ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2013, 20:22:13 |
|
||
|
Помогите разобраться с Spatial Extensions в MySQL
|
|||
|---|---|---|---|
|
#18+
bochkov , скажите правильно и я понимаю. Есть точка (координата). Мне нужно найти от нее ближайшие объекты на расстоянии 20 км. 1) Делаю прямоугольник - 20 км вверх, 20 км вниз, 20 вправо и 20 влево. Т.е. многоугольник 40 на 40 км., где по центру находится начальная координата. 2) С помощью функций Spatial Extensions я выбираю все точки, которые попадают в этот прямоугольник. Если первых два пункта я правильно понял, то зачем мы это делаем - чтобы не создавать большую нагрузку на mysql тригонометрическими вычислениями для каждой строки? 3) Дальше запускаем все те же тригонометрические расчеты (только уже для отобранных строк), чтобы знать какой объект на каком расстоянии находится? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2013, 21:29:29 |
|
||
|
Помогите разобраться с Spatial Extensions в MySQL
|
|||
|---|---|---|---|
|
#18+
Scarzie bochkov , скажите правильно и я понимаю. Есть точка (координата). Мне нужно найти от нее ближайшие объекты на расстоянии 20 км. 1) Делаю прямоугольник - 20 км вверх, 20 км вниз, 20 вправо и 20 влево. Т.е. многоугольник 40 на 40 км., где по центру находится начальная координата. 2) С помощью функций Spatial Extensions я выбираю все точки, которые попадают в этот прямоугольник. Если первых два пункта я правильно понял, то зачем мы это делаем - чтобы не создавать большую нагрузку на mysql тригонометрическими вычислениями для каждой строки? 3) Дальше запускаем все те же тригонометрические расчеты (только уже для отобранных строк), чтобы знать какой объект на каком расстоянии находится? Спасибо. Все правильно, только делать надо все в одном запросе, mysql сам разберется что в первую очередь вычислять, ссылку дал внимательно почитайте что в коментах пишут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2013, 21:44:41 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38390134&tid=1836096]: |
0ms |
get settings: |
5ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
48ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 196ms |
| total: | 323ms |

| 0 / 0 |
