digi21.io.wkt
Módulo: digi21.io
Lee y escribe archivos de geometrías WKT
(.wkt): una geometría en formato Well-Known Text por línea, sin código ni sistema de coordenadas.
import digi21.io.wkt as wkt
open
open(path, digitab=None) -> DrawingFile
| Argumento | Tipo | Descripción |
|---|---|---|
path |
str |
Ruta del archivo .wkt. |
digitab |
DigiTab | Tabla de códigos (opcional). Si no se indica, se usa una vacía. |
Devuelve un DrawingFile. El archivo no guarda códigos: todas las
geometrías se leen con el código WKT. Si path no existe, lanza FileNotFoundError.
create
create(path, digitab=None, crs="", *, width=400) -> DrawingWriter
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
path |
str |
— | Ruta del archivo .wkt. Si existe, se sustituye. |
digitab |
DigiTab | None |
Tabla de códigos. Si no se indica, se usa una vacía. |
crs |
str |
"" |
Opcional. El archivo no guarda el sistema de coordenadas. |
width |
int |
400 |
Parámetro de la línea de órdenes del formato, mayor que 0. El exportador no lo usa. |
Qué hace el exportador:
- Escribe
POINT Z,LINESTRING ZyPOLYGON Zcon 4 decimales. - Escribe los textos como puntos, sin el texto.
Excepciones de create: ValueError si width es menor que 1 o crs no es válido;
FileNotFoundError si la carpeta de path no existe.
Ejemplos
Los ejemplos de esta página se han ejecutado con Python 3.12; la salida que se muestra es la real.
Crear un archivo desde cero
import digi21.io.wkt as wkt
from digi21.base import Line, Point, Polygon, Text
with wkt.create("parcelas.wkt") as writer:
writer.add(Point((500010.0, 4400010.0, 650.0), ["010123"]))
writer.add(Line(["040645"], [(500000, 4400000, 650), (500100, 4400000, 652), (500100, 4400080, 655)]))
writer.add(Polygon(["020402"], [(500000, 4400000, 650), (500100, 4400000, 652),
(500100, 4400080, 655), (500000, 4400000, 650)]))
writer.add(Text("Parcela 12", (500050, 4400040, 653), ["020402"], text_height=2.5))
print(writer.written, "escritas")
with open("parcelas.wkt", encoding="utf-8") as archivo:
print(archivo.read())
4 escritas
POINT Z (500010.0000 4400010.0000 650.0000)
LINESTRING Z (500000.0000 4400000.0000 650.0000, 500100.0000 4400000.0000 652.0000, 500100.0000 4400080.0000 655.0000)
POLYGON Z ((500000.0000 4400000.0000 650.0000, 500100.0000 4400000.0000 652.0000, 500100.0000 4400080.0000 655.0000, 500000.0000 4400000.0000 650.0000))
POINT Z (500050.0000 4400040.0000 653.0000)
Leer y contar por tipo y por código
import collections
import digi21.io.wkt as wkt
conteo = collections.Counter()
for geometry in wkt.open("parcelas.wkt"):
conteo[(type(geometry).__name__, geometry.codes[0].code)] += 1
print(dict(conteo))
{('Point', 'WKT'): 2, ('Line', 'WKT'): 1, ('Polygon', 'WKT'): 1}
El texto se lee como un punto y los códigos originales se pierden.
Convertir un archivo BinDouble a WKT
import digi21.io.bindouble as bind
import digi21.io.wkt as wkt
with wkt.create("parcelas-convertido.wkt") as writer:
for geometry in bind.open("parcelas.bind"):
writer.add(geometry)
print(writer.written, "escritas,", writer.rejected, "rechazadas")
4 escritas, 0 rechazadas
parcelas.bind es el archivo que crea el primer ejemplo de digi21.io.bindouble.
Véase también
- digi21.io — índice de módulos y lo que tienen en común.
- DrawingFile y DrawingWriter
- Formato WKT