Наложение координатных точек не отображается на фоновой карте, созданной в Altair из файла geo json - PullRequest
0 голосов
/ 06 мая 2020

Я успешно построил маркеры широт и длинных координат, используя файл 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, но у меня была такая же проблема.

...