Je crée des vues simples sur un ArcSDE Oracle RAC 10g. Mes colonnes SHAPE sont de type de données SDO_GEOMETRY. ArcSDE 9.3.1.
J'ai plusieurs tableaux de points, avec le plan suivant:
ID (Guid) Nom (chaîne) Forme (SHAPE)
J'ai construit une vue simple dans 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
La vue dans Oracle est très bien créée. J'ai enregistré cette vue avec la ligne de commande:
sdetable -o create_view -T POINTS -t VW_POINTS -c Id, nom, FORME, etc.
La vue ArcSDE est à nouveau créée, très bien. Je peux utiliser ArcObjects pour l'interroger, etc. J'ai besoin maintenant de créer une couche. J'ai essayé les outils de ligne de commande, sdelayer -o register, mais je n'ai pas réussi. Cela me donne un message, disant que les opinions ne sont pas soutenues.
Je devrai le faire plusieurs fois, en utilisant parfois une syntaxe complexe pour construire la vue.
Quel est le problème? Comment visualiser ces vues spatiales sous forme de couches SDE (je n'ai pas besoin de les modifier, il suffit de les visualiser spatialement dans ArcMap)
Merci pour la contribution!
ÉDITER
Ceci est une capture d'écran dans ArcMap, pour votre deligth: P
Capture d'écran ArcMap pour votre bonheur :
Comme demandé, voici le decrire_long
// 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 "*"
à ce stade, j'ai modifié la vue sur oracle, y compris une distribution numérique (38,0) avant l'enregistrement.
// enregistrer la couche C: \ Users \ H> sdelayer -o register -l view_airspace_points, shape -C OBJECTID, USER - g RTREE -s server -i port -u user -p pass -ep -P HIGH
ArcSDE 9.3.1 pour Oracle10g Build 2784 mar 27 oct 10:51:14 2009
Utilitaire d'administration des couches
Description de la couche ....:
Propriétaire de la table ..........: SIGMAGIS2
Nom de la table ...........: VIEW_AIRSPACE_POINTS
Colonne spatiale .......: FORME
ID de couche .............: 1398
SRID .................: 79
ID de forme minimum .....: 1
Décalage ...............:
falsex: -180.000000
falsey: -90.000000
Unités système .........: 994200.000000
Décalage Z ..............: 0,000000
Unités Z ..............: 1.000000
Décalage de mesure .......:
Unités de mesure ........:
Tolérance de cluster XY.: 2.0
Index spatial ........:
paramètre: SPIDX_RTREE
existe: Oui
forme de tableau: -2,0,0
Enveloppe de calque .......:
minx: -180.00000, miny: -90.00000
maxx: 180.00000, maxy: 90.00000
Entités .............: p
Type de couche ...........: Type spatial en ligne
Date de création ........: 28/06/11 09:28:45
Mode E / S .............: NORMAL
Verrouillage automatique ..........: activé
Précision .............: élevée
Privilèges utilisateur ......: SELECT, UPDATE, INSERT, DELETE
Système de coordonnées ....: GEOGCS ["Longitude / Latitude [WGS 84]", DATUM ["WGS 84", SPHEROID ["WGS 84", 6378137.0,298.257223563]], PRIMEM ["Greenwich", 0,0], UNIT [ "Décimal
Degré ", 0,0174532925199433]]
Configuration de la couche ..: PAR DÉFAUT
la source
Réponses:
J'ai eu cela (et des problèmes similaires) dans le passé. Cela se résumait toujours à deux choses:
La table spatiale avait des géométries corrompues / invalides. Le problème avec ArcMap est que dès qu'il trouve une géométrie non valide, il arrête le rendu.
L'enregistrement de couche est incorrect. Ce que j'ai également constaté, c'est que le registre sdelayer -o ne fonctionne pas toujours correctement et que vous devez «masser» les entrées d'enregistrement.
Donc, pour vérifier si la couche est valide, utilisez d' abord la fonction SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT . Utilisez ensuite la fonction de validation ArcSDE sdelayer -o feature_info -r invalid ... pour obtenir des entités non valides selon ArcSDE. Probablement avec sdelayer -o list (voir ici )
Pour vérifier l'enregistrement, vous devez revenir dans le schéma ArcSDE. Les tables qui contrôlent l'enregistrement sont: SDE.LAYERS, SDE.TABLE_REGISTRY, SDE.COLUMN_REGISTRY, SDE.SPATIAL_REFERENCES et SDE.GEOMETRY_COLUMNS. Une astuce que j'utilise est que j'ai généralement une couche «de base» qui est similaire (en ce qui concerne les types de géométrie et les colonnes de clé primaire) à DISPLAYS dans ArcMap. Je compare ensuite les enregistrements d'enregistrement, entre la couche qui s'affiche et celle qui ne le fait pas. Vous serez étonné de voir quelle différence fait un changement de 1 dans une colonne entière! :-)
Un conseil sur COLUMN_REGISTRY - tout ce que vous avez à faire est de vous assurer que la colonne de clé primaire (ce qui est défini comme ROWID_COLUMN dans SDE.TABLE_REGISTRY) et la colonne spatiale sont correctes (ou identiques à la couche qui s'affiche). Ignorez toutes les autres colonnes. Si vous ajoutez la couche dans ArcMap connecté en tant que propriétaire de la table, les entrées manquantes dans la table COLUMN_REGISTRY seront ajoutées automatiquement.
Faites-moi savoir si cela aide!
la source
Ce que vous recherchez est une vue spatiale , maintenant le seul problème majeur que vous verrez ici est que vous devez faire attention aux champs sur lesquels vous vous joignez. C'est un processus assez agréable, je l'utilise partout où j'ai généralisé ma base de données pour parler avec des données spatiales minces.
Cela devrait vous aider à atteindre ce que vous voulez. La clé consiste à obtenir vos champs pour une carte correcte. J'ai tendance à faire la vue avec le minimum dont j'ai besoin, puis à utiliser une interface utilisateur pour modifier cette vue une fois enregistrée dans SDE pour faire mes réglages les plus fins.
la source
Une chose qui me manque est une colonne d'entier unique que ArcObjects peut utiliser pour l'ID d'objet. Essayez de créer une séquence unique qui conservera des valeurs uniques pour cette colonne id. Créez ensuite des déclencheurs d'insertion sur chacune des tables pour remplir la colonne id avec le sequence.nextval.
Dans votre commande sdelayer -o register, assurez-vous de définir l'indicateur -C sur votre colonne d'identifiant entier avec le mot clé USER afin que esri n'essaye pas de gérer la colonne pour vous.
la source
J'ai en quelque sorte analysé les réponses et personne ne semble avoir observé que les requêtes d'union sont un peu un problème pour les vues spatiales avec ArcGIS. c'est parce que vous vous retrouverez presque certainement avec des objectids en double. Il en va de même pour les requêtes de jointure interne où les prédicats de jointure ne garantissent pas un enregistrement "parent" unique. dans les deux cas, bien que la vue puisse être conforme à toutes les exigences d'enregistrement, elle ne se comportera pas correctement
la source
Merci à tous ceux qui ont consulté ce fil.
Eh bien, le processus est un peu compliqué, mais il est possible d'enregistrer une requête complexe en tant que couche, cela demande juste une réflexion astucieuse. Je ne sais pas encore quelles sont les implications sur les performances à ce sujet, mais je vais essayer de garder cela à jour. Je rencontre également des problèmes pour visualiser les points dans ArcMap, mais j'examinerai plus avant.
Tout d'abord, créez une vue spatiale complexe dans votre SGBDR. Assurez-vous simplement que vous avez une colonne INTEGER UNIQUE NOT NULL dans la vue, qui peut être utilisée plus tard pour l'enregistrement avec ArcSDE.
Mes requêtes n'étaient qu'un tas d'UNION ALL, similaire à ceci:
Dans ce schéma, tous mes objets ont comme PK ID_UNIQUE_ID, qui est un GUID. Mes ObjectIDs se sont répétés dans toutes les classes d'entités, donc ce n'est pas un bon choix pour notre ObjectID de substitution.
J'ai utilisé (dans mon cas) la colonne virtuelle rownum d'Oracle pour encapsuler toutes mes requêtes et créer une vue qui avait un "objectID" efficace. Regarde:
J'ai créé la vue avec la requête ci-dessus et créé une vue au-dessus. Cette vue deviendra la couche spatiale à l'intérieur de l'arcsde. C'est un processus assez simple.
Après cela, j'ai essayé et essayé d'enregistrer ma vue spatiale en tant que couche, mais j'ai toujours échoué. Lorsque vous créez une vue par-dessus, ArcSDE suppose que FID est un NUMBER (38,10), un nombre à virgule flottante, selon le programme utilitaire sdetable -o describe.
Dans Oracle, c'était la définition de la vue:
Après avoir remplacé la colonne fid par un casting, tout a bien fonctionné. J'ai procédé à l'enregistrement de la couche et tout s'est bien passé.
ÉDITER
La couche s'affiche dans ArcCatalog en tant que couche de points et je peux voir et sélectionner la table dans ArcMap comme d'habitude (les points sont même mis en surbrillance), mais je ne peux pas les simboliser et les visualiser comme une couche régulière. Des pensées?
Quelqu'un a une idée de pourquoi cela se produit? Tout va bien, sauf que je ne peux pas voir les objets spatiaux dans ArcMap. Des idées?
la source
Veuillez essayer d'exécuter la commande suivante: sdelayer -o alter -l [-S] [-k] [-i | | ] [-s] [-D] -E calc -u [-p]
la source
D'après mon expérience, lorsqu'une couche ne s'affiche pas dans Arc, c'est parce que l'index spatial est manquant. Les vues utilisent l'index spatial de la table source, mais il semble que vous créez un index spatial pour la vue dans votre déclaration d'enregistrement.
L'une des tables source a-t-elle des index spatiaux? Sinon, essayez de les créer dans Oracle et de réenregistrer la vue sans -g.
Une autre possibilité est que vous combinez la géométrie de deux tables dans une seule colonne, vous ne savez pas si c'est un non-non, vous ne l'avez pas essayé auparavant.
la source