Я строю простые представления о ArcSDE Oracle RAC 10g. Мои столбцы SHAPE имеют тип данных SDO_GEOMETRY. ArcSDE 9.3.1.
У меня есть несколько таблиц баллов, со следующим планом:
ID (Guid) Имя (строка) Форма (ФОРМА)
Я построил простой взгляд на это в Oracle!
CREATE OR REPLACE VIEW VW_POINTS AS
SELECT ID, Name, Shape from TABLE_A
UNION ALL
SELECT ID, Name, Shape from TABLE_B
-- etc
Представление в Oracle создано просто отлично. Я зарегистрировал это представление с помощью командной строки:
sdetable -o create_view -T POINTS -t VW_POINTS -c Id, имя, форма и т. д.
Представление ArcSDE создается снова, просто отлично. Я могу использовать ArcObjects для запроса и т. Д. Мне нужно сейчас создать слой. Я пробовал инструменты командной строки, регистр sdelayer -o, но безуспешно. Это дает мне сообщение о том, что мнения не поддерживаются.
Мне нужно будет сделать это несколько раз, иногда используя сложный синтаксис для построения представления.
В чем проблема? Как можно визуализировать эти пространственные виды в виде слоев SDE (мне не нужно редактировать их, просто просмотрите их в ArcMap в пространстве)
Спасибо за вклад!
РЕДАКТИРОВАТЬ
Это скриншот в ArcMap, для вашего удовольствия: P
Скриншот ArcMap для вашего счастья :
В соответствии с просьбой, здесь приходит описание
// create_view C: \ Users \ H> sdetable -o create_view -s сервер -i порт -u пользователь -p pass -T view_airspace_points -t vw_airspace_points_oracle -c "*"
в этот момент я изменил взгляд на оракула, в том числе на число (38,0) перед регистрацией.
// зарегистрировать слой C: \ Users \ H> sdelayer -o зарегистрировать -l view_airspace_points, форма -C OBJECTID, ПОЛЬЗОВАТЕЛЬ - g RTREE -s сервер -i порт -u пользователь -p pass -ep -P HIGH
ArcSDE 9.3.1 для Oracle10g Build 2784 вт 27 октября 10:51:14 2009
Утилита администрирования слоя
Описание слоя ....:
Владелец таблицы ..........: SIGMAGIS2
Имя таблицы ...........: VIEW_AIRSPACE_POINTS
Пространственный столбец .......: ФОРМА
Идентификатор слоя .............: 1398
SRID .................: 79
Минимальный идентификатор формы .....: 1
Смещение ...............:
falsex: -180.000000
фальси: -90.000000
Системные блоки .........: 994200.000000
Смещение по оси Z ..............: 0,000000
Единицы Z ..............: 1.000000
Смещение измерения .......:
Единицы измерения ........:
Кластерный допуск XY.: 2.0
Пространственный индекс ........:
параметр: SPIDX_RTREE
существует: да
форма массива: -2,0,0
Конверт слоя .......:
minx: -180.00000, miny: -90.00000
макс .: 180,00000, макс .: 90,00000
Сущности .............: p
Тип слоя .................: Встроенный пространственный тип
Дата создания ........: 28.06.11 09:28:45
Режим ввода / вывода .............: НОРМАЛЬНЫЙ
Автоблокировка ..........: включена
Точность .............: высокая
Права пользователя ......: ВЫБРАТЬ, ОБНОВИТЬ, ВСТАВИТЬ, УДАЛИТЬ
Система координат ....: GEOGCS ["Долгота / Широта [WGS 84]", DATUM ["WGS 84", SPHEROID ["WGS 84", 6378137.0,298.257223563]], PRIMEM ["Гринвич", 0.0], UNIT [ "Десятичная дробь
Степень», +0,0174532925199433]]
Конфигурация слоя ..: ПО УМОЛЧАНИЮ
источник
Ответы:
У меня было это (и подобные проблемы) в прошлом. Это всегда сводилось к двум вещам:
Пространственная таблица имела некоторые поврежденные / недействительные геометрии. Проблема с ArcMap заключается в том, что как только он находит неправильную геометрию, он прекращает рендеринг.
Регистрация слоя неверна. Я также обнаружил, что регистр sdelayer -o не всегда работает правильно, и вам нужно «помассировать» регистрационные записи.
Поэтому, чтобы проверить, является ли слой действительным, сначала используйте функцию SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT . Затем используйте функцию проверки ArcSDE sdelayer -o feature_info -r invalid ..., чтобы получить недопустимые объекты в соответствии с ArcSDE. Возможно вместе со списком sdelayer -o (см. Здесь )
Для проверки регистрации вы должны вернуться в схему ArcSDE. Таблицы, которые управляют регистрацией: SDE.LAYERS, SDE.TABLE_REGISTRY, SDE.COLUMN_REGISTRY, SDE.SPATIAL_REFERENCES и SDE.GEOMETRY_COLUMNS. Один трюк, который я использую, заключается в том, что у меня обычно есть «базовый» слой, который похож (в том, что касается типов геометрии и столбцов первичного ключа), который отображается в ArcMap. Затем я сравниваю регистрационные записи, между отображаемым слоем и тем, который не отображается. Вы будете удивлены, узнав, что делает изменение на 1 в целочисленном столбце! :-)
Совет по COLUMN_REGISTRY - все, что вам нужно сделать, это убедиться, что столбец первичного ключа (который определен как ROWID_COLUMN в SDE.TABLE_REGISTRY) и пространственный столбец правильны (или совпадают с отображаемым слоем). Игнорировать все остальные столбцы. Если вы добавите слой в ArcMap, вошедший в систему как владелец таблицы, недостающие записи в таблице COLUMN_REGISTRY будут добавлены автоматически.
Позвольте мне знать, если это помогает!
источник
То, что вы ищете, это пространственное представление , теперь единственная серьезная проблема, которую вы увидите здесь, это то, что вам нужно быть осторожным с полями, к которым вы присоединяетесь. Это довольно хороший процесс, я использую его везде, где я обобщил свою БД, чтобы общаться с тонкими пространственными данными.
Это должно помочь вам на пути к тому, что вы хотите. Ключ заставляет ваши поля отображаться правильно. Я обычно делаю вид с минимальным необходимым мне количеством, а затем использую пользовательский интерфейс для редактирования этого вида после регистрации в SDE, чтобы сделать мои более тонкие настройки.
источник
Одна вещь, которую я вижу отсутствующей, - это уникальный целочисленный столбец, который ArcObjects может использовать для идентификатора объекта. Попробуйте создать одну последовательность, которая будет поддерживать уникальные значения для этого столбца идентификатора. Затем создайте триггеры вставки в каждой из таблиц, чтобы заполнить столбец идентификатора sequence.nextval.
В вашей команде sdelayer -o register обязательно установите флаг -C для столбца целочисленного идентификатора с ключевым словом USER, чтобы esri не пытался управлять столбцом за вас.
источник
Я как бы просканировал ответы, и никто, похоже, не заметил, что запросы на объединение представляют собой небольшую проблему для пространственных представлений с ArcGIS. это потому, что вы почти наверняка получите повторяющиеся объекты. То же самое относится и к внутренним запросам соединения, где предикаты соединения не гарантируют уникальную «родительскую» запись. в любом случае, хотя представление может соответствовать всем требованиям регистрации, оно не будет вести себя правильно
источник
Спасибо всем, кто просматривал эту ветку.
Ну, процесс немного сложен, но можно зарегистрировать сложный запрос как слой, просто нужно немного хитро подумать. Я еще не уверен, как это повлияет на производительность, но я постараюсь держать это в курсе. У меня также есть проблемы с просмотром точек в ArcMap, но я буду исследовать дальше.
Прежде всего, создайте сложный пространственный вид в вашей РСУБД. Просто убедитесь, что у вас есть столбец INTEGER UNIQUE NOT NULL в представлении, который можно использовать позже для регистрации в ArcSDE.
Мои запросы были просто связкой UNION ALL, похожей на эту:
В этой схеме все мои объекты имеют идентификатор PK ID_UNIQUE_ID, который является GUID. Мои ObjectID повторялись во всех классах пространственных объектов, так что это не лучший выбор для нашего суррогатного ObjectID.
Я использовал (в моем случае) виртуальный столбец Oracle rownum, чтобы обернуть все мои запросы и создать представление с эффективным «objectID». Взглянем:
Я создал представление с запросом выше, и создал представление сверху этого. Этот вид станет пространственным слоем внутри arcsde. Это довольно простой процесс.
После этого я попытался зарегистрировать свое пространственное представление как слой, но всегда не получалось. Когда вы создаете представление поверх него, ArcSDE предполагает, что FID - это НОМЕР (38,10), число с плавающей запятой, в соответствии с утилитой sdetable -o description.
В Oracle это было определение для представления:
После того, как я заменил колонку fid на приведение, все работало нормально. Я приступил к оформлению слоя и все прошло нормально.
РЕДАКТИРОВАТЬ
Слой отображается в ArcCatalog как точечный слой, и я могу видеть и выбирать таблицу в ArcMap как обычно (точки даже подсвечиваются), но я не могу их символизировать и просматривать как обычный слой. Какие-нибудь мысли?
У кого-нибудь есть идеи, почему это происходит? Все хорошо, за исключением того, что я не могу видеть пространственные объекты внутри ArcMap. Любые идеи?
источник
Пожалуйста, попробуйте выполнить следующую команду: sdelayer -o alter -l [-S] [-k] [-i | | ] [-s] [-D] -E calc -u [-p]
источник
По моему опыту, когда слой не отображается в Arc, это потому, что отсутствует пространственный индекс. Представления используют пространственный индекс исходной таблицы, но похоже, что вы создаете пространственный индекс для представления в своем заявлении о регистрации.
Есть ли у исходных таблиц пространственные индексы? Если нет, попробуйте создать их в Oracle и перерегистрировать представление без -g.
Другая возможность состоит в том, что вы объединяете геометрию из двух таблиц в один столбец, не будучи уверенным, что это не так, не пробовали раньше.
источник