SDE görünümünü ve Katmanını kaydetme


11

Bir ArcSDE Oracle RAC 10g'ye karşı basit görüntüler oluşturuyorum. SHAPE sütunlarım SDO_GEOMETRY veri tipindedir. ArcSDE 9.3.1.

Aşağıdaki anahat ile birkaç nokta tablolarım var:

Kimlik (Kılavuz) Adı (dize) Şekil (SHAPE)

Oracle'da bunun için basit bir görünüm inşa ettim!

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'daki görünüm gayet iyi oluşturuldu. Bu görünümü komut satırına kaydettirdim:

sdetable -o create_view -T PUANLAR -t VW_POINTS -c Kimlik, İsim, ŞEKİL vb.

ArcSDE görünümü tekrar oluşturulur, gayet iyi. ArcObjects sorgulamak için kullanabilirsiniz, vb. Şimdi bir katman oluşturmak için gerekir. Komut satırı araçlarını denedim, sdelayer -o register, ama başarılı olamadım. Bana bir mesaj veriyor ve görüşlerin desteklenmediğini söylüyor.

Bunu birkaç kez yapmam gerekecek, bazen görünümü oluşturmak için karmaşık sözdizimi kullanarak.

Sorun nedir? Bu uzamsal görünümleri SDE katmanları olarak nasıl görselleştirebilirim (Bunları düzenlememe gerek yok, sadece ArcMap içinde uzamsal olarak görüntüleyin)

Giriş için teşekkürler!

DÜZENLE

Bu deligth: P için ArcMap bir ekran görüntüsü

Mutluluğunuz için ArcMap Ekran Görüntüsü :

İstendiği gibi, burada tanımla

// create_view C: \ Kullanıcılar \ H> sdetable -o create_view -s sunucu -i bağlantı noktası -u kullanıcı -p pass -T view_airspace_points -t vw_airspace_points_oracle -c "*"

bu noktada kayıttan önce sayısal olarak (38,0) bir kadro dahil olmak üzere kâhin görüşünü değiştirdim.

// C katmanını kaydet: \ Users \ H> sdelayer -o register -l view_airspace_points, şekil -C NESNE KİMLİĞİ, KULLANICI - g RTREE -s sunucusu -i bağlantı noktası -u kullanıcı -p geçişi -ep -P YÜKSEK

Oracle10g Build 2784 için ArcSDE 9.3.1 Sal 27 Ekim 10:51:14 2009

Katman Yönetim Yardımcı Programı

Katman Açıklaması ....:

Tablo Sahibi ..........: SIGMAGIS2

Tablo Adı ...........: VIEW_AIRSPACE_POINTS

Mekansal Sütun .......: ŞEKİL

Katman Kimliği .............: 1398

SRID .................: 79

Minimum Şekil Kimliği .....: 1

Ofset ...............:

falsex: -180.000000

falsey: -90.000000

Sistem Birimleri .........: 994200.000000

Z Ofseti ..............: 0.000000

Z Birimleri ..............: 1.000000

Ölçüm Ofseti .......:

Ölçü Birimleri ........:

XY Küme Toleransı: 2.0

Mekansal Endeks ........:

parametre: SPIDX_RTREE

mevcut: Evet

dizi formu: -2,0,0

Katman Zarfı .......:

minx: -180.00000, miny: -90.00000

maxx: 180.00000, maxy: 90.00000

Varlıklar .............: p

Katman Türü ...........: Satır İçi Mekansal Tip

Oluşturma Tarihi ........: 06/28/11 09:28:45

G / Ç Modu .............: NORMAL

Otomatik kilitleme ..........: Etkin

Hassaslık .............: Yüksek

Kullanıcı Ayrıcalıkları ......: SEÇ, GÜNCELLEME, EKLE, SİL

Koordinat Sistemi ....: GEOGCS ["Boylam / Enlem [WGS 84]", DATUM ["WGS 84", SPHEROID ["WGS 84", 6378137.0,298.257223563]], PRIMEM ["Greenwich", 0.0], BİRİM [ "Ondalık

Derece", ,0174532925199433]]

Katman Yapılandırması ..: VARSAYILANLAR


Bir katman dosyası mı oluşturmanız gerekiyor?
DEWright

Hayır, coğrafi veritabanında bir özellik sınıfı gibi davranan bir görünüm oluşturmam gerekiyor.
George Silva

Öyleyse, dediğin gibi mekânsal görüşü yaratman gerekiyor ve ben aşağıda bahsettiğim gibi; Bir Mekansal katman olarak görünmediğini görebilmemin tek nedeni izinlere yapmaktır. ArcGIS / ArcSDE düzgün kaydetmedi; çünkü bu sadece uzamsal bir katmanın amacıdır, uzamsal ve tablosal verileri tek tip bir şekilde birleştirmek.
DEWright

Description_long'u 'sdetable -o define_long -t victoria -u sasha -p polar.bear -i esri_40' gibi çalıştırdığınızda, hangi sonuçları elde edersiniz? Uzamsal sütun ve varlık türünün doğru ayarlanıp ayarlanmadığını ve doğru referans alınıp alınmadığını görmemiz gerekiyor.
DEWright

1
DE uyarı için teşekkürler. Her şeyi doğru yaptım, ama yine de çalışmıyor. :( çok frustating Bu AçıkKaynak yığını ile yapılabilir. Oldukça kolay .
George Silva

Yanıtlar:


4

Geçmişte bu (ve benzer problemler) vardı. Her zaman iki şeye indi:

  1. Uzamsal tabloda bazı bozuk / geçersiz geometriler vardı. ArcMap ile ilgili sorun, geçersiz bir geometri bulur bulmaz oluşturmayı durdurmasıdır.

  2. Katman kaydı yanlış. Ne de buldum sdelayer -o kayıt her zaman düzgün çalışmaz ve kayıt girişleri 'masaj' zorunda.

Bu nedenle katmanın geçerli olup olmadığını kontrol etmek için İLK kullanın SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT işlevini. Ardından, ArcSDE'ye göre geçersiz özellikler almak için ArcSDE doğrulama işlevini kullanın sdelayer -o feature_info -r geçersiz .... Muhtemelen sdelayer ile birlikte -o listesi ( buraya bakın )

Kaydı kontrol etmek için ArcSDE şemasına geri dönmeniz gerekir. Kaydı kontrol eden tablolar: SDE.LAYERS, SDE.TABLE_REGISTRY, SDE.COLUMN_REGISTRY, SDE.SPATIAL_REFERENCES ve SDE.GEOMETRY_COLUMNS. Kullandığım bir numara, genellikle ArcMap'te DISPLAYS'e benzeyen (geometri türleri söz konusu olduğunda ve birincil anahtar sütunlar) bir 'temel' katmana sahip olmamdır. Sonra kayıt kayıtlarını karşılaştırırım, görüntülenen katman ve sonra olmayan bir katman arasında. Bir tamsayı sütunundaki 1 değerinde bir değişikliğin ne fark yarattığını görmek sizi şaşırtacak! :-)

COLUMN_REGISTRY ile ilgili bir ipucu - tek yapmanız gereken Birincil anahtar sütununun (SDE.TABLE_REGISTRY'de ROWID_COLUMN olarak tanımlanan) ve Uzamsal Sütun'un doğru (ya da görüntülenen katmanla aynı) olduğundan emin olmaktır. Diğer tüm sütunları yoksay. Tablo sahibi olarak oturum açmış ArcMap'e katman eklerseniz COLUMN_REGISTRY tablosundaki eksik girişler otomatik olarak eklenir.

Bunun yardımcı olup olmadığını bana bildirin!


mapholic girdi için teşekkürler! Yarın ilk iş olarak deneyeceğim! Umarım haklısındır! Teşekkürler!
George Silva

mapoholic yanıtladı. Bu, farklı kayıt türleri için işe yaradı, ancak UNIONED kayıtlarında işe yaramadı. Yine de, bu inanılmaz bir ipucu. Cevap için teşekkürler.
George Silva

6

Aradığınız şey bir Mekansal Görünüm , şimdi burada göreceğiniz tek büyük sorun, katıldığınız alanlara dikkat etmeniz gerektiğidir. Bu oldukça güzel bir süreç, DB'yi genel konumsal verilerle konuşmak için genelleştirdiğim her yerde kullanıyorum.

    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

Bu sizi istediğiniz şeye götürecektir. Önemli olan, alanlarınızın harita eşlemesini doğru yapmaktır. Görünümü yalnızca ihtiyacım olan minimum düzeyde yapmaya eğilimliyim, daha sonra daha ince taneli ince ayarları yapmak için SDE'ye kaydedildikten sonra bu görünümü düzenlemek için bir kullanıcı arayüzü kullanıyorum.


Merhaba DE Bu yöntemi denedim ama işe yaramıyor. Anladığım kadarıyla ArcSDE, sütunları elden önce belirten ve yalnızca maddede bildirdiğiniz sütunları kaydeden bir "KUVVET GÖRÜNÜMÜ Oluştur" komutu oluşturmasıdır. Boş bir görünüm oluşturmayı denedim (geometrik bir tanım elde etmek için sadece bir özellik sınıfı kullanarak) ve başka bir tanım için değiştirerek. Tamam, bunu ArcMap ile sorgulayabilirim, ancak geometri haritada gösterilmiyor.
George Silva

1
Uzamsal görünümü ArcCatalog'dan ArcMap'e sürüklerseniz, geometrik verilerle görünmez mi?
Britt Wescott

Daha önce belirtildiği gibi, katman ArcMap veya ArcCatalog önizlemesinde görüntülenmez, ancak doğru geometri türünde bir katman olarak listelenir ve ArcMap'ta sorgulanabilir.
George Silva

1
Description_long'u 'sdetable -o define_long -t victoria -u sasha -p polar.bear -i esri_40' gibi çalıştırdığınızda, hangi sonuçları elde edersiniz? Uzamsal sütun ve varlık türünün doğru ayarlanıp ayarlanmadığını ve doğru referans alınıp alınmadığını görmemiz gerekiyor.
DEWright

Sonuçları buraya göndereceğim!
George Silva

3

Eksik gördüğüm bir şey ArcObjects nesne kimliği için kullanabileceğiniz benzersiz bir tamsayı sütundur. Bu kimlik sütunu için benzersiz değerleri koruyacak tek bir sıra oluşturmayı deneyin. Ardından id sütununu sırayla.nextval doldurmak için tabloların her birinde ekleme tetikleyicileri oluşturun.

Sdelayer -o register komutunuzda, -ri bayrağını tamsayı id sütununuza USER anahtar sözcüğüyle ayarladığınızdan emin olun, böylece esri sütunu sizin için yönetmeye çalışmaz.


1
Merhaba jrockers, kayıt işlemi iyi çalışıyor. Konuya kendi cevabımı oku. Ben sayısal olarak (38,0) döküm Oracle üretilen sütun (ROWNUM) kullanıyorum. Bahşiş için teşekkürler, ama zaten denedim.
George Silva

3

Ben cevapları bir tür taradım ve kimse sendika sorguları ArcGIS ile mekansal görüş için bir sorun biraz gözlemlemiş gibi görünüyor. bunun nedeni, neredeyse kesinlikle yinelenen nesnelerle sonuçlanacak olmanızdır. Aynı şey, birleştirme tahminlerinin benzersiz bir "üst" kayıt garanti etmediği iç birleşim sorguları için de geçerlidir. her iki durumda da, görünüm tüm kayıt gereksinimlerine uygun olsa da, doğru davranmayacaktır.


Rob girişi için teşekkürler. Yazdığım görünüme yakından bakarsanız, Oracles ROWNUM'u kullanarak anında OID'ler oluşturur. Benzersiz oldukları garanti edilir.
George Silva

1
Veriler arcmap (örneğin) görüntüleniyorsa rownum kullanımı hakkında% 100 ikna değilim. Rownum, oracle sorgu kümesinin bir fonksiyonudur. Bu nedenle, bir sorguyu her çalıştırdığınızda 1'den başlayarak yeni bir rownum kümesi alırsınız. Bu, her kaydırma / yakınlaştırma vb. öğesinin 1 nesne nesnesi üreteceği ve önbelleğe alınan nesne kimliklerini kullanmayı bekleyen herhangi bir işlemin sonraki sorgular yeni bir ürün üreteceğinden başarısız olacağı anlamına gelebilir. sonuç. ArcGIS'in nesne kimliği sütununu sizin için eklemesini sağlamak için sorgu tablosu aracını oluştur seçeneğine baktınız mı?
Rob McPherson

2

Bu konuyu görüntüleyen herkese teşekkürler.

İşlem biraz karmaşıktır, ancak karmaşık bir sorguyu katman olarak kaydetmek mümkündür, sadece kurnaz bir düşünce alır. Bu konuda henüz performans üzerindeki etkilerinin ne olduğundan emin değilim, ama bunu güncel tutmaya çalışacağım. Ayrıca, ArcMap'teki noktaları görüntüleme konusunda sorun yaşıyorum, ancak daha fazla araştırma yapacağım.

Her şeyden önce, RDBMS'nizde karmaşık uzamsal görünüm oluşturun. Görünümde daha sonra ArcSDE'ye kayıt için kullanılabilecek bir INTEGER UNIQUE NOT NULL sütununuz olduğundan emin olun.

Sorularım buna benzer bir grup UNION ALL idi:

    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

Bu şemada, tüm nesnelerim bir GUID olan PK ID_UNIQUE_ID olarak var. ObjectID'lerim özellik sınıflarında kendilerini tekrarladılar, bu nedenle yedek ObjectID için iyi bir seçim değil.

(Benim durumumda) tüm sorgularımı sarmak ve etkili bir "objectID" olan bir görünüm oluşturmak için Oracle'ın rownum sanal sütununu kullandım. Bir göz at:

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
)

Yukarıdaki sorgu ile görünüm oluşturdum ve bunun üzerine bir görünüm oluşturdum. Bu görüş, arcsde içindeki mekansal katman haline gelecektir. Bu oldukça kolay bir işlemdir.

Bundan sonra, mekansal görüşümü bir katman olarak kaydetmeye çalıştım, ancak her zaman başarısız oldum. Üstünde bir görünüm oluşturduğunuzda, ArcSDE, sdetable -o description yardımcı programına göre FID değerinin bir sayı (38,10), kayan nokta sayısı olduğunu varsayar.

Oracle'da, görünümün tanımı buydu:

  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 sütununu alçı ile değiştirdikten sonra, her şey yolunda gitti. Katmanın kaydına geçtim ve iyi gitti.

DÜZENLE

Katman ArcCatalog'da bir nokta katmanı olarak görüntülenir ve ArcMap'taki tabloyu her zamanki gibi görebilir ve seçebilirim (noktalar bile vurgulanır), ancak bunları simbolize edemiyorum ve normal bir katman olarak görüntüleyemiyorum. Düşünceler var mı?

Bunun neden olduğu hakkında bir fikri olan var mı? ArcMap içindeki uzamsal nesneleri göremem dışında her şey yolunda. Herhangi bir fikir?


1
Dizinlerinizi güncel tutarsanız, bu görünümün performansıyla çok şey yapabilirsiniz, dizinlerin her gece yeniden oluşturulmasını sağlamak için çok sayıda işlem içeren sistemlerde çalışmak üzere zamanlanmış işler ayarladım. Sonra birleşimlerinizi yaparken onlar daha iyi ayarlanmış.
DEWright

Arccatalog'ten arcmap'te yeni bir boş haritaya sürükleyip bırakırsanız ne olur?
Kirk Kuykendall

ArcMap TOC'ye ekler, ancak hiçbir şey oluşturmaz. Garip olan şey, satırları seçebilmem ve o satırın geometrisinin çizilmesidir (seçili). Satırlar seçilmediğinde hiçbir şey çizilmez. ArcMap üzerinden sorgulama da işe yarar.
George Silva

1
İlginç. Arcobjects kodu yazarsanız, IGeoDataset.Extent özellik katmanı için neye benziyor? Ve özellik sınıfı için?
Kirk Kuykendall

Bunu deneyeceğim! Bakalım.
George Silva

2

Lütfen aşağıdaki komutu çalıştırmayı deneyin: sdelayer -o alter -l [-S] [-k] [-i | | ] [-s] [-D] -E hesap -u [-p]


Yorum için teşekkürler. Zaten katmanın boyutunu yeniden hesaplamaya çalıştı.
George Silva

2

Deneyimlerime göre, bir katman Arc'da görüntülenmediğinde, bunun nedeni uzamsal dizinin eksik olmasıdır. Görünümler, kaynak tablonun uzamsal dizinini kullanır, ancak kayıt ifadenizdeki görünüm için uzamsal bir dizin oluşturduğunuz görülüyor.

Kaynak tablolardan birinin uzamsal dizinleri var mı? Değilse, bunları Oracle'da oluşturmayı ve görünümü -g olmadan yeniden kaydetmeyi deneyin.

Başka bir olasılık, iki tablodan geometriyi tek bir sütunda birleştiriyor olmanızdır, bunun hayır-hayır olup olmadığından emin değil, daha önce denemedim.


Ben Matt'i deneyeceğim. Aynı zamanda birden fazla geometriyi başka bir görünümde bir araya getiriyorum ve bunun çalışması çok önemli. Bir görünüm üzerinde linestringler yapıyoruz ve bu birleşmenin bu katmanlar için tek destek noktası olması gerekiyordu. Bu yaklaşımı görmediğim için başka yaklaşımlar deniyorum.
George Silva
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.