22 votos

Creación de búfer en metros

Objetivo

Dados una lista de coordenadas en longitud/latitud, almacenadas en un archivo .csv, quiero crear un buffer con una distancia de x km alrededor de esas coordenadas. (En caso de que sea relevante, estas coordenadas son ubicaciones de las sociedades en el conjunto de datos SCCS. Estas sociedades están dispersas por todo el mundo.)

Problema

Solo puedo crear buffers con distancia en grados radiales, pero quiero hacerlos en (kilo)metros. Soy consciente de las siguientes preguntas y respuestas, pero seguir lo sugerido en ellas no parece resolver mi problema:

Lo que he intentado...

  1. Comienzo QGIS 2.4 y Agregar capa de texto delimitado
  2. elijo mi archivo .csv y los campos x/y, hago clic en OK
  3. selecciono WGS 84 como mi SRC (también probé con NAD83 pero no hizo ninguna diferencia), hago clic en OK
  4. hago clic derecho en la capa y selecciono Guardar como..., en el cuadro de diálogo, elijo lo siguiente y hago clic en OK: ingresar descripción de la imagen aquí
  5. agrego sccs_meter.shp como capa al proyecto actual
  6. Selecciono Vectorial > Herramientas de geoprocesamiento > Buffers > establezco la distancia del buffer en 10

El resultado es un buffer con un radio de aproximadamente 1068km, lo que sugiere que la distancia del buffer es de 10 grados en lugar de 10 metros.

¿Qué hice mal aquí?

2 votos

"¿Cuál es el flujo de trabajo para crear un buffer en metros/km usando capas WGS84?" si no resuelve tu problema, por favor lee los comentarios. Cuando utilizas la herramienta de buffer, esta utiliza las unidades del CRS de la capa, si eliges WGS84 usará grados. Puedes nombrar a tu archivo _meters, pero en realidad no has cambiado el sistema de coordenadas.

0 votos

@AlexandreNeto: Leí la respuesta de Jake en esa pregunta. ¿Te referías a la parte de la creación de la proyección Azimutal Equidistante, o a la parte de guardar la capa actual usando un CRS diferente? Guardé la mía usando NAD83 (como se muestra en la imagen), que se supone que está en metros, pero todavía crea buffers en grados.

3 votos

NAD83 también utiliza grados como unidades. Hay muchas proyecciones que utilizan el datum NAD83 que sí utilizan metros, quizás quisiste elegir alguna de ellas en su lugar.

20voto

SpliFF Puntos 214

En el paso 4, tienes que cambiar el CRS de NAD83 a otra proyección que utilice metros como unidades.

Depende del alcance de tus datos cuál es la mejor. Desafortunadamente, tus datos están ubicados en todo el mundo, por lo que podrías:

  1. Crear un CRS personalizado utilizando aeqd (o tmerc) para cada uno, y dibujar solo ese búfer con él. Prácticamente, solo tienes que crear el búfer una vez, y cambiar la información del CRS en los archivos .prj y .qpj. Las coordenadas del búfer con respecto a su centro siempre serán las mismas.
  2. Agrupar los datos de acuerdo a las zonas UTM, y utilizar el CRS UTM de esa zona para esos puntos.
  3. Similar a UTM, agrupa tus puntos en zonas de latitud (por ejemplo, cada 10 grados), y crea CRS personalizados Lambert conformal cónico 2SP para cada grupo. Esto será significativamente más rápido que utilizar todas las zonas UTM norte y sur del mundo.
  4. Utilizar el pseudo mercator EPSG:3857 para todos. Los búferes se verán como círculos bonitos, pero el tamaño real se hará más pequeño y distorsionado a medida que te acerques a los polos.

0 votos

Hola, tengo una situación similar (pero con polilíneas ubicadas en todo el mundo y que necesitan un buffer de 50 km a cada lado) y estoy un poco confundido sobre por qué usarías una de las opciones principales si puedes usar la cuarta (que parece la más fácil). ¿Es solo porque no mostrará claramente la distorsión que te gustaría ver, a pesar de dar el resultado preciso? ¡Gracias! :)

0 votos

@Amroco EPSG:3857 debe evitarse si se requiere una distancia exacta y te encuentras lejos del ecuador.

3voto

seekerOfKnowledge Puntos 128

Forma rápida y aproximada: usa una distancia de búfer de 0,01° por km. Esa es la media de grados por km a una latitud de 37° y distorsiona la extensión del búfer en sentido norte-sur y este-oeste. Pero puede ser lo suficientemente preciso para tu propósito.

0 votos

¡Hola, ¿sabes que tan grande es la distorsión en el ecuador y los polos?

0 votos

Suponiendo una esfera perfecta (no geoide): Ecudor: 1°lat = ~ 111111 m, 1°long = ~ 111133 m, prom. = 111122 m Polos: 1°lat = ~ 111111 m, 1°long = 0 m, prom. = 55556 m

1voto

JaakL Puntos 786

El mejor (y único) método que he encontrado para los buffers de punto es un complemento llamado Shape tools. Tiene una función de "Elipse" donde se pueden ajustar ambos radios iguales y tener un buffer circular, y se puede utilizar la unidad geodésica (métrica) adecuada.

Todas esas opciones de "cambiar el CRS a uno al azar" y "utilizar grados" solo funcionan en una escala de mapa pequeña (que de todos modos no debería estar en WGS84) y terminan con buffers prácticamente no circulares.

Es extraño que QGIS todavía no tenga buffers geodésicos adecuados incorporados y solo permita unidades de mapa. Recuerdo que, por ejemplo, MapInfo Pro ya tenía esa función en versiones anteriores, allá por mediados de los años 90 aproximadamente.

1voto

chipsin Puntos 131

Sé que tu pregunta es respecto a QGIS, pero hay una solución en R utilizando la función terra::distance la cual por defecto produce distancias en metros para datos de longitud y latitud. (https://rdrr.io/cran/terra/man/distance.html)

Es relativamente rápido para vectores de puntos, pero es bastante lento para vectores poligonales. Hacer buffers en QGIS es mucho más rápido, pero como ya se mencionó, necesitarías convertir tus datos a UTM y luego de regreso a coordenadas geográficas si deseas mantener la distancia en metros.

-3voto

Edoardo Lanari Puntos 2643

Puedes verificar el enlace del sitio geospatialearth enlace. Necesitas permitir Adobe flash en tu navegador. Se recomienda usar Firefox.

Como programador, para crear un buffer de un punto puedes usar geographiclib javascript junto con js2shapefile. Podrás crear numerosos puntos equi-angulados a una distancia fija x alrededor de cada punto del archivo csv usando geographiclib y luego convertirlo en un shapefile usando js2shapefile.

Solo verifica el enlace de arriba, quedarás cien por ciento satisfecho.

1 votos

Agregar un poco de información adicional sobre lo que explica el enlace que resolverá el problema es útil. Los enlaces externos cambian/se rompen con frecuencia.

0 votos

@MatyBeth El enlace mencionado anteriormente es un pequeño formulario mediante el cual el usuario carga el archivo .csv que se lee en el navegador usando javascript. Mostrará una vista previa de este archivo csv. El usuario debe elegir la columna de latitud y longitud y el tipo de geometría que desea descargar, como un shapefile de punto, un buffer rectangular con longitud y altura proporcionadas en metros o un buffer circular con radio proporcionado en metros y número de segmentos. El usuario tiene la opción de guardar el buffer como un shapefile o un archivo KML.

1 votos

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