Script en Python, con librería ogr, para crear un Point shapefile y añadirle puntos

Siguiendo con el plan de entrenamiento en el uso de la librería OGR de Python, en esta oportunidad se va a presentar un script que crea un shapefile de puntos y los añade de manera interactiva a través de la cónsola. Estos puntos corresponden a un cuadrilátero (4 vértices) que posteriormente se visualizan en QGIS con una proyección UTM zona 12 WGS84 y cuyas coordenadas se señalan más adelante en la salida que la ejecución del script produjo por cónsola.

El script tiene una lógica en la cual secuencialmente:

    1. Se establece el driver para el manejo de los shapefiles.
    2. Se crea una nueva fuente de datos y capa.
    3. Se añade un campo id al shapefile de salida.
    4. Dentro de un bucle se crea un nuevo objeto punto.
    5. Se crea un nuevo rasgo.
    6. Se añade el rasgo a la capa de salida.
    7. Se destruye la geometría y el rasgo.
    8. Finalmente, fuera del bucle, se cierra la fuente de datos.

El script propuesto es el siguiente:

#!/usr/bin/env python
#-*- coding: utf-8

# Script para añadir puntos a un nuevo shapefile de puntos

# import modulos y establece el directorio de trabajo

import os, sys

from osgeo import ogr

os.system('clear')

path = '/home/zeito/Desktop/PYTHON_GDAL/ospy_data2'

os.chdir(path)

# Obtiene el driver
driver = ogr.GetDriverByName('ESRI Shapefile')

new_shape = str(raw_input("Nombre de shape a crear = ? "))

new_shape = new_shape + '.shp'

# Crea una nueva fuente de datos y capa
if os.path.exists(new_shape):
	driver.DeleteDataSource(new_shape)
ds = driver.CreateDataSource(new_shape)

print "El shapefile creado es " + new_shape

if ds is None:
	print 'No puede crear el shapefile'
	sys.exit(1)

layer = ds.CreateLayer('test', geom_type=ogr.wkbPoint)

# Añade un campo id al shapefile de salida
fieldDefn = ogr.FieldDefn('id', ogr.OFTInteger)
layer.CreateField(fieldDefn)

n = int(raw_input("Número de puntos a añadir = ? "))

x = range(n)
y = range(n)

for i in range(n):

	x[i] = float(raw_input("X[" + str(i+1) + "] = ? "))	
	y[i] = float(raw_input("Y[" + str(i+1) + "] = ? "))	

	print

	# Crea un nuevo objeto punto
	point = ogr.Geometry(ogr.wkbPoint)
	point.AddPoint(x[i], y[i])

	# Obtiene el FeatureDefn para la capa de salida
	featureDefn = layer.GetLayerDefn()

	# Crea un nuevo rasgo
	feature = ogr.Feature(featureDefn)
	feature.SetGeometry(point)
	feature.SetField('id', i+1)

	# Añade el rasgo a la capa de salida
	layer.CreateFeature(feature)

	# Destruye la geometría y el rasgo
	point.Destroy()
	feature.Destroy()

# Cierre la fuente de datos
ds.Destroy()

cuya ejecución (py_add_points.py), en cónsola, produce el siguiente resultado:

Nombre de shape a crear = ? puntos
El shapefile creado es puntos.shp
Número de puntos a añadir = ? 4
X[1] = ? 449959
Y[1] = ? 4633802

X[2] = ? 450959
Y[2] = ? 4633802

X[3] = ? 450959
Y[3] = ? 4632802

X[4] = ? 449959
Y[4] = ? 4632802

De ésta pueden visualizarse los 4 puntos que fueron introducidos y que corresponden a un cuadrilátero; tal como se evidencia en la siguiente imagen donde, además, se despliega la tabla atributiva del shapefile creado (proyectado en UTM zona 12 WGS84, EPSG: 32612)

Esta entrada fue publicada en Código Python, GDAL/OGR, SIG, Software Libre. Guarda el enlace permanente.

3 respuestas a Script en Python, con librería ogr, para crear un Point shapefile y añadirle puntos

  1. Pingback: Transformar un shapefile tipo polígono en uno tipo punto mediante el módulo OGR de Python |

  2. Pingback: Dividir un polígono irregular por la mitad usando las coordenadas de sus vértices en un script de Python |

  3. Pingback: Point shapefile, con librería ogr de Python, a partir de un archivo de texto plano |

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