Buduję proste widoki na ArcSDE Oracle RAC 10g. Moje kolumny SHAPE są typu danych SDO_GEOMETRY. ArcSDE 9.3.1.
Mam kilka tabel punktów z następującym szkicem:
ID (Guid) Nazwa (ciąg) Kształt (KSZTAŁT)
Zbudowałem prosty widok, zobacz to w 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
Widok w Oracle jest stworzony dobrze. Zarejestrowałem ten widok w wierszu poleceń:
sdetable -o create_view -T PUNKTY -t VW_POINTS -c Identyfikator, nazwa, KSZTAŁT itp
Widok ArcSDE jest tworzony ponownie, w porządku. Mogę użyć ArcObjects do zapytania, itp. Potrzebuję teraz, aby utworzyć warstwę. Wypróbowałem narzędzia wiersza poleceń, sdelayer -o register, ale nie miałem sukcesu. Daje mi wiadomość, że poglądy nie są obsługiwane.
Będę musiał to zrobić kilka razy, czasem używając złożonej składni do budowania widoku.
Jaki jest problem? Jak wizualizować te widoki przestrzenne jako warstwy SDE (Nie muszę ich edytować, po prostu wyświetlaj je przestrzennie wewnątrz ArcMap)
Dzięki za wkład!
EDYTOWAĆ
To jest zrzut ekranu w ArcMap, dla twojej uwagi: P
Zrzut ekranu ArcMap dla twojego szczęścia :
Zgodnie z życzeniem, oto opis_longa
// create_view C: \ Users \ H> sdetable -o create_view -s serwer -i port -u użytkownik -p pass -T view_airspace_points -t vw_airspace_points_oracle -c "*"
w tym momencie przed rejestracją zmieniłem widok na wyrocznię, w tym obsadę liczbową (38,0).
// rejestruj warstwę C: \ Users \ H> sdelayer -o register -l view_airspace_points, shape -C OBJECTID, USER - g RTREE -s serwer -i port -u użytkownik -p pass -ep -P HIGH
ArcSDE 9.3.1 dla Oracle10g Build 2784 Wt 27 października 10:51:14 2009
Narzędzie do administrowania warstwami
Opis warstwy ....:
Właściciel stołu ..........: SIGMAGIS2
Nazwa tabeli ...........: VIEW_AIRSPACE_POINTS
Kolumna przestrzenna .......: KSZTAŁT
Identyfikator warstwy .............: 1398
SRID .................: 79
Minimalny identyfikator kształtu .....: 1
Offset ...............:
falsex: -180,000000
falsey: -90.000000
Jednostki systemowe .........: 994200.000000
Z Przesunięcie ..............: 0,000000
Jednostki Z ..............: 1,000000
Zmierz przesunięcie .......:
Jednostki miary ........:
XY Tolerancja klastra: 2,0
Indeks przestrzenny ........:
parametr: SPIDX_RTREE
istnieje: Tak
forma tablicy: -2,0,0
Koperta warstwowa .......:
minx: -180,00000, miny: -90,00000
maxx: 180,00000, maxy: 90,00000
Podmioty .............: p
Typ warstwy ...........: In-Line Spatial Type
Data utworzenia ........: 06/28/11 09:28:45
Tryb I / O .............: NORMAL
Automatyczne blokowanie .......: Włączone
Precyzja .............: Wysoka
Uprawnienia użytkownika ......: WYBIERZ, AKTUALIZUJ, WSTAW, USUŃ
Układ współrzędnych ....: GEOGCS [„Długość / szerokość geograficzna [WGS 84]”, DATUM [„WGS 84”, SPHEROID [„WGS 84”, 6378137.0,298.257223563]], PRIMEM [„Greenwich”, 0,0], UNIT [ "Dziesiętny
Stopień ”, 0,0174532925199433]]
Konfiguracja warstwy ..: DOMYŚLNE
źródło
Odpowiedzi:
Miałem to (i podobne problemy) w przeszłości. Zawsze sprowadzało się do dwóch rzeczy:
Tabela przestrzenna miała pewne uszkodzone / nieprawidłowe geometrie. Problem z ArcMap polega na tym, że gdy tylko znajdzie nieprawidłową geometrię, przestanie renderować.
Rejestracja warstwy jest nieprawidłowa. Odkryłem również, że rejestr sdelayer -o nie zawsze działa poprawnie i trzeba „masować” wpisy rejestracyjne.
Aby sprawdzić, czy warstwa jest poprawna, użyj PIERWSZEJ funkcji SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT . Następnie użyj funkcji sprawdzania poprawności ArcSDE sdelayer -o feature_info -r invalid ... aby uzyskać nieprawidłowe funkcje zgodnie z ArcSDE. Prawdopodobnie wraz z listą sdelayer -o (patrz tutaj )
Aby sprawdzić rejestrację, musisz wrócić do schematu ArcSDE. Tabele sterujące rejestracją to: SDE.LAYERS, SDE.TABLE_REGISTRY, SDE.COLUMN_REGISTRY, SDE.SPATIAL_REFERENCES i SDE.GEOMETRY_COLUMNS. Jedną sztuczką, której używam, jest to, że zwykle mam warstwę „podstawową”, która jest podobna (pod względem typów geometrii i kolumn klucza podstawowego), WYŚWIETLANA w ArcMap. Następnie porównuję rekordy rejestracyjne, pomiędzy warstwą, która się wyświetla, a drugą warstwą, która się nie wyświetla. Zdziwisz się, gdy zobaczysz, jaką różnicę robi zmiana o 1 w kolumnie liczb całkowitych! :-)
Wskazówka na temat COLUMN_REGISTRY - wszystko, co musisz zrobić, to upewnić się, że kolumna Klucz podstawowy (co jest zdefiniowane jako ROWID_COLUMN w SDE.TABLE_REGISTRY) i kolumna przestrzenna są prawidłowe (lub takie same jak wyświetlana warstwa). Zignoruj wszystkie inne kolumny. Jeśli dodasz warstwę w ArcMap zalogowanym jako właściciel tabeli, brakujące wpisy w tabeli COLUMN_REGISTRY zostaną dodane automatycznie.
Daj mi znać, jeśli to pomoże!
źródło
To, czego szukasz, to widok przestrzenny , teraz jedynym poważnym problemem, jaki tu zobaczysz, jest to, że musisz uważać na pola, do których się przyłączasz. Jest to całkiem niezły proces, używam go wszędzie tam, gdzie uogólniłem moją bazę danych, aby rozmawiać z cienkimi danymi przestrzennymi.
To powinno zapewnić ci dobrą drogę do tego, czego chcesz. Kluczem jest poprawne zmapowanie pól. Zwykle robię widok z minimalną potrzebą, a następnie używam interfejsu użytkownika do edycji tego widoku po zarejestrowaniu w SDE, aby wykonać moje drobniejsze poprawki.
źródło
Brakuje mi jedynej kolumny liczb całkowitych, której ArcObjects może użyć dla identyfikatora obiektu. Spróbuj utworzyć pojedynczą sekwencję, która zachowa unikalne wartości dla tej kolumny identyfikatora. Następnie utwórz wyzwalacze wstawiania w każdej z tabel, aby wypełnić kolumnę id sekwencją.nextval.
W poleceniu sdelayer -o register ustaw flagę -C w kolumnie z liczbą całkowitą ze słowem kluczowym USER, aby esri nie próbował za Ciebie zarządzać kolumną.
źródło
W pewnym sensie zeskanowałem odpowiedzi i wydaje się, że nikt nie zauważył, że zapytania dotyczące unii stanowią pewien problem dla widoków przestrzennych z ArcGIS. dzieje się tak, ponieważ prawie na pewno skończysz ze zduplikowanymi obiektami. To samo dotyczy zapytań o połączenie wewnętrzne, w których predykaty łączenia nie gwarantują unikalnego rekordu „macierzystego”. w obu przypadkach widok może być zgodny ze wszystkimi wymogami rejestracyjnymi, ale nie będzie działał poprawnie
źródło
Dzięki wszystkim, którzy oglądali ten wątek.
Cóż, proces ten jest nieco skomplikowany, ale możliwe jest zarejestrowanie złożonego zapytania jako warstwy, wystarczy trochę sprytnej myśli. Nie jestem jeszcze pewien, jakie są tego konsekwencje dla wydajności, ale postaram się to aktualizować. Mam również problemy z wyświetlaniem punktów w ArcMap, ale zbadam to dalej.
Przede wszystkim utwórz złożony widok przestrzenny w swoim systemie RDBMS. Tylko upewnij się, że masz w widoku kolumnę INTEGER UNIQUE NOT NULL, której można później użyć do rejestracji w ArcSDE.
Moje zapytania były tylko zbiorem UNION ALL, podobnie do tego:
W tym schemacie wszystkie moje obiekty mają identyfikator PK ID_UNIQUE_ID, który jest GUID. Moje ObjectIDs powtórzyły się w różnych klasach obiektów, więc nie jest to dobry wybór dla naszego zastępczego ObjectID.
Użyłem (w moim przypadku) wirtualnej kolumny Oracle rownum, aby zawinąć wszystkie moje zapytania i utworzyć widok, który miał efektywne „objectID”. Spójrz:
Utworzyłem widok z powyższym zapytaniem i utworzyłem widok na nim. Ten widok stanie się przestrzenną warstwą wewnątrz arcsde. Jest to dość łatwy proces.
Następnie próbowałem zarejestrować mój widok przestrzenny jako warstwę, ale zawsze nie udawało się. Kiedy tworzysz na nim widok, ArcSDE zakłada, że FID jest NUMEREM (38,10), liczbą zmiennoprzecinkową, zgodnie z programem narzędziowym sdetable -o.
W Oracle była to definicja widoku:
Po wymianie kolumny FID na gips, wszystko działało dobrze. Przystąpiłem do rejestracji warstwy i poszło dobrze.
EDYTOWAĆ
Warstwa jest wyświetlana w ArcCatalog jako warstwa punktowa i widzę i wybieram tabelę w ArcMap jak zwykle (punkty są nawet podświetlone), ale nie mogę ich simbolizować i wyświetlić jako zwykłej warstwy. Jakieś myśli?
Czy ktoś ma jakieś pomysły, dlaczego tak się dzieje? Wszystko jest w porządku, poza tym, że nie widzę obiektów przestrzennych w ArcMap. Jakieś pomysły?
źródło
Spróbuj uruchomić następującą komendę: sdelayer -o alter -l [-S] [-k] [-i | | ] [-s] [-D] -E calc -u [-p]
źródło
Z mojego doświadczenia wynika, że gdy warstwa nie jest wyświetlana w łuku, to dlatego, że brakuje indeksu przestrzennego. Widoki wykorzystują indeks przestrzenny tabeli źródłowej, ale wygląda na to, że tworzysz indeks przestrzenny dla widoku w swoim oświadczeniu rejestracyjnym.
Czy którakolwiek z tabel źródłowych ma indeksy przestrzenne? Jeśli nie, spróbuj utworzyć je w Oracle i ponownie zarejestrować widok bez opcji -g.
Inną możliwością jest połączenie geometrii z dwóch tabel w jedną kolumnę, nie jestem pewien, czy to nie, nie próbowałem tego wcześniej.
źródło