Estou construindo visualizações simples em relação ao ArcSDE Oracle RAC 10g. Minhas colunas SHAPE são do tipo de dados SDO_GEOMETRY. ArcSDE 9.3.1.
Eu tenho várias tabelas de pontos, com o seguinte esboço:
ID (Guid) Nome (string) Forma (SHAPE)
Eu construí uma visão simples, como esta no 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
A exibição no Oracle é criada perfeitamente. Eu registrei essa visualização na linha de comando:
sdetable -o create_view -T PONTOS -t VW_POINTS -c Id, Nome, FORMA etc
A visualização do ArcSDE é criada novamente, tudo bem. Posso usar o ArcObjects para consultá-lo, etc. Agora preciso criar uma camada. Eu tentei as ferramentas de linha de comando, sdelayer -o register, mas não tive sucesso. Me dá uma mensagem dizendo que as visualizações não são suportadas.
Precisarei fazer isso várias vezes, às vezes usando sintaxe complexa para criar a exibição.
Qual é o problema? Como visualizar essas visualizações espaciais como camadas SDE (não preciso editá-las, basta visualizá-las espacialmente dentro do ArcMap)
Obrigado pela contribuição!
EDITAR
Esta é uma captura de tela no ArcMap, para sua descrição: P
Screenshot do ArcMap para sua felicidade :
Conforme solicitado, a seguir vem a descrição_longo
// create_view C: \ Users \ H> sdetable -o create_view -s server -i port -u user -p pass -T view_airspace_points -t vw_airspace_points_oracle -c "*"
nesse ponto, alterei a visão do oracle, incluindo um elenco como numérico (38,0) antes do registro.
// registra a camada C: \ Users \ H> sdelayer -o registre -l view_airspace_points, shape -C OBJECTID, USER - servidor g RTREE -s servidor -i porta -u usuário -p pass -ep -P HIGH
ArcSDE 9.3.1 para Oracle10g Build 2784 Ter 27 de outubro 10:51:14 2009
Utilitário de administração de camada
Descrição da camada ....:
Proprietário da tabela ..........: SIGMAGIS2
Nome da tabela ...........: VIEW_AIRSPACE_POINTS
Coluna espacial .......: SHAPE
ID da camada .............: 1398
SRID .................: 79
Identificação mínima da forma .....: 1
Deslocamento ...............:
falsex: -180.000000
falsey: -90.000000
Unidades do sistema .........: 994200.000000
Deslocamento Z ..............: 0.000000
Unidades Z ..............: 1.000000
Medir deslocamento .......:
Unidades de medida ........:
Tolerância de cluster XY.: 2.0
Índice espacial ........:
parâmetro: SPIDX_RTREE
existe: sim
formulário da matriz: -2,0,0
Envelope de camada .......:
minx: -180.00000, miny: -90.00000
maxx: 180.00000, maxy: 90.00000
Entidades .............: p
Tipo de camada ...........: Tipo espacial em linha
Data de criação ........: 28/06/11 09:28:45
Modo de E / S .............: NORMAL
Bloqueio automático ..........: Ativado
Precisão .............: Alta
Privilégios de usuário ......: SELECT, UPDATE, INSERT, DELETE
Sistema de coordenadas ....: GEOGCS ["Longitude / Latitude [WGS 84]", DATUM ["WGS 84", ESFÉIDE ["WGS 84", 6378137.0,298.257223563]], PRIMEM ["Greenwich", 0,0], UNIDADE [ "Decimal
Degree ", 0,0174532925199433]]
Configuração da camada ..: PADRÕES
fonte
Respostas:
Eu tive isso (e problemas semelhantes) no passado. Sempre se resumia a duas coisas:
A tabela espacial tinha algumas geometrias corrompidas / inválidas. O problema com o ArcMap é que, assim que encontrar uma geometria inválida, ele interromperá a renderização.
O registro da camada está incorreto. O que também descobri é que o registro sdelayer -o nem sempre funciona corretamente e você precisa 'massagear' as entradas de registro.
Portanto, para verificar se a camada é válida, use PRIMEIRO a função SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT . Em seguida, use a função de validação do ArcSDE sdelayer -o feature_info -r invalid ... para obter recursos inválidos de acordo com o ArcSDE. Provavelmente junto com a lista sdelayer -o (veja aqui )
Para verificar o registro, você precisa voltar ao esquema do ArcSDE. As tabelas que controlam o registro são: SDE.LAYERS, SDE.TABLE_REGISTRY, SDE.COLUMN_REGISTRY, SDE.SPATIAL_REFERENCES e SDE.GEOMETRY_COLUMNS. Um truque que eu uso é que geralmente tenho uma camada 'base' que é semelhante (no que diz respeito aos tipos de geometria e colunas da chave primária) que EXIBE no ArcMap. Em seguida, comparo os registros de registro, entre a camada que é exibida e a que não é exibida. Você ficará surpreso ao descobrir a diferença que uma alteração de 1 em uma coluna inteira faz! :-)
Uma dica sobre COLUMN_REGISTRY - tudo o que você precisa fazer é garantir que a coluna Chave Primária (que é definida como ROWID_COLUMN no SDE.TABLE_REGISTRY) e a Coluna Espacial estejam corretas (ou iguais à camada exibida). Ignore todas as outras colunas. Se você adicionar a camada no ArcMap conectada como proprietário da tabela, as entradas ausentes na tabela COLUMN_REGISTRY serão adicionadas automaticamente.
Avise-me se isso ajudar!
fonte
O que você está procurando é uma Visão espacial , agora a única questão importante que você verá aqui é que você precisa ter cuidado com os campos nos quais está ingressando. Esse é um processo muito bom, eu uso em todo o lugar em que generalizei meu DB para conversar com dados espaciais finos.
Isso deve ajudá-lo a encontrar o que deseja. A chave é fazer com que seus campos sejam mapeados corretamente. Costumo apenas fazer a visualização com o mínimo necessário e, em seguida, usar uma interface do usuário para editar essa visualização, uma vez registrada no SDE, para fazer meus ajustes mais detalhados.
fonte
Uma coisa que vejo faltando é uma coluna inteira exclusiva que o ArcObjects pode usar para o ID do objeto. Tente criar uma única sequência que manterá valores exclusivos para essa coluna de ID. Em seguida, crie disparadores de inserção em cada uma das tabelas para preencher a coluna de ID com o sequence.nextval.
No comando sdelayer -o register, certifique-se de definir o sinalizador -C na coluna de número inteiro com a palavra-chave USER, para que esri não tente gerenciar a coluna para você.
fonte
Eu meio que examinei as respostas e ninguém parece ter observado que as consultas de união são um pouco problemáticas para visualizações espaciais com o ArcGIS. isso ocorre porque você quase certamente acabará com objetos duplicados. O mesmo se aplica às consultas de junção interna em que os predicados de junção não garantem um registro "pai" exclusivo. nos dois casos, embora a vista possa estar em conformidade com todos os requisitos de registro, ela não se comportará corretamente
fonte
Obrigado a todos que viram este tópico.
Bem, o processo é um pouco complicado, mas é possível registrar uma consulta complexa como uma camada, basta um pensamento astuto. Ainda não tenho certeza de quais são as implicações no desempenho nisso, mas tentarei manter isso atualizado. Também estou com problemas para visualizar os pontos no ArcMap, mas vou investigar mais.
Primeiro, crie uma visualização espacial complexa no seu RDBMS. Apenas certifique-se de ter uma coluna INTEGER UNIQUE NOT NULL na visualização, que pode ser usada posteriormente para registro no ArcSDE.
Minhas consultas eram apenas um monte de UNION ALL, semelhante a este:
Nesse esquema, todos os meus objetos têm como PK ID_UNIQUE_ID, que é um GUID. Meus ObjectIDs se repetiram nas classes de recursos, portanto, não é uma boa opção para nosso ObjectID substituto.
Usei (no meu caso) a coluna virtual rownum do Oracle para agrupar todas as minhas consultas e criar uma exibição que tivesse um "objectID" efetivo. Dê uma olhada:
Criei a visualização com a consulta acima e criei uma visualização em cima dela. Essa visão se tornará a camada espacial dentro do arcsde. Este é um processo bastante fácil.
Depois disso, tentei registrar minha visualização espacial como uma camada, mas sempre falhava. Quando você cria uma visão sobre ela, o ArcSDE assume que o FID é um número (38,10), um número de ponto flutuante, de acordo com o programa utilitário sdetable -o description.
No Oracle, esta era a definição para a exibição:
Depois de substituir a coluna fid por um elenco, tudo funcionou bem. Eu procedi ao registro da camada e ela correu bem.
EDITAR
A camada é exibida no ArcCatalog como uma camada de pontos e eu posso ver e selecionar a tabela no ArcMap como de costume (os pontos estão destacados), mas não consigo simbolizá-los e visualizá-los como uma camada regular. Algum pensamento?
Alguém tem alguma idéia de por que isso acontece? Está tudo bem, exceto que não consigo ver os objetos espaciais dentro do ArcMap. Alguma ideia?
fonte
Por favor, tente executar o seguinte comando: sdelayer -o alter -l [-S] [-k] [-i | | ] [-s] [-D] -E calc -u [-p]
fonte
Na minha experiência, quando uma camada não está sendo exibida no Arc, é porque o índice espacial está ausente. As visualizações usam o índice espacial da tabela de origem, mas parece que você está criando um índice espacial para a visualização na sua declaração de registro.
Alguma das tabelas de origem possui índices espaciais? Caso contrário, tente criá-los no Oracle e registrar novamente a exibição sem o -g.
Outra possibilidade é que você esteja combinando geometria de duas tabelas em uma única coluna, sem ter certeza de que não, não tente antes.
fonte