miércoles, 31 de julio de 2019

Crear un shapefile tipo polilínea mediante la librería pyshp

En esta entrada se va a considerar la creación de un shapefile tipo polilínea mediante la librería pyshp. Los valores a ser introducidos en la tabla de atributos se van a leer desde una hoja de cálculo xls que refleja la creación de un campo de nombre code en el shapefile con sólo dos rasgos.

La lista de puntos asociados a cada rasgo es la siguiente:

[-40.5, -20.666],[-39.849998, -18.700001]
[-39.849998, -18.700001],[-39.816002, -19.6]

El código completo se coloca a continuación:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import shapefile
import pandas as pd

df = pd.read_excel("NI.xls")

df.head()

w = shapefile.Writer(shapefile.POLYLINE)
w.line(parts=[[[-40.5, -20.666],[-39.849998, -18.700001]]])
w.poly(parts=[[[-39.849998, -18.700001],[-39.816002, -19.6]]], shapeType=shapefile.POLYLINE)
w.field('code','C','40')

for i, row in df.iterrows():
    w.record(str(row[0]))

filename = "/home/zeito/pyqgis_data/routeNI7"

w.save(filename)

prj = open("%s.prj" % filename, "w")
epsg = 'GEOGCS["WGS 84",'
epsg += 'DATUM["WGS_1984",'
epsg += 'SPHEROID["WGS 84",6378137,298.257223563]]'
epsg += ',PRIMEM["Greenwich",0],'
epsg += 'UNIT["degree",0.0174532925199433]]'
prj.write(epsg)
prj.close()

Después de ejecutado en la Python Console de QGIS y cargado el shapefile resultante a la Map View de QGIS se obtiene el resultado esperado:


No hay comentarios: