Estoy tratando de elaborar un algoritmo para crear el círculo de radio máximo dentro de un polígono irregular (un tramo censal) basado en un centro dado del círculo.
La motivación para esto es oscurecer la ubicación de una persona que ha respondido una encuesta. Su ubicación real es conocida, sin embargo, debe oscurecerse en el análisis, para divulgar los datos al público, para un análisis más detallado.
Queremos tener un polígono con forma de rosquilla para cada encuestado que tenga un radio interno (fácil), limitado por un radio externo que esté limitado por el tramo censal en el que se encuentra el individuo. Su ubicación final se colocará al azar dentro del polígono de la rosquilla .
He visto muchas respuestas a preguntas similares aquí, pero no esta específica, que en este caso comienza con una ubicación ESPECÍFICA.
Una vez que tenemos establecida la dona, podemos aleatorizar la ubicación de la respuesta individual dentro del polígono. Eso es relativamente fácil ...
Gracias por sus ideas, las mías hasta ahora me han parecido bastante brutas, y computacionalmente "caras" o ineficientes ...
Respuestas:
Un método simple para mover ubicaciones dentro de tales anillos explota una representación cuadriculada de la distancia al límite del tracto. Comenzando con una representación poligonal de las secciones del Censo (que es lo habitual),
Convierta eso en los límites del polígono (una capa de polilínea).
Calcule la cuadrícula de distancia euclidiana a los límites.
Extraiga las distancias euclidianas en los lugares dados.
Mueva cada ubicación dentro del rango dado por la distancia, que, por definición, es el máximo al límite.
Normalmente, cada uno requiere un solo comando con un SIG, lo que hace que toda la secuencia se automatice fácilmente y se ejecute fácilmente de forma manual. Estos son comandos eficientes , ya que no requieren la construcción de un búfer para cada punto (que generalmente crea varias docenas a casi mil puntos para describir un anillo o anillo ). Tampoco se necesitan búsquedas o ensayos aleatorios: los puntos se desplazan directamente por cantidades garantizadas para dejarlos dentro de sus secciones censales originales.
Por ejemplo, moví 172,902 ubicaciones dentro de 47 tractos en direcciones aleatorias mediante desplazamientos distribuidos uniformemente entre la mitad de la distancia y la distancia total hasta el límite. Aquí hay una parte de un tratado antes del traslado:
(cuadrados amarillos marcan las ubicaciones) y después del movimiento:
(ahora los cuadrados grises marcan las nuevas ubicaciones). La operación total tomó solo uno o dos minutos (usando un viejo SIG obsoleto :-).
Al comparar estas cifras de cerca, puede ver que
Los puntos que ahora están cerca del límite (como cerca de los dos lagos que se muestran como "agujeros" blancos en estas figuras) permanecen necesariamente cerca del límite.
Los puntos alejados del límite tienden a moverse lejos.
En consecuencia, un punto cercano al límite probablemente (pero no ciertamente) se originó muy cerca, mientras que cualquier punto alejado del límite probablemente se originó en otro lugar lejos del límite. Estas dos tendencias están lejos de ser completamente aleatorias: podrían (con bastante facilidad) ser explotadas por alguien que desea penetrar en la privacidad que estos movimientos estaban destinados a permitir.
Mejores métodos harían que las conexiones entre la ubicación final y la inicial fueran más tenues y más aleatorias. Como mínimo, los puntos deben moverse dentro de vecindarios razonablemente grandes en lugar de dentro de vecindarios de tamaño variable (y posiblemente arbitrariamente pequeño). Dichos movimientos no se llevan a cabo fácilmente con cuadrículas, porque generalmente requieren un poco de prueba y error: genera un grupo de puntos aleatorios dentro de un vecindario de cada punto original y selecciona el primero que se encuentra dentro del mismo tramo del Censo. Es un ciclo que involucra (1) un movimiento aleatorio y (2) una investigación de punto en el polígono. Ambas operaciones son rápidas, pero esto requiere un poco de programación para implementar el bucle.
(En un comentario a la pregunta, proporciono enlaces a algunos estudios de métodos utilizados para disfrazar datos de ubicación con fines de privacidad).
fuente
Solo quería probar tus donas en PostGIS
Lo probé en PostGISonline.
Para hacer la misma prueba, vaya a: http://postgisonline.org/map.php
Hay algunos polígonos llamados impresión de "propiedad":
y presiona "Mapa1"
Luego, puede probar el código de rosquilla copiando el siguiente en el área de texto y presionando "map2" (entonces el mapa de propiedades permanecerá):
Eso debería darte un resultado similar a:
fuente
Esperemos que esta solución de Python te ayude. El flujo de trabajo general es el siguiente:
fuente