7 votos

¿Cómo crear un shapefile compuesto por 2 líneas utilizando Python OGR?

¿Cómo se crea un shapefile compuesto por 2 líneas utilizando Python OGR?

La primera línea no es un problema, pero ¿cómo se reutilizan los objetos MyLine y Feature para crear la segunda línea?

Al final esto será en un bucle con miles de líneas creadas...

from osgeo import ogr
driver = ogr.GetDriverByName('ESRI Shapefile')
datasource = driver.CreateDataSource('c:/temp/testlines.shp')
layer = datasource.CreateLayer('layerName',geom_type=ogr.wkbLineString)

#create first line 0,0 to 10,0:
myLine = ogr.Geometry(type=ogr.wkbLineString)
myLine.AddPoint_2D(0,0)
myLine.AddPoint_2D(10,0)
feature.SetGeometryDirectly(myLine)
layer.CreateFeature(feature)

#create next line 0,0 to 0,10?:
#how to you reuse the myLine, feature objects?
#myLine.DeletePoints()#something like this?
myLine.AddPoint_2D(0,0)
myLine.AddPoint_2D(0,10)
#feature.NesGeometry() #something lik this?
feature.SetGeometry(myLine)
layer.CreateFeature(feature)

6voto

colivier Puntos 361

Podrías hacer myLine en una función de fábrica:

def myLine():
    return ogr.Geometry(type=ogr.wkbLineString)

y luego para cada línea que necesite crear:

line = myLine()
line.AddPoint_2D(0,0)
line.AddPoint_2D(0,10)
feature.SetGeometryDirectly(line)

Sin embargo, esto sería una ganancia menor. Podría ser más expresivo y conciso en este sentido:

def myLine(coords):
    line = ogr.Geometry(type=ogr.wkbLineString)
    for xy in coords:
        line.AddPoint_2D(xy[0],xy[1])
    return line

donde coords es una lista de tuplas:

coords = [(0,0), (0,10)]

e incluso puede ser más largo que 2:

coords = [(0,0), (0,10), (10,0)]

y lo usarías así:

line = myLine([(0,0), (0,10)])
feature.SetGeometryDirectly(line)

Por cierto, esto sigue bastante de cerca la Especificación GeoJSON para las geometrías LINESTRING.

3voto

Lucas Puntos 128

Según la Documentación de ogr.Geometry myLine.Empty() debería funcionar.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X