Đăng ký lớp và chế độ xem SDE


11

Tôi đang xây dựng các chế độ xem đơn giản đối với ArcSDE Oracle RAC 10g. Các cột SHAPE của tôi là kiểu dữ liệu SDO_GEOMETRY. ArcSDE 9.3.1.

Tôi có một số bảng điểm, với các phác thảo sau:

ID (Hướng dẫn) Tên (chuỗi) Hình dạng (SHAPE)

Tôi đã xây dựng một cái nhìn đơn giản về điều này trong 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

Khung nhìn trong Oracle được tạo ra tốt. Tôi đã đăng ký khung nhìn này với dòng lệnh:

sdetable -o created_view -T POINTS -t VW_POINTS -c Id, Name, SHAPE, v.v.

Khung nhìn ArcSDE được tạo lại, rất tốt. Tôi có thể sử dụng ArcObjects để truy vấn nó, v.v. Bây giờ tôi cần tạo một Layer. Tôi đã thử các công cụ dòng lệnh, đăng ký sdelayer -o, nhưng tôi không thành công. Nó cho tôi một tin nhắn, nói rằng quan điểm không bị áp đảo.

Tôi sẽ cần phải làm điều này nhiều lần, đôi khi sử dụng cú pháp phức tạp để xây dựng chế độ xem.

Vấn đề là gì? Làm cách nào có thể hình dung các chế độ xem không gian này dưới dạng các lớp SDE (Tôi không cần chỉnh sửa chúng, chỉ cần xem chúng trong không gian ArcMap)

Cảm ơn các đầu vào!

BIÊN TẬP

Đây là một ảnh chụp màn hình trong ArcMap, cho sự tinh tế của bạn: P

Ảnh chụp màn hình ArcMap cho hạnh phúc của bạn :

Theo yêu cầu, ở đây có mô tả_long

// created_view C: \ Users \ H> sdetable -o create_view -s server -i port -u user -p pass -T view_airspace_point -t vw_airspace_point_oracle -c "*"

tại thời điểm này tôi đã thay đổi quan điểm về nhà tiên tri, bao gồm cả vai diễn dưới dạng số (38,0) trước khi đăng ký.

// đăng ký lớp C: \ Users \ H> sdelayer -o đăng ký -l view_airspace_point, hình dạng -C OBjectID, USER - g RTREE -s server -i port -u user -p pass -ep -P CAO

ArcSDE 9.3.1 cho Oracle10g Build 2784 Thứ ba 27 tháng 10 10:51:14 2009

Tiện ích quản trị lớp

Mô tả lớp ....:

Chủ sở hữu bảng ..........: SIGMAGIS2

Tên bảng ...........: VIEW_AIRSPACE_POINTS

Cột không gian .......: SHAPE

Id lớp .............: 1398

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

Id hình dạng tối thiểu .....: 1

Bù lại ...............:

sai: -180.000000

chim ưng: -90.000000

Đơn vị hệ thống .........: 994200.000000

Độ lệch Z ..............: 0,000000

Đơn vị Z ..............: 1.000000

Đo bù đắp .......:

Đơn vị đo ........:

Dung sai cụm XY .: 2.0

Chỉ số không gian ........

tham số: SPIDX_RTREE

tồn tại: Có

dạng mảng: -2,0,0

Phong bì lớp .......:

tối thiểu: -180,00000, tối thiểu: -90,00000

tối đa: 180,00000, tối đa: 90,00000

Các thực thể .............: p

Loại lớp ...........: Loại không gian nội tuyến

Ngày tạo ........: 28/11/11 09:28:45

Chế độ I / O .............: BÌNH THƯỜNG

Tự động khóa ..........: Đã bật

Độ chính xác .............: Cao

Đặc quyền người dùng ......: CHỌN, CẬP NHẬT, XÁC NHẬN, XÓA

Hệ thống tọa độ ....: GEOGCS ["Kinh độ / Vĩ độ [WGS 84]", DATUM ["WGS 84", SPHEROID ["WGS 84", 6378137.0,298.257223563]], PRIMEM ["Greenwich", 0.0], UNIT [ "Số thập phân

Bằng cấp ", 0,0174532925199433]]

Cấu hình lớp ..: DEFAULTS


Vì vậy, bạn cần phải tạo một tập tin lớp?
DEWright

Không, tôi cần tạo một chế độ xem bên trong cơ sở dữ liệu địa lý, hoạt động giống như một chiếc kính viễn vọng.
George Silva

Sau đó, bạn cần tạo ra chế độ xem không gian như bạn nói và tôi đề cập dưới đây; Lý do duy nhất tôi có thể thấy nó không hiển thị dưới dạng lớp Spatial là do quyền. ArcGIS / ArcSDE đã không đăng ký đúng cách; vì đó chỉ là mục đích của một lớp không gian, để tham gia dữ liệu không gian và bảng một cách thống nhất.
DEWright

Khi bạn chạy mô tả_long như 'sdetable -o description_long -t victoria -u sasha -p Polar.bear -i esri_40' trên quan điểm của bạn, bạn sẽ nhận được kết quả gì? Chúng ta cần xem liệu cột không gian và loại thực thể có được đặt và tham chiếu đúng không.
DEWright

1
DE cảm ơn đã cảnh báo. Tôi đã làm mọi thứ chính xác, nhưng vẫn không hoạt động. :( rất frustating Điều này có thể được thực hiện với một đống OpenSource. Khá dễ dàng .
George Silva

Câu trả lời:


4

Tôi đã có điều này (và các vấn đề tương tự) trong quá khứ. Nó luôn đi xuống hai điều:

  1. Bảng không gian có một số hình học bị hỏng / không hợp lệ. Vấn đề với ArcMap là ngay khi tìm thấy hình học không hợp lệ, nó sẽ dừng hiển thị.

  2. Việc đăng ký lớp không chính xác. Điều tôi cũng nhận thấy là đăng ký sdelayer không phải lúc nào cũng hoạt động chính xác và bạn phải 'xoa bóp' các mục đăng ký.

Vì vậy, để kiểm tra xem lớp có hợp lệ hay không, hãy sử dụng FIRST hàm SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT . Sau đó, sử dụng chức năng xác thực ArcSDE sdelayer -o Feature_info -r không hợp lệ ... để nhận các tính năng không hợp lệ theo ArcSDE. Có lẽ cùng với danh sách sdelayer (xem tại đây )

Để kiểm tra đăng ký, bạn phải quay lại lược đồ ArcSDE. Các bảng kiểm soát đăng ký là: SDE.LAYERS, SDE.TABLE_REGISTRY, SDE.COLUMN_REGISTRY, SDE.SPATIAL_REFERENCES và SDE.GEOMETRY_COLUMNS. Một mẹo tôi sử dụng là tôi thường có một lớp 'cơ sở' tương tự (liên quan đến các loại hình học và các cột khóa chính) mà HIỂN THỊ trong ArcMap. Sau đó, tôi so sánh các hồ sơ đăng ký, betweeen lớp hiển thị và sau đó một lớp không. Bạn sẽ ngạc nhiên khi thấy sự khác biệt thay đổi 1 trong một cột số nguyên tạo ra! :-)

Mẹo về COLUMN_REGISTRY - tất cả những gì bạn phải làm là đảm bảo rằng cột khóa Chính (được định nghĩa là ROWID_COLUMN trong SDE.TABLE_REGISTRY) và Cột không gian là chính xác (hoặc giống như lớp hiển thị). Bỏ qua tất cả các cột khác. Nếu bạn thêm lớp trong ArcMap đã đăng nhập với tư cách là chủ sở hữu bảng, các mục bị thiếu trong bảng COLUMN_REGISTRY sẽ được thêm tự động.

Hãy cho tôi biết nếu điều này sẽ giúp!


mapholic cảm ơn cho đầu vào! Tôi sẽ thử nó vào ngày mai! Tôi hy vọng bạn là đúng! Cảm ơn!
George Silva

trả lời bản đồ. Điều này làm việc cho các loại đăng ký khác nhau, nhưng không phải cho đăng ký UNIONED. Tuy nhiên, đây là một mẹo tuyệt vời. Cảm ơn câu trả lời.
George Silva

6

Những gì bạn đang tìm kiếm là Chế độ xem không gian , bây giờ vấn đề chính duy nhất bạn sẽ thấy ở đây là bạn cần cẩn thận với các lĩnh vực bạn đang tham gia. Đây là một quá trình khá hay, tôi sử dụng nó ở khắp nơi mà tôi đã khái quát DB của mình để nói chuyện với dữ liệu không gian mỏng.

    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

Điều này sẽ giúp bạn đi đúng hướng đến những gì bạn muốn. Điều quan trọng là làm cho các lĩnh vực của bạn để ánh xạ chính xác. Tôi có xu hướng chỉ thực hiện chế độ xem với mức tối thiểu tôi cần, sau đó sử dụng Giao diện người dùng để chỉnh sửa chế độ xem đó một khi đã đăng ký trong SDE để thực hiện các chỉnh sửa chi tiết hơn.


Xin chào DE Tôi đã thử phương pháp này nhưng nó không hoạt động. Đối với những gì tôi hiểu là ArcSDE tạo ra lệnh "CREATE FORCE VIEW", nêu rõ các cột trước khi sử dụng và chỉ đăng ký các cột bạn khai báo trong mệnh đề. Tôi đã thử tạo một chế độ xem trống (chỉ sử dụng một lớp đối tượng để có định nghĩa hình học) và thay thế nó cho một định nghĩa khác. Ok, tôi có thể truy vấn điều này qua ArcMap, nhưng hình học KHÔNG được hiển thị trên bản đồ.
George Silva

1
Nếu bạn kéo chế độ xem không gian từ ArcCatalog sang ArcMap, nó không hiển thị với dữ liệu hình học?
Britt Wescott

Như đã nêu trước đó, lớp không hiển thị trong bản xem trước ArcMap hoặc ArcCatalog, nhưng nó được liệt kê dưới dạng một lớp của loại hình học chính xác và nó có thể truy vấn được trong ArcMap.
George Silva

1
Khi bạn chạy mô tả_long như 'sdetable -o description_long -t victoria -u sasha -p Polar.bear -i esri_40' trên quan điểm của bạn, bạn sẽ nhận được kết quả gì? Chúng ta cần xem liệu cột không gian và loại thực thể có được đặt và tham chiếu đúng không.
DEWright

Tôi sẽ đăng kết quả ở đây!
George Silva

3

Một điều tôi thấy thiếu là một cột số nguyên duy nhất mà ArcObjects có thể sử dụng cho ID đối tượng. Hãy thử tạo một chuỗi duy nhất sẽ duy trì các giá trị duy nhất cho cột id này. Sau đó tạo các kích hoạt chèn trên mỗi bảng để điền vào cột id với chuỗi.nextval.

Trong lệnh đăng ký sdelayer -o của bạn, hãy đảm bảo đặt cờ -C thành cột id số nguyên của bạn với từ khóa USER để esri không cố gắng quản lý cột cho bạn.


1
Xin chào jrockers, quá trình đăng ký chỉ hoạt động tốt. đọc câu trả lời của riêng tôi cho chủ đề. Tôi đang sử dụng một cột được tạo bởi Oracle (ROWNUM) dưới dạng số (38,0). Cảm ơn vì tiền boa, nhưng tôi đã thử nó.
George Silva

3

Tôi đã quét các câu trả lời và dường như không ai quan sát thấy rằng các truy vấn hợp nhất là một vấn đề đối với các quan điểm không gian với ArcGIS. điều này là do bạn gần như chắc chắn sẽ kết thúc với các đối tượng trùng lặp. Điều tương tự cũng đúng với các truy vấn tham gia bên trong nơi các vị từ tham gia không đảm bảo một bản ghi "cha mẹ" duy nhất. trong cả hai trường hợp mặc dù chế độ xem có thể phù hợp với tất cả các yêu cầu đăng ký, nó sẽ không hoạt động chính xác


Cảm ơn các Rob đầu vào. Nếu bạn nhìn kỹ vào khung cảnh tôi đã viết, nó sẽ tạo ra các OID khi đang sử dụng Oracles ROWNUM. Họ được đảm bảo là duy nhất.
George Silva

1
Tôi không bị thuyết phục 100% về việc sử dụng rownum nếu dữ liệu đang được hiển thị trong arcmap (ví dụ). Rownum là một chức năng của bộ truy vấn oracle. do đó, mỗi khi bạn thực hiện một truy vấn, bạn sẽ nhận được một tập hợp các rownums mới bắt đầu từ 1. Điều này có thể có nghĩa là mỗi pan / zoom, v.v. sẽ tạo ra một đối tượng là 1 và bất kỳ quá trình nào mong muốn sử dụng các đối tượng được lưu trong bộ nhớ cache sẽ thất bại vì các truy vấn tiếp theo sẽ tạo ra một đối tượng mới kết quả. Bạn đã xem công cụ tạo bảng truy vấn như là một tùy chọn để có được ArcGIS để thêm cột objectid cho bạn chưa?
Rob McPherson

2

Cảm ơn tất cả những người đã xem chủ đề này.

Vâng, quá trình này hơi phức tạp, nhưng có thể đăng ký một truy vấn phức tạp như một lớp, nó chỉ cần một số suy nghĩ xảo quyệt. Tôi không chắc ý nghĩa của việc này là gì, nhưng tôi sẽ cố gắng cập nhật thông tin này. Tôi cũng gặp vấn đề khi xem các điểm trong ArcMap, nhưng tôi sẽ điều tra thêm.

Trước hết, tạo chế độ xem không gian phức tạp trong RDBMS của bạn. Chỉ cần chắc chắn rằng bạn có một cột INTEGER UNIITE NOT NULL trong chế độ xem, có thể được sử dụng sau này để đăng ký với ArcSDE.

Các truy vấn của tôi chỉ là một loạt UNION ALL, tương tự như sau:

    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

Trong lược đồ này, tất cả các đối tượng của tôi có PK ID_UNIQUE_ID, là GUID. Các ObjectID của tôi lặp đi lặp lại trên các lớp đối tượng, vì vậy, không phải là một lựa chọn tốt cho ObjectID thay thế của chúng tôi.

Tôi đã sử dụng (trong trường hợp của tôi) cột ảo rownum của Oracle để bọc tất cả các truy vấn của tôi và tạo ra một khung nhìn có "objectID" hiệu quả. Hãy xem:

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
)

Tôi đã tạo chế độ xem với truy vấn ở trên và tạo chế độ xem trên đầu trang. Khung nhìn này sẽ trở thành lớp không gian bên trong arcsde. Đây là một quá trình khá dễ dàng.

Sau đó, tôi đã thử và cố gắng đăng ký chế độ xem không gian của mình dưới dạng một lớp, nhưng luôn thất bại. Khi bạn tạo chế độ xem trên đầu trang, ArcSDE giả định rằng FID là SỐ (38,10), số dấu phẩy động, theo chương trình tiện ích mô tả sdetable -o.

Trong Oracle, đây là định nghĩa cho khung nhìn:

  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;

Sau khi tôi thay thế cột fid bằng dàn diễn viên, mọi thứ đều hoạt động tốt. Tôi đã tiến hành đăng ký lớp và nó đã đi tốt.

BIÊN TẬP

Lớp hiển thị trong ArcCatalog dưới dạng một lớp điểm và tôi có thể thấy và chọn bảng trong ArcMap như bình thường (các điểm thậm chí được tô sáng), nhưng tôi không thể mô phỏng chúng và xem chúng như một lớp thông thường. Bất kỳ khó khăn?

Bất cứ ai có bất kỳ ý tưởng tại sao điều này xảy ra? Mọi thứ đều ổn, ngoại trừ việc tôi không thể nhìn thấy các đối tượng không gian bên trong ArcMap. Có ý kiến ​​gì không?


1
Bạn có thể làm rất nhiều với hiệu suất của chế độ xem đó nếu bạn luôn cập nhật các chỉ mục của mình, tôi đã đặt các công việc được lên lịch để chạy trên các hệ thống có số lượng giao dịch cao để giữ lại các chỉ mục mỗi đêm. Sau đó, khi bạn đang thực hiện tham gia của bạn, họ được điều chỉnh tốt hơn.
DEWright

Điều gì xảy ra nếu bạn kéo và thả từ arccatalog vào một bản đồ trống mới trong arcmap?
Kirk Kuykendall

ArcMap thêm nó vào TOC, nhưng nó không hiển thị gì cả. Điều kỳ lạ là tôi có thể chọn các hàng và hình dạng của hàng đó sẽ vẽ (được chọn). Khi các hàng không được chọn, không có gì được rút ra. Truy vấn qua ArcMap cũng hoạt động.
George Silva

1
Hấp dẫn. Nếu bạn viết mã arcobjects thì IGeoDataset.Extent trông như thế nào đối với featurelayer? Và cho các featureclass?
Kirk Kuykendall

Tôi sẽ thử xem! Hãy xem nào.
George Silva

2

Vui lòng thử chạy lệnh sau: sdelayer -o thay đổi -l [-S] [-k] [-i | | ] [-s] [-D] -E calc -u [-p]


Cảm ơn đã bình luận. Đã cố gắng để tính lại phạm vi của lớp.
George Silva

2

Theo kinh nghiệm của tôi, khi một lớp không hiển thị trong Arc, đó là do chỉ số không gian bị thiếu. Lượt xem sử dụng chỉ mục không gian của bảng nguồn, nhưng có vẻ như bạn đang tạo chỉ mục không gian cho chế độ xem trong tuyên bố đăng ký của mình.

Các bảng nguồn có các chỉ mục không gian không? Nếu không, hãy thử tạo chúng trong Oracle và đăng ký lại chế độ xem mà không có -g.

Một khả năng khác là bạn đang kết hợp hình học từ hai bảng vào một cột duy nhất, không chắc đó có phải là không, chưa từng thử nó trước đây.


Tôi sẽ thử Matt. Tôi cũng kết hợp nhiều hình học thành một trong một góc nhìn khác và điều quan trọng là điều này hoạt động. Chúng tôi đang xây dựng các linestrings trên một khung nhìn và quan điểm hợp nhất đó được cho là điểm hỗ trợ duy nhất cho các lớp đó. Tôi đang thử các cách tiếp cận khác, vì tôi không thấy điều này xảy ra.
George Silva
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.