Hola,
tengo un polígono de coordenadas de Google Earth en un archivo .kml
recojo las coordenadas (tipo float) en una lista y quiero saber si un punto está dentro o fuera del polígono.
He encontrado en Internet el siguiente código:
# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (the "License"); you may not use this file
# except in compliance with the License. You may obtain a copy of
# the License at mozilla.org
#
# Software distributed under the License is distributed on an "AS
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
# implied. See the License for the specific language governing
# rights and limitations under the License.
#
# The Initial Owner of the Original Code is European Environment
# Agency (EEA). Portions created by Finsiel Romania are
# Copyright (C) European Environment Agency. All
# Rights Reserved.
#
# Authors:
# Alexandru Ghica, Finsiel Romania
# Bogdan Grama, Finsiel Romania
# Iulian Iuga, Finsiel Romania
Código Python:
Ver original# determine if a point is inside a given polygon or not
# Polygon is a list of (x,y) pairs.
def point_inside_polygon(x,y,l_poly):
n = len(l_poly)
inside =False
j = 0
for i in range(n):
j+=1
if (j == n):
j = 0
if (l_poly[i][1] < y and l_poly[j][1] >= y or l_poly[j][1] < y and l_poly[i][1] >= y):
if (l_poly[i][0] + (y - l_poly[i][1]) / (l_poly[j][1] - l_poly[i][1]) * (l_poly[j][0] - l_poly[i][0]) < x):
inside = not inside
return inside
y al llamar a la función con distintos datos:
Código Python:
Ver originalif point_inside_polygon(latitud,longitud,L_bordes):
Inserta_waypoint(longitud,latitud,zoom,str(wp_name))
siempre me sale el mismo error:
Traceback (most recent call last):
File "C:\Python26\Lib\site-packages\pythonwin\pywin\framework\scriptutils.py" , line 312, in RunScript
exec codeObject in __main__.__dict__
File "C:\miquegordis\py\wp_poligono.py", line 390, in <module>
bucle_zoom(perimetro)
File "C:\miquegordis\py\wp_poligono.py", line 114, in bucle_zoom
bucle_poligono(L_h[zoom], L_v[zoom], L_range[zoom])
File "C:\miquegordis\py\wp_poligono.py", line 134, in bucle_poligono
if point_inside_polygon(latitud,longitud,L_bordes):
File "C:\miquegordis\py\wp_poligono.py", line 156, in point_inside_polygon
if (l_poly[i][1] < y and l_poly[j][1] >= y or l_poly[j][1] < y and l_poly[i][1] >= y):
TypeError: 'float' object is unsubscriptable
>>>
La función trabaja sobre coordenadas cartesianas (creo) y Google Earth con coordenadas geográficas; tengo duda si el error es por ese motivo.
No me importa que la precisión y fiabilidad sean escasas, el programa es para uso doméstico y es una prueba.
¿Alguien me puede echar una mano?
gracias anticipadas
saludos