Подключение таблиц из ORACLE без геодезии
-
- Интересующийся
- Сообщения: 28
- Зарегистрирован: 09 мар 2017, 11:50
- Репутация: 0
Подключение таблиц из ORACLE без геодезии
Добрый день, уважаемые знатоки!
В 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 надо как-то по-другому создавать поле геодезии, либо нужны какие-то другие "приседания".
Подскажите, плиз.
В 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 надо как-то по-другому создавать поле геодезии, либо нужны какие-то другие "приседания".
Подскажите, плиз.
-
- Гуру
- Сообщения: 5355
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1021
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: Подключение таблиц из ORACLE без геодезии
геометрия должна быть - wkb
-
- Гуру
- Сообщения: 1195
- Зарегистрирован: 23 апр 2011, 10:32
- Репутация: 205
- Откуда: Ульяновск
Re: Подключение таблиц из ORACLE без геодезии
А если с помощью калькулятора полей создать столбец с геометрией, слой станет векторным?
-
- Интересующийся
- Сообщения: 28
- Зарегистрирован: 09 мар 2017, 11:50
- Репутация: 0
Re: Подключение таблиц из ORACLE без геодезии
Пробую создать поле с геометрией через калькулятор полей. Предпросмотр показывает, что X,Y определены правильно, а потом при "Обновить все" выдается ошибка: "Ошибка обработки. Не найден корневой элемент."
Либо я что-то делаю не так, либо геометрию невозможно увидеть как поле в таблице атрибутов?
Либо я что-то делаю не так, либо геометрию невозможно увидеть как поле в таблице атрибутов?
- Вложения
-
- 2017-04-17_162537.png (103.97 КБ) 8532 просмотра
-
- Гуру
- Сообщения: 1195
- Зарегистрирован: 23 апр 2011, 10:32
- Репутация: 205
- Откуда: Ульяновск
Re: Подключение таблиц из ORACLE без геодезии
Может не из всех полей можно создать геометрию, ну где-нибудь пусто или запятая не такая. Попробуйте оставить только 3 строки, чтобы на верняка глазами было видно.
-
- Интересующийся
- Сообщения: 28
- Зарегистрирован: 09 мар 2017, 11:50
- Репутация: 0
Re: Подключение таблиц из ORACLE без геодезии
Поле с геометрией создалось. Наверное, теперь эту таблицу можно как-то трансформировать в векторный слой. Хотелось бы оставить присоединенной оракловую таблицу, и вот зачем. В исходном виде в ней хранится много данных о найденных дефектах на трубе и пока дефект не отремонтирован, он на карте показывается одним стилем. Как только его отремонтируют, он показывается другим стилем. Все это я уже сделал с использованием csv-формата, хотелось бы показывать такие слои непосредственно из оракловой таблицы. За наводку про калькулятор полей - Спасибо.
- Вложения
-
- 2017-04-17_173132.png (93.93 КБ) 8509 просмотров
-
- Гуру
- Сообщения: 5355
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1021
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: Подключение таблиц из ORACLE без геодезии
надо просто к таблице в Oracle добавить поле с wkb геометрией
-
- Интересующийся
- Сообщения: 28
- Зарегистрирован: 09 мар 2017, 11:50
- Репутация: 0
Re: Подключение таблиц из ORACLE без геодезии
нашел следующее:
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, о которой уже дважды мне подсказывают, не знаю. Подскажите, кто знает, примером или ссылкой.
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, о которой уже дважды мне подсказывают, не знаю. Подскажите, кто знает, примером или ссылкой.
-
- Гуру
- Сообщения: 5355
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1021
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
-
- Интересующийся
- Сообщения: 28
- Зарегистрирован: 09 мар 2017, 11:50
- Репутация: 0
Re: Подключение таблиц из ORACLE без геодезии
Сделал контрольный пример так:
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.
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.
- Вложения
-
- WKB формат
- SQL_1.jpg (32.44 КБ) 8389 просмотров
-
- WKT формат
- SQL_2.jpg (43.7 КБ) 8389 просмотров
-
- Подключение пользовательской таблицы. Поле с геометрией (RT_OBJECTS.GEOM) не определено??? геометрии
- 2017-04-20_113129.png (73.01 КБ) 8389 просмотров
-
- Гуру
- Сообщения: 5355
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1021
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: Подключение таблиц из ORACLE без геодезии
попробуй загрузить данные в Oracle из QGIS, и посмотри как они запишутся
-
- Интересующийся
- Сообщения: 28
- Зарегистрирован: 09 мар 2017, 11:50
- Репутация: 0
Re: Подключение таблиц из ORACLE без геодезии
В Oracle-таблицу записи пишутся sql-запросом, я привел привел текст создания таблицы, и текст ее заполнения данными. Скорее всего, собака зарыта в заполнении поля GEOM, возможно, в фунции SDO_UTIL.TO_WKBGEOMETRY неправильно указал параметры. Потому что, и геометрия не определена и еще SRID тоже пустой, в каком-то примере взял часть запроса, там было указано 8307, а что это означает, не знаю, наверняка есть где-нибудь таблица, в которой расшифровываются эти значения.
-
- Гуру
- Сообщения: 5355
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1021
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: Подключение таблиц из ORACLE без геодезии
8307
попробуй использовать родную геометрию
попробуй использовать родную геометрию
Код: Выделить всё
SDO_GEOMETRY(2001,4326,SDO_POINT_TYPE(51.702814,32.624736,NULL),NULL,NULL)
-
- Интересующийся
- Сообщения: 28
- Зарегистрирован: 09 мар 2017, 11:50
- Репутация: 0
Re: Подключение таблиц из ORACLE без геодезии
Не помогло: перезагрузил данные, подключаю таблицу, в результате - поле геометрии, SRID пустые.
Может быть надо в какую-нибудь таблицу отдельно прописывать поле геометрии?
Может быть надо в какую-нибудь таблицу отдельно прописывать поле геометрии?
-
- Гуру
- Сообщения: 5355
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1021
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: Подключение таблиц из ORACLE без геодезии
попробуй записать данные в oracle из QGIS/GDAL
SRID может быть пустым, это не кретично
SRID может быть пустым, это не кретично
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 30 гостей