ArcGIS Pro
Waarom tekent een Query Layer niet in ArcMap of ArcGIS Pro, of geeft foutmeldingen?
Oorzaak
De onderliggende data voor Query Layers in ArcGIS Pro of ArcMap moet aan bepaalde eisen voldoen. Dit document beschrijft waarop je moet letten om tabellen uit een Oracle database als Query Layer te kunnen gebruiken.
Antwoord
Er zijn een aantal mogelijke oorzaken waarom het niet lukt een Oracle Spatial tabel toe te voegen als Query Layer, of waarom de Query Layer niet tekent:
1. De Query Layer heeft geen of geen geldige Oracle Spatial metadata
Je kunt controleren of er Oracle Spatial metadata is aangemaakt voor de tabel die je wilt gebruiken. Log hiervoor in met SQL op de database als de eigenaar van de tabel en voer de volgende query uit:
SELECT * FROM USER_SDO_GEOM_METADATA WHERE TABLE_NAME=’<TABEL_NAAM>’;
2. De Query Layer heeft geen ruimtelijke index of de index is niet actueel
Controleer of er een geldige spatial index bestaat voor de tabel:
SELECT INDEX_NAME, COLUMN_NAME, SDO_INDEX_STATUS FROM USER_SDO_INDEX_INFO WHERE TABLE_NAME='TABEL_NAAM';
Levert deze query geen resultaten op, kan de laag niet getoond worden als Query Layer. Ook als de status van de index “invalid” is, kan de laag niet getoond worden.
Is er wel een spatial index, probeer of het updaten van de index het probleem verhelpt. Het updaten kan op de volgende manier:
ALTER INDEX <INDEX_NAME> REBUILD;
3. De SRID die gebruikt wordt in de Oracle Spatial Metadata komt niet overeen met de SRID die gebruikt wordt in de features.
Als er een SRID wordt gebruikt in de metadata, moet deze ook gebruikt worden voor de ruimtelijke objecten. Controleer met de volgende query of de SRID in de Oracle Spatial metadata overeenkomt met de SRID van de features in de ruimtelijke kolom die je wilt tonen:
SELECT DISTINCT A.<SPATIAL_COLUMN_NAME>.SDO_SRID FROM <TABLE_NAME> A;
De waarde van de output van deze query (bijvoorbeeld de SRID 28992) moet overeenkomen met de SRID die in de user_sdo_geom_metadata view gebruikt wordt. Controleer de waarde van de SRID in de user_sdo_geom_metadata view door uitvoeren van de volgende query:
SELECT SRID FROM USER_SDO_GEOM_METADATA WHERE TABLE_NAME=’TABEL_NAAM’;
4. Er zitten foute geometrieën in de laag
Als er geometrieën in de laag zijn die niet voldoen aan de Oracle Spatial validation rules, kan het zijn dat er geen data getoond wordt in de Query Layer. Je kunt controleren of een layer voldoet aan de Oracle Spatial validation rules. Log hiervoor in op de Oracle database en voer de volgende statements en queries uit:
CREATE TABLE VAL_RESULTS (SDO_ROWID ROWID, RESULT VARCHAR2(1000));
EXECUTE SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT('<TABEL_NAAM>','<KOLOM_NAAM','VAL_RESULTS');
SELECT * FROM VAL_RESULTS;
De query toont de ongeldige objecten. Probeer de Query Layer opnieuw in ArcGIS Pro of ArcMap toe te voegen nadat je de ongeldige objecten verwijderd of gecorrigeerd hebt. Je kunt ook op database niveau een view / materialized view aan maken welke alleen geldige objecten bevat, en de view in ArcGIS Pro of ArcMap als Query Layer toevoegen.
Het is ook mogelijk om de validatie in ArcGIS Desktop te implementeren waarbij er een query vanuit de ArcGIS client wordt uitgevoerd. Door de query kunnen ongeldige features eruit worden gefilterd. Dit wordt alleen bij kleine datasets aangeraden omdat de performance hierdoor achteruit kan gaan. De volgende query binnen ArcGIS Pro of ArcMap zorgt ervoor dat er alleen in geldige objecten worden geselecteerd voor de Query Layer:
SELECT * FROM <TABEL_NAAM> P WHERE SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT(P.<KOLOM_NAAM>, .001) = 'TRUE'
5. De onderliggende database is een Oracle Express Edition (XE). Dit is niet ondersteund in combinatie met ArcGIS Pro of ArcMap.
Bovenstaande suggesties hebben vooral betrekking op data die in het Oracle Spatial formaat opgeslagen is. Zowel voor data in het Oracle Spatial formaat, maar ook voor andere geometrieformaten zoals ST_GEOMETRY gelden nog meer voorwaarden voor het gebruik van Query Layers, zoals bijvoorbeeld de aanwezigheid van een kolom met unieke, not null waarden. Zie hiervoor graag ook https://pro.arcgis.com/en/pro-app/latest/help/mapping/layer-properties/choose-unique-identifier.htm.