Básicamente, usted puede hacer el extracto con ogr2ogr siempre que entregue el Censo de IDENTIFICACIÓN, por lo que es realmente un problema de llegar de 72.000 ogr2ogr llamadas.
ogr2ogr -where "tract = '<tract_id>'" /dest_folder /source_folder block_shapefile -nln block_shapefile_<tract_id>
Notas:
- Usted no tiene que especificar el formato de origen, ogr2ogr habrá que averiguarlo. Especificó shapefile, así que eso es lo que estoy suponiendo.
- Si no va a cambiar el formato, usted también no tiene que especificar el formato de destino. De lo contrario, para obtener un shapefile, añadir `-f "Shapefile"
- Estoy usando el
-where
cambiar a un subconjunto de datos. Recuerde que el atributo de la consulta es mucho más rápido que las consultas espaciales. Su pregunta era un poco vago, así que no sé si usted tiene la intención de unirse a los bloques a los tratados por atributo o espacialmente, pero yo recomiendo la primera.
- Tenga en cuenta que estoy asumiendo los bloques shapefile tiene un tracto columna de ID. La mayoría del Censo de los conjuntos de datos tendrá una jerarquía de IDENTIFICACIÓN de las columnas, es decir, los bloques shapefile probable que tenga un estado, condado, y de las vías, así como bloquear el IDENTIFICADOR de la columna, pero no puede tener una columna de la concatenación de todos ellos juntos. Deben estar concatenados, porque los condados son sólo los únicos con los estados, los tratados son sólo los únicos con los condados, y los bloques son sólo los únicos dentro de la selva. Así que usted tendrá que ya sea (a) crear un nuevo campo con el estado y el condado y el tracto como su campo de ID, o añadir los tres criterios para la cláusula where.
Entonces, ¿cómo construir 72,000 ogr2ogr llamadas mediante programación? Usted puede utilizar cualquier herramienta que usted quiere, pero aquí está un ejemplo con R:
library(foreign)
dfBlocks = read.dbf("/source_folder/shapefile_name.dbf", as.is=TRUE)
strTract = unique(dfBlocks$tract_id)
for (i in 1:length(strTract)) {
strOGR = paste(
"ogr2ogr -where \"tract_id = '", strTract,
"'\" /dest_folder /source_folder layer_name -nln base_name_",
strTract, sep=""
)
system(strOGR)
}
También puede recoger el sistema de llamadas en un solo paso, a continuación, recorrer para que se ejecute el ogr2ogr de llamada por separado, en un bucle, o en un momento posterior, o escribir a un script en bash que se puede ejecutar desde la línea de comandos.
La principal desventaja es que se analizará el origen de datos de una vez por cada ogr2ogr de la llamada, así que en realidad la importación de los datos de origen, la iteración, y la escritura de un archivo shapefile para cada fila, probablemente sería más eficiente. Pero yo les recomiendo probarlo en otra cosa que R, el cual es un poco lento en la lectura de grandes conjuntos de datos espaciales (me encontré con una importación de los condados de los estados unidos, ~3000, y después de 15 minutos he cancelado la importación).
--Lee