Точка-в-многоугольнике в пространственном sql без перекрестного соединения (оракул с sde)?

Я хотел бы провести точечный полигональный тест с использованием пространственного SQL (СУБД Oracle с SDE для пространственных таблиц). У меня есть пространственное материализованное представление, содержащее точки, и я хотел бы добавить идентификатор многоугольника (из другой таблицы), в котором находится точка, в это представление.

Я нашел SDO_INSIDE(point, polygon) и SDO_RELATE(point, polygon, ‘INSIDE’), которые делают то же самое. Оба работают, но перекрестное соединение кажется необходимым, что очень дорого с точки зрения времени расчета.

Вот пример кода того, как я тестирую SDO_INSIDE, просто используя материализованное представление как оно есть:

SELECT  MAT_VIEW.POINT_ID
       ,MAT_VIEW.SHAPE
       ,MAT_VIEW.POINT_COORD_E
       ,MAT_VIEW.POINT_COORD_N
       ,POLYGON_DATA.POLYGON_ID
FROM    MAT_VIEW
CROSS JOIN POLYGON_DATA
WHERE SDO_INSIDE(SDO_GEOMETRY(SDE.ST_ASTEXT(MAT_VIEW.SHAPE)),SDO_GEOMETRY(SDE.ST_ASTEXT(POLYGON_DATA.SHAPE))) = 'TRUE'
  1. Есть ли способ сделать это, но без перекрестного соединения?
  2. У меня также есть координаты точки в качестве атрибутов. Есть ли функция, которой не нужны точки, а только координаты? Я нашел только SDO_POINTINPOLYGON, но эта функция, кажется, не работает для моего типа данных (координаты должны быть в SYS_REFCURSOR)?

person faebel    schedule 04.12.2019    source источник
comment
Вы видели stackoverflow.com/questions/4601202/? (У меня нет опыта работы с пространственными данными, но я подумал, что ваша проблема интересна, и посмотрел, что доступно здесь, 150+ QA для пространственного оракула). Удачи.   -  person shellter    schedule 04.12.2019
comment
Я на самом деле не пришел с этим вопросом. Использование внутреннего соединения вместо перекрестного является хорошей идеей, однако оно не ускоряет выполнение запроса. И SDO_CONTAINS() является полной противоположностью SDO_INSIDE(), поэтому также нет выигрыша во времени. Но все равно спасибо, я ценю вашу помощь @shellter.   -  person faebel    schedule 05.12.2019