¿Hay alguna forma sencilla de pasar millones de parcelas por algún tipo de script para ver si una parcela del archivo shape está en un campo de golf? Por ejemplo, si tengo una capa que tiene todos los campos de golf y las capas de la parcela y digamos que la distancia máxima sería de 100 pies, entonces ¿cómo sería capaz de extraer sólo esas parcelas?
Respuestas
¿Demasiados anuncios?Dado que tiene bastantes parcelas que quiere probar, debería buscar un software que utilice índices espaciales para este tipo de cálculos.
Y también asegúrese de utilizar un método en ese software que realmente utilice los índices.
Si importa sus datos en PostGIS debe utilizar la función ST_Dwithin. Mucha gente utiliza el buffer en combinación con ST_Intersects o sólo ST_Distance pero eso será muy costoso en la construcción de buffers o no usar índices en la alternativa ST_Distance.
Si tienes una tabla con tus campos de golf y otra con tus parcelas tu consulta podría ser algo así:
SELECT parcels.id, parcels.geom
from parcels INNER JOIN golf_courses ON
ST_Dwithin(parcels.geom, golf_courses.geom, 100);
Esto es si su sistema de coordenadas está basado en pies.
editar: Por defecto el resultado será retrocedido si la consulta no termina. Pero eso podría ser configurable en PostgreSQL, no lo sé. Pero no me preocuparía demasiado por los tiempos de consulta. El trabajo duro será construir el índice.
Lo que se hace cuando se va a ejecutar una consulta de gran tamaño es que primero se añade un límite en el número de filas que se quiere devolver. Si empiezas con 10000 y tardas medio segundo, entonces sabes muy bien cuánto tiempo tardará toda la consulta.
El tiempo de consulta en este caso dependerá de dos cosas 1) de la complejidad de las geometrías. Esto se debe a que después de que el índice basado en el cuadro delimitador haya encontrado un montón de aspirantes, PostGIS tendrá que volver a comprobar cuáles están realmente dentro del rango.
2) qué parte del trabajo hará el índice. Si, por ejemplo, quieres saber cuántos lagos hay en Noruega y cuántos en Suecia a partir de un conjunto de datos sobre lagos, el índice no te ayudará casi nada porque el cuadro delimitador de Noruega cubrirá casi toda Suecia. Pero si se pregunta, como se hace, cómo se relacionan las geometrías pequeñas relativas con otras geometrías pequeñas, entonces el índice hará la mayor parte del trabajo simplemente comparando los cuadros delimitadores.
Pero, ¿qué son sus paquetes? ¿Es una especie de cuadrícula?
¿Has mirado los enfoques de rester a tu problema. Eso podría ser lo más eficiente si las parcelas son sólo una trama.
/Nicklas
No estoy seguro de qué software GIS está utilizando, pero en ArcGIS podría ejecutar el programa Cerca de o Unión espacial herramienta. Ambas herramientas le darán un valor de distancia. A continuación, puede seleccionar o exportar todos los registros que tengan una distancia menor o igual a 100 pies. Geowizard ET también tiene la herramienta de Distancia de Puntos que es una descarga gratuita.
Creo que la mejor estrategia depende del número de campos de golf que tengas y de la cantidad de memoria. Puede que quieras amortiguar todos los campos de golf por 100' y ponerlos en la memoria.
En el lenguaje de ArcGIS esto podría hacerse creando un bolsa de geometría , haciendo un bucle a través de cada campo de golf llamando ITopologicalOperator.Buffer y añadiendo a la bolsa de geometría. Dado que Buffer crea arcos circulares - y he visto problemas de rendimiento en el pasado con arcos circulares - es posible que desee llamar a IPolyCurve.Generalize en ella antes de añadirla a la bolsa de geometría.
Una vez que su bolsa de geometría esté poblada, establezca ISpatialIndex para establecer AllowIndexing = true, y luego llamar a Invalidate.
A continuación, cree un filtro espacial y utilizar la bolsa de geometría como la geometría.
A continuación, cree un featurecursor en sus parcelas utilizando el spatialfilter, pasándolo a IFeatureClass.Search y hacer un bucle a través de cada característica de la parcela.
He oído que 10.1 va a ser de 64 bits, y la memoria es barata. El i/o del disco no va a mejorar mucho (a menos que compres un SSD). Así que este enfoque debería ser más atractivo.
Sería útil que ArcGIS tuviera alguna noción de plan de ejecución para poder decirle que se comporte así cuando sea apropiado.