I am trying to execute this code,
import osgeo.ogr
def findPoints(geometry, results):
for i in range(geometry.GetPointCount()):
x,y,z = geometry.GetPoint(i)
if results['north'] == None or results['north'][1] < y:
results['north'] = (x,y)
if results['south'] == None or results['south'][1] > y:
results['south'] = (x,y)
for i in range(geometry.GetGeometryCount()):
findPoints(geometry.GetGeometryRef(i), results)
shapefile = osgeo.ogr.Open("../../Data/tl_2009_us_state/tl_2009_us_state.shp")
layer = shapefile.GetLayer(0)
feature = layer.GetFeature(53)
geometry = feature.GetGeometryRef()
results = {'north' : None,
'south' : None}
findPoints(geometry, results)
and I am constantly receiving this error,
Traceback (most recent call last):
File "identify_northsouth_point.py", line 22, in <module>
findPoints(geometry, results)
File "identify_northsouth_point.py", line 8, in findPoints
results['north'] = (x,y)
UnboundLocalError: local variable 'x' referenced before assignment
I have tried global and nonlocal, but it does not work. Since I am not gettin any input from outside the function, so I anyways would not require global or nonlocal.
The error message states that the variable
xhas no value. Since it is assigned (repeatedly) in yourforloop, this means that yourforloop is not executing even once. And the only way this can happen is ifgeometry.GetPointCount()returns0. Therefore, this is what must be happening. Add aprint geometry.GetPointCount()to confirm.Do you intend for the
ifstatements to be inside the loop, so that they are executed for each point in the geometry, and will not be executed at all when the geometry has 0 points? If so, indent them properly.