2 votos

Error GDAL/OGR: Apertura VRT cíclica detectada

GDAL 2.2.4 (64bit Windows) lanza un error durante la apertura de un archivo OGRVRT cíclico.

No había problemas con los VRT cíclicos en GDAL 1.10.1 (Windows 32 bits).

Aquí hay un archivo VRT de ejemplo, que utilicé para unir una tabla ORACLE con una tabla MSSQL:

<!-- file: myJoin.ovf -->
<OGRVRTDataSource>
    <OGRVRTLayer name="mssql">
        <SrcDataSource relativeToVRT="1">mssql.ovf</SrcDataSource>
        <GeometryType>wkbNone</GeometryType>
        <SrcSQL>SELECT * from mssql</SrcSQL>
    </OGRVRTLayer>
    <OGRVRTLayer name="oracle">
        <SrcDataSource relativeToVRT="1">oracle.ovf</SrcDataSource>
        <GeometryType>wkbPoint</GeometryType>
        <SrcLayer>oracle</SrcLayer>
    </OGRVRTLayer>
    <OGRVRTLayer name="myJoin">
        <SrcDataSource relativeToVRT="1">myJoin.ovf</SrcDataSource>
        <GeometryType>wkbPoint</GeometryType>
        <SrcSQL dialect="sqlite">
        SELECT o.*,m.ui_status from oracle o left join mssql m on o.uwi = m.ui
        </SrcSQL>
    </OGRVRTLayer>
</OGRVRTDataSource>

ogrinfo (GDAL 2.2.4) arroja un error:

D:\data>ogrinfo -ro myJoin.ovf
INFO: Open of `myJoin.ovf'
      using driver `OGR_VRT' successful.
1: MSSQL (None)
2: ORACLE (Point)
3: MYJOINERROR 1: Cyclic VRT opening detected !
 (None)

¿Existe algún mecanismo/bandera que impida la detección de "VRT cíclico" y permita volver a utilizar archivos VRT cíclicos?

1voto

nmtoken Puntos 1096

Posiblemente esta función se eliminó como parte de una corrección de seguridad en GDAL 2.2.2 ~ https://trac.osgeo.org/gdal/wiki/Release/2.2.2-News (OGR_VRT: evitar el bloqueo en VRT cíclicos).

Para quienes busquen un método alternativo, pueden encadenar sus fuentes de datos VRT como se indica a continuación:

<!-- file: myJoinSources.ovf -->
<OGRVRTDataSource>
    <OGRVRTLayer name="mssql">
        <SrcDataSource relativeToVRT="1">mssql.ovf</SrcDataSource>
        <GeometryType>wkbNone</GeometryType>
        <SrcSQL>SELECT * from mssql</SrcSQL>
    </OGRVRTLayer>
    <OGRVRTLayer name="oracle">
        <SrcDataSource relativeToVRT="1">oracle.ovf</SrcDataSource>
        <GeometryType>wkbPoint</GeometryType>
        <SrcLayer>oracle</SrcLayer>
    </OGRVRTLayer>
</OGRVRTDataSource>

<!-- file: myJoin.ovf -->
<OGRVRTDataSource>
    <OGRVRTLayer name="myJoin">
        <SrcDataSource relativeToVRT="1">myJoinSources.ovf</SrcDataSource>
        <GeometryType>wkbPoint</GeometryType>
        <SrcSQL dialect="sqlite">
        SELECT o.*,m.ui_status from oracle o left join mssql m on o.uwi = m.ui
        </SrcSQL>
    </OGRVRTLayer>
</OGRVRTDataSource>

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X