3 votos

El círculo creado con ST_Buffer se muestra alargado en el mapa

Estoy amortiguando un punto para crear un círculo en PostGIS como:

ST_Buffer(geo::geometry, .0002, 8)

Sin embargo, al mostrar el polígono en los mapas de Bing, acaba siendo una elipse o un círculo alargado orientado verticalmente.

Dado que tanto el tipo de datos Geography como Bing utilizan el dato WGS84, esto es inesperado.

5voto

Hrafn Puntos 121

Después de investigar y probar un poco más, encontré una solución. Creo que la conversión de geografía a geometría es lo que lo está estropeando. La geometría es una superficie plana 2d, por lo que cuando se dibuja un círculo y luego volver a proyectar a WGS84, el polígono se está estirando. rbrundritt hace un mejor trabajo de explicar por qué en su respuesta a continuación.

Utilizo el círculo para resaltar un marcador seleccionado, por lo que la precisión espacial no era el objetivo, sino la estética.

Mi solución fue utilizar una sobrecarga diferente de la función ST_Buffer:

geography ST_Buffer(geography g1, float radius_of_buffer_in_meters);

Lamentablemente, no se puede especificar el número de segmentos.

4voto

skypecakes Puntos 890

La forma de elipse es de esperar. Bing Maps utiliza una proyección esférica de Mercator para estirar el mapa en un bonito cuadrado. Por ello, la distancia en píxeles entre los grados de longitud aumenta a medida que nos acercamos a los polos. Por lo tanto, un círculo se verá como una elipse en un mapa proyectado por Mercator, pero la distancia (en metros o unidades similares) desde el centro a cualquier punto del círculo será igual, aunque la distancia en píxeles no lo sea. Al crear círculos que tienen distancias de píxeles iguales desde el centro del círculo, se están creando círculos espacialmente inexactos.

2voto

dlanod Puntos 8661

Si necesitas un número de segmentos, puedes hacer esto:

ST_Transform(ST_Buffer(ST_Transform(geo:geometry, _ST_BestSRID(geo)), buffer_in_meters, 8), 4326)

Detrás de las escenas, eso es lo que hace la geografía ya que ST_Buffer es un poco de un hack, no una función nativa de la geografía, por lo que hace trampa y utiliza el buffer de geometría.

0voto

Joy McCalla Puntos 11

Puede utilizar la siguiente consulta para generar un círculo.

SELECT ST_asgeojson(ST_Buffer(ST_GeographyFromText('POINT(-97.96989440917969 43.225692889144185)'), 3000));

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