Quiero guardar todas las coordenadas x, y, z de todos los nodos (vértices) de un shapefile polígono a un archivo de texto mediante programación Python en QGIS Python Console.
import ogr, os, sys
fn = r'E:\Sreeraj\Thailand\Level 0\Thailand.shp'
driver = ogr.GetDriverByName('ESRI Shapefile')
ds = ogr.Open(fn)
numLayers = ds.GetLayerCount()
print 'The file contains ', numLayers, ' Layers'
layer = ds.GetLayer(0)
print layer.GetName(), ' contains ', layer.GetFeatureCount(), ' features'
f=layer.GetFeatureCount()
v=0
s=1
file = open(r'E:\Sreeraj\Thailand\Thailand_Level 0.txt','w')
file.write('Sl No' '\t' 'X' '\t' 'Y' '\t' 'Z' '\t' 'Polygon ID' '\n')
for v in range(f):
feature= layer.GetFeature(v)
geometry= feature.GetGeometryRef()
print ' Feature contains the Geometry', geometry.GetGeometryName()
print ' It contains', geometry.GetGeometryCount(), geometry.GetGeometryName()
ring = geometry.GetGeometryRef(r)
print geometry.GetGeometryName(), ' contains the Geometry', ring.GetGeometryName()
print ' It contains', ring.GetPointCount(), ' points in a ', ring.GetGeometryName()
pointsX = []; pointsY = []; pointsZ = []
numpoints = ring.GetPointCount()
for p in range(numpoints):
lon, lat, z = ring.GetPoint(p)
pointsX.append(lon)
pointsY.append(lat)
pointsZ.append(z)
x = [str(s), '\t', str(lon), '\t', str(lat), '\t', str(z), '\t', str(v), '\n']
file.writelines(x)
s=s+1
Por lo tanto, he dado más arriba el código python completo. Esto está funcionando perfectamente para la extracción de los nodos / vértices de Tailandia estados, distritos, etc.
Pero, cuando tengo un shapefile (aquí, Thailand.shp) con sólo 1 único polígono, que es la frontera del país; entonces este código no funciona. No estoy recibiendo ningún error, pero tampoco estoy recibiendo la salida x, y, z coordenadas de cada nodo de este shapefile frontera del país en particular, que es sólo un único polígono.
A continuación se muestra la salida que estoy recibiendo.
The file contains 1 Layers
Thailand contains 1 features
Feature contains the Geometry MULTIPOLYGON
It contains 595 MULTIPOLYGON
MULTIPOLYGON contains the Geometry POLYGON
It contains 0 points in a POLYGON
Y estoy recibiendo la salida de archivo de texto que está vacío.
Este código python anterior no funciona sólo en el caso del shapefile de límites de países (polígono único). Si tomo un shapefile con todos los estados, distritos de Tailandia; entonces el código anterior está trabajando.
Cuando probé este mismo código para el shapefile de los estados, obtuve el resultado que se muestra a continuación y todos los valores x,y,z de todos los nodos se guardaron en el archivo de texto de salida.
The file contains 1 Layers
THA_Adm1_GISTA_plyg_v5 contains 77 features
Feature contains the Geometry MULTIPOLYGON
It contains 2 MULTIPOLYGON
MULTIPOLYGON contains the Geometry POLYGON
It contains 0 points in a POLYGON
Feature contains the Geometry POLYGON
It contains 1 POLYGON
POLYGON contains the Geometry LINEARRING
It contains 25015 points in a LINEARRING
Feature contains the Geometry POLYGON
It contains 1 POLYGON
POLYGON contains the Geometry LINEARRING
It contains 16116 points in a LINEARRING
Feature contains the Geometry POLYGON
It contains 1 POLYGON
POLYGON contains the Geometry LINEARRING
It contains 41120 points in a LINEARRING
Feature contains the Geometry POLYGON
It contains 1 POLYGON
POLYGON contains the Geometry LINEARRING
It contains 33636 points in a LINEARRING
Feature contains the Geometry POLYGON
It contains 1 POLYGON
POLYGON contains the Geometry LINEARRING
It contains 16774 points in a LINEARRING
Feature contains the Geometry POLYGON
It contains 1 POLYGON
POLYGON contains the Geometry LINEARRING
It contains 19105 points in a LINEARRING
Feature contains the Geometry MULTIPOLYGON
It contains 155 MULTIPOLYGON
MULTIPOLYGON contains the Geometry POLYGON
It contains 0 points in a POLYGON
Feature contains the Geometry POLYGON
It contains 1 POLYGON
POLYGON contains the Geometry LINEARRING
It contains 8501 points in a LINEARRING
..........................................................
// and many lines of outputs like this. This is correct.
Sin embargo, para el archivo shapefile de límites (polígono único), no obtengo resultados.