Más

¿Cuándo debo usar ST_Buffer?

¿Cuándo debo usar ST_Buffer?


Me gustaría saber cuál es el sentido de usar la operación st_buffer. En la guía de referencia de PostGIS solo hay la sintaxis y una breve descripción de esta operación.

¿Podría dar algunos ejemplos para comprender las ventajas de esta operación?


Como comenta @Underdark, ST_Dwithin es la forma recomendada de encontrar geometrías a distancia. En muchos otros sistemas SIG, el método de búfer es la única forma, pero la creación de búferes es bastante costosa.

Pero hay otros casos de uso en los que necesita almacenar en búfer. Una razón puede ser visualizar un búfer. Si, por ejemplo, desea mostrar el área a menos de 100 metros de una carretera, puede crear una zona de influencia.

Otro caso es si desea recortar el área a 100 metros de la carretera de otro mapa. Supongamos que tiene un mapa que muestra el uso del área y desea analizar qué parte del área más cercana a 100 metros de la carretera es bosque y cuánto es área agrícola. Luego crea una zona de influencia y crea una intersección con el mapa de uso del área.

Hay un ejemplo en la página 8-10 de este tutorial:
http://postgisonline.org/map.php?tutorial=mixed_examples.html


OpenGeo proporciona un resumen bastante bueno de ST_Buffer. Tenga en cuenta la capacidad de pasar un radio de amortiguación negativo.

La función de búfer también es una solución útil a veces. Al pasar un radio de zona de influencia de cero, puede crear una huella de una colección de geometrías o "reparar" una geometría de polígono no válida.


ummm para hacer un búfer? Eso es todo lo que realmente hace.

Realmente no llamaría a esto una breve descripción http://www.postgis.org/documentation/manual-svn/ST_Buffer.html

Un caso de uso es si desea seleccionar todos los objetos en una tabla que están dentro de los 20 m de cada objeto en otra tabla.


Esto no es algo que usted, como usuario, pueda implementar. Este error le dice que MySQL en sí mismo no implementó la función ST_Buffer para el caso de SRS geográfico.

El problema es que hay dos tipos de SRS: proyectado (mapa plano, también llamado cartesiano) y geográfico (en elipsoide). En otros sistemas suelen estar representados por tipos separados, geometría (plana) y geografía (elipsoide). En MySQL es un tipo con SRS proyectado o elipsoide.

Algunos algoritmos en elipsoides son más complejos, por lo que algunas funciones en MySQL espacial aún no están implementadas para ese caso.

1) cambie al SRS proyectado apropiado si es posible,

2) cambiar a otra plataforma, p. Ej. PostgreSQL + PostGIS que admite ST_Buffer para el tipo de geografía,

3) evite ST_Buffer (a menudo se usa incorrectamente para verificar la intersección con búfer cuando se debe usar ST_DWithin, aunque no conozco su caso de uso específico)


Templo PSM en GIS

Hay alrededor de 550 escuelas y un total de 55 bibliotecas públicas en Filadelfia. De todas las ciudades pequeñas y más grandes de EE. UU., Filadelfia tiene una de las tasas de criminalidad más altas (44 por mil). Este proyecto intenta determinar el riesgo para los estudiantes cuando quieren ir a la biblioteca pública más cercana. También determina cuántas escuelas hay en una milla de cada biblioteca que mostrará cómo las bibliotecas están distribuidas de manera desigual en el área de la ciudad o las bibliotecas públicas no consideraron la cantidad de escuelas a su alrededor cuando se establecieron. Esto también muestra dónde están las escuelas y la biblioteca y cuántos delitos ocurrieron en cada escuela y biblioteca. Entonces, esto predecirá la posibilidad de convertirse en víctima de los delitos del vecindario. Para hacer esto, he usado PostgreSQL, que es más fácil de calcular y medir el riesgo en el camino de una escuela a una biblioteca más cercana.

Utilicé tres fuentes de datos importantes, como datos escolares como .csv, datos de bibliotecas como shapefile y los datos de delitos que muestran todos los delitos denunciados que ocurrieron en Filadelfia de 2007 a 2014. Todos estos datos se obtienen de OpenDataPhilly, que es un archivo de datos abiertos. fuente. Después de descargar todos los datos necesarios, se realizó una normalización de datos para reducir la redundancia de datos. Para usar estos datos con PostgreSQL, debe cargarlos en el servidor SQL (para el shapefile use el comando shp2pgsql y para el archivo .csv use la consola SQL simple). El siguiente mapa muestra la ubicación de las escuelas y bibliotecas, los incidentes de delitos alrededor de una milla de cada escuela y el número de escuelas dentro de una milla de cada biblioteca pública.

Después de aplicar algunas canteras, encontré que hay muchas escuelas donde ocurrieron más de 2000 crímenes y hay tres escuelas donde ocurrieron más de 5000 crímenes dentro de 1000 pies, y hay 5 bibliotecas donde ocurrieron más de 2000 crímenes en esos 7 años. Las bibliotecas están distribuidas de manera desigual por la ciudad según el número de escuelas. Hay algunas bibliotecas en las que solo hay una escuela y hay dos bibliotecas en las que hay más de 20 escuelas en un radio de una milla. Incluso hay algunas escuelas que están a más de una milla y media de las bibliotecas más cercanas. La siguiente figura muestra las líneas entre las escuelas y las bibliotecas más cercanas con un búfer de cien pies alrededor de las líneas.


CREAR TABLA phl.shortest_distance_buffer AS
SELECT e.from_school, e.close_library, ST_Buffer (geom, 100) :: geometry (Polygon, 2272) AS geom
DE (
SELECCIONE d.school como from_school,
d.library como close_library,
ST_MakeLine (d.geom1, d.geom2) como geom
DE(
SELECCIONE
s.facil_name AS escuela,
s.geom COMO geom1,
Biblioteca A.branch_nam AS,
A.geom COMO geom2,
ST_Distance (s.geom, A.geom) como distancia
DE
phl.all_philly_school as s
UNIÓN CRUZADA LATERAL
(
SELECCIONE l.branch_nam, l.geom
DESDE phl.philly_libraries como l
PEDIDO POR l.geom s.geom
LÍMITE 1
) AS A) como d) como e


SELECT a.from_school, a.close_library, count (b.objectid)
FROM phl.shortest_distance_buffer como
ÚNETE a phl.philly_crime_incident_coded como b
ON ST_Contains (a.geom, b.geom)
AGRUPAR POR a. De_escuela, a.close_library
ORDER BY count (b.objectid)

Las consultas anteriores, las he usado para hacer una línea recta entre cada escuela y las bibliotecas más cercanas y hacer un búfer de 100 pies alrededor de cada línea. La parte inferior de la consulta cuenta los delitos en cada búfer. La intención de hacer esto es determinar la cantidad de delitos que ocurren en cada línea de amortiguación y averiguar la posibilidad de convertirse en víctima si un estudiante desea ir a la biblioteca más cercana de la escuela. El resultado de esta consulta muestra que hay 14 líneas de distancia de escuelas y bibliotecas donde ocurrieron más de 650 delitos entre 2007 y 2014. Por lo tanto, es más probable que se convierta en una víctima de los delitos del vecindario que otras 531 líneas de distancia de escuelas a bibliotecas. . Alternativamente, hay 12 líneas de distancia entre las escuelas y las bibliotecas más cercanas donde ocurren menos de 10 delitos entre 2007 y 2014.

Hay algunas limitaciones en el proyecto, como que las líneas rectas que se crearon entre las escuelas y las bibliotecas más cercanas no son la ruta para llegar a una biblioteca, por lo que los cálculos de delitos no son solo una suposición correcta. Además, en el momento del cálculo del delito, no me refería al momento del delito, y el estudiante & # 8217s tenía la intención de ir a la biblioteca. Es importante considerar el momento en que se cometió el delito y el tiempo previsto para que un estudiante vaya a una biblioteca para hacer una estimación racional de los delitos (incluido el tipo de delito) que ocurren en las áreas de amortiguamiento. Dependiendo de las limitaciones, se puede realizar la investigación adicional en la que el investigador puede usar el PG Routing para obtener las rutas exactas con distancia entre una escuela y una biblioteca más cercana y conectar ese resultado con los delitos considerando el tiempo y el tipo de delitos a realizar. un informe potencial para ver las posibilidades de convertirse en víctima de un crimen del vecindario cuando un estudiante tenía la intención de ir a una biblioteca. La investigación también puede encontrar las rutas alternativas y el horario diurno donde y cuando (la forma y el horario más seguros) tiene menos posibilidades de ser víctima del crimen del vecindario.


1 respuesta 1

Mantener el lat largo así no es espacial. Necesitas hacer un punto

Almacenaría el resultado de lo anterior en la fila, en lugar de cables individuales de latitud / longitud. Independientemente de lo que almacene en la fila, eso es con lo que tiene que trabajar. No almacenar eso en la fila será más lento, ya que tendrá que calcularlo cada vez.

A continuación, lo que desea es la prueba del cuadro delimitador. En MySQL se designan con un prefijo MBR.

Tendrá que calcular DISTANCE_IN_DEGREES usted mismo. MySQL no tiene un tipo de geografía, por lo que no puede usar una distancia fija como metros, millas o pies. Tienes que hacer los cálculos tú mismo. Esto es mucho trabajo en sí mismo.

ST_Contains no usa un índice. Para eso necesitará MBRContains. O simplemente puede usar PostgreSQL, para eso se verá así,

No solo es más corto, sino de los documentos.

Esta llamada de función incluirá automáticamente una comparación de cuadro delimitador que hará uso de cualquier índice que esté disponible en las geometrías.

Por lo tanto, no tiene que usar dos funciones como lo haría en MySQL MBRcontains (cuadro delimitador con índice) y ST_Contains.


¿Se requieren también configuraciones similares para el mejor rendimiento de las unidades LTO-6?

¿Experimenta un mal desempeño o la velocidad no es la esperada? Si no, simplemente ciñe a los valores predeterminados. De lo contrario, pregunte al proveedor o proporcione más detalles sobre su unidad LTO-6.

¿De dónde conocemos los valores?

Bueno, lo mejor sería preguntarle a su proveedor de hardware o consultar el sitio del fabricante y el manual de su unidad. Por último, podría simplemente seguir-n-error, si experimenta un mal rendimiento.

¿Cuáles son las configuraciones predeterminadas, si no se pasan valores?

Mire a través de dmesg y use modinfo st para revelar los posibles valores y valores predeterminados. También puede mirar / sys / module / st / parameters / * para ver la configuración actual. Puede ser que esto no esté disponible.


16.1.5. Mirando las funciones de PostGIS instaladas¶

Se puede pensar en PostGIS como una colección de funciones en la base de datos que amplían las capacidades centrales de PostgreSQL para que pueda manejar datos espaciales. Por & # 8216 tratar con & # 8217, nos referimos a almacenar, recuperar, consultar y manipular. Para hacer esto, se instalan varias funciones en la base de datos.

Nuestro PostgreSQL habla a La base de datos ahora está habilitada geoespacialmente, gracias a PostGIS. Vamos a profundizar mucho más en esto en las próximas secciones, pero dejemos que & # 8217s le dé una pequeña muestra. Digamos & # 8217s que queremos crear un punto a partir del texto. Primero usamos el comando psql para encontrar funciones relacionadas con el punto. Si aún no está conectado al habla a base de datos, hágalo ahora. Entonces corre:

Este es el comando que estamos buscando: st_pointfromtext . Para desplazarse por la lista, use la flecha hacia abajo y luego presione q para volver al shell psql.

  • Definimos un punto en la posición 1,1 (se asume EPSG: 4326) usando PUNTO (1 1) ,
  • Ejecutamos una declaración SQL, pero no en ninguna tabla, solo en los datos ingresados ​​desde el indicador SQL,
  • La fila resultante no tiene mucho sentido.

La fila resultante tiene el formato OGC llamado & # 8216 Well Known Binary & # 8217 (WKB). Veremos este formato en detalle en la siguiente sección.

Para recuperar los resultados como texto, podemos hacer un escaneo rápido a través de la lista de funciones en busca de algo que devuelva texto:

La consulta que estamos buscando ahora es st_astext . Combinemos & # 8217s con la consulta anterior:

Aquí, ingresamos la cadena PUNTO (1,1) , lo convirtió en un punto usando st_pointfromtext () , y lo convirtió de nuevo en una forma legible por humanos con st_astext () , que nos devolvió nuestra cuerda original.

Un último ejemplo antes de entrar realmente en los detalles del uso de PostGIS:

¿Qué hizo eso? Creó un búfer de 1 grado alrededor de nuestro punto y devolvió el resultado como texto.


Jtdcftul

¿Es posible seleccionar todas las columnas excepto la geometría usando capas virtuales en QGIS?

Por ejemplo, tengo esta consulta (simplificada):

No funciona. No se almacena en búfer en absoluto. Pero el uso de la consulta (simplificada) de la siguiente manera almacena todos los polígonos según lo previsto:

Ahora el problema es que si tengo polígonos con muchas columnas, los necesito para escribir todo manualmente. Hay alguna manera de evitar esto?

¿Es posible seleccionar todas las columnas excepto la geometría usando capas virtuales en QGIS?

Por ejemplo, tengo esta consulta (simplificada):

No funciona. No se almacena en búfer en absoluto. Pero el uso de la consulta (simplificada) de la siguiente manera almacena en búfer todos los polígonos según lo previsto:

Ahora el problema es que si tengo polígonos con muchas columnas, los necesito para escribir todo manualmente. Hay alguna manera de evitar esto?

¿Es posible seleccionar todas las columnas excepto la geometría usando capas virtuales en QGIS?

Por ejemplo, tengo esta consulta (simplificada):

No funciona. No se almacena en búfer en absoluto. Pero el uso de la consulta (simplificada) de la siguiente manera almacena todos los polígonos según lo previsto:

Ahora el problema es que si tengo polígonos con muchas columnas, los necesito para escribir todo manualmente. Hay alguna manera de evitar esto?

¿Es posible seleccionar todas las columnas excepto la geometría usando capas virtuales en QGIS?

Por ejemplo, tengo esta consulta (simplificada):

No funciona. No se almacena en búfer en absoluto. Pero el uso de la consulta (simplificada) de la siguiente manera almacena en búfer todos los polígonos según lo previsto:

Ahora el problema es que si tengo polígonos con muchas columnas, los necesito para escribir todos manualmente. Hay alguna manera de evitar esto?


ReconciliarGeografías ()

Después de determinar qué tipo de tolerancia deberíamos pasar a la función, ahora es el momento de ejecutar la función en los dos objetos espaciales.

Los resultados de la función es un marco de datos donde cada fila describe una relación entre un par de geografías de los dos conjuntos de datos.

unigeokey_A unigeokey_B tipo
004037 004037 mismo
006076 006076 mismo
001065 001065 mismo
004203 004203 mismo
002111 002170 AintersectsB
002052 002052 mismo
001210 001210 mismo
002093 002093 mismo
004167 004167 AintersectsB
003082 003082 mismo

La recogeo El paquete contiene dos funciones para comprobar los resultados de reconcileGeographies (). La primera función, reportReconciledGeographies (), produce un informe para inspeccionar visualmente cada relación. Por ejemplo, la relación "piedmont_1991.sf [piedmont_1991.sf $ PRO_COM_T == '002110',] contiene piedmont_2018.sf [piedmont_2018.sf $ PRO_COM_T == '002110',]" se informará así

En este caso, parece claro que el 1991 comuna perdió parte de su territorio a otro comuna o resultando en un nuevo comuna siendo creado.

En cambio, la función testReconciledGeographies () prueba las características espaciales de geografías conciliadas. Se necesita el marco de datos resultante de la función reconciliarGeographies () y los objetos espaciales.

Esta prueba es particularmente importante para determinar si los resultados son satisfactorios porque compare la suma de las áreas de las geografías antiguas de los dos objetos espaciales que corresponden a las nuevas geografías reconciliadas.

.unigeokey_new n / A area_A nótese bien area_B area_diff_perc
342 1 24630596 1 24885944 -1.0367
596 1 14390068 1 14350670 0.2738
654 1 9457429 1 8967809 5.1771
53 1 96442686 1 96231784 0.2187
407 1 10546479 1 11068439 -4.9491
1062 1 8090767 1 8011784 0.9762
65 1 121231584 1 121912963 -0.5620
727 1 3933001 1 3903543 0.7490
99 1 24623624 1 24945108 -1.3056
608 1 14291803 1 14386575 -0.6631

La columna n_A y n_B indica cuántas geografías deben agregarse para crear una nueva geografía reconciliada. La columna area_diff_perc indica la diferencia porcentual entre las dos nuevas geografías conciliadas resultante de la unión de las geografías de los dos objetos espaciales originales. Intuitivamente, se puede producir una nueva geografía reconciliada mediante la unión de geografías de cualquiera de los dos objetos espaciales originales.


ReconciliarGeografías ()

Después de determinar qué tipo de tolerancia deberíamos pasar a la función, ahora es el momento de ejecutar la función en los dos objetos espaciales.

Los resultados de la función es un marco de datos donde cada fila describe una relación entre un par de geografías de los dos conjuntos de datos.

unigeokey_A unigeokey_B tipo
004037 004037 mismo
006076 006076 mismo
001065 001065 mismo
004203 004203 mismo
002111 002170 AintersectsB
002052 002052 mismo
001210 001210 mismo
002093 002093 mismo
004167 004167 AintersectsB
003082 003082 mismo

La recogeo El paquete contiene dos funciones para comprobar los resultados de reconcileGeographies (). La primera función, reportReconciledGeographies (), produce un informe para inspeccionar visualmente cada relación. Por ejemplo, la relación "piedmont_1991.sf [piedmont_1991.sf $ PRO_COM_T == '002110',] contiene piedmont_2018.sf [piedmont_2018.sf $ PRO_COM_T == '002110',]" se informará así

En este caso, parece claro que el 1991 comuna perdió parte de su territorio a otro comuna o resultando en un nuevo comuna siendo creado.

En cambio, la función testReconciledGeographies () prueba las características espaciales de geografías conciliadas. Se necesita el marco de datos resultante de la función reconciliarGeographies () y los objetos espaciales.

Esta prueba es particularmente importante para determinar si los resultados son satisfactorios porque compara la suma de las áreas de las geografías antiguas de los dos objetos espaciales que corresponden a las nuevas geografías reconciliadas.

.unigeokey_new n / A area_A nótese bien area_B area_diff_perc
342 1 24630596 1 24885944 -1.0367
596 1 14390068 1 14350670 0.2738
654 1 9457429 1 8967809 5.1771
53 1 96442686 1 96231784 0.2187
407 1 10546479 1 11068439 -4.9491
1062 1 8090767 1 8011784 0.9762
65 1 121231584 1 121912963 -0.5620
727 1 3933001 1 3903543 0.7490
99 1 24623624 1 24945108 -1.3056
608 1 14291803 1 14386575 -0.6631

La columna n_A y n_B indica cuántas geografías deben agregarse para crear una nueva geografía reconciliada. La columna area_diff_perc indica la diferencia porcentual entre las dos nuevas geografías conciliadas resultante de la unión de las geografías de los dos objetos espaciales originales. Intuitivamente, se puede producir una nueva geografía reconciliada mediante la unión de geografías de cualquiera de los dos objetos espaciales originales.


¿Cuándo debo usar ST_Buffer? - Sistemas de Información Geográfica

[Debido a limitaciones de tamaño, el anuncio se divide en 3. Esta es la parte 1.]

MySQL Server 8.0.4-rc (Release Candidate) es una nueva versión del mundo & # 039s
la base de datos de código abierto más popular. Este es el segundo lanzamiento
candidato de MySQL 8.0.

Al igual que con cualquier otra versión de preproducción, se debe tener precaución cuando
instalación en sistemas de nivel de producción o sistemas con datos críticos.

Tenga en cuenta que 8.0.4-rc incluye todas las funciones de MySQL 5.7.

Para obtener información sobre la instalación de MySQL 8.0.4-rc en nuevos servidores, consulte
la documentación de instalación de MySQL en

MySQL Server 8.0.4-rc está disponible en formato fuente y binario para varios
plataformas de la selección & quot; Versiones de desarrollo & quot de nuestra descarga
páginas en

MySQL Server 8.0.4-rc también está disponible en nuestro repositorio para Linux
plataformas, vaya aquí para obtener más detalles:

Agradecemos y agradecemos sus comentarios, informes de errores, correcciones de errores,
parches, etc .:

El siguiente enlace enumera los cambios en MySQL 8.0 desde
el lanzamiento de MySQL 8.0.3. También se puede ver
en línea en