Localizando la Instalación Más Cercana con Matriz Origen-Destino (QGIS3)

En el tutorial previo, Visualización y Enrutamiento Básico de Red (QGIS3), aprendimos como construir una red y calcular la ruta más corta entre 2 puntos. Podemos aplicar esa técnica para varios tipos diferentes de análisis basado en red. Una de esas aplicaciones es el cálculo Matriz Origen-Destino o Matriz OD. Dado un conjunto de puntos de origen y otro conjunto de puntos destino, podemos calcular la ruta más corta entre cada par de origen-destino y averiguar la distancia/tiempo de viaje entre ellos. Tal análisis es útil para ubicar la instalación más cercana a un punto dado. Por ejemplo, la empresa de logística puede usar este análisis para encontrar el almacen más cercano a sus clientes para optimizar las rutas de entrega. Aquí usaremos el algoritmo Matriz de Distancia del complemento QGIS Network Analysis Toolbox (QNEAT3) para encontrar la instalación de salud más cercana a cada dirección en la ciudad.

Nota

Este tutorial muestra como usar tus propios datos de red para calcular una matriz origen-destino. Si no tienes tus propios datos de red, puedes usar Complemento ORS Tools y el algoritmo ORS Tools ‣ Matriz ‣ Matriz desde Capas para hacer el análisis similar usando datos OpenStreetMap. Vea Análisis de Área de Servicio usando Openrouteservice (QGIS3) para aprender como usar el complemento ORS Tools.

Vista general de la tarea

Tomaremos 2 capas para Washington DC - una con puntos que representan direcciones y otra con puntos que representan instalaciones de salud mental - y averiguaremos la instalación con la menor distancia de viaje para cada dirección.

Otras habilidades que aprenderá

  • Extraer una muestra aleatoria de una capa punto.

  • Usar Capas Virtuales para ejecutar una consulta SQL en una capa QGIS.

Obtener los datos

El gobierno del Distrito de Columbia comparte libremente cientos de conjuntos de datos en el Catálogo de Datos Abiertos.

Descargue las siguientes capas de datos como archivos shape.

Para su comodidad, puede descargar directamente una copia de los conjuntos de datos de los enlaces abajo:

Roadway_Block-shp.zip

Address_Points.zip

Proveedor de Servicios Comunitarios.zip

Fuente de Datos: [DCOPENDATA]

Configuración

Visite Complementos ‣ Administrar e Instalar complementos. Seleccione :guilabel:` Todos` Busque el complemento QNEAT3 e instálelo. Clic en Cerrar.

../../_images/setup11.png

Procedimiento

  1. Localice el archivo Community_Based_Service_Providers.zip, expándalo y añada Community_Based_Service_Providers.shp al lienzo. Seleccionaremos sólo los centros que prestan servicios a adultos. Haga clic con el botón derecho en la capa Community_Based_Service_Providers.shp y seleccione Filtro.

../../_images/1105.png
  1. Se abrirá un cuadro de diálogo :guilabel: Constructor de consultas. Introduzca la siguiente consulta en Expresión de filtro Haga clic en Ejecutar.

"PROVIDER_T"  IN ('Adult','Adult & Child')
../../_images/2100.png
  1. A continuación, localiza el archivo Roadway_Block.zip, expándelo y añade el archivo Roadway_Block.shp. Del mismo modo, localiza el archivo Address_Points.zip, expándelo y añade el archivo Address_Points.shp. Verás un montón de puntos alrededor de la ciudad. Cada punto representa una dirección válida. Seleccionaremos 1000 puntos al azar. Esta técnica se llama muestreo aleatorio. Vaya a :menuselección:`Procesos --> Caja de herramientas`.

../../_images/346.png
  1. Busque y localice el algoritmo Selección de Vector ‣ Extracción aleatoria

../../_images/346.png
  1. Seleccione Address_Points como la Capa de Entrada, Number of feature como el Método e, ingrese 1000 en Número/porcentaje de objetos espaciales. En el Extraído (aleatorio) elija el ... y clic Guardar a un archivo. Ahora elija el directorio e ingrese el nombre address_point_subset.shp y clic Ejecutar.

../../_images/519.png

Nota

Como el algoritmo extraerá 1000 puntos aleatorios del conjunto de datos dado, para replicar los puntos exactos usados en este ejercicio puede descargar el archivo de subconjunto que obtuvimos durante la ejecución del algoritmo aquí address_point_subset.zip. Después de descargar, cargue la capa address_point_subset.shp en QGIS.

  1. Se añadirá una nueva capa address_point_subset al panel Capas, puede desactivar la visibilidad de la capa de puntos de dirección Address_Points. Vamos a renombrar esta capa como origin_points. Haga clic con el botón derecho en la capa address_point_subset y seleccione Renombrar capa.

../../_images/619.png
  1. Del mismo modo, cambie el nombre de las capas Community_Based_Service_Provider que representan los centros sanitarios por destination_points. Esta forma de nombrar las capas facilita su identificación en el procesamiento posterior. A continuación, abriremos la caja de herramientas de procesamiento para crear la matriz de distancias utilizando las capas de origen y destino.

../../_images/718.png
  1. Localice el algoritmo QNEAT3 ‣ Matrices de distancia ‣ OD Matrix from Layers as Line (m:n). Si no ve este algoritmo en la caja de herramientas, asegúrese que tiene instalado el complemento QNEAT3.

../../_images/818.png
  1. Este algoritmo ayuda a encontrar las distancias junto con la red entre las capas de origen y destino seleccionadas. Seleccione Roadway_Block como Capa de red. Seleccione origin_points como :guilabel: Capa de puntos de origen y OBJECTID como Campo de ID de punto único. Del mismo modo, establezca puntos_destino como la capa Hacia-Puntos y OBJECTID como el campo Identificador de punto único. Establezca Criterio de optimización como Sendero más corto (optimización de la distancia).

../../_images/918.png
  1. Dado que muchas calles de la red son de sentido único, es necesario establecer los Parámetros avanzados para especificar la dirección. Véase Visualización y Enrutamiento Básico de Red (QGIS3) para más detalles sobre cómo se estructuran estos atributos. También tenemos una opción para seleccionar el estilo de geometría de la matriz generada. Tenemos una red de carreteras con información de dirección, por lo que podemos generar la matriz siguiendo la ruta. Elija Matrix geometry follows routes. Elija SUMMARYDIR como Campo de dirección. Introduzca OB como Valor para la dirección hacia delante, IB como Valor para la dirección hacia atrás, y BD como Valor para la dirección hacia ambos lados. Establezca Tolerancia topológica como 0.0000150. Mantenga las demás opciones en sus valores por defecto y haga clic en :guilabel: Ejecutar.

../../_images/1025.png
  1. Se añadirá una nueva capa de tabla llamada Output OD Matrix al panel Capas. Haga clic con el botón derecho y seleccione Abrir tabla de atributos. Verá que la tabla contiene 67000 filas. Teníamos 67 puntos de origen y 1000 puntos de destino - por lo que la salida contiene 67x1000 = 67000 pares de orígenes y destinos. La columna total_cost contiene la distancia en metros entre cada punto de origen y cada punto de destino.

../../_images/1128.png
  1. Para este tutorial, sólo nos interesa el punto de destino con la distancia más corta. Podemos crear una consulta SQL para elegir el destino con el menor total_cost entre todos los destinos. Vaya a Procesamiento ‣ Caja de herramientas.Busque y localice la opción Vector general ‣ Ejecutar SQL.

../../_images/1226.png
  1. En :guilabel: Fuentes de datos de entrada adicionales seleccione ... y marque la opción :guilabel: Matriz OD de salida y haga clic en :guilabel: Aceptar. Ahora haga clic en Summation bajo :guilabel: Consulta SQL. Introduzca la siguiente consulta en el cuadro de diálogo Consulta SQL. Introduzca geometry como campo Geometría y seleccione LineString como tipo de :guilabel: Geometría. Haga clic en Ejecutar.

select origin_id, destination_id, min(total_cost) as shortest_distance, geometry
from input1 group by origin_id
../../_images/1324.png
  1. Se añadirá una nueva capa virtual SQL Output al panel :guilabel: Capas. Esta capa contiene el resultado de nuestro análisis. Proveedor de servicios más cercano para cada uno de los 1000 puntos de origen.

../../_images/1422.png

If you want to give feedback or share your experience with this tutorial, please comment below. (requires GitHub account)