miércoles, 14 de mayo de 2014

CÓMO CREAR UNA RED DE CALLES CON ARCGIS

Como respuesta a un comentario voy a explicar a groso modo cómo crear una red de calles con Arcgis a partir de un shapefile de lineas de las calles de una ciudad.

Primero debes tener un shapefile de líneas con las calles de la ciudad y varios campos en su tabla de atributos como el nombre de las calles, la longitud de los tramos, y el campo "oneway", estos son los básicos para obtener la información que queremos después. Si lo que quieres calcular son rutas a pie, sin tener en cuenta las direcciones de las calles, el campo "oneway" no es necesario (Aunque también puedes crearlo y desactivarlo cuando vayas a crear una ruta), pero si por el contrario quieres calcular rutas en coche donde debes tener en cuenta las direcciones de las calles, debes crear este campo, por lo que debes ir tramo por tramo escribiendo en el campo "oneway" "ft" si la dirección de la linea coincide con la dirección de la calle, "tf" si la dirección de la línea es contraria a la dirección de la calle, dejarlo en blanco si es de doble sentido y "N" si no se puede circular por ese tramo (porque es peatonal y no pueden circular coches por ejemplo).

Una vez tengas todos los campos necesarios, en Arcgis debes ir a ArcCatalog y haciendo click derecho en el shapefile de las calles elegimos "New Network Dataset", lo primero es escribir el nombre de nuestra red y darle a "siguiente", en "Connectivity" hacemos click donde pone "End Point" y elegimos "Any Vertex" para que los puntos de conexión los hagan en todos los vértices, le damos a "OK" y "siguiente", si no tenemos campos de elevación lo dejamos en "NO" y "siguiente", en "global turns" dejamos en "YES" y "siguiente", aquí establecemos los atributos de la red, te aparecerá el atributo "oneway" por defecto ya creado porque lo hemos creado antes en la tabla, y aparece como atributo de restricción, creamos el atributo de distancia dando click en "add", en la ventana escribimos el nombre del atributo (distancia), en el tipo "cost", en unidades "metros" y en tipo de dato "double" y "OK", ahora lo configuramos, hacemos doble click en el nombre (distancia), en tipo elegimos "field" y en "value" elegimos el campo de longitud de los tramos de nuestra tabla de atributos, le damos a "OK", creamos otro atributo que es el tiempo a pie en "add", nombre "tiempo a pie", tipo "cost", unidades "minutos", y tipo de datos "double" y "OK", lo configuramos haciendo doble click en "tiempo a pie", ponemos en tipo "field" y para value le damos al icono de la derecha llamado "evaluator properties" y donde pone "Value =" escribimos la siguiente expresión ( [metros]*60)/4000 , con esta expresión determinamos que la velocidad a pie es de 4 Km/h, creamos por último el atributo de "tiempo en coche" en "Add", todo igual que para crear el atributo de "tiempo a pie" pero en el campo "Value =" escribimos la siguiente expresión ( [metros]*60)/50000 , teniendo en cuenta que en toda la ciudad la velocidad máxima del coche será de 50 Km/h, podemos añadir más atributos según nuestras necesidades.

Una vez tenemos todos los atributos aparece la ventana del nombre de las direcciones, elegimos "YES" y damos click a "Directions", en "name" hacemos click y elegimos el campo de nombre de nuestras calles para que aparezca la hoja de ruta en nuestros estudios con las direcciones a seguir, arriba podemos configurar cómo queremos que aparezcan nuestras unidades de distancia (metros), tiempo (minutos), entre otras cosas, entonces aceptamos y finalmente aparece un resumen de todos nuestros datos creados y damos a "Finish", nos pregunta a continuación si queremos construir la red, le damos a "Sí" y nos crea la red de las calles de la ciudad con la que podemos trabajar luego en Arcmap con la extensión "Network Analyst".

3 comentarios:

  1. Buenas Alberto,
    Gracias por la info, mi duda es la siguiente, es algo complejo:
    ¿Se podría crear un nuevo CAMPO para las líneas One-way que contenga codificada la direccion de la línea y que se autocompletase con FT o TF ,teniendo en cuenta la posición espacial de su punto final con respecto al de origen de creación de la línea? Lo que quiero decir, si yo construyo una línea con dos puntos, y finalizo la sesión de edición, me gustaría ahora autocompletar su CAMPO de manera que al correr la herramienta, script,.. lo que sea, tuviese en cuenta que la direccion FT sería si el punto Final se encuentra espacialmente más al Norte y Este que el punto Origen, y TF si el punto final se encontrase más al Sur y al Oeste.
    Uso ArcGIS10,

    Un saludo,
    Juan M.

    ResponderEliminar
    Respuestas
    1. Buenas Juan M. lo que pides es algo tedioso, ya que normalmente el campo "oneway" se debe introducir a mano, pero pensando he encontrado una posible solución a tu problema, lo que he conseguido es crear un campo en la tabla de atributos con el valor del ángulo de inclinación respecto al norte de cada línea desde el punto inicial de la misma, claro que desaparecen los valores de todos los otros campos (que puedes llegar a recuperar creando un campo en el shapefile inicial y en el que vamos a crear que tenga un valor único para cada línea como puede ser su longitud o su valor de coordenadas por el cual puedes hacer un join) y esto se hace de la siguiente manera:

      - en un shapefile con muchas líneas (como un shapefile de calles) primero hay que unir todas las líneas en una.
      - para ello vamos a "editor", seleccionamos todas las líneas y en el menú "options" del editor vamos a "merge", esto
      nos une todas las líneas del shapefile en una.
      - cerramos edición y creamos en la tabla de atributos un campo nuevo llamado "direction" tipo texto.
      - abrimos edición y vamos al menú "COGO", seleccionamos la calle única que tenemos ahora (que es todas las calles que teníamos antes)
      y hacemos click en "split into cogo lines" y después en "update cogo attributes", le decimos que si queremos sobreescribir y ya tenemos
      en el campo "direction" todas las direcciones de las líneas del shapefile inicial.
      - para tener la inclinación correcta en grados debemos configurar las unidades, para ello seleccionamos todas las líneas y en "editor"
      vamos a "options" y en la pestaña "units" ponemos en "direction type" "north azimuth", aceptamos y en el menú "COGO" le damos a "update
      cogo attributes" y tendremos los grados de las líneas.

      a partir de aquí deberás cambiar los datos de inclinación por los valores "FT" y "TF", crea un campo de direcciones pero ahora de tipo "double" y copia todos los valores del campo "direction" y ahora seleccionando los valores entre "0" y ""179.9" ( y poniendo "FT") y seleccionando los valores entre "180" y "360" (y poniendo "TF"). Ojala haya podido dar respuesta a tu pregunta y te agradezco que sigas mi blog, y recuerda si necesitas contratar algún servicio cuenta conmigo, un cordial saludo, Alberto.

      Eliminar
  2. Otra manera más sencilla y mediante la cual mantenemos todos los campos es creando un campo denominado "direction" tipo texto, comenzamos edición, seleccionamos todas las líneas y abrimos "COGO" hacemos click en "update cogo attributes" y nos crea los ángulos de inclinación de cada línea. Puede ser que haya líneas donde no cree los campos, esto es porque la línea no es recta, para arreglar esto seleccionamos las líneas que quedaron vacías y hacemos click en "split into cogo lines" y luego en "update cogo attributes" entonces ya tenemos todas las líneas con su atributo de ángulo de inclinación y manteniendo los demás atributos, lo único que estas últimas líneas han sido divididas para poder obtener sus ángulos de inclinación y han perdido los atributos iniciales que tendremos que obtenerlos de alguna forma (por ejemplo como expliqué en la respuesta anterior). Gracias por seguir mi blog y recuerda que si necesitas contratar mis servicios para algún trabajo o proyecto estoy a tu disponibilidad, un saludo Alberto.

    ResponderEliminar