Topologies d'une géodatabase dans PostgreSQL
Les topologies sont des règles qui garantissent l'intégrité des données et gèrent le comportement des classes d'entités spatialement reliées entre elles. Une topologie de géodatabase stocke des informations sur : les classes d'entités qui font partie de la topologie (elles doivent être dans le même jeu de données d'entité), la tolérance d'agrégat attribuée à la topologie, le classement relatif de chaque classe d'entités dans la topologie et la liste des règles qui s'appliquent à la topologie.
Pour en savoir plus sur les concepts liés aux topologies, reportez-vous aux rubriques Principes de base d'une topologie et Topologie dans ArcGIS.
Topologies dans ArcGIS for Desktop
Dans l'arborescence du Catalogue, les topologies s'affichent dans le jeu de données d'entité où figurent les classes d'entités participantes. La topologie est représentée avec l'icône suivante :
L'onglet Classes d'entités de la boîte de dialogue Propriétés de la topologie indique les classes d'entités du jeu de données d'entité qui participent à la topologie sélectionnée.
Cliquez sur l'onglet Règles pour afficher les règles qui s'appliquent à la topologie. Après la validation de la topologie, vous pouvez générer une liste des erreurs et des exceptions pour chaque règle à partir de l'onglet Erreurs.
Topologies dans une base de données PostgreSQL
Dans le SGBD, les topologies sont stockées dans la table gdb_items. Les règles associées à la topologie sont stockées dans la colonne definition.
Lorsque vous validez une topologie, les zones à valider et les erreurs topologiques rencontrées pour chaque topologie sont stockées dans un ensemble de tables de la structure de l'utilisateur connecté à la géodatabase. Il s'agit des tables t_<id>_dirtyareas, t_<id>_lineerrors, t_<id>_pointerrors et t_<id>_polyerrors. L'identifiant (ID) dans les noms de table correspond à l'identifiant de la topologie du champ datasetsubtype1 de la table gdb_items. Chaque table d'erreurs stocke la règle violée dans le champ toporuleid. Ce champ est lié au champ iteminfo de la table gdb_items.
Vous trouverez ci-dessous une définition des tables de zones à valider et des tables d'erreurs topologiques ainsi qu'un exemple des tables de topologie telles qu'elles apparaissent dans PostgreSQL.
t_<id>_dirtyareas
Cette table est créée lorsque vous validez une topologie.
Nom du champ |
Type de champ |
Description |
Nul ? |
---|---|---|---|
objectid |
integer |
Identifiant unique de l'entité de zone à valider dans la topologie |
NOT NULL |
isretired |
integer |
Ce code indique si la zone à valider a atteint le nombre maximal de sommets (250). Lorsque cette limite est atteinte, une nouvelle entité de zone à valider est créée et la zone existante est supprimée (la valeur passe à 1). 0 = Nombre limite de sommets non atteint ou 1 = Nombre limite de sommets atteint |
NOT NULL |
dirtyarea |
st_geometry geometry |
Shape, champ |
t_<id>_pointerrors, t_<id>_lineerrors et t_<id>_polyerrors
Toute violation des règles de topologie est représentée comme entité d'erreur. De même que les zones à valider, ces entités d'erreur sont stockées et gérées dans des tables d'erreurs topologiques distinctes. Ces tables ont une définition de structure presque identique, à l'exception des champs supplémentaires spécifiques au type de forme de l'erreur topologique. Comme leur nom l'indique, elles stockent les informations utiles sur les erreurs topologiques par type d'entité (ligne, point ou polygone).
Ces tables n'apparaissent dans votre base de données qu'à compter de la validation d'une topologie.
Nom du champ |
Type de champ |
Description |
Nul ? |
---|---|---|---|
objectid |
entier |
Identifiant unique de l'entité d'erreur topologique dans la table d'erreurs topologiques correspondante ; les erreurs topologiques n'ont pas d'identifiant unique dans la topologie, seulement dans leur table spécifique. |
NOT NULL |
originclassid |
entier |
Identifiant de classe d'objets de la classe d'entités d'origine |
NOT NULL |
originid |
entier |
Identifiant de l'entité de la classe d'entités d'origine liée à l'erreur topologique |
|
destclassid |
entier |
Identifiant de classe d'objets de la classe d'entités cible |
|
destid |
entier |
Identifiant de l'entité de la classe d'entités cible liée à l'erreur topologique |
|
toporuletype |
entier |
Type de règle de topologie ; correspond à une valeur de la constante esriTopologyRuleType |
NOT NULL |
toporuleid |
entier |
Identifiant de la règle de topologie stockée dans la colonne iteminfo de la table gdb_items |
NOT NULL |
isexception |
entier |
Code indiquant si l'erreur topologique a été marquée comme exception ou non. 0 = Non marquée comme exception (valeur par défaut) ; 1 = marquée comme exception |
NOT NULL |
shape |
st_geometry ou geometry |
Indique le type de forme |
Les tables de zones à valider et les tables d'erreurs topologiques sont créées dans la structure de l'utilisateur ayant créé la topologie, contrairement à l'autre table qui est une table système stockée dans la structure de l'administrateur de la géodatabase.
Le diagramme suivant présente les tables d'une topologie validée :
Les lignes pointillées indiquent les relations implicites entre colonnes.
Topologies dans un document d'espace de travail XML
Les topologies sont des types de jeux de données, dans les documents XML ils sont donc délimités par une balise DataElement de type FeatureDataset. Les règles de topologie sont incluses et regroupées avec une balise TopologyRule. Pour la topologie landbase_topology dans un jeu de données d'entité water, les informations dans un document XML se présentent comme suit :
<DatasetDefinitions xsi:type="esri:ArrayOfDataElement">
- <DataElement xsi:type="esri:DEFeatureDataset">
<CatalogPath>/V=sde.DEFAULT/FD=sde.sasha.Landbase</CatalogPath>
<Name>sde.sasha.Landbase</Name>
- <Children xsi:type="esri:ArrayOfDataElement">
- <DataElement xsi:type="esri:DETopology">
<CatalogPath>/V=sde.DEFAULT/FD=sde.sasha.Landbase/TOPO=sde.sasha.Landbase_Topology</CatalogPath>
<Name>sde.sasha.Landbase_Topology</Name>
<DatasetType>esriDTTopology</DatasetType>
<DSID>-1</DSID>
<Versioned>true</Versioned>
<CanVersion>true</CanVersion>
- <Extent xsi:type="esri:EnvelopeN">
<XMin>503924.656249088</XMin>
<YMin>680110.56250334</YMin>
<XMax>512514.562497088</XMax>
<YMax>689084.187511697</YMax>
- <SpatialReference xsi:type="esri:ProjectedCoordinateSystem">
<WKT>PROJCS["NAD_1927_StatePlane_Alabama_East_FIPS_0101", GEOGCS["GCS_North_American_1927", DATUM["D_North_American_1927", SPHEROID["Clarke_1866",6378206.4,294.9786982]], PRIMEM["Greenwich",0.0], UNIT["Degree",0.0174532925199433]], PROJECTION["Transverse_Mercator"], PARAMETER["False_Easting",500000.0], PARAMETER["False_Northing",0.0], PARAMETER["Central_Meridian", -85.83333333333333], PARAMETER["Scale_Factor",0.99996], PARAMETER["Latitude_Of_Origin",30.5], UNIT["Foot_US",0.3048006096012192]]</WKT>
<XOrigin>489871.255812</XOrigin>
<YOrigin>665787.099562</YOrigin>
<XYScale>499999.999534338</XYScale>
<ZOrigin>0</ZOrigin>
<ZScale>1</ZScale>
<MOrigin>0</MOrigin>
<MScale>1</MScale>
<XYTolerance>6.56166666666667E-04</XYTolerance>
<ZTolerance>2</ZTolerance>
<MTolerance>2</MTolerance>
<HighPrecision>true</HighPrecision>
</SpatialReference>
</Extent>
- <SpatialReference xsi:type="esri:ProjectedCoordinateSystem">
<WKT>PROJCS["NAD_1927_StatePlane_Alabama_East_FIPS_0101", GEOGCS["GCS_North_American_1927", DATUM["D_North_American_1927", SPHEROID["Clarke_1866",6378206.4,294.9786982]], PRIMEM["Greenwich",0.0], UNIT["Degree",0.0174532925199433]], PROJECTION["Transverse_Mercator"], PARAMETER["False_Easting", 500000.0], PARAMETER["False_Northing",0.0], PARAMETER["Central_Meridian", -85.83333333333333], PARAMETER["Scale_Factor",0.99996], PARAMETER["Latitude_Of_Origin",30.5], UNIT["Foot_US",0.3048006096012192]]</WKT>
<XOrigin>489871.255812</XOrigin>
<YOrigin>665787.099562</YOrigin>
<XYScale>499999.999534338</XYScale>
<ZOrigin>0</ZOrigin>
<ZScale>8192</ZScale>
<MOrigin>0</MOrigin>
<MScale>8192</MScale>
<XYTolerance>6.56166666666667E-04</XYTolerance>
<ZTolerance>2</ZTolerance>
<MTolerance>2</MTolerance>
<HighPrecision>true</HighPrecision>
</SpatialReference>
<ClusterTolerance>0.5</ClusterTolerance>
<ZClusterTolerance>-1</ZClusterTolerance>
<MaxGeneratedErrorCount>-1</MaxGeneratedErrorCount>
- <FeatureClassNames xsi:type="esri:Names">
<Name>sde.RJP.Blocks</Name>
<Name>sde.RJP.Parcels</Name>
</FeatureClassNames>
- <TopologyRules xsi:type="esri:ArrayOfTopologyRule">
- <TopologyRule xsi:type="esri:TopologyRule">
<HelpString />
<RuleID>183</RuleID>
<Name />
<GUID>7D3E7075-16CF-47AD-A8F4-842B921B1E1E</GUID>
<TopologyRuleType>esriTRTAreaNoOverlap</TopologyRuleType>
<OriginClassID>100</OriginClassID>
<OriginSubtype>0</OriginSubtype>
<DestinationClassID>100</DestinationClassID>
<DestinationSubtype>0</DestinationSubtype>
<TriggerErrorEvents>false</TriggerErrorEvents>
<AllOriginSubtypes>true</AllOriginSubtypes>
<AllDestinationSubtypes>true</AllDestinationSubtypes>
</TopologyRule>
- <TopologyRule xsi:type="esri:TopologyRule">
<HelpString />
<RuleID>184</RuleID>
<Name />
<GUID>6F58891D-5BD9-4848-802E-90458152B0CE</GUID>
<TopologyRuleType>esriTRTAreaCoveredByArea</TopologyRuleType>
<OriginClassID>100</OriginClassID>
<OriginSubtype>1</OriginSubtype>
<DestinationClassID>98</DestinationClassID>
<DestinationSubtype>1</DestinationSubtype>
<TriggerErrorEvents>false</TriggerErrorEvents>
<AllOriginSubtypes>false</AllOriginSubtypes>
<AllDestinationSubtypes>false</AllDestinationSubtypes>
</TopologyRule>
</TopologyRules>
</DataElement>