Falta pouco!

0 dias

0 horas

0 min

0 seg

Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Atividade

import pandas as pd
import geopandas as gpd

df = pd.DataFrame({
    'Latitude': [-22.9531, -23.0278, -22.8463, -22.8969	],
    'Longitude': [-43.1884, -43.4665, -43.3007, -43.3165] 
})

df

crs = "EPSG:4326"

gdf = gpd.GeoDataFrame(df, crs=crs, geometry=gpd.points_from_xy(df.Longitude, df.Latitude))
gdf

url_m = 'https://github.com/alura-cursos/curso_geopandas/raw/main/dados/metro.geojson'

metro = gpd.read_file(url_m)
metro.head()

metro = metro.to_crs(crs)

Não consegui ir adiante, pois não entendi e nem sei se isso está correto, poderia me ajudar?

2 respostas
solução!

Ei! Tudo bem, William?

Seu código está bem encaminhado, o que precisa adicionar ou ajustar:

  • Importe o Point do Shapely:
from shapely.geometry import Point
  • Depois, a mudança de CRS para UTM em quilômetros: seu código lê o GeoJSON do metrô e o redefine para o mesmo CRS (redundante). No do instrutor, por exemplo, assume o arquivo em 4326 e muda ambos os GeoDataFrames para uma projeção UTM personalizada com unidades em km (zona 23 sul, elipsoide GRS80). Isso é crucial para calcular distâncias em km de forma precisa. Após criar gdf e ler metro, adicione:
utm_crs = '+proj=utm +zone=23 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=km +no_defs'
gdf = gdf.to_crs(utm_crs)
metro = metro.to_crs(utm_crs)

Sem isso, as distâncias saem em graus decimais, não em km.

  • Criação das colunas com cálculos de distância: seu código para aí, mas o instrutor aplica funções lambda para calcular:
gdf['Metro_Perto'] = gdf['geometry'].apply(lambda x: metro['nome'].iloc[metro.distance(x).idxmin()])
gdf['Dist_Min'] = gdf['geometry'].apply(lambda x: "{0:.2f} km".format(metro.distance(x).min()))
gdf['Metro_Longe'] = gdf['geometry'].apply(lambda x: metro['nome'].iloc[metro.distance(x).idxmax()])
gdf['Dist_Max'] = gdf['geometry'].apply(lambda x: "{0:.2f} km".format(metro.distance(x).max()))
  • Finalize para exibir o resultado:
print(gdf[['Metro_Perto', 'Dist_Min', 'Metro_Longe', 'Dist_Max']])

Retorno:

Captura de tela mostrando o retorno que o código acima obteve.

Essa é uma das formas para obter o retorno adequado de acordo com o solicitado na atividade. Deixo aqui o notebook usado para teste: https://colab.research.google.com/drive/1jbOOvCPbNq6mREEP3QyzJWMVkzPO9Rn8?usp=sharing

Espero ter ajudado e qualquer dúvida, compartilhe no fórum.

Até mais!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado!

Obrigado, o que me pegou foi essa coisa de começar com um crs e ter que mudar para aquele padrão e a criação de novas colunas.