Я успешно построил маркеры широт и длинных координат, используя файл json карты мира из набора vega_datesets точно так же, как в этом примере:
https://altair-viz.github.io/gallery/airports.html
Я просто хотел использовать другие пользовательские фоновые карты. Следуя этому примеру:
https://github.com/altair-viz/altair/issues/1612#issuecomment -511830524
Мне также удалось отрендерить карту в Altair из пользовательского файла geo json.
Проблема возникает при попытке нанести те же точки широты поверх новой фоновой карты.
Нанесение только фона показывает карту мира нормально (пример кода ниже) и аналогично точки отображаются нормально при построении отдельно.
Нанесение фона + точек дает только точки широты на белом фоне.
Фоновая карта, очевидно, преобразована в проекцию epgs: 4326, как предпочитает Альтаир. Нужно ли создавать точки широты и долготы по-другому для работы с альтернативной фоновой картой? Я предположил, что широта и широта - это просто координаты, которые будут работать для любой проекции.
Если фоновая карта отображается правильно для версии geo json, мне не понятно, почему одни и те же значения широты больше не будут перекрываться обычно.
Соответствующий код, который не работает:
url= 'https://aeronet.gsfc.nasa.gov/CLIMO_SITE_SUMMARY/world.geo.json'
gdf = gpd.read_file(url)
# set projection and reproject
gdf.crs = {'init' :'epsg:27700'}
gdf = gdf.to_crs({'init': 'epsg:4326'})
# define inline geojson data object
data_geojson = alt.InlineData(values=gdf.to_json(),
format=alt.DataFormat(property='features',type='json'))
background = alt.Chart(data_geojson).mark_geoshape(
# background = alt.Chart(states).mark_geoshape(
fill='lightgray',
stroke='white'
)#.project('equirectangular’)
# points on background
points = alt.Chart(loc).mark_circle(
size=30,
color='steelblue'
).encode(
longitude='Longitude(decimal_degrees):Q',
latitude='Latitude(decimal_degrees):Q',
href='url:N',
tooltip=['Site_Name']
)
#chart= background # this will display map normally
chart= background + points # only points on white background
И предыдущий код, который работает с данными Vega-lite, используя то же ' loc '.
world = alt.topo_feature(data.world_110m.url,feature='countries')
# World map background
background = alt.Chart(world).mark_geoshape(
# background = alt.Chart(states).mark_geoshape(
fill='lightgray',
stroke='white'
).project('equirectangular')
# aeronet sites on background
points = alt.Chart(loc).mark_circle(
size=30,
color='steelblue'
).encode(
longitude='Longitude(decimal_degrees):Q',
latitude='Latitude(decimal_degrees):Q',
href='url:N',
tooltip=['Site_Name']
)
chart= background + points. # works as expected
Я понимаю, что data_geojson и world не являются эквивалентными типами в приведенных выше примерах, но я не понимаю, как это различие должно быть учтено в Altair. Ранее я пытался преобразовать примеры geo json в формат topo json, но у меня была такая же проблема.