我正在尝试将geoviews.tile_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

发布于 2018-11-15 19:08:37
HoloViews元素不知道数据的坐标系统,而瓷砖源是在Mercator坐标系中定义的。因此,当您在瓷砖源上覆盖hv.Points时,它假设您的坐标已经在Mercator坐标中。因此,为了覆盖位于不同坐标系统中的数据,您应该使用GeoViews元素,例如,在您的例子中,gv.Points,如所描述的在本用户指南中。这将确保您的点被正确地解释为lat/lon对,并且可以自动投影到与瓷砖源相同的坐标系中。
发布于 2018-11-15 19:12:14
您正在尝试将HoloViews对象在PlateCarree坐标中与Web坐标中的GeoViews对象组合起来,两者相差几百万倍。您可以通过将hv.Points()更改为gv.Points()来修复它,该对象将是PlateCaree坐标中的GeoViews对象,在显示时GeoViews将投影到与平铺层相同的坐标系中。您还可以考虑在开始时使用gv.project_points()进行一次投影,而不是每次显示时重新投影它的默认情况。
https://stackoverflow.com/questions/53325947
复制相似问题