He conjunto de secciones censales espaciados a través de una ciudad y me gustaría escoger al azar a un lado de la vía del censo para explorar los alrededores de datos demográficos. No estoy seguro de que si no es un proceso fácil para llegar adyacentes censales seleccionados en las secciones censales.
Respuestas
¿Demasiados anuncios?Edificio de la otra respuesta, puede agregar las respuestas en una matriz y, a continuación, utilizar el PostgreSQL función random, multiplicado por el array_length para obtener un índice aleatorio de la matriz. El + 1 al final de que es debido a que la matriz de índices comienzan en 1 en PostgreSQL
WITH arrayed_data AS(SELECT ARRAY_AGG(a.tile, ',' ORDER BY a.tile) AS tiles
FROM cuy_contour_tiles AS p, cuy_contour_tiles AS a
WHERE ST_Touches(p.geom, a.geom)
AND p.tile = 'MyCensusTractOfInterest'
GROUP BY p.tile
ORDER BY p.tile)
SELECT tiles[ ( (array_length(tiles,1) - 1) *random())::int + 1]
FROM arrayed_data
Uno de mis trucos favoritos es string_agg(). Si Usted puede conseguir sus datos en una moderna base de datos, entonces usted tiene un código como este
SELECT STRING_AGG(a.tile, ',' ORDER BY a.tile) As tiles
FROM cuy_contour_tiles AS p, cuy_contour_tiles AS a
WHERE ST_Touches(p.geom, a.geom)
AND p.tile = 'MyCensusTractOfInterest'
GROUP BY p.tile
ORDER BY p.tile;
El código es de Steve Mather entrada en el blog con la adición de un AND
cláusula. El Boston de los SIG a la gente a entrar en gran detalle. Sé por experiencia que Oracle los límites de la agregación de 4.000 caracteres = tamaño máximo de VARCHAR2() de la base de datos de la columna tipo.
Si la lista de agregación de los resultados de la función son un problema, a continuación, suelte tanto el STRING_AGG()
y GROUP BY p.tile
cláusula. Reemplace STRING_AGG() .. AS tiles
línea con p.tile AS selected_tile, a.tile AS adjacent_tiles
.
En cualquier caso, ahora tienes una lista de las baldosas para averiguar cómo usted al azar de hacer su selección final.