7 votos

¿Cómo contar el número de vector de líneas que pasan a través de una determinada celda ráster?

Estoy trabajando en un proyecto (actualmente en GRASS7 aunque yo no estoy en contra de la exportación del Arc o R o de otro software si es necesario) donde estoy generando miles de menor costo caminos (el uso de la r.caminar y r.drenaje módulos) a varios puntos alrededor de mi mapa de Papúa Nueva Guinea. Lo que me interesa es averiguar cómo tomar el generado por el vector de líneas y crear una trama que cuenta el número de líneas que pasan a través de cada celda de la trama. Esto me dará una estimación de que las ubicaciones en la isla tienen más probabilidades de ser ubicado en un camino más corto de un punto a otro.

Una manera de hacerlo sería a (usando python) 1. Crear un ráster initalized a 0 2. utilice una secuencia de comandos de python para ejecutar y aunque rasterizar cada línea individualmente y 3. agregar en cada línea, el ráster ráster utilizando la calculadora para crear una cuenta.

El problema con este enfoque es que para las decenas o incluso cientos de miles de líneas que estoy usando, se necesita un tiempo muy, muy largo. Me gustaría una manera de contar el número de líneas. Algo como http://grasswiki.osgeo.org/wiki/Count_points_in_raster_cells excepto con líneas.

Estoy perplejo, así que si usted tiene cualquier pensamiento creativo, gracias de antemano!

0voto

user55937 Puntos 448

Si el menor costo caminos fueron extraídos de un mapa raster, entonces supongo que tendría la línea de vértices que caen en las celdas ráster (a menos que haya utilizado el caballero del paso, pero todavía puede funcionar bastante bien).

Entonces, usted puede:

  1. ejecutar v. revisión en todos sus vector de los protocolos lcp (creo que esto sería bastante rápido, incluso en un gran número de mapas vectoriales)
  2. ejecutar v. a.puntos, que va a convertir a todos los vértices de la línea de un mapa de puntos, que va a caer en sus celdas ráster
  3. ejecutar v. a cabo.ascii en esos puntos y canalizar a r.en.xyz método=n para obtener un recuento, que se describe en el enlace que te dio

Todos los algoritmos son relativamente rápido en mi experiencia.

He aquí un juguete ejemplo. Es en la hierba 6, pero me imagino que aún funciona:

g.region w=0 e=10 s=0 n=10 res=1
r.mapcalc cost_surf=1.0 

r.cost input=cost_surf output=cumulative_cost coordinate="2.0,2.0" stop_coordinate="8.0,8.0" --o
r.drain input=cumulative_cost output=lcp1 voutput=lcp1 coordinate="8.0,8.0" --o

r.cost input=cost_surf output=cumulative_cost coordinate="2.0,8.0" stop_coordinate="8.0,2.0" --o
r.drain input=cumulative_cost output=lcp2 voutput=lcp2 coordinate="8.0,2.0" --o

v.patch input=lcp1,lcp2 output=lcp_all --o

v.to.points -v input=lcp_all output=lcp_all_pts type=line --o
v.out.ascii input=lcp_all_pts output=- format=point | r.in.xyz input=- output=path_cnt method=n

GRASS 6.4.3 (ncspm):~ > r.out.ascii input=path_cnt output=-
north: 10
south: 0
east: 10
west: 0
rows: 10
cols: 10
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 1 0 0 0 0 0 1 0 
0 0 0 1 0 0 0 1 0 0 
0 0 0 0 1 0 1 0 0 0 
0 0 0 0 0 2 0 0 0 0 
0 0 0 0 1 0 1 0 0 0 
0 0 0 1 0 0 0 1 0 0 
0 0 1 0 0 0 0 0 1 0 
0 0 0 0 0 0 0 0 0 0 

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X