Определите, находятся ли точки в таблице B внутри многоугольника в таблице A, используя Oracle Spatial (поля геометрии разные)


У меня проблема! Я новичок в Oracle Spatial, но какое-то время работаю с pl / sql. Дело в том, что мне нужно идентифицировать точки (x, y) из атрибута геометрии из таблицы B, в атрибуте геометрии (многоугольники) из таблицы A или внутри него. Проблема: обе таблицы имеют разные данные внутри поля геометрии.
< br /> Подробнее:
Получение DDL из таблиц:

---------------------
--  DDL for Table A
---------------------
CREATE A 
(   
GEOMETRY MDSYS.SDO_GEOMETRY,
...
ENTITYID NUMBER,  
MANZENT VARCHAR2(255 BYTE), 
...
) 

CREATE INDEX A_IDX ON A (GEOMETRY)
INDEXTYPE IS MDSYS.SPATIAL_INDEX;

--------------------------------------------------------
--  DDL for Table B
--------------------------------------------------------
CREATE TABLE B 
(   ID_GIS NUMBER(8,0), 
GEOMETRY MDSYS.SDO_GEOMETRY,
...
) 

CREATE INDEX B_IDX ON B (GEOMETRY) 
INDEXTYPE IS MDSYS.SPATIAL_INDEX;

При получении данных из таблицы A формат геометрии атрибутов следующий:

MDSYS.SDO_GEOMETRY(3002, NULL, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1, 2, 1), MDSYS.SDO_ORDINATE_ARRAY(351059.668003312, 6283365.86125775, 0, 350989.900040253, 6283352.35005758, 0, 350945.450026879, 6283344.01994977, 0, 350942.789988843, 6283344.05999729, 0, 350941.519995767, 6283344.33999171, 0, 350939.949994132, 6283345.17999723, 0, 350938.640010838, 6283346.53002549, 0, 350937.800033809, 6283348.69002867, 0, 350932.586269235, 6283379.08172448, 0, 351052.837823787, 6283402.34153528, 0, 351059.668003312, 6283365.86125775, 0, 351059.668003312, 6283365.86125775, 0))

При получении данных из таблицы A формат геометрии атрибутов следующий:

MDSYS.SDO_GEOMETRY(2001, 32719, MDSYS.SDO_POINT_TYPE(352761.049, 6287740.01, NULL), NULL, NULL)

Та же структура, но; очевидно, что данные в обоих полях разные! Я имею в виду, что тип данных размещен!

Когда я запускаю сценарий для определения отношения, он выдает ошибку:

SELECT A.entityid, B.manzent
  FROM A, B
  WHERE SDO_RELATE(A.geometry, B.geometry,
               'mask=COVERS') = 'TRUE';

Ошибка:

ORA-13295: геометрические объекты находятся в разных системах координат
ORA-06512: в «MDSYS.SDO_3GL», строка 4
ORA-06512: в «MDSYS.MD2», строка 769
ORA -06512: в «MDSYS.SDO_3GL», строка 155
13295. 00000 - «Геометрические объекты находятся в разных системах координат»
* Причина: была вызвана функция Oracle Spatial с двумя геометриями, имеющими
разные
SRID.
* Действие: преобразовать геометрические объекты в одну систему координат и вызвать пространственную функцию.

На самом деле это так («геометрические объекты находятся в разных системах координат»). Приведен пример. Я искал, как преобразовать данные из таблицы B ...
Я сделал это, я получил точки из таблицы B, но не смог найти, как определить, находятся ли они внутри многоугольника в таблице A.

Я пробовал использовать SDO_CONTAINS и SDO_RELATE, JOIN и т. Д.

Я буду искренне благодарен, если вы сможете мне помочь!


person Sergio P. H.    schedule 26.07.2018    source источник


Ответы (1)


Похоже, разные системы координат для двух таблиц.

Вы можете проверить это в своей таблице метаданных.

Выберите SDO_SRID из MDSYS.SDO_GEOM_METADATA_TABLE, ГДЕ SDO_TABLE_NAME = 'TABLE_A'; Выберите SDO_SRID из MDSYS.SDO_GEOM_METADATA_TABLE, ГДЕ SDO_TABLE_NAME = 'TABLE_B';

Обе таблицы должны иметь одинаковый SRID для операций SDO.

person Anoop J    schedule 27.07.2018
comment
Схема не распознала SDO_GEOM_METADATA_TABLE. Я нашел USER_SDO_GEOM_METADATA. Информация из обеих таблиц (A и B) различается. --- ТАБЛИЦА: КОЛОНКА: ИНФОРМАЦИЯ О ГЕОМЕТРИИ: MDSYS.SDO_DIM_ARRAY (MDSYS.SDO_DIM_ELEMENT ('X', -3701691.09411887, 590488.591781422, 5E-10), MDSYS.SDO_DIM_ELEMENT ('Y') MDSYS.SDO_DIM_ELEMENT ('Z', 0, 0, 5E-10)) SRID: --- ТАБЛИЦА: B COLUMN: GEOMETRY INFO: MDSYS.SDO_DIM_ARRAY (MDSYS.SDO_DIM_ELEMENT ('X', 88149, 590052, 1), MDSYS .SDO_DIM_ELEMENT ('Y', 3910959, 7988206, 1)) SRID: 32719. - person Sergio P. H.; 27.07.2018
comment
Да, затем обновите SRID таблицы A, как в таблице B: '32719' - person Anoop J; 30.07.2018