Referencia de la API

Módulo: crskit

Descripción de lo que exporta el paquete crskit versión 0.6.0. El paquete incluye las anotaciones de tipos (archivo _crskit.pyi y marca py.typed), así que los editores completan la API y mypy la comprueba.

import crskit

Orden de los ejes

Las coordenadas van en el orden de ejes que declara el SRC. En los SRC geográficos de EPSG, como EPSG:4258 (ETRS89) y EPSG:4326 (WGS 84), la primera coordenada es la latitud y la segunda la longitud. La propiedad Crs.axes devuelve el orden:

crskit.crs_from_epsg(4258).axes     # [('Lat', 'North'), ('Lon', 'East')]
crskit.crs_from_epsg(25830).axes    # [('E', 'East'), ('N', 'North')]

Un punto con los ejes intercambiados no produce un error: produce otro punto. Si una transformación lanza CoordinateOutsideDomainError con un punto que debería ser válido, comprueba el orden de los ejes.

Funciones del módulo

Función Descripción
init(epsg_database=None, data_directory=None) -> None Inicializa la biblioteca con una base de datos de EPSG. Consulta Inicialización.
is_initialized() -> bool True si la biblioteca ya tiene una base de datos de EPSG.
epsg_version() -> str Versión del conjunto de datos de EPSG de la base de datos abierta, por ejemplo '12.057'.
crs_from_epsg(code: int) -> Crs SRC con el código EPSG code. Lanza AuthorityCodeNotFoundError si el código no existe.
crs_from_wkt(wkt: str) -> Crs SRC que describe el WKT. Acepta WKT 1 (OGC y ESRI) y WKT 2; detecta la gramática a partir del texto. Lanza WktParseError si no puede interpretar el texto.
compound_crs(horizontal: int, vertical: int) -> Crs SRC compuesto a partir del código EPSG de un SRC horizontal y del código EPSG de un SRC vertical. EPSG no tiene código para la mayoría de las combinaciones; el SRC compuesto no tiene código (authority_code es None) y su nombre une los nombres de las dos partes, por ejemplo 'ETRS89 / UTM zone 30N + Alicante height'.
transformation(source, target, *, select_operation=None, unknown_crs_policy=UnknownCrsPolicy.REJECT) -> Transformation Transformación del SRC source al SRC target. Los dos argumentos con nombre se describen en transformation.

Todas las funciones salvo init e is_initialized lanzan CrsError si la biblioteca no está inicializada.

transformation

transformation(source, target, *, select_operation=None, unknown_crs_policy=UnknownCrsPolicy.REJECT) -> Transformation
Argumento Tipo Descripción
source Crs SRC de origen.
target Crs SRC de destino.
select_operation función o None Elige la operación cuando EPSG define varias entre los dos SRC. Recibe (source_name, target_name, operations), donde operations es una lista de CoordinateOperation, y devuelve una de esas operaciones o su código EPSG (int).
unknown_crs_policy UnknownCrsPolicy Qué hacer cuando uno de los dos SRC es local o desconocido.

Sin select_operation, si hay varias operaciones posibles, transformation lanza TransformationNotFoundError. Por ejemplo, EPSG define doce operaciones de ED50 (EPSG:4230) a ETRS89 (EPSG:4258), con distinta precisión y ámbito de aplicación. Elige por el ámbito de aplicación (area_of_use), no solo por la precisión:

def peninsula(source_name, target_name, operations):
    candidatas = [o for o in operations if "Spain - mainland" in o.area_of_use and not o.grid_files]
    return min(candidatas, key=lambda o: o.accuracy)

ed50_a_etrs89 = crskit.transformation(crskit.crs_from_epsg(4230), crskit.crs_from_epsg(4258),
                                      select_operation=peninsula)

Lanza GridFileNotFoundError si la operación necesita una rejilla que no está en la carpeta de rejillas, y TransformationNotFoundError si no hay ninguna operación entre los dos SRC.

Crs

SRC. Se crea con crs_from_epsg, crs_from_wkt o compound_crs.

Miembro Tipo Descripción
name str Nombre del SRC, por ejemplo 'ETRS89 / UTM zone 30N'.
authority str Autoridad del código, por ejemplo 'EPSG'.
authority_code int o None Código EPSG, o None si el SRC no tiene código.
dimension int Número de coordenadas: 2 o 3.
remarks str Observaciones de EPSG sobre el SRC.
axes list[tuple[str, str]] Ejes en el orden de las coordenadas, como pares (nombre, orientación).
to_wkt(version=WktVersion.WKT1) -> str método WKT del SRC en el dialecto WktVersion indicado.
compare(other: Crs) -> int método Semejanza estructural con other, de 0 a 100. 100 indica que los dos SRC son equivalentes.
== operador True si los dos SRC tienen la misma definición matemática (datum, meridiano origen, proyección y parámetros, unidades). No compara el nombre, la autoridad ni el orden de los ejes.

Crs no se puede usar como clave de un dict ni como elemento de un set: no tiene __hash__.

Transformation

Transformación entre dos SRC. Se crea con transformation.

Miembro Tipo Descripción
name str Nombre de la transformación.
authority str Autoridad del código de la operación.
authority_code str o None Código EPSG de la operación, o None si la transformación no es una operación de EPSG.
area_of_use str Ámbito de aplicación.
remarks str Observaciones.
source Crs SRC de origen.
target Crs SRC de destino.
source_dimension int Número de coordenadas de los puntos de origen.
target_dimension int Número de coordenadas de los puntos transformados.
is_identity bool True si la transformación no cambia las coordenadas.
transform(point) -> list[float] método Transforma un punto, dado como secuencia de source_dimension números. Lanza DimensionMismatchError si el punto tiene otro número de coordenadas.
transform_points(points) -> numpy.ndarray método Transforma un array de NumPy de forma (source_dimension,) o (n, source_dimension) y devuelve un array de forma (target_dimension,) o (n, target_dimension). Hace una sola llamada a la biblioteca nativa para todos los puntos. Necesita NumPy.

CoordinateOperation

Operación de EPSG entre dos SRC. transformation pasa una lista de operaciones a la función select_operation.

Propiedad Tipo Descripción
code int Código EPSG de la operación.
name str Nombre de la operación.
accuracy float o None Precisión en metros, o None si EPSG no la indica.
area_of_use str Ámbito de aplicación, por ejemplo 'Spain - mainland except northwest'.
grid_files list[str] Rejillas que necesita la operación. Lista vacía si no necesita ninguna.
scope str o None Finalidad de la operación según EPSG.
remarks str o None Observaciones.
information_source str o None Organismo que publica la operación.

WktVersion

Dialecto de WKT que escribe Crs.to_wkt.

Valor Dialecto
WKT1 WKT 1 de OGC (OGC 01-009). Es el valor predeterminado.
WKT1_ESRI WKT 1 de ESRI, sin código EPSG. Es el dialecto de los archivos .prj de ArcGIS.
WKT1_ESRI_WITH_EPSG_CODE WKT 1 de ESRI con el código EPSG.
WKT2_2015 WKT 2 de ISO 19162:2015 (OGC 12-063r5).
WKT2_2019 WKT 2 de ISO 19162:2019 (OGC 18-010r7).

UnknownCrsPolicy

Qué hace transformation cuando uno de los dos SRC es local o desconocido y el otro no.

Valor Descripción
REJECT No transforma. Es el valor predeterminado.
IDENTITY Devuelve las coordenadas sin cambiarlas: supone el mismo marco de referencia y las mismas unidades en los dos SRC.

Excepciones

Todas las excepciones del paquete derivan de CrsError, que deriva de RuntimeError. Un except crskit.CrsError captura todas.

Excepción Cuándo se lanza
CrsError Biblioteca sin inicializar, base de datos de EPSG que no existe o no se puede abrir, y clase base de las demás.
AuthorityCodeNotFoundError El código EPSG no existe en la base de datos.
WktParseError El WKT no se puede interpretar.
TransformationNotFoundError No hay ninguna operación entre los dos SRC, o hay varias y no se ha pasado select_operation.
GridFileNotFoundError Falta una rejilla. Tiene las propiedades grid_file (nombre de la rejilla), searched_path (ruta donde se ha buscado), operation_code (código EPSG de la operación, o None), operation_name, area_of_use e information_source.
CoordinateOutsideDomainError El punto está fuera de la rejilla o de la zona de validez de la proyección.
DimensionMismatchError El punto tiene un número de coordenadas distinto del que admite la transformación.
UnsupportedFormatError crskit no admite el tipo de SRC o el método de la operación.