Зареєструйте перегляд та шар шару SDE


11

Я будую прості погляди проти ArcSDE Oracle RAC 10g. Мої стовпці SHAPE мають тип даних SDO_GEOMETRY. ArcSDE 9.3.1.

У мене є кілька точкових таблиць із наступним контуром:

Ідентифікатор (Guid) Ім'я (рядок) Форма (SHAPE)

Я створив простий вид цього вигляду в 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, Ім'я, SHAPE тощо

Перегляд ArcSDE створюється знову, просто чудово. Я можу використовувати ArcObjects для запиту і т. Д. Мені потрібно зараз, щоб створити шар. Я спробував інструменти командного рядка, sdelayer - зареєструватися, але успіху у мене не було. Це дає мені повідомлення, кажучи, що погляди не підтримуються.

Мені потрібно буде це зробити кілька разів, іноді використовуючи складний синтаксис для побудови подання.

В чому проблема? Як візуалізувати ці просторові представлення як шари SDE (мені не потрібно їх редагувати, просто просторово переглядати їх у ArcMap)

Дякую за вклад!

EDIT

Це скріншот у ArcMap для вашого задоволення: P

Скріншот ArcMap на ваше щастя :

Як вимагається, тут виходить description_long

// create_view C: \ Users \ H> sdetable -o create_view -s сервер -i порт -u користувач -p pass -T view_airspace_points -t vw_airspace_points_oracle -c "*"

в цей момент я змінив погляд на oracle, включаючи акторський номер як числовий (38,0) перед реєстрацією.

// зареєструвати рівень C: \ Users \ H> sdelayer - зареєструватися -l view_airspace_points, shape -C OBJECTID, USER - g RTREE -s сервер -i порт -u user -p pass -ep -P HIGH

ArcSDE 9.3.1 для Oracle10g Build 2784 Tue Oct 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

Суб'єкти .............: с

Тип шару ...........: Вбудований просторовий тип

Дата створення ........: 28.06.11 09:28:45

Режим вводу / виводу .............: NORMAL

Автоблокування ..........: Увімкнено

Точність .............: Висока

Привілеї користувачів ......: ВИБІР, ОНОВЛЕННЯ, ВСТАВКА, УДАЛЕННЯ

Система координат ....: GEOGCS ["Довгота / Широта [WGS 84]", DATUM ["WGS 84", SPHEROID ["WGS 84", 6378137.0,298.257223563]], PRIMEM ["Greenwich", 0.0], UNIT [ "Десяткові

Ступінь ", 0,0174532925199433]]

Конфігурація шару ..: ЗАМЕЧАННЯ


Отже, вам потрібно створити файл шару?
DEWright

Ні, мені потрібно створити представлення всередині бази даних про геодані, яке діє як клас класів.
Джордж Сільва

Тоді вам потрібно створити просторовий вигляд, як ви говорите, і я згадую нижче; Єдина причина, по якій я бачу, як це не відображається як просторовий шар, - це дозволу. Або ArcGIS / ArcSDE не зареєстрували його належним чином; оскільки це лише мета просторового шару, щоб об'єднати просторові та табличні дані рівномірно.
DEWright

Коли ви запускаєте на вашому погляді файл опису, як 'sdetable -o description_long -t victoria -u sasha -p polar.bear -i esri_40', які результати ви отримуєте? Нам потрібно перевірити, чи правильно встановлюється та посилається на просторовий стовпець та тип сутності.
DEWright

1
DE дякую за оповіщення. Я все зробив правильно, але все одно не працює. :( дуже frustating. Це можна зробити з стеком OpenSource досить легко .
George Silva

Відповіді:


4

У мене це було (і подібні проблеми) в минулому. Це завжди зводилося до двох речей:

  1. Просторова таблиця мала деякі пошкоджені / недійсні геометрії. Проблема з ArcMap полягає в тому, що як тільки вона виявить недійсну геометрію, вона припинить надання.

  2. Реєстрація шару невірна. Я також з’ясував, що реєстрація sdelayer -o не завжди працює коректно, і вам доведеться «масажувати» записи реєстрації.

Тож, щоб перевірити, чи дійсний шар, використовуйте ПЕРШУ функцію SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT . Потім скористайтеся функцією перевірки ArcSDE sdelayer -o element_info -r недійсною ..., щоб отримати недійсні функції відповідно до ArcSDE. Можливо, разом із sdelayer -o списком (див. Тут )

Для перевірки реєстрації потрібно повернутися до схеми ArcSDE. Таблицями, які керують реєстрацією, є: SDE.LAYERS, SDE.TABLE_REGISTRY, SDE.COLUMN_REGISTRY, SDE.SPATIAL_REFERENCES та SDE.GEOMETRY_COLUMNS. Я використовую один трюк - це те, що у мене зазвичай є базовий шар, схожий (що стосується типів геометрії та стовпців первинного ключа), що DISPLAYS в ArcMap. Потім я порівнюю реєстраційні записи, зраджую шар, який відображається, а потім той, який не відповідає. Ви будете здивовані, дізнавшись, яка різниця зміни на 1 у цілому стовпці! :-)

Порада про COLUMN_REGISTRY - все, що вам потрібно зробити, це переконатися, що стовпець Первинний ключ (що визначено як ROWID_COLUMN у SDE.TABLE_REGISTRY) та просторовий стовпець є правильними (або такими ж, як і шар, який відображається). Ігноруйте всі інші стовпці. Якщо ви додасте шар у ArcMap, який увійшов у систему як власник таблиці, то відсутні записи в таблиці COLUMN_REGISTRY будуть додані автоматично.

Дайте мені знати, якщо це допомагає!


картальний спасибі за вклад! Я спробую спершу все завтра! Я сподіваюся, що ви праві! Дякую!
Джордж Сільва

відповів мапоголік. Це працювало для різних типів реєстрацій, але не для UNIONED. Тим не менш, це дивовижна порада. Дякую за відповідь.
Джордж Сільва

6

Те, що ви шукаєте, - це просторовий вигляд , тепер єдине головне питання, яке ви побачите тут, - це те, що вам потрібно бути обережними з полями, до яких приєднуєтесь. Це досить приємний процес, я використовую його в усьому місці, де я узагальнив свою БД для розмови з тонкими просторовими даними.

    sdetable -o create_view -T emp_region_view -t "employees,world.regions" 
-c "employees.name,employees.emp_id,world.regions.reg_id,world.regions.rname,world.regions.region"
-a "employee,eid,rid,region,area" -w "employees.emp_id = world.regions.emp_id"
-s myodbserver -i sde:oracle11g:ora1 -u gdb -p gdb.bdg

Це повинно зробити вас на шляху до того, що ви хочете. Ключовим моментом є отримання ваших полів для правильного відображення. Я схильний просто робити перегляд з необхідним мінімумом, а потім скористайтеся інтерфейсом, щоб відредагувати цей вигляд після реєстрації в SDE, щоб зробити ще більш дрібні налаштування.


Привіт DE Я спробував цей метод, але він не працює. Я розумію, що ArcSDE створює команду "CREATE FORCE VIEW", заявляючи стовпці перед рукою і реєструючи лише стовпці, які ви заявляєте в пункті. Я спробував створити порожній вигляд (використовуючи лише клас функції, щоб отримати геометричне визначення) і замінити його на інше визначення. Гаразд, я можу запитати це за допомогою ArcMap, але геометрія НЕ відображається на карті.
Джордж Сільва

1
Якщо перетягнути просторовий вигляд з ArcCatalog на ArcMap, він не відображатиметься з геометричними даними?
Бріт Вескотт

Як було сказано раніше, шар не відображається в ArcMap або ArcCatalog попередньому перегляді, але він вказаний як шар правильного типу геометрії і його можна шукати в ArcMap.
Джордж Сільва

1
Коли ви запускаєте на вашому погляді файл опису, як 'sdetable -o description_long -t victoria -u sasha -p polar.bear -i esri_40', які результати ви отримуєте? Нам потрібно перевірити, чи правильно встановлюється та посилається на просторовий стовпець та тип сутності.
DEWright

Опублікую результати тут!
Джордж Сільва

3

Одне, що я вважаю відсутнім - це унікальний цілий стовпець, який ArcObjects може використовувати для ідентифікатора об'єкта. Спробуйте створити єдину послідовність, яка буде підтримувати унікальні значення для цього стовпця id. Потім створіть тригери вставки в кожній з таблиць, щоб заповнити стовпчик id послідовністю.nextval.

У команді реєстрації sdelayer -o не забудьте встановити прапор -C на свій цілий стовпець id з ключовим словом USER, щоб esri не намагався керувати стовпцем для вас.


1
Привіт дрокери, процес реєстрації просто добре працює. прочитати власну відповідь на тему. Я використовую стовпчик, що генерується в Oracle (ROWNUM), що використовується як числовий (38,0). Дякую за пораду, але я вже пробував це.
Джордж Сільва

3

Я начебто відсканував відповіді, і, схоже, ніхто не помітив, що запити об'єднання є проблемою для просторових поглядів з ArcGIS. це тому, що ви майже напевно закінчитесь дублікатами об'єктивів. Те саме стосується внутрішніх запитів приєднання, де предикати об’єднання не гарантують унікальний запис "батьків". в будь-якому випадку, хоча представлення може відповідати всім вимогам до реєстрації, воно буде вести себе неправильно


Дякую за вклад Роб. Якщо ви уважно подивитесь на погляд, який я написав, він генерує OID під час руху за допомогою Oracles ROWNUM. Вони гарантовано будуть унікальними.
Джордж Сільва

1
Я не переконаний на 100% у використанні rownum, якщо дані відображаються в arcmap (наприклад). Rownum - це функція набору запитів oracle. тому щоразу, коли виконувати запит, ви отримуєте новий набір rownums, починаючи з 1. Це може означати, що кожен панорамування / масштабування і т. д. створюватиме об'єктив 1 і будь-який процес, очікуючи на використання кешованих об’єктидів, буде невдалим, оскільки наступні запити дадуть новий результат. Ви розглядали інструмент таблиці таблиць запитів як можливість отримати ArcGIS для додавання для вас стовпця об’єктиду?
Роб Макферсон

2

Дякуємо всім, хто переглядав цю тему.

Ну процес трохи складний, але складно запит можна зареєструвати як шар, просто потрібна хитра думка. Я не впевнений, які наслідки для цього є ефективність, але я постараюся постійно оновлювати це. У мене також є проблеми з переглядом точок в ArcMap, але я буду досліджувати далі.

Перш за все, створіть складний просторовий вигляд у ваших RDBMS. Просто переконайтеся, що у вікні стовпця INTEGER UNIQUE NOT NULL, який можна буде використовувати згодом для реєстрації в ArcSDE.

Мої запити були лише групою UNION ALL, подібною до цього:

    SELECT OBJECTID, ID_UNIQUE_ID, AIRSPACE_ID, NM_INDICATIVE, 'XXX' AS "ELEMENT_TYPE",SHAPE FROM tb_XXX    
        UNION ALL

    SELECT OBJECTID, ID_UNIQUE_ID, AIRSPACE_ID, NM_INDICATIVE, 'YYY' AS "ELEMENT_TYPE",SHAPE FROM TB_YYY

У цій схемі всі мої об’єкти мають PK ID_UNIQUE_ID, що є GUID. Мої ObjectID повторювались у класах функцій, тож не вдалий вибір для нашого сурогатного ObjectID.

Я використовував (у моєму випадку) віртуальну колонку Oracle rownum, щоб обернути всі мої запити та створити подання, яке мало ефективний "objectID". Поглянь:

SELECT 
    CAST(ROWNUM AS NUMBER(38,0)) AS "FID",
    OBJECTID,
    ID_UNIQUE_ID,
    AIRSPACE_ID,
    NM_INDICATIVE,
    ELEMENT_TYPE,
    SHAPE 
FROM 
(
    SELECT OBJECTID, ID_UNIQUE_ID, AIRSPACE_ID, NM_INDICATIVE, 'ZZZ' AS "ELEMENT_TYPE",SHAPE FROM TB_ZZZ

        UNION ALL

    SELECT OBJECTID, ID_UNIQUE_ID, AIRSPACE_ID, NM_INDICATIVE, 'XXX' AS "ELEMENT_TYPE",SHAPE FROM tb_XXX

        UNION ALL

    SELECT OBJECTID, ID_UNIQUE_ID, AIRSPACE_ID, NM_INDICATIVE, 'YYY' AS "ELEMENT_TYPE",SHAPE FROM TB_YYY
)

Я створив подання із запитом вище та створив подання над ним. Цей погляд стане просторовим шаром всередині arcsde. Це досить простий процес.

Після цього я спробував і спробував зареєструвати мій просторовий вигляд як шар, але завжди провалився. Коли ви створюєте подання над ним, ArcSDE припускає, що FID - це НОМЕР (38,10), номер з плаваючою комою, відповідно до утиліти програми-sdetable.

В Oracle це визначення було для виду:

  CREATE OR REPLACE FORCE VIEW "schema"."layer_name" ("FID", "OBJECTID", "ID_UNIQUE_ID", "AIRSPACE_ID", "NM_INDICATIVE", "SHAPE") AS 
  SELECT  CAST(fid AS NUMBER(38,0)) AS FID, objectid, id_unique_id, airspace_id, nm_indicative, shape FROM  schema.VW_AIRSPACE_POINTS_ORACLE;

Після того, як я замінив стовпчик fid на акторський склад, все працювало нормально. Я приступив до реєстрації шару, і це пройшло нормально.

EDIT

Шар відображається в ArcCatalog як точковий шар, і я бачу та вибираю таблицю в ArcMap як завжди (точки навіть виділяються), але я не можу їх символізувати і розглядати як звичайний шар. Будь-які тисячі?

У когось є ідеї, чому це відбувається? Все добре, за винятком того, що я не бачу просторових об’єктів всередині ArcMap. Будь-які ідеї?


1
Ви можете багато зробити зі своєю ефективністю цього виду, якщо постійно інформувати свої індекси, я встановив заплановані завдання для роботи в системах з великою кількістю транзакцій, щоб індекси перебудовувалися щовечора. Тоді, коли ви займаєтесь своїми приєднаннями, вони краще налаштовуються.
DEWright

Що станеться, якщо перетягнути з арккаталога на нову порожню карту в arcmap?
Кірк Куйкендалл

ArcMap додає його до TOC, але він нічого не робить. Дивна річ у тому, що я можу вибрати рядки, і геометрія цього ряду буде малювати (обрана). Якщо рядки не вибрані, нічого не малюється. Запит через ArcMap також працює.
Джордж Сільва

1
Цікаво. Якщо ви пишете код arcobjects, що виглядає IGeoDataset.Extent для функціонального рівня? А для класу характеристик?
Кірк Куйкендалл

Я спробую це! Подивимось.
Джордж Сільва

2

Спробуйте виконати таку команду: sdelayer -o alter -l [-S] [-k] [-i | | ] [-s] [-D] -E calc -u [-p]


Дякуємо за коментар Вже спробував визначити масштаб шару.
Джордж Сільва

2

На мій досвід, коли шар не відображається в Arc, це тому, що просторовий індекс відсутній. Перегляди використовують просторовий індекс вихідної таблиці, але, схоже, ви створюєте просторовий індекс для перегляду в заяві про реєстрацію.

Чи одна із вихідних таблиць має просторові індекси? Якщо ні, спробуйте створити їх в Oracle і перереєструйте представлення без -g.

Інша можливість полягає в тому, що ви поєднуєте геометрію з двох таблиць в один стовпчик, не впевнені, що це ні-ні, ви не пробували його раніше.


Я спробую це Метт. Я також поєдную кілька геометрій в одну в іншу точку зору, і це дуже важливо, щоб це працювало. Ми будуємо рядки на виду, і цей об'єднаний погляд повинен був стати єдиною точкою підтримки цих шарів. Я пробую інші підходи, оскільки не бачу, як це відбувається.
Джордж Сільва
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.