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

Подключение таблиц из ORACLE без геодезии

Добавлено: 17 апр 2017, 10:20
vlad_s
Добрый день, уважаемые знатоки!
В QGIS подключаю таблицу ORACLE без геодезии и пробую загрузить ее, как векторный слой. Таблица загружается, но, не в виде векторного слоя, а как таблица атрибутивных данных. В таблице есть поля, в которых записаны X, Y объектов. Если сохранить такую таблицу в виде CSV-файла и потом загрузить его, то эти поля видны и их можно использовать. Кроме этого, проходит и такой вариант с CSV-файлом: создаю в нем еще поле Geodezy, в котором пробовал разные варианты:
- POINT(484921.445346225 4957044.50194082)
- LINESTRING( 484921.445346225 4957044.50194082, 484888.76409625 4957007.28315911)
- POLYGON ((484975.9 4957049.32,484976.6 4957049.32,484976.6 4957050.14,484975.9 4957050.14,484975.9 4957049.32))
В случае использования таких вариантов для CSV-файла поле Geodezy определяется автоматически, а вот при чтении таблицы ORACLE ни один из приведенных вариантов не "катит". Либо для ORACLE надо как-то по-другому создавать поле геодезии, либо нужны какие-то другие "приседания".
Подскажите, плиз.

Re: Подключение таблиц из ORACLE без геодезии

Добавлено: 17 апр 2017, 10:58
trir
геометрия должна быть - wkb

Re: Подключение таблиц из ORACLE без геодезии

Добавлено: 17 апр 2017, 14:38
freeExec
А если с помощью калькулятора полей создать столбец с геометрией, слой станет векторным?

Re: Подключение таблиц из ORACLE без геодезии

Добавлено: 17 апр 2017, 16:44
vlad_s
Пробую создать поле с геометрией через калькулятор полей. Предпросмотр показывает, что X,Y определены правильно, а потом при "Обновить все" выдается ошибка: "Ошибка обработки. Не найден корневой элемент."
Либо я что-то делаю не так, либо геометрию невозможно увидеть как поле в таблице атрибутов?

Re: Подключение таблиц из ORACLE без геодезии

Добавлено: 17 апр 2017, 16:55
freeExec
Может не из всех полей можно создать геометрию, ну где-нибудь пусто или запятая не такая. Попробуйте оставить только 3 строки, чтобы на верняка глазами было видно.

Re: Подключение таблиц из ORACLE без геодезии

Добавлено: 17 апр 2017, 17:43
vlad_s
Поле с геометрией создалось. Наверное, теперь эту таблицу можно как-то трансформировать в векторный слой. Хотелось бы оставить присоединенной оракловую таблицу, и вот зачем. В исходном виде в ней хранится много данных о найденных дефектах на трубе и пока дефект не отремонтирован, он на карте показывается одним стилем. Как только его отремонтируют, он показывается другим стилем. Все это я уже сделал с использованием csv-формата, хотелось бы показывать такие слои непосредственно из оракловой таблицы. За наводку про калькулятор полей - Спасибо.

Re: Подключение таблиц из ORACLE без геодезии

Добавлено: 17 апр 2017, 18:37
trir
надо просто к таблице в Oracle добавить поле с wkb геометрией

Re: Подключение таблиц из ORACLE без геодезии

Добавлено: 18 апр 2017, 11:28
vlad_s
нашел следующее:
ALTER TABLE my_geo_test ADD COLUMN geo_data BLOB NOT NULL;
INSERT INTO my_geo_test (...., geo_data) VALUES (...., GeomFromText('POINT(1 1)'));
INSERT INTO my_geo_test (...., geo_data) VALUES (...., GeomFromWKB(X'0x0101000000000000000000F03F000000000000F03F'));

первый вариант более понятен, т.к. X, Y берутся из имеющихся полей из таблицы ORACLE (в приведенном примере - my_geo_test). а как сформировать поле geo_data для типа wkb, о которой уже дважды мне подсказывают, не знаю. Подскажите, кто знает, примером или ссылкой.

Re: Подключение таблиц из ORACLE без геодезии

Добавлено: 18 апр 2017, 11:47
trir

Re: Подключение таблиц из ORACLE без геодезии

Добавлено: 20 апр 2017, 11:50
vlad_s
Сделал контрольный пример так:
CREATE TABLE RT_OBJECTS (
ID NUMBER(12) NOT NULL
,STNAME VARCHAR2(255) NULL
,GEOM BLOB
,SRID NUMBER NULL
,CONSTRAINT RT_OBJECTS_PK PRIMARY KEY (ID)
);
INSERT INTO RT_OBJECTS (ID,STNAME,GEOM,SRID) VALUES (1,'Feature 1',SDO_UTIL.TO_WKBGEOMETRY(SDO_GEOMETRY(2001,8307,SDO_POINT_TYPE(484950.74,4957057.70,NULL),null,null)),8307);
INSERT INTO RT_OBJECTS (ID,STNAME,GEOM,SRID) VALUES (2,'Feature 1',SDO_UTIL.TO_WKBGEOMETRY(SDO_GEOMETRY(2001,8307,SDO_POINT_TYPE(475942.47,4934605.48,NULL),NULL,NULL)),8307);
INSERT INTO RT_OBJECTS (ID,STNAME,GEOM,SRID) VALUES (3,'Feature 1',SDO_UTIL.TO_WKBGEOMETRY(SDO_GEOMETRY(2001,8307,SDO_POINT_TYPE(466321.39,4911230.56,NULL),NULL,NULL)),8307);
Посмотрел через SQL+, 3 записи, а когда подключаю слой ORACLE Spatial, то поле с геометрией не видно. Может быть из-за того, что поле с геометрией (GEOM) объявлено BLOB? Если даю ему тип SDO_GEOMETRY, тогда записи не формируются. Где может быть "засада"? Подскажите, плиз, вчера пол-дня ушло, пока по разным ссылкам смотрел, может для знающего спеца в этом вопросе делов на 5 мин, а я еще только начал осваивать qgis.

Re: Подключение таблиц из ORACLE без геодезии

Добавлено: 20 апр 2017, 11:55
trir
попробуй загрузить данные в Oracle из QGIS, и посмотри как они запишутся

Re: Подключение таблиц из ORACLE без геодезии

Добавлено: 20 апр 2017, 12:34
vlad_s
В Oracle-таблицу записи пишутся sql-запросом, я привел привел текст создания таблицы, и текст ее заполнения данными. Скорее всего, собака зарыта в заполнении поля GEOM, возможно, в фунции SDO_UTIL.TO_WKBGEOMETRY неправильно указал параметры. Потому что, и геометрия не определена и еще SRID тоже пустой, в каком-то примере взял часть запроса, там было указано 8307, а что это означает, не знаю, наверняка есть где-нибудь таблица, в которой расшифровываются эти значения.

Re: Подключение таблиц из ORACLE без геодезии

Добавлено: 20 апр 2017, 12:39
trir
8307
попробуй использовать родную геометрию

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

SDO_GEOMETRY(2001,4326,SDO_POINT_TYPE(51.702814,32.624736,NULL),NULL,NULL)

Re: Подключение таблиц из ORACLE без геодезии

Добавлено: 20 апр 2017, 15:08
vlad_s
Не помогло: перезагрузил данные, подключаю таблицу, в результате - поле геометрии, SRID пустые.
Может быть надо в какую-нибудь таблицу отдельно прописывать поле геометрии?

Re: Подключение таблиц из ORACLE без геодезии

Добавлено: 20 апр 2017, 15:14
trir
попробуй записать данные в oracle из QGIS/GDAL
SRID может быть пустым, это не кретично