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 x
has no value. Since it is assigned (repeatedly) in your for
loop, this means that your for
loop is not executing even once. And the only way this can happen is if geometry.GetPointCount()
returns 0
. Therefore, this is what must be happening. Add a print geometry.GetPointCount()
to confirm.
Do you intend for the if
statements 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.