Determinación de longitudes en sistemas proyectados en coordenadas geográficas con PyQGIS

Hace poco más de un año publiqué un post relacionado con la determinación de áreas de polígonos en sistemas proyectados en coordenadas geográficas con PyQGIS. Esto era posible con el uso de los métodos de clase de QgsDistanceArea. Debido a que recientemente desarrollé un plugin de QGIS para determinar fronteras como multipolilíneas, me pregunté que tan exactas serán las estimaciones de estas para diferentes países.

Para la prueba, solo hay que añadir unas pocas líneas de código que den cuenta de la determinación una vez que se ha producido la respectiva memory layer. Para escoger si el cálculo se hacía de la manera convencional (usando coordenadas proyectadas en metros y el método de QgsGeometry) o mediante la clase QgsDistanceArea, se empleó el método ‘geographicFlag’ de QgsCoordinateReferenceSystem que es del tipo booleano.

Para no alterar la apariencia del plugin se uso la Python Console como visor y depurador del código; cuyo extracto se presenta a continuación:

.
.
.
        #stop editing and save changes
        mem_layer.commitChanges()
        
        feats = [ feat for feat in mem_layer.getFeatures() ]
        
        n = len(feats)
        
        if crs.geographicFlag() is False:
            lengths = [ feats[i].geometry().length() for i in range(n) ]
            
        else:
            dao = QgsDistanceArea()
            dao.setEllipsoid('WGS84')
            dao.setEllipsoidalMode(True)
            lengths = [ (dao.measureLength(feat.geometry()))/1000 
                        for feat in feats ]
        
        print lengths

    def run(self):
.
.
.

En el shapefile world_borders seleccioné a Brasil y los rasgos que lo circundan antes de ejecutar el plugin. El la Map View de la imagen siguiente se observa la multi polilínea que representa las diferentes fronteras y en la Python Console se tienen los valores que corresponden a las longitudes.

borders1

En la imagen siguiente se observa la selección arbitraria de las fronteras de tres países (Colombia, Perú y Venezuela) y su identificación correspondiente en la Map View, Python Console y en la Tabla de atributos.

borders2

Cuando se comparan esos valores con los aquí reportados:

https://es.wikipedia.org/wiki/Fronteras_del_Brasil

se encuentra que los obtenidos mediante la clase QgsDistanceArea en el plugin están fuertemente subestimados.

Esta entrada fue publicada en Plugin, PyQGIS, QGIS, SIG, Software Libre. Guarda el enlace permanente.

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s