Más

Consulta espacial de Postgis st_disjoint

Consulta espacial de Postgis st_disjoint


Tengo 2 capas que quiero comparar. Deseo recuperar las características en la capa 1 que no tienen parte en común con las características en la capa 2. Intento consultas como esa pero no me devuelve el resultado esperado:

seleccione * de c1 unirse a activite.c2 en st_disjoint (c1.geom, c2.geom) DONDE c2 blabla ';

Obtengo aquí (excepto error) una tabla que enumera para cada característica en la capa 1 aquellos de la capa 2 que no la cortan. Pero, ¿cómo recuperar los de la capa 1 que se cruzan con alguna de la capa 2? Espero que quede claro ...


Encontré una respuesta con un recuento y un grupo por:

seleccione c.gid, c. *, count (c.gid) de c1 únase a c2 en st_disjoint (c1.geom, c2.geom) DONDE c2.nom_comm ILIKE 'blabla' GROUP BY c.gid teniendo count (c.gid) > 22;

22 significa desvinculado de todas las características de c2.


¿Cómo utilizo Doctrine2 para trabajar con consultas geoespaciales usando PostGIS?

Tengo una aplicación de cara al público que se basa en Postgres y PostGIS.

He intentado buscar en Google durante horas, pero no he podido encontrar ninguna documentación que pueda mostrar algunas cosas geoespaciales básicas como obtener la distancia entre dos puntos usando Doctrine2. No poder usar un ORM es un gran problema para mí en términos de determinar mi base de datos de elección.

¿Alguien puede mostrarme un ejemplo básico de, digamos, mostrar todos los puntos dentro de un radio de, digamos, 10 millas usando Doctrine?


Relaciones espaciales

Una función principal de un SIG es determinar las relaciones espaciales entre las características: ¿Se superponen? ¿Está uno contenido por el otro? ¿Se cruza uno con el otro?

Las geometrías se pueden relacionar espacialmente de diferentes formas. Los siguientes son ejemplos de cómo una geometría se puede relacionar espacialmente con otra:

  • La geometría A pasa por la geometría B.
  • La geometría A está completamente contenida por la geometría B.
  • La geometría A contiene completamente la geometría B.
  • Las geometrías no se cruzan ni se tocan entre sí.
  • Las geometrías son completamente coincidentes.
  • Las geometrías se superponen entre sí.
  • Las geometrías se tocan en un punto.

Para determinar si estas relaciones existen o no, ejecute funciones de relación espacial. Estas funciones comparan las siguientes propiedades de las geometrías que especifica en su consulta:

  • Los exteriores (E) de las geometrías, que es todo el espacio no ocupado por una geometría
  • El interior (I) de las geometrías, que es el espacio ocupado por una geometría
  • El límite (B) de las geometrías, que es la interfaz entre el interior y el exterior de una geometría.

Cuando construya una consulta de relación espacial, especifique el tipo de relación espacial que está buscando y las geometrías que desea comparar. Las consultas devuelven verdaderas o falsas, o las geometrías participan entre sí en la relación espacial especificada o no. En la mayoría de los casos, usaría una consulta de relación espacial para filtrar un conjunto de resultados colocándolo en la cláusula WHERE.

Por ejemplo, si tiene una tabla que almacena las ubicaciones de los sitios de desarrollo propuestos y otra tabla que almacena la ubicación de los sitios de importancia arqueológica, es posible que desee asegurarse de que las características de la tabla de sitios de desarrollo no se crucen con los sitios arqueológicos. Puede emitir una consulta para asegurarse de que ninguno de los sitios de desarrollo se cruza con los sitios de arqueología y, si alguno lo hace, devolver la identificación de los desarrollos propuestos. En este ejemplo, se utiliza la función ST_Disjoint.

Esta consulta devuelve el nombre del desarrollo y el ID del sitio arqueológico que no están separados, en otras palabras, los sitios que se cruzan entre sí. Devuelve un proyecto de desarrollo, Bow Wow Chow, que cruza el sitio arqueológico A1009.

Para obtener información sobre las funciones ST_Geometry que prueban relaciones espaciales en Oracle o PostgreSQL, consulte Funciones de relación espacial para ST_Geometry. Para obtener información sobre las funciones de relación espacial utilizadas con los tipos espaciales de IBM DB2, IBM Informix, Oracle Spatial, PostGIS o Microsoft SQL Server, consulte la documentación de esos sistemas de gestión de bases de datos.


Análisis espacial

Este curso explora temas del sistema de información geográfica (GIS) y cómo consultar y analizar datos GIS dentro del entorno de base de datos de BigQuery GIS. Comenzaremos definiendo qué es GIS, discutiendo algunos conceptos clave de GIS e introduciendo algunos tipos de datos de GIS comunes.

Luego pasaremos a los tipos comunes de mapas e introduciremos el concepto de proyecciones de mapas. Obtendrá una introducción a la herramienta BigQuery de Google y, finalmente, reuniremos todos estos temas y veremos cómo puede realizar análisis y visualización utilizando SQL y Python junto con BigQuery GIS.

Si tiene un caso de uso analizando y mapeando datos geoespaciales o anticipa uno en el futuro, especialmente si sus datos están en un formato relacional (o ya están en BigQuery), ¡este curso es ideal para usted!

No dude en contactarnos en [email protected] con cualquier comentario que pueda tener relacionado con este curso.

Objetivos de aprendizaje

  • Obtenga información sobre Google BigQuery GIS y sus conceptos, así como sobre los formatos de datos comunes de GIS.
  • Comprender los tipos comunes de mapas y el concepto de proyecciones de mapas.
  • Obtenga más información sobre la funcionalidad de consultas espaciales y la visualización espacial.
  • Comprender cómo se puede integrar BigQuery GIS con Python

Público objetivo

Este curso está dirigido a cualquier persona que desee:

  • Aproveche BigQuery GIS para sus necesidades de análisis geoespacial
  • Aprenda a visualizar datos en mapas

Prerrequisitos

Para aprovechar al máximo este curso, debe tener un conocimiento básico de SQL, Python y la computación en la nube, idealmente Google Cloud Platform.

Ahora pasemos a las funciones de medición espacial, que es donde comenzamos a entrar en algunos de los análisis que puede hacer con estos tipos de geografía dentro de BigQuery GIS. Estas funciones le permiten calcular medidas de uno o más objetos geográficos. Entonces, por ejemplo, puede calcular la distancia entre dos valores geográficos de puntos o puede calcular el área o el perímetro de un polígono. También puede calcular la longitud del objeto de geografía.

Entonces, si regresamos por un minuto a nuestro ejemplo de ruta de tren Amtrak, podríamos calcular la longitud de la ruta completa desde Boston a Washington. Una nota importante sobre estas funciones de medición espacial es que las unidades devueltas son métricas, por lo que los valores se dan en metros o metros cuadrados, según el tipo de medición que se esté calculando.

Volvamos una vez más a nuestro ejemplo de los puntos de referencia de Nueva York. Ahora tenemos tanto el Empire State Building como la Estatua de la Libertad en nuestra tabla y podemos calcular la distancia entre estos dos puntos. La función ST_DISTANCE toma dos puntos de datos geométricos como argumentos separados por una coma.

En la consulta SQL, que se muestra en la parte del editor de consultas de la interfaz de usuario web, puede ver que lo que realmente estamos haciendo es usar subconsultas para obtener los dos puntos de datos de geometría. La primera subconsulta obtiene el campo Landmark_geo para el Empire State Building y la segunda subconsulta obtiene el campo Landmark_geo para la Estatua de la Libertad.

Estas subconsultas son casi idénticas, la única diferencia es qué punto de referencia estamos tirando. Como puede ver en los resultados, la distancia entre estos dos puntos de referencia es de 8939 metros, lo que equivale a 8,24 kilómetros. Por supuesto, esto es en línea recta o deberíamos decir como en línea recta, ya que es Nueva York. Si en realidad viaja en metro, taxi o transbordador para ir de un lugar a otro, es probable que la distancia recorrida sea diferente.

Para el siguiente ejemplo, veremos cómo usaría la función ST_AREA para calcular el tamaño relativo de los códigos postales dentro del condado de Los Ángeles. Nuevamente, estamos usando la tabla de información del código postal de los datos públicos de Google. El campo geom del código postal es un campo de polígono de geometría que es la entrada a la función de área. He filtrado la tabla de código postal solo para el condado de Los Ángeles utilizando una cláusula where y he ordenado los resultados en orden descendente de área de código postal.

Como puede ver en el panel de resultados, el código postal 90704 es el código postal más grande por área en el condado de Los Ángeles con 7,6 metros cuadrados. Ahora, esto me parece un poco pequeño, pero sé que los códigos postales tienden a ser mucho más pequeños en áreas de alta densidad o alta densidad de población que en áreas donde la densidad de población está más dispersa. Y dado que Los Ángeles puede tener una población bastante densa, esto quizás sea correcto. Pero es bueno usar su intuición y mirar estos resultados y decir, ¿esto tiene sentido? ¿Esto pasa la prueba de olfateo?

Nuestro siguiente tipo de funciones espaciales son las articulaciones espaciales que también se conocen como predicados. Estas funciones determinan la relación entre dos o más geometrías y devuelven una salida booleana, lo que significa que si la relación existe, la función devuelve verdadero y si la relación no existe, la función devuelve falso. Y debido a que la salida de estas funciones es un vector de valores verdaderos o falsos, estas funciones se utilizan a menudo en la cláusula where de una declaración SQL. No se preocupe si esto parece un poco confuso ahora, tendrá más sentido cuando comencemos a sumergirnos en ejemplos.

La siguiente diapositiva enumera las funciones de predicado y, con suerte, solo mirando los nombres, es un poco más evidente lo que hacen estas funciones. Por ejemplo, ST_EQUALS devuelve verdadero si las geografías que se comparan son las mismas y falso en caso contrario. De manera similar, ST_INTERSECTS devuelve verdadero si la intersección del conjunto de puntos de las dos geografías que se comparan no está vacía. Esto significa que se devuelve verdadero si hay al menos un punto que aparece en ambas geografías de entrada. ST_DISJOINT es lo opuesto a ST_INTERSECTS. Por lo tanto, devuelve verdadero si no hay puntos que aparezcan en las dos geografías que se están comparando y falso en caso contrario. Esto significa que, por definición, si ST_INTERSECTS es verdadero, ST_DISJOINT debe ser falso.

Sumergiéndonos en un ejemplo, usemos la función ST_CONTAINS para determinar cuántos delitos ocurren en cada código postal en cada año en Chicago. Podemos hacer esto usando el conjunto de datos públicos de los delitos de Chicago y combinándolo con nuestro ahora familiar conjunto de datos públicos de códigos postales. Lo primero que debe notar acerca de esta consulta es que la función ST_CONTAINS está en la cláusula where. Las entradas para esta función son dos geografías. Se devolverá un valor de verdadero si todos los puntos de la segunda geografía enumerados están dentro de la primera geografía y falso en caso contrario.

Entonces, en nuestro caso, la primera geografía es el polígono que representa cada código postal. Y la segunda geografía es la ubicación del punto de cada crimen. Si un delito ocurrió dentro de los límites de un código postal en particular, se devuelve un verdadero. Se devuelve un falso por ese delito para todos los demás códigos postales.

Algo que vale la pena señalar aquí es que estamos usando una función de constructor para crear los valores de puntos de geografía para cada crimen porque nuestra base de datos de crímenes no tiene un campo de geografía, por lo que tenemos que construirlo a partir de los valores de longitud y latitud usando la función de punto ST_GEOG. . Este es un buen ejemplo de cómo se pueden usar juntos diferentes tipos de funciones de análisis espacial para construir una consulta compleja. Esta consulta cuenta cada uno de los valores verdaderos para cada código postal cuando también se agrupa por año, lo que nos da nuestros resultados finales del número de delitos en cada código postal para cada año que hemos ordenado descendiendo primero por año y luego por recuento de delitos.

Así que tenemos el año más reciente con el código postal con más delitos para ese año en la parte superior de nuestra tabla de resultados. Y como puede ver en el panel de resultados, para el año 2020, el código postal en Chicago con más delitos según esta base de datos fue el código postal 60620 que tenía casi 7,000 delitos a octubre de 2020.

A continuación, hablaremos de las funciones de transformación espacial, que son funciones que generarán un nuevo tipo de datos geográficos en función de la entrada. ST_BOUNDARY y ST_CENTROID son funciones que toman un solo objeto de geometría como entrada, mientras que algunas de las otras funciones de esta lista, como ST_UNION, toman varios objetos de geometría como entrada.

Vamos a hacer un ejemplo bastante simple para esta clase de funciones que consiste en ingresar un vector de polígonos y devolver el centroide de esos polígonos. Vamos a utilizar un nuevo conjunto de datos públicos que son los datos del distrito censal del estado de Hawái. Es un poco ambicioso porque Hawái es un lugar divertido para visitar y un lugar divertido para pensar en visitar y estar, especialmente cuando estás sentado en tu computadora viendo un curso en BigQuery GIS.

Entonces, en caso de que no lo sepa, los distritos censales son subdivisiones de condados y están diseñados para contener aproximadamente la misma cantidad de habitantes por segmento censal. Pero, por supuesto, el tamaño relativo puede variar significativamente según la densidad de población.

Entonces, dentro de este conjunto de datos, tenemos los campos geom del tracto, que es el polígono de geometría para cada tramo censal. Podemos usar la función ST_CENTROID para obtener el punto geográfico del centroide para cada tramo. Esto es un poco engañoso porque este campo ya está en los datos públicos como los campos geográficos de puntos internos. Pero es una buena forma de comprobar que la función ST_CENTROID está haciendo lo que esperábamos.

Nuestro ejemplo final de análisis espacial será hacer un análisis de agrupamiento utilizando datos geográficos. La agrupación en clústeres es una metodología de aprendizaje automático que agrupa datos en función de atributos comunes. Esto se considera un algoritmo no supervisado porque no hay una respuesta correcta entre comillas que esté tratando de predecir. Los clústeres se descubren durante la ejecución del análisis sin orientación sobre cómo deberían formarse más allá del algoritmo en sí.

El algoritmo integrado para la agrupación en clústeres en BigQuery GIS se llama DBScan, que es un algoritmo de agrupación en clústeres basado en densidad. Y de aquí es de donde recibe su nombre. DB significa Density Based, no database como podría pensar, ya que hemos estado hablando de consultas de base de datos. Esto significa que mientras los puntos de datos en áreas de alta densidad se agrupan, los puntos de datos en áreas de baja densidad se clasifican como ruido.

Una cosa buena sobre el algoritmo de escaneo de la base de datos es que no es necesario especificar el número de clústeres por adelantado. Esto contrasta con la agrupación de K-medias, que es un método del que quizás haya oído hablar, donde K es el número de agrupaciones y es una entrada necesaria para el análisis.

Entonces, en nuestro ejemplo, los datos públicos tienen una tabla de árboles callejeros en San Francisco que usaremos para crear nuestros clústeres. Primero, necesitamos especificar algunos parámetros de nuestros clústeres para que podamos asignar. Esta es una consulta un poco compleja, así que tomemos un minuto más o menos para desglosarla. La consulta que en realidad está creando los clústeres está en una subconsulta que hemos llamado clústeres de árboles usando con los clústeres de árboles como formación. Esto es algo que puede que no hayas visto, pero te permite crear una subconsulta y luego llamarla con ese nombre.

Así que aquí seleccionamos los ID de los árboles, las especies y alguna otra información, incluido el estado legal y el cuidador, y luego estamos creando el valor del punto de geografía usando la función de constructor de puntos ST_geog, tomando la longitud y latitud del árbol porque en este Por ejemplo, no tenemos un campo de geografía en nuestra tabla de árbol, así que tenemos que construirlo. Entonces esa geografía es la primera entrada en nuestra función ST_CLUSTER DBScan.

La segunda entrada es 100, que es el radio de 100 metros que estamos usando para cada uno de nuestros grupos. Y la tercera entrada es 10, que es que estamos especificando que queremos un mínimo de 10 árboles en cada grupo. Cualquier otro grupo que sea más pequeño que 10 árboles o agrupación, esos árboles se considerarán ruido.

Luego tomamos eso y la salida de esa subconsulta es para cada árbol que se nos asigna a un clúster o se asigna a ruido. Y luego tomamos esa subconsulta y agrupamos los árboles contando cuántos árboles tenemos en cada grupo. Y queremos ver los grupos que son mayores que cero porque creo que el grupo cero es el grupo de ruido, aunque no estoy 100% seguro de eso. Y luego agrupamos en el ID del grupo y luego ordenamos por el recuento de árboles y lo ordenamos de forma descendente para que vea el grupo con la mayor cantidad de árboles, que son 524 árboles en la parte superior de nuestra tabla de resultados.


Funciones GIS

Drill contiene un conjunto de funciones del Sistema de información geográfica (GIS). La mayor parte de la funcionalidad sigue a la de PostGIS. Para utilizar estas funciones, sus datos espaciales deben estar definidos en el formato de representación de texto conocido (WKT). El formato WKT le permite representar puntos, líneas, polígonos y otras formas geométricas. A continuación se muestran dos cadenas de WKT de ejemplo:

Drill almacena puntos como binarios, por lo que para leer o trazar estos puntos necesita convertirlos usando las funciones ST_AsText () y ST_GeoFromText (). La siguiente tabla enumera las funciones GIS incluidas en Drill.

Función Producción Descripción
ST_AsGeoJSON (geometría) VARCHAR Devuelve la geometría como un elemento GeoJSON.
ST_AsJSON (geometría) VARCHAR Devuelve una representación JSON de la geometría.
ST_AsText (geometría) VARCHAR Devuelve una representación WKT de la geometría / geografía sin metadatos SRID
ST_Buffer (geometría, radio) GEOMETRÍA Devuelve una geometría que representa todos los puntos cuya distancia desde esta geometría es menor o igual que el radio.
ST_Contains (geometry_a, geometry_b) Booleano Devuelve verdadero si ningún punto de geometry_b se encuentra fuera de geometry_a y al menos un punto del interior de geometry_b está en el interior de geometry_a.
ST_Crosses (geometría_a, geometría_b) Booleano Devuelve verdadero si las geometrías proporcionadas tienen algunos puntos interiores en común, pero no todos.
ST_Difference (geometría_a, geometría_b) GEOMETRÍA Devuelve una geometría que representa la parte de geometry_a que no se cruza con geometry_b.
ST_Disjoint (geometría_a, geometría_b) Booleano Devuelve verdadero si las dos geometrías no se cruzan espacialmente.
ST_Distance (geometría_a, geometría_b) DOBLE Para los tipos de geometría, devuelve la distancia cartesiana 2D entre dos geometrías en unidades proyectadas. Para los tipos de geografía, el valor predeterminado es devolver la distancia geodésica mínima entre dos geografías en metros.
ST_DWithin (geometría_a, geometría_b,
distancia) Booleano Devuelve verdadero si las geometrías están dentro de la distancia especificada entre sí.
ST_Envelope (geometría) GEOMETRÍA Devuelve una geometría que representa el cuadro delimitador de doble precisión de la geometría proporcionada. El polígono está definido por los puntos de esquina del cuadro delimitador: ((MINX, MINY), (MINX, MAXY), (MAXX, MAXY), (MAXX, MINY), (MINX, MINY)).
ST_GeoFromText (texto, [SRID]) GEOMETRÍA Devuelve un valor ST_Geometry especificado de la representación WKT. Si el ID de referencia espacial (SRID) se incluye como segundo argumento, la función devuelve una geometría que incluye este SRID como parte de sus metadatos.
ST_Equals (geometría_a, geometría_b) Booleano Devuelve verdadero si las geometrías proporcionadas representan la misma geometría. Se ignora la direccionalidad.
ST_Intersects (geometría_a, geometría_b) Booleano Devuelve verdadero si las geometrías / geografías "se intersecan espacialmente en 2D" (comparten cualquier porción del espacio) y falso si no lo hacen (son disjuntas).
ST_Overlaps (geometría_a, geometría_b) Booleano Devuelve verdadero si las geometrías comparten espacio y son de la misma dimensión, pero no están completamente contenidas entre sí.
ST_Point (largo, lat) GEOMETRÍA Devuelve un ST_Point con los valores de coordenadas dados.
ST_Relate (geometría_a, geometría_b
[, intersectionMatrixPattern]) Booleano Devuelve verdadero si geometría_a está espacialmente relacionada con geometría_b, determinada probando las intersecciones entre el interior, el límite y el exterior de las dos geometrías, según lo especificado por los valores en el patrón de la matriz de intersección. Si no se pasa ningún patrón de matriz de intersección, devuelve el patrón de matriz de intersección máximo que relaciona las dos geometrías.
ST_Touches (geometría_a, geometría_b) Booleano Devuelve verdadero si las geometrías tienen al menos un punto en común, pero sus interiores no se cruzan.
ST_Transform (geometry_a [Source_SRID, Target_SRID]) GEOMETRÍA Devuelve una nueva geometría con sus coordenadas transformadas en una referencia espacial diferente.
ST_Union (geometría_a, geometría_b) GEOMETRÍA Devuelve una geometría que representa la unión de conjuntos de puntos de las geometrías.
ST_Union_Aggregate (geometría) GEOMETRÍA Devuelve una geometría que representa la unión de conjuntos de puntos de las geometrías. Nota: Esta función es una función agregada y debe usarse con GROUP BY.
ST_Within (geometría_a, geometría_b) Booleano Devuelve verdadero si geometry_a está completamente dentro de geometry_b.
ST_X (geometría) DOBLE Devuelve la coordenada x del punto, o NaN si no está disponible.
ST_XMax (geometría) DOBLE Devuelve el x máximo de un cuadro delimitador 2D o 3D o una geometría.
ST_XMin (geometría) DOBLE Devuelve el mínimo x de un cuadro delimitador 2D o 3D o una geometría.
ST_Y (geometría) DOBLE Devuelve la coordenada y del punto, o NaN si no está disponible.
ST_YMax (geometría) DOBLE Devuelve los máximos y de un cuadro delimitador 2D o 3D o una geometría.
ST_YMin (geometría) DOBLE Devuelve los mínimos y de un cuadro delimitador 2D o 3D o una geometría.

Copyright © 2012-2020 The Apache Software Foundation, con licencia de Apache License, Versión 2.0.
Apache y el logotipo de la pluma de Apache son marcas comerciales de The Apache Software Foundation. Otros nombres que aparecen en el sitio pueden ser marcas comerciales de sus respectivos propietarios.


Postgis

Postgis es un extensor de base de datos espacial para la base de datos relacional de objetos PostgreSQL. Agrega soporte para objetos geográficos permitiendo que las consultas de ubicación se ejecuten en SQL.

En macOS, es conveniente instalar algunas utilidades CLI para interactuar con postgres y postgis.

Obtengamos y carguemos algunos datos espaciales en la base de datos (dedicaré una publicación futura a un conjunto más completo de conjuntos de datos espaciales). De nuevo, usaré algunos conjuntos de datos irlandeses.

Aeropuertos

Este es un conjunto de datos de puntos simple de los principales aeropuertos de la isla de Irlanda. Esto se generó a mano utilizando Wikipedia (RoI) y Wikipedia (NI) y Google Maps para encontrar las coordenadas.

Seleccionemos algunos datos para ver los campos almacenados:

Nombre Valor
ogc_fid 3
nombre Aeropuerto de dublín
iata_code DOBLAR
tamaño_marcador Medio
marcador_color # FF0000
símbolo_marcador aeropuerto
geojson

Usemos algunas funciones de Postgis para comprender los datos espaciales almacenados:

Nombre Valor
nombre Aeropuerto de dublín
st_geometrytype ST_Point
st_ndims 2
st_srid 4326
st_x -6.244182586669922
orzuelo 53.426923691696736
st_astext PUNTO (-6.24418258666992 53.4269236916967)

4326 es el identificador de sistema de referencia espacial (SRID) más común para las coordenadas geográficas. Se llama Sistema Geodésico Mundial y es utilizado por el Sistema de Posicionamiento Global (GPS). Puede encontrar más información sobre las proyecciones aquí.

Para crear geometrías en Postgis, existen algunas opciones. Usando maps.ie tomé una ubicación de ejemplo: Newbridge, condado de Kildare (latitud: 53.180124 longitud: -6.7982137).

La comparación de puntos geométricos en Postgis se realiza mediante la función ST_Equals:

Hay varias formas de determinar la distancia entre dos puntos en Postgis: ST_Distance, ST_Distance_Sphere y ST_Distance_Spheroid. El método que seleccione depende de sus requisitos de velocidad y precisión. Más información detallada se puede encontrar aquí. El siguiente ejemplo determina el aeropuerto más cercano a Newbridge, Co. Kildare.

Asentamientos

El conjunto de datos Settlements es un conjunto de polígonos que describe dónde se encuentran los centros urbanos en la República de Irlanda. Descargué el archivo Settlements_OSI_Generalised_100M.geojson del sitio data.gov.ie.

Nombre Valor
ogc_fid 5
asentamiento 31004
settl_name Sligo
guid 899C172F-D7B7-4EE1-A17B-C773AE325147
geojson

Las siguientes funciones son útiles para describir las geometrías almacenadas en su base de datos y cómo tiene varias opciones para exportar los datos.

Nombre
asentamiento 14011 35005
settl_name Gorey Ciudad y suburbios de Galway
st_geometrytype ST_Polygon ST_MultiPolygon
st_area 0.0007077848937365223 0.00729630548942928
st_nrings 1 7
st_exteriorrings 01020. 3F5A62F2319C05DF082259C574A40
st_interiorring
st_perímetro 0.1588223355751195 0.8207814038117153
st_numgeometries 1 7
st_geometryn 0103000020E610 .. 0103000020E610.
st_area 0.0007077 0.0072963
st_length 0 0
st_astext POLÍGONO ((- 6.28 52.68.)) MULTIPOLÍGONO (((- 9.05 53.25.)))
st_asewkt SRID = 4326POLYGON ((- 6.28 52.68.)) SRID = 4326 MULTIPOLÍGONO (((- 9.05 53.25.))))
st_asewkb E ' x0103000020E610000. E ' x0106000020E610000.
st_asgml & ltgml: Polygon srsName = "EPSG: 4326" & gt & ltgml: outerBoundaryIs & gt & ltgml: LinearRing & gt & ltgml: coordenadas & gt-6.28,52.68. & ltgml: MultiPolygon srsName = "EPSG: 4326" & gt & ltgml: polygonMember & gt & ltgml: Polygon & gt & ltgml: outerBoundaryIs & gt & ltgml: LinearRing & gt & ltgml: coordenadas & gt-9.05,53.25.
st_askml & ltPolygon & gt & ltouterBoundaryIs & gt & ltLinearRing & gt & ltcoordinates & gt-6.28,52.68 & ltMultiGeometry & gt & ltPolygon & gt & ltouterBoundaryIs & gt & ltLinearRing & gt & ltcoordinates & gt-9.05,53.25
st_asgeojson
st_assvg M -6,28 -52,68 L. Z M -9,05 -53,25 L. Z

Algunas funciones adicionales de relaciones espaciales incluyen ST_Intersects, ST_Disjoint y ST_Crosses. Éstos prueban si los interiores de las geometrías se cruzan.

ST_Contains y ST_Within son funciones para encontrar en qué polígonos se encuentra un punto. Observe el orden de los parámetros en ambas funciones, están conmutadas. Ambas funciones devuelven Newbridge como resultado.

Condados

Este es otro conjunto de datos poligonales de los límites tradicionales de 32 condados. Agregué las siguientes propiedades: trazo, opacidad de trazo, ancho de trazo, relleno y opacidad de relleno. Estos parámetros se utilizan en https://gist.github.com para representar el geojson, la esencia se puede encontrar aquí.

Nombre Valor
ogc_fid 29
etiqueta de nombre Tipperary
name_en Condado de Tipperary
zona 4305196662.62
latitud 52.6433140996745
longitud -7.95796422303277
carrera #000000
ictus_opacity 0.5
anchura del trazo 1
llenar # 0000FF
fill_opacity 0.5
geojson

Para determinar los asentamientos en el condado de Dublín, una simple unión espacial responderá a la pregunta utilizando la función ST_Contains. Devuelve las áreas: Naul, Ballyboghil, Donabate, Kinsealy-Drinan, Glencullen, Saggart, Rathcoole, Newcastle, Oldtown, Rivermeade, Garristown, Balrothery, Lusk, Brittas y Kinsaley

Límites de áreas pequeñas

Las áreas pequeñas son divisiones de la República de Irlanda que se utilizan para el análisis de los datos del censo. Descargué Small_Areas_OSI_Generalised_100M.geojson del sitio data.gov.ie. Cada Área Pequeña tiene entre 60 y 90 hogares. El tamaño normalizado se presta a un análisis más sólido de los datos.

Nombre Valor
ogc_fid 972
guid 4c07d11e-115c-851d-e053-ca3ca8c0ca7f
nombre del condado Laois
csoed 08001
osied 107001
edname Abbeyleix
sa_pub2011 107001003
Área pequeña 107001003
geomalla A107001003
shape__area 0.000750942565133452
shape__length 0.183375835528692
geojson

Paradas de Luas

Este es un conjunto de datos puntuales de las líneas Luas Roja y Verde (paradas y depósitos) en la ciudad de Dublín. Los datos de data.tii.ie se ampliaron para incluir todas las paradas y depósitos más las siguientes propiedades: Línea (roja o verde), Zona (Verde 1, Roja 4, Central, etc.), Inicio (fecha de inicio), Etapa ( Etiqueta de planificación), Abierto (Sí / No, dos estaciones permanecen cerradas en la Línea Verde: Racecourse y Brennanstown), PnR (Park and Ride disponible Sí / No), DublinBikes (Dublin Bikes disponible Sí / No), tamaño de marcador, marcador -color, símbolo-marcador. Las últimas tres propiedades se utilizan en aplicaciones de visualización.

Nombre Valor
ogc_fid 1
identificación 1
nombre Tallaght
escribe Detener
línea rojo
zona Rojo 4
fecha de inicio 2004-09-26
escenario A
abierto
pnr
bicicletas de Dublín No
geojson

Dedicaré un próximo post a analizar la población que vive cerca de una parada de luas.

Población irlandesa de 1841 a 2016 por condado

Un interesante conjunto de datos de data.gov.ie donde se proporciona la población de cada condado para cada censo desde 1841. Estos datos se utilizaron en mi última publicación de blog para describir el movimiento de personas hacia Dublín desde la década de 1840. Estos datos se proporcionan en formato px, un formato común para los estadísticos. Lo convertí a csv para cargarlo en Postgres usando pxaxis y pandas.

Me requirió escribir un archivo python simple, convert_e2001.py, que lee el archivo px y descarga un archivo csv usando pandas.

Antes de cargar los datos, creé una tabla para almacenar los datos:

Luego, ejecute el código Python y cargue en la base de datos usando psql.

condado sexo año del censo datos
Quintilla cómica Ambos sexos 1841 330029
. . . .
Quintilla cómica Ambos sexos 1946 142559
. . . .
Quintilla cómica Ambos sexos 2016 194899

Censo de áreas pequeñas 2016

Este es un conjunto de datos publicado después del censo de 2016. Los datos tienen una granularidad de área pequeña, en otras palabras, cada fila o registro representa un área pequeña que tiene muchas métricas, p. Total: hombres, personas sin religión, francófonos, etc. Utilizaré este conjunto de datos para analizar el número de personas que viven cerca de los Luas en Dublín en una publicación futura.

Para cargar los datos en la base de datos utilicé una utilidad llamada pgfutter. Esta es una aplicación de línea de comandos realmente útil para cargar datos csv en Postgres. Crea el DDL durante la importación, especialmente útil para archivos csv con cientos de columnas. El único inconveniente es que los datos métricos se importan con texto tipo.

Cargando los datos con pgfutter:

Nombre Valor
guid 4c07d11e-11d3-851d-e053-ca3ca8c0ca7f
geomalla SA2017_017001001
geogdesc Área pequeña
t1_1age0m 4
. ..
t1_2t 395
. ..
t15_3_t 128

3 respuestas 3

En PostGIS puede usar el operador de cuadro delimitador para encontrar candidatos, lo cual es muy eficiente ya que usa índices GiST. Luego, si se requieren coincidencias estrictas, use el operador contiene.

Sobre si esto es necesario, depende de sus requisitos. Para que lo anterior funcione, ciertamente necesita tener PostGIS y GEOS instalados. Pero, si la coincidencia del cuadro delimitador es suficiente, puede codificarlo simplemente en SQL sin necesidad de PostGIS.

Si se requieren coincidencias exactas, los algoritmos de contenido están disponibles públicamente, pero implementarlos de manera eficiente requiere un poco de esfuerzo implementarlo en una biblioteca que luego se llamaría desde SQL (al igual que GEOS).


Sffyju

Criar a un niño bilingüe. ¿Cuándo deberíamos introducir el idioma mayoritario?

¿Por qué el transbordador espacial no rebotó en el espacio tantas veces como fuera posible para perder mucha energía cinética allí arriba?

Válvulas de trompeta, longitudes y tono

Demandar a un oficial de policía en lugar de al Departamento de Policía

¿Cómo puedo conectar un interruptor de 9 posiciones para que cada posición encienda un LED más que el anterior?

Cómo evitar los clichés de introducción

¿Podrían los alces / alces sobrevivir en la selva amazónica?

¿Cuál es el líquido menos denso en condiciones normales?

Agujeros en ElementMesh con ToElementMesh de ImplicitRegion

¿Es aceptable utilizar las horas de trabajo para leer libros de interés general?

Función de acordes de solo de guitarra de Rolling Stones Sway

¿Vale la pena la calefacción central eléctrica si se utilizan paneles solares?

Poner a Ant-Man en arresto domiciliario

¿Qué fue "Little Jolt" de Apollo 13 después de MECO?

¿Cuánto tiempo después de la última salida permanecerá abierto el aeropuerto para un regreso de emergencia?

¿Cómo mantener a las abejas fuera de las bebidas enlatadas?

Reservé un juego en mi Xbox mientras estaba en la pantalla de inicio de la cuenta de mi amigo. ¿Quién de nosotros es el dueño del juego?

¿Prueba de contradicción para la desigualdad de P y NP?

¿Aceptar un número de tarjeta de crédito no válido es un problema de seguridad?

Con la sangría establecida en "0em", cuando se usa un salto de línea, todavía hay una sangría del tamaño de un espacio.

Todos los caracteres ASCII con un número de bits determinado

Problema con la función ST_Contains en PostGIS en la consulta de comparación

Quiero verificar si un punto está en un polígono o no con esta consulta:

Normalmente debe devolver verdadero o falso según sea el caso, pero da el error:

¿Alguien puede ayudarme con un buen consejo?

Quiero verificar si un punto está en un polígono o no con esta consulta:

Normalmente debe devolver verdadero o falso según sea el caso pero dar el error:

¿Alguien puede ayudarme con un buen consejo?

Quiero verificar si un punto está en un polígono o no con esta consulta:

Normalmente debe devolver verdadero o falso según sea el caso, pero da el error:

¿Alguien puede ayudarme con un buen consejo?

Quiero verificar si un punto está en un polígono o no con esta consulta:

Normalmente debe devolver verdadero o falso según sea el caso pero dar el error:

¿Alguien puede ayudarme con un buen consejo?


Análisis espacial: Taller de PostGIS #

Además de las propiedades geométricas, los datos espaciales tienen atributos.

  • Dirección geocodificable
  • Patrones delictivos
  • EMS / ubicación del paciente
  • Información meteorológica
  • Planificación de la ciudad
  • Detección de peligros

Relaciones #

Operaciones #

¿Por qué una base de datos en lugar de un archivo? #

Los datos espaciales suelen estar relacionados con otros tipos de datos.

¿Cómo cargar datos en la base de datos? #

Los datos espaciales que no son datos espaciales #

longitud latitud enfermedad fecha
26.870436 -31.909519 paperas 13/12/2008
26.868682 -31.909259 paperas 24/12/2008
26.867707 -31.910494 paperas 22/01/2009
26.854908 -31.920759 sarampión 11/01/2009
26.855817 -31.921929 sarampión 26/01/2009
26.852764 -31.921929 sarampión 10/02/2009
26.854778 -31.925112 sarampión 22/02/2009
26.869072 -31.911988 paperas 02/02/2009

(las columnas de enfermedad y fecha son las atributos de estos datos)

Archivos de forma#

  • Almacenado en archivos en la computadora
  • El más común es probablemente el 'archivo de forma'
    • Consiste en al menos tres archivos diferentes que trabajan juntos para almacenar datos vectoriales

    Datos vectoriales #

    • Se almacena como una serie de pares de coordenadas x, y dentro de la memoria de la computadora.
    • Los datos vectoriales se utilizan para representar puntos (1 vértice), líneas (polilínea) (2 o más vértices, pero el primero y el último son diferentes) y areas (polígonos).
    • Una característica vectorial tiene su forma representada usando geometría.
    • La geometría está formada por uno o más vértices interconectados.
    • Un vértice describe una posición en el espacio utilizando un eje x, y y, opcionalmente, z.
    • Los valores de xey dependerán de la sistema de referencia de coordenadas (CRS) en uso.

    Problemas con los datos vectoriales

    Imagen de Una suave introducción a los gis Sutton T., Dassau O., Sutton M. 2009

    "Imagen de Una suave introducción a los gis Sutton T., Dassau O., Sutton M. 2009

    Datos ráster #

    • Almacenado como una cuadrícula de valores
    • Cada celda o pixel representa una región geográfica, y el valor del píxel representa algún atributo de la región
    • Úselo cuando desee representar una información continua en un área
    • Multibanda imágenes, cada uno banda contiene información diferente

    Imagen de Una suave introducción a los gis Sutton T., Dassau O., Sutton M. 2009


    Geografía

    Si bien el apoyo a los SRS proyectados se trata principalmente de tener los metadatos para explicar qué significan las coordenadas, los SRS geográficos son diferentes. Las proyecciones son sistemas cartesianos, lo que significa que son planos con ejes X e Y ortogonales. Los SRS geográficos son elipsoides (& # 8220 esferas aplanadas & # 8221) con coordenadas de latitud y longitud. Los ejes no son ortogonales. En cambio, todos los meridianos se encuentran en el Polo Norte y en el Polo Sur. La longitud de un grado de longitud varía de 0 a más de 111 km. Además, el sistema de coordenadas se envuelve, por lo que -179,99999 grados este está al lado de +180 grados este.

    Las coordenadas geográficas son obviamente muy diferentes de las coordenadas cartesianas. Además de los metadatos sobre el significado de las coordenadas, también necesitamos cambiar todos los cálculos para obtener un resultado significativo. Eso es exactamente lo que hemos hecho para muchas funciones espaciales en MySQL 8.0.


    Ver el vídeo: PostGIS Lesson 10 - Analyzing Spatial Relationships between Geometries in PostGIS