es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Mostrando puntos de GPS en el mapa del mundo de Altair

Estoy construyendo (con fines de aprendizaje) un programa de Python que extrae datos de GPS de archivos *jpg en un directorio y muestra las coordenadas de GPS de las fotos en un mapa mundial.

Logré extraer los valores de latitud y longitud en un dataframe de pandas y mostrarlos en un mapa mundial de altair.

Pero mi problema es que los puntos no aparecen en la posición de GPS correcta. Además, cuando desplazo el mapa, los puntos se mueven alrededor del mapa y el propio mapa no se mueve.

¿Cómo puedo lograr que los puntos se fijen en un mapa mundial y en la posición de GPS correcta?

Este es mi código para el mapa de altair:

world = alt.topo_feature(data.world_110m.url, feature='countries')

# Fondo de estados unidos
background = alt.Chart(world).mark_geoshape(
fill='lightgray',
stroke='white'
).properties(
width=1300,
height=900
)

# Posiciones de aeropuertos en el fondo
points = alt.Chart(df).mark_circle().encode(
x='latitude',
y='longitude',
color=alt.value('steelblue'),
tooltip=['naam']
).interactive()

st.altair_chart(background + points, use_container_width=True)

Esta es una parte de mi dataframe:

    naam   latitude longitude
1    photo1  46.073822  6.109725
2    photo2 46.123119  6.205319
3    photo3 46.1232  6.205728

Esta es mi visualización de mapa en streamlit con datos de GPS de fotos individuales

¡Gracias de antemano!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que los valores de latitud y longitud pueden estar invertidos. En tu gráfico de puntos, tienes x='latitude' e y='longitude', pero típicamente la latitud corresponde al eje y y la longitud corresponde al eje x. Intercambiar estos valores puede ayudar a resolver el problema de que los puntos no se muestren en la posición correcta en el mapa.

    Para solucionar el problema de que los puntos se muevan cuando se desplaza el mapa, puedes intentar agregar el argumento projection a tu gráfico de background y establecerlo en una proyección específica, como projection=alt.projection(type='mercator'). Esto mantendrá el mapa centrado en una posición determinada y permitirá que los puntos permanezcan en la posición correcta.

    Aquí tienes un ejemplo de cómo puedes hacer estos cambios en tu código:

    world = alt.topo_feature(data.world_110m.url, feature='countries')
    
    # Fondo de estados de EE.UU.
    background = alt.Chart(world).mark_geoshape(
        fill='lightgray',
        stroke='white'
    ).properties(
        width=1300,
        height=900
    ).project(type='mercator') # agregar el argumento de proyección para mantener el mapa centrado
    
    # Posiciones de aeropuertos en el fondo
    points = alt.Chart(df).mark_circle().encode(
        y='latitude', # intercambiar los valores de latitud y longitud
        x='longitude',
        color=alt.value('steelblue'),
        tooltip=['naam']
    ).interactive()
    
    st.altair_chart(background + points, use_container_width=True)
    

    Espero que esto resuelva tus problemas y te permita mostrar las coordenadas GPS correctamente en el mapa mundial. ¡Buena suerte con tu proyecto!

Comments are closed.