Crear puntos distribuidos uniformemente dentro de un límite irregular


8

Necesito crear una serie de puntos distribuidos uniformemente dentro de una serie de polígonos con formas extrañas (anteriormente cuadrados, pero ahora cuadrados con agujeros de rosquilla).

La forma en que he resuelto este problema hasta ahora es crear una red de pesca del polígono y luego usar el centroide de cada unidad que crea la red de pesca.

Sin embargo, el problema se ha vuelto más complejo y ahora tengo polígonos más complejos. Los centroides de las unidades de rejilla ya no son lo suficientemente buenos.

Estaba tratando de convertir los polígonos en un ráster y luego usar la herramienta Dividir para los rásteres, y crear una salida con un número especificado de unidades de área igual, pero eso no funcionará, ya que mis datos vectoriales de entrada no tienen los datos necesarios valores para que ese proceso ráster se ejecute correctamente.

Estoy trabajando con Arc 9.3 (pero también tengo acceso a varios otros paquetes de software)


3
"Distribuido de manera uniforme" puede significar varias cosas, incluyendo espaciado equitativo en una cuadrícula predefinida, espaciado uniformemente en una cuadrícula con origen aleatorio (y tal vez orientación aleatoria), un punto ubicado aleatoriamente dentro de cada celda de la cuadrícula, uniformemente aleatorio (sin necesidad de cuadrícula) y incluso al azar con tendencia a evitarse el uno al otro. ¿Podría ser más específico sobre cuál (es) necesita?
whuber


@whuber: Bueno ... sinceramente, no estoy seguro. Idealmente, los puntos se extenderían de tal manera que la distancia entre los puntos se igualara lo más posible. No tienen que estar en una cuadrícula perfecta. ¿Sería uniformemente aleatorio?
Kapjaki

Estas son cosas sutiles, pero no, igualar las distancias destruye gran parte de la aleatoriedad. Garantiza que el conocimiento de una ubicación hace que el conocimiento de ubicaciones cercanas sea mucho más predecible; en particular, la vecindad inmediata (pequeña) de cualquier punto estará desprovista de otros puntos. ¡Eso no es uniforme en absoluto! Un buen lugar para comenzar al pensar en tales cosas es reflexionar sobre cómo se usarán los puntos. Si son para diseñar cosas, como plantar árboles, muy lejos es genial. Sin embargo, si vas a hacer un análisis estadístico con ellos, ¡ten cuidado!
whuber

@Whuber: de hecho, las complejidades de las que hablas son nuevas para mí. El propósito de esto es mostrar ubicaciones potenciales para pozos de petróleo dentro de un área determinada. No se requiere aleatoriedad, solo que la distancia entre puntos se maximiza y se distribuye al menos de manera uniforme en todo el polígono delimitador.
Kapjaki

Respuestas:


3

En QGIS si instala el paquete fTools , hay una opción para generar 'Puntos regulares' (Herramientas -> Herramientas de investigación -> Puntos regulares)

ingrese la descripción de la imagen aquí


Esto producirá una cuadrícula de puntos, presumiblemente? ¿Y no está obligado a estar dentro de un polígono o conjunto de polígonos? (Eso no es una crítica: luego se pueden eliminar todos los puntos que se encuentran fuera de un polígono.)
whuber

2
@whuber: todos los puntos se ubicarán dentro del polígono especificado por "Input Boundary Layer"
underdark

2

Puede hacerlo en PostGIS con una consulta como esta:

SELECT grid.the_geom FROM 
(select st_setsrid(st_point(x, y), polygon_srid) AS the_geom from 
(select generate_series(minX, maxX, grid_size) AS x) AS a,
(select generate_series(minY, maxY, grid_size) AS y) AS b) AS grid,
polygon_table
WHERE ST_Within(grid.the_geom, polygon_table.the_geom);

Puede probarlo en postgisonline con este ejemplo:

SELECT grid.the_geom FROM 
(select st_setsrid(st_point(x, y), 3021) AS the_geom from 
(select generate_series(130000, 142000, 500) AS x) AS a,
(select generate_series(260000, 270000, 500) AS y) AS b) AS grid,
lakes
WHERE ST_Within(grid.the_geom, lakes.the_geom);

Coloque la consulta anterior en el área de texto en la parte superior y presione el botón Map1. También puede elegir "lagos" en el menú desplegable de fondo para ver el polígono que se usa para rellenar con puntos.

/ Nicklas


La publicación de Nicklas parece estar en el camino correcto. ¿Hay alguna manera de especificar cuántos puntos desea distribuir en el lago thoguh? He estado buscando un método como este por un tiempo. Gracias, Ray

¿Hay alguna forma de crear 'bloques' a partir del polígono basándose en dividir el área total en partes iguales? Es decir, si se desean 9 puntos, divida el polígono en 9 'bloques' de igual área, y luego obtenga los centroides de esos.
Kapjaki

Dado que el polígono puede tener cualquier forma extraña, supongo que necesitaría algún algoritmo de prueba y error para lograrlo.
Nicklas Avén

Esto parece funcionar bien. Lamentablemente no entiendo exactamente cómo puedo usarlo. ¿Cómo obtengo mis propios datos en el escenario?
Kapjaki

@Kapjaki, carga tus polígonos en una tabla postgis y, en mi primer ejemplo, cambia "olygon_table" a cualquiera que sea el nombre de tu tabla de polígonos. También cambie en generate_series para que coincida con la extensión de sus polígonos y cambie de 500 a cualquier tamaño de cuadrícula que desee. la consulta se puede reescribir para encontrar la extensión directamente. pero no desde mi teléfono en un auto :)
Nicklas Avén

0

Puedes usar el algoritmo de Lloyds:

https://en.m.wikipedia.org/wiki/Lloyd%27s_algorithm

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.