Я хотел бы провести точечный полигональный тест с использованием пространственного 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'
- Есть ли способ сделать это, но без перекрестного соединения?
- У меня также есть координаты точки в качестве атрибутов. Есть ли функция, которой не нужны точки, а только координаты? Я нашел только SDO_POINTINPOLYGON, но эта функция, кажется, не работает для моего типа данных (координаты должны быть в SYS_REFCURSOR)?