Python 全息视图与geoviews.tile_源组合会导致轴比例误差

Python 全息视图与geoviews.tile_源组合会导致轴比例误差,python,bokeh,holoviews,datashader,geoviews,Python,Bokeh,Holoviews,Datashader,Geoviews,我正在尝试将geoviews.tile\u sources层与datashade层结合起来。这两层分别产生正确的轴(见图),但当组合(使用*)时,比例会失真 import numpy as np import pandas as pd import holoviews as hv from geoviews.tile_sources import EsriImagery from holoviews.operation.datashader import datashade hv.extens

我正在尝试将
geoviews.tile\u sources
层与
datashade
层结合起来。这两层分别产生正确的轴(见图),但当组合(使用
*
)时,比例会失真

import numpy as np
import pandas as pd
import holoviews as hv
from geoviews.tile_sources import EsriImagery
from holoviews.operation.datashader import datashade

hv.extension('bokeh')

lats = np.random.uniform(51.111, 51.222, 10000)
longs = np.random.uniform(1.31, 1.33, 10000)

df = pd.DataFrame({"latitude": lats, "longitude": longs})

points = hv.Points(df, ['longitude', 'latitude'])
shader = datashade(points)

EsriImagery * shader

但是,两个单独的图都是正确的:

shader + EsriImagery

HoloViews元素不知道数据的坐标系,而平铺源是在墨卡托坐标系中定义的。因此,当您将hv.点覆盖在平铺源的顶部时,它假定您的坐标已经在墨卡托坐标中。因此,为了覆盖位于不同坐标系中的数据,您应该使用GeoViews元素,例如,在您的案例中,
gv.Points
,如前所述。这将确保您的点被正确解释为lat/lon对,并且可以自动投影到与平铺源相同的坐标系中。

HoloViews元素不知道数据的坐标系,而平铺源是在墨卡托坐标系中定义的。因此,当您将hv.点覆盖在平铺源的顶部时,它假定您的坐标已经在墨卡托坐标中。因此,为了覆盖位于不同坐标系中的数据,您应该使用GeoViews元素,例如,在您的案例中,
gv.Points
,如前所述。这将确保您的点被正确解释为lat/lon对,并且可以自动投影到与瓷砖源相同的坐标系中。

您正在尝试将PlateCarree坐标中的HoloViews对象与Web Mercator坐标中的GeoViews对象相结合,两者相差数百万倍。可以通过将hv.Points()更改为gv.Points()来修复此问题,gv.Points()将是PlateCaree坐标中的GeoViews对象,GeoViews将在显示时投影到与平铺层相同的坐标系中。你也可以考虑使用GV.PrimeStPosits()在开始时一次投射,而不是每次显示时重新投影它。

< P>你试图将PlateCarree坐标中的HORoVIEW对象与WebMcCcor坐标中的GeObVIEW对象相结合,这一点相差几百万。可以通过将hv.Points()更改为gv.Points()来修复此问题,gv.Points()将是PlateCaree坐标中的GeoViews对象,GeoViews将在显示时投影到与平铺层相同的坐标系中。你也可以考虑使用GV.PrimeStPosits()在开始时一次投影,而不是每次显示时重新投影它。