контекстное создание странных фоновых карт

Это мой код:

import pandas as pd
import geoplot as gplt
import geopandas as gpd
import geoplot.crs as gcrs
import contextily

df = pd.read_csv('dataframe_master.csv', index_col='id')

crs = {'init': 'epsg:4326'}
geometry = [geometry.Point(xy) for xy in zip(df['latitude'], df['longitude'])]
df_geo = gpd.GeoDataFrame(df_geo, crs=crs, geometry=geometry)

test = df_geo[:200000]
test = test.to_crs(epsg=3857)

ax = test.plot(marker='o', markersize=1)
contextily.add_basemap(ax)
plt.show()

И он генерирует это изображение: изображение, которое не показывает фоновую карту и кажется немного искажено.

Мои данные о координатах изначально были созданы с использованием стандарта RD-Coordinated (EPSG: 28992), который я преобразовал в EPSG: 4326 с помощью этого кода:

lon_l = []
lat_l = []

p1 = Proj(init='epsg:28992')
p2 = Proj(proj='latlong',datum='WGS84')
 
for row in range(len(df)):
    lon, lat, z = transform(p1, p2, df.iloc[row, 7], df.iloc[row, 8], 0.0)
    lon_l.append(lon)
    lat_l.append(lat) 

Я проверил правильность выходных данных долготы и широты, сравнив их с некоторыми онлайн-конвертерами, и выходные данные указывают на правильные местоположения.

Я пробовал следовать этому решению: https://gis.stackexchange.com/questions/348339/using-crs-epsg3857-but-misalignment-between-stamen-background-and-coordinates-o на случай, если в моем преобразовании не было Towgs84part, но изображение все еще выглядела так же, но немного в другом цвете.


person Josie    schedule 07.10.2020    source источник
comment
Попробуйте передать crs контекстно contextily.add_basemap(ax, crs=test.crs).   -  person martinfleis    schedule 07.10.2020


Ответы (1)


Я понял! При построении геометрии я должен был указать долготу перед широтой.

geometry = [geometry.Point(xy) for xy in zip(df['longitude'], df['latitude'])]
person Josie    schedule 07.10.2020