Count points in polygon/es

From GRASS-Wiki
Revision as of 21:39, 3 August 2016 by ⚠️Dat (talk | contribs) (count points in polygons/es)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

P: ¿Cómo puedo contar la cantidad de puntos que caen dentro de polígonos?

R: hay al menos dos opciones:

Solución basada en los atributos

Carga un atributo de los polígonos a los puntos, luego cuenta la cantidad de atributos iguales a través del agrupamiento con SQL.

Ejemplo: ¿Cuantos sitios arqueológicos tiene cada dueño de parcela?

 # Aŕea de Spearfish
 # (Nota: el controlador DBF no está soportado, use  SQLite, MySQL o PostgreSQL)
 g.copy vect=archsites,myarchsites
 v.db.addcol myarchsites col="owner varchar(25)"

Ahora transferimos el nombre del dueño a los sitios arqueológicos (puntos):

 v.what.vect myarchsites qvect=fields column=owner qcolumn=label
 # verification:
 v.db.select myarchsites

 d.mon wx0
 d.vect -c fields
 d.vect myarchsites icon=basic/diamond size=10

 # prueba
 echo "SELECT *,count(owner) FROM myarchsites GROUP BY owner" | db.select

 # subir al mapa de polígonos
 g.copy vect=fields,myfields
 v.db.addcol myfields col="numpoints integer"
 v.db.update myfields column=numpoints value="(SELECT count(owner) FROM myarchsites WHERE \
 myarchsites.owner=myfields.label GROUP BY owner);"
 # verificar:
 v.db.select myfields

La tabla resultante contiene la cantidadde puntos que cae dentro de cada polígono.

Problema: En este procedimiento se cuentan los atributos, no los elementos. Esto significa que si hay más de una categoría que enlace un mismo elemento a la tabla de atributos, se estarían contando elementos de más. También es posible que varios elementos se enlacen a una categoría y en este caso se estaría subestimando. El primer escenario puede ocurrir al usar v.edit para eliminar duplicados, por ejemplo Punto A y Punto B son ensamblados para producir el Punto C (elementos A y B son eliminados) y el elemento C hereda los atributos de A y B. Las dos categorías se enlazan a C. Para evitar estos problemas es necesario que haya una correspondencia 1:1 entre elementos y categorías, por lo que sería necesario hacer una nueva tabla. La nueva tabla (MyCats) puede ser usada como un filtro, por ejemplo:

 # prueba
 echo "SELECT *,count(owner) FROM myarchsites WHERE ""cat in (select * from MyCats)"" GROUP \
 BY owner" | db.select

Solución basada en la geometría

  • v.vect.stats cuenta la cantidad de puntos que caen dentro de un polígono y opcionalmente calcula estadísticas para atributos numéricos de los putos. v.vect.stats es un módulo C disponible desde GRASS 6.4.3 y superiores. v.vect.stats crea una columna para actualizar los datos automáticamente, de manera alternativa es posible actualizar una columna existente, dado que el tipo sea entero.
v.vect.stats points=mypoints areas=mypolygons count_column=pointcnt