Страница 1 из 1

Oracle Spatial, вычисления вдоль длинного линейного

Добавлено: 06 май 2015, 09:31
TimV
Подскажите, пожалуйста как увеличить скорость вычислений вдоль длинного линейного объекта.
Грубо говоря есть дорога 1000 км и нужно найти населенные пункты на заданном расстоянии от неё.
Сейчас строю буфер вокруг дорого(sdo_buffer) и с помощью SDO_WITHIN_DISTANCE ищу НП на нулевой дистанции.
Работает очень медленно.

Re: Oracle Spatial, вычисления вдоль длинного линейного

Добавлено: 06 май 2015, 09:52
trir
построить граф

Re: Oracle Spatial, вычисления вдоль длинного линейного

Добавлено: 06 май 2015, 09:57
TimV
Заменил SDO_WITHIN_DISTANCE на SDO_ANYINTERACT, получилось гораздо шустрее.
По Oracle Spatial мало инфы на русском. Есть на английском одна хорошая, сижу вкуриваю её.

Re: Oracle Spatial, вычисления вдоль длинного линейного

Добавлено: 06 май 2015, 10:06
SergeyRyzhkov
Естественно шустрее :) , логика то операторов совершенно разная и как следствие математика у SDO_WITHIN_DISTANCE намного сложнее.

Еще в таких случаях желательно приводить запрос целиком, писать про наличие индексов и т.д.

http://docs.oracle.com/cd/B28359_01/app ... #SPATL1023

Re: Oracle Spatial, вычисления вдоль длинного линейного

Добавлено: 08 май 2015, 11:07
TimV
Подскажите ещё, пожалуйста.
Какую функцию(процедуру) использовать чтобы найти ближайший площадной объект от точки.
SDO_NN, как я понял, ищет ближайшую точку на площадных объектах.

Re: Oracle Spatial, вычисления вдоль длинного линейного

Добавлено: 08 май 2015, 12:18
SergeyRyzhkov
Не совсем понял :(

SDO_NN находит ближайшие объекты к заданной,
Например,находим все объекты ближайшие к точке (создаем сами геометрию sdo_geometry(...)

Код: Выделить всё

SDO_NN(c.shape,  sdo_geometry(2001, NULL, sdo_point_type(10,7,NULL), NULL,  NULL),
      ‘sdo_num_res=2′, 1)
Далее делаем запрос, в котором выводим расстояния от точки до объектов

Код: Выделить всё

SELECT   c.mkt_id, c.name, SDO_NN_DISTANCE(1) dist
   FROM cola_markets c 
   WHERE SDO_NN(c.shape,  sdo_geometry(2001, NULL,
      sdo_point_type(10,7,NULL), NULL,  NULL),
      ‘sdo_num_res=2′, 1) = ‘TRUE’ ORDER BY dist;
Свои запросы не стал приводить - они слишком сложные, брал пример с:
Источник: http://www.oraclegis.com/blog/?p=2622

Еще небольшой, но важный тюнинг можно посмотреть
https://blogs.oracle.com/oraclespatial/ ... ing_sdo_nn

Re: Oracle Spatial, вычисления вдоль длинного линейного

Добавлено: 08 май 2015, 12:23
SergeyRyzhkov
Еще для ораклистов, советую стадибук (по спешл) в аттаче.
Старенькая, но толковая.

Re: Oracle Spatial, вычисления вдоль длинного линейного

Добавлено: 08 май 2015, 12:33
TimV
Благодарю за разъяснения и за бук!