6 votos

¿Por qué este simple código Python OGR crea un polígono vacío?

Disculpe mi ignorancia ... Soy nuevo en Python OGR.

Intento crear un polígono cuadrado simple y fallar ... esto produce un polígono vacío.

¿Qué hice mal?

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

#create ring and polygon object:
myRing = ogr.Geometry(type=ogr.wkbLinearRing)
myRing.AddPoint(0.0, 0.0)
myRing.AddPoint(0.0, 10.0)
myRing.AddPoint(10.0, 10.0)
myRing.AddPoint(0.0, 10.0)
myRing.AddPoint(0.0, 0.0)#close ring
myPoly = ogr.Geometry(type=ogr.wkbPolygon)
myPoly.AddGeometry
#this produces myPoly.GetArea() of zero!

#create feature polygon:
feature = ogr.Feature( layer.GetLayerDefn() )
feature.SetGeometry(myPoly)
layer.CreateFeature(feature)
 

Incluso lo siguiente devuelve un área de cero: de osgeo import ogr

 #create polygon object:
myRing = ogr.Geometry(type=ogr.wkbLinearRing)
myRing.AddPoint(0.0, 0.0)#LowerLeft
myRing.AddPoint(0.0, 10.0)#UpperLeft
myRing.AddPoint(10.0, 10.0)#UpperRight
myRing.AddPoint(10.0, 0.0)#Lower Right
myRing.AddPoint(0.0, 0.0)#close ring
myPoly = ogr.Geometry(type=ogr.wkbPolygon)
myPoly.AddGeometry
print (myPoly.GetArea() ) #returns zero, not 100...
 

2voto

Tal Bashan Puntos 56

Gracias ... Olvidé especificar qué geometría (myRing) pasar a myPoly myPoly.AddGeometry (myRing)

Lo siguiente ahora funciona como un simple comienzo:

 #create simple square polygon shapefile:
from osgeo import ogr
driver = ogr.GetDriverByName('ESRI Shapefile')

datasource = driver.CreateDataSource('c:/temp/testPolygon.shp')
layer = datasource.CreateLayer('layerName',geom_type=ogr.wkbPolygon)

#create polygon object:
myRing = ogr.Geometry(type=ogr.wkbLinearRing)
myRing.AddPoint(0.0, 0.0)#LowerLeft
myRing.AddPoint(0.0, 10.0)#UpperLeft
myRing.AddPoint(10.0, 10.0)#UpperRight
myRing.AddPoint(10.0, 0.0)#Lower Right
myRing.AddPoint(0.0, 0.0)#close ring
myPoly = ogr.Geometry(type=ogr.wkbPolygon)
myPoly.AddGeometry(myRing)
print ('Polygon area =',myPoly.GetArea() )#returns correct area of 100.0

#create feature object with point geometry type from layer object:
feature = ogr.Feature( layer.GetLayerDefn() )
feature.SetGeometry(myPoly)
layer.CreateFeature(feature)

#flush memory
feature.Destroy()
datasource.Destroy()
 

0voto

adityag Puntos 16

¿No debería ser el cuarto punto (10.0,0.0) en lugar de (0.0,10.0) - cuál es su segundo punto?

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