Foros del Web » Programando para Internet » Python »

¿Coordenadas dentro de un polígono?

Estas en el tema de ¿Coordenadas dentro de un polígono? en el foro de Python en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 07/06/2009, 17:49
 
Fecha de Ingreso: junio-2009
Mensajes: 11
Antigüedad: 15 años, 6 meses
Puntos: 0
¿Coordenadas dentro de un polígono?

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
  1. # determine if a point is inside a given polygon or not
  2. # Polygon is a list of (x,y) pairs.
  3. def point_inside_polygon(x,y,l_poly):
  4.     n = len(l_poly)
  5.     inside =False
  6.  
  7.     j = 0
  8.     for i in range(n):
  9.         j+=1
  10.         if (j == n):
  11.              j = 0
  12.         if (l_poly[i][1] < y and l_poly[j][1] >= y or l_poly[j][1] < y and l_poly[i][1] >= y):
  13.             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):
  14.                 inside = not inside
  15.     return inside

y al llamar a la función con distintos datos:
Código Python:
Ver original
  1. if point_inside_polygon(latitud,longitud,L_bordes):
  2.     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

Última edición por miquegordis; 08/06/2009 a las 02:37
  #2 (permalink)  
Antiguo 08/06/2009, 12:34
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: ¿Coordenadas dentro de un polígono?

Qué código tan feo y tan "poco python"
El error en particular es que estás intentando acceder a un subíndice de un 'float'.
Seguramente estás pasando una lista de números cuando deberías pasar una lista de listas.

¿De dónde obtuviste ese código? debería tener documentación referente a los datos que requiere.


Saludos.
  #3 (permalink)  
Antiguo 09/06/2009, 11:55
 
Fecha de Ingreso: junio-2009
Mensajes: 11
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: ¿Coordenadas dentro de un polígono?

Hola alvlin,
el código lo obtuve de aquí:
https://svn.eionet.europa.eu/projects/Zope/browser/trunk/Reportek_dependencies/GML/gml_geometry.py

Gracias de todos modos
Saludos
  #4 (permalink)  
Antiguo 09/06/2009, 12:38
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: ¿Coordenadas dentro de un polígono?

El parámetro l_poly es una lista de parejas (x,y), cada una representando uno de los puntos del polígono.

La descripción del algoritmo está por aquí, aunque no es muy clara:
http://www.ecse.rpi.edu/Homepages/wr...es/pnpoly.html


Saludos.
  #5 (permalink)  
Antiguo 10/06/2009, 04:06
 
Fecha de Ingreso: junio-2009
Mensajes: 11
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: ¿Coordenadas dentro de un polígono?

Cita:
Iniciado por alvlin Ver Mensaje
Qué código tan feo y tan "poco python"
El error en particular es que estás intentando acceder a un subíndice de un 'float'.
Seguramente estás pasando una lista de números cuando deberías pasar una lista de listas.

¿De dónde obtuviste ese código? debería tener documentación referente a los datos que requiere.


Saludos.
Exacto!
debía pasar una lista de listas, y por torpe retorpe no lo veía por más que miraba.
Bueno, ya me funciona, ahora a ponerlo bonito

Muchas gracias
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 07:31.