digi21.io
Lectura y escritura de archivos de dibujo de Digi3D.AI desde Python, con los mismos importadores y
exportadores que la aplicación. Hay un módulo independiente por formato, y todos comparten la
misma interfaz: una función open que devuelve un DrawingFile
iterable y una función create que devuelve un DrawingWriter.
Se apoya en digi21.base: las geometrías que se obtienen al iterar, y las que se escriben, son instancias de sus tipos.
Módulos por formato
| Módulo | Formato | Extensión | Lee | Escribe | crs en create |
Página |
|---|---|---|---|---|---|---|
digi21.io.bin |
BIN | .bin |
Sí | Sí | Obligatorio | bin |
digi21.io.bindouble |
BIN doble precisión | .bind |
Sí | Sí | Obligatorio | bindouble |
digi21.io.asciidigi |
ASCII de Digi | .asc |
Sí | Sí | Obligatorio | asciidigi |
digi21.io.dgn |
MicroStation DGN V8 | .dgn |
Sí | Sí | Obligatorio | dgn |
digi21.io.dwg |
AutoCAD DWG | .dwg |
Sí | Sí | Obligatorio | dwg |
digi21.io.dxf |
AutoCAD DXF | .dxf |
Sí | Sí | Obligatorio | dxf |
digi21.io.geojson |
GeoJSON | .geojson |
Sí | Sí | Opcional | geojson |
digi21.io.kml |
KML | .kml |
Sí | Sí | Opcional | kml |
digi21.io.svg |
SVG | .svg |
Sí | Sí | Opcional | svg |
digi21.io.wkt |
Geometrías WKT | .wkt |
Sí | Sí | Opcional | wkt |
digi21.io.geopackage |
OGC GeoPackage | .gpkg |
Sí | Sí | Obligatorio | geopackage |
digi21.io.shp |
ESRI Shapefile | .shp |
Sí | Sí | Obligatorio | shp |
digi21.io.pdf |
.pdf |
No | Sí | Opcional | ||
digi21.io.geomedia |
Almacén GeoMedia en Access | .mdb |
Sí | Añade a un almacén existente | Opcional | geomedia |
digi21.io.postgis |
Base de datos PostGIS | .pg (archivo de conexión) |
Sí | Añade a tablas existentes | Opcional | postgis |
digi21.io.ifc |
IFC | .ifc |
Sí | Solo caras de edificios | Opcional | ifc |
digi21.io.vec |
VEC | .vec |
Sí | Sí | Opcional | vec |
Cada página tiene la firma de open y create, los parámetros del formato, lo que el exportador
rechaza, lo que necesita de la tabla de códigos y ejemplos ejecutados con su salida.
El formato File Geodatabase de Esri (.gdb) no tiene módulo. Su motor recibe el dataset (conjunto
de clases de entidad) como parámetro; sin el parámetro, en la aplicación abre un cuadro de diálogo
para elegirlo, y en un programa de consola usa el único dataset de la geodatabase o, si hay varios,
lanza un error que pide el parámetro.
open
open(path, digitab=None) -> DrawingFile
| Argumento | Tipo | Descripción |
|---|---|---|
path |
str |
Ruta del archivo a leer. |
digitab |
DigiTab | Tabla de códigos (opcional). Si no se indica, se usa una vacía. |
Devuelve un DrawingFile. El recorrido es perezoso: las geometrías se
leen según se itera. DrawingFile.crs es el sistema de coordenadas del archivo, o una cadena vacía.
Si path no existe, lanza FileNotFoundError. digi21.io.pdf no tiene open.
digi21.io.bin añade a open los parámetros precision y global_origin, porque el formato BIN no
los guarda en el archivo.
create
create(path, digitab=None, crs="", *, <parámetros del formato>) -> DrawingWriter
| Argumento | Tipo | Descripción |
|---|---|---|
path |
str |
Ruta del archivo a crear. Si existe, se sustituye. |
digitab |
DigiTab | Tabla de códigos (opcional). El exportador toma de ella la capa, el nivel, el color… de cada código. Si no se indica, se usa una vacía. |
crs |
str |
Sistema de coordenadas del archivo: un WKT o "EPSG:<código>". Obligatorio en los formatos que lo guardan (ver la tabla de módulos): sin él, create lanza ValueError. Para conservar el de otro archivo, pasa su DrawingFile.crs. |
Los parámetros del formato se pasan solo por nombre y tienen como valor por defecto el mismo que el exportador. Son los que la orden PARAMETROS_IMPORTACION recibe para ese formato, y están en la página de cada módulo.
Excepciones comunes a todos los módulos:
| Excepción | Cuándo |
|---|---|
ValueError |
Falta crs en un formato que lo guarda, crs no es un WKT ni un código EPSG válido, o un parámetro del formato está fuera de rango. |
FileNotFoundError |
La carpeta de path no existe. |
RuntimeError |
El exportador informa de un error, con su mensaje. |
Lo que tienen en común
El escritor y el gestor de contexto
create devuelve un DrawingWriter. El archivo no está completo
hasta que se cierra el escritor: úsalo en un bloque with, que lo cierra al salir, o llama a
close().
with modulo.create("destino.ext", digitab, crs="EPSG:25830") as writer:
writer.add(geometry)
print(writer.written, writer.rejected)
add(geometry)devuelveFalsesi la geometría no se escribe;rejectedlas cuenta.writtencuenta las entidades escritas. En los formatos que no admiten varios códigos por entidad, una geometría con n códigos se escribe n veces.warningses la lista de avisos del exportador: códigos sin traducción, capas creadas, geometrías rechazadas… Los avisos del propio exportador salen en el idioma de la instalación; los del módulo de Python, en inglés.
El sistema de coordenadas
Los exportadores no transforman coordenadas: escriben las que reciben. crs solo dice en qué
sistema están. Para convertir entre formatos, pasa el crs del origen:
origen = bind.open("parcelas.bind")
with dxf.create("parcelas.dxf", crs=origen.crs) as writer:
for geometry in origen:
writer.add(geometry)
GeoJSON y KML esperan longitud y latitud en grados: el origen ya tiene que estar en ese sistema.
Los formatos que guardan el sistema en un archivo .prj (BIN, ASCII de Digi, DGN, DWG, DXF y SHP)
conservan el .prj que ya hubiera junto al destino con el mismo nombre, en lugar de escribir el
crs que se pasa a create, y warnings lo avisa. Para usar crs, borra antes ese .prj.
La tabla de códigos y el orden de importación
Carga la tabla de códigos con DigiTab.load después de importar todos los módulos de formato que
vayas a usar. La primera tabla que se carga en el proceso solo recibe los parámetros de traducción
(iodgn:transform, ioshp:transform, iogpkg:transform…) de los formatos cuyo módulo ya está
importado.
import digi21.io.dgn as dgn
import digi21.io.shp as shp
from digi21.base import DigiTab
digitab = DigiTab.load("Digi.tab.xml")
SVG, GeoPackage, SHP, GeoMedia y PostGIS rechazan las geometrías de un código sin su elemento de traducción en la tabla. DGN, DWG y DXF las escriben con los parámetros por defecto, en una capa o un nivel con el nombre del código.
Datos de los ejemplos
Los ejemplos de las páginas de cada módulo usan:
Digi.tab.xml: una tabla de códigos con tres códigos,010123(puntos),040645(líneas) y020402(polígonos), con su traducción a cada formato. Cada página muestra el fragmento que necesita.parcelas.bind: el archivo que crea el primer ejemplo de digi21.io.bindouble, con un punto, una línea, un polígono y un texto en ETRS89 / UTM 30N (EPSG:25830). Es el origen de los ejemplos de conversión.