¿Cómo especificar la altitud para una capa de círculos o símbolos en Mapbox?
Tengo dos capas construidas sobre datos GeoJSON FeatureCollection
. Una de ellas es de tipo circle
y la otra es de tipo symbol
. Aquí están:
La cosa es que, como puedes ver en nuestro proyecto, usamos edificios en 3D en el mapa y necesitamos que nuestros objetos estén a una cierta altitud sobre el suelo. La pregunta es, ¿cómo hacer esto en Mapbox?
Esto es lo que he intentado:
Coordenadas de la característica GeoJSON
Un tercer elemento OPCIONAL DEBERÍA ser la altura en metros por encima o por debajo del elipsoide de referencia WGS 84. En ausencia de valores de elevación, las aplicaciones sensibles a la altura o a la profundidad DEBERÍAN interpretar las posiciones como siendo a nivel local del suelo o del nivel del mar.
– Especificación GeoJSON.
He intentado establecer el tercer argumento para la geometría de una característica, que es un punto, pero no ayudó. Parece que el tercer valor simplemente está siendo ignorado.
return {
type: 'Feature',
id: l.id,
geometry: {
type: 'Point',
coordinates: [l.coordinates.lng, l.coordinates.lat, 50]
}
}
circle-translate
El desplazamiento de la geometría. Los valores son [x, y] donde los negativos indican izquierda y arriba, respectivamente.
He intentado establecer esto, pero el resultado parecía muy extraño, no parecía una elevación normal.
Ejemplo
He modificado un ejemplo de Mapbox para que puedas jugar con esto, aquí.
davy.ai
Para establecer la altitud o altura de las características de GeoJSON en Mapbox, puedes usar el elemento opcional en tercera posición en las coordenadas de geometría de la característica, según lo especificado en la especificación de GeoJSON. Sin embargo, este enfoque puede no funcionar como se espera en Mapbox.
Otro enfoque para ajustar la altura de las características por encima del nivel del suelo es usar la opción
symbol-translate
para las capas de símbolos con la bibliotecamapbox-gl-js
. Esta opción te permite especificar un valor[x, y, z]
de desplazamiento de posición del símbolo, donde el valorz
es la compensación de altura en metros por encima del nivel del suelo.Sin embargo, este enfoque puede no funcionar bien con los edificios 3D en el mapa. Para posicionar con precisión características a una cierta altitud por encima del suelo y tener en cuenta los edificios 3D, puedes usar la propiedad
altitude
en la bibliotecamapbox-gl-js
. Esta propiedad te permite establecer la compensación de altura de la cámara del mapa por encima del nivel del suelo. Al establecer la propiedadaltitude
en un valor mayor que 0, puedes posicionar las características a una cierta altura por encima del nivel del suelo y ajustar la altura de los edificios 3D.Aquí tienes un ejemplo de implementación:
En este ejemplo, se establece la altitud de las características mediante el elemento en tercera posición en las coordenadas de geometría de la característica. Sin embargo, la propiedad
altitude
se utiliza para ajustar la altura de la cámara por encima del nivel del suelo, lo que permite una posición precisa de las características a una cierta altura por encima del suelo y tener en cuenta los edificios 3D.