- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 datashader
绘制 550,000,000 个纬度和经度。但是,为了使其有用,我需要使用 geoviews
覆盖 map 图 block 和多边形。问题在于,geoviews.points() 和相关的投影会导致速度大幅下降,从而使 Holoview + Bokeh 图的交互性质变得多余。
下面有一个可重现的示例,但是,简而言之 - 我正在尝试使 geoviews 实现 (3) 足够快以交互工作。
import numpy as np
import pandas as pd
import dask.dataframe as dd
import datashader as ds
import datashader.transfer_functions as tf
import holoviews as hv
from holoviews.operation.datashader import datashade
import geopandas as gpd
import geoviews as gv
例如,将数据大小缩小 10。
uk_bounding_box = (-14.02,2.09,49.67,61.06)
n = int(550000000 / 10)
# Generate some fake data of the same size
df = dd.from_pandas(
pd.DataFrame.from_dict({
'longitude': np.random.normal(
np.mean(uk_bounding_box[0:2]),
np.diff(uk_bounding_box[0:2]) / 5, n
),
'latitude': np.random.normal(
np.mean(uk_bounding_box[2:4]),
np.diff(uk_bounding_box[2:4]) / 5, n
)
}), npartitions=8
)
# Persist data in memory so reading wont slow down datashader
df = df.persist()
仅使用不带 Holoviews 或 geo 的 datashader 速度非常快 - 输出在 4 秒内渲染,包括聚合,因此如果交互式,重新渲染会更快。
# Set some plotting params
bounds = dict(x_range = uk_bounding_box[0:2],
y_range = uk_bounding_box[2:4])
plot_width = 400
plot_height = 300
纯datashader版本的时间:
%%time
cvs = ds.Canvas(plot_width=plot_width, plot_height=plot_height, **bounds)
agg = cvs.points(df, 'longitude', 'latitude', ds.count())
CPU时间:用户968毫秒,系统:29.9毫秒,总计:998毫秒挂起时间:506 毫秒
tf.shade(agg)
geoviews
投影的 holoviews
中的 datashader
# Set some params
sizes = dict(width=plot_width, height=plot_height)
opts = dict(bgcolor="black", **sizes)
hv.extension('bokeh')
hv.util.opts('Image Curve RGB Polygons [width=400 height=300 shared_axes=False] {+axiswise} ')
没有任何投影,这相当于使用纯datashader
%%time
points = hv.Points(df, ['longitude', 'latitude']).redim.range(
x=bounds['x_range'], y=bounds['y_range'])
shader = datashade(points, precompute=True ,**sizes).options(**opts)
CPU 时间:用户 3.32 ms,系统:131 µs,总计:3.45 ms挂起时间:3.47 毫秒
shader
holoviews
中的 datashader
以及 geoviews
切片、多边形和投影这是问题的关键 - 我想将数据着色器层与一些 map 图 block 和地理空间多边形对齐。这会导致速度大幅下降,对于我正在处理的数据大小而言,使得交互式可视化变得多余。 (渲染总共等待 12 分钟)。
我确定这与投影点相关的开销有关 - 有没有办法避免这种情况或任何其他解决方法(例如预先计算投影)?
# Grab an example shape file to work with
ne_path = gpd.datasets.get_path('naturalearth_lowres')
example_shapes_df = gpd.read_file(ne_path)
uk_shape = example_shapes_df[example_shapes_df.name.str.contains('United K')]
# Grab maptiles
map_tiles = gv.tile_sources.ESRI
# In actual workflow I need to add some polygons
polys = gv.Polygons(uk_shape)
这与上面添加了 gv.points()
和投影
%%time
points = gv.Points(df, ['longitude', 'latitude']).redim.range(
x=bounds['x_range'], y=bounds['y_range'])
projected = gv.operation.project_points(points)
shader = datashade(projected, precompute=True ,**sizes).options(**opts)
CPU时间:用户11.8秒,系统:3.16秒,总计:15秒挂壁时间:12.5 秒
shader * map_tiles * polys
最佳答案
按照@philippjfr的建议,解决方案是将坐标投影到适当的坐标系中,并使用上面的方法 2 或 3 进行渲染。
类似这样的:
import cartopy
def platcaree_to_mercator_vectorised(x, y):
'''Use cartopy to convert Platecarree coords to Mercator.'''
return(cartopy.crs.GOOGLE_MERCATOR.transform_points(
cartopy.crs.PlateCarree(), x, y))
def platcaree_for_map_partitions(pddf):
'''Wrapper to apply mercator conversion and convert back to dataframe for Dask.'''
as_arrays = platcaree_to_mercator_vectorised(pddf.longitude.values,pddf.latitude.values)
as_df = pd.DataFrame.from_records(as_arrays[:, :2], columns=['longitude', 'latitude'])
return(as_df)
# Project the points
df_projected = df.map_partitions(platcaree_for_map_partitions,
meta={'longitude': 'f8', 'latitude': 'f8'})
from dask.diagnostics import ProgressBar
with ProgressBar():
df_projected.to_parquet('abb_projected.parquet', compression='SNAPPY')
然后将此投影数据集与方法 2 或 3 一起使用,详见相关问题。
关于python - Geoviews + Datashader 投影点时速度很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53544693/
每当我设置 Border.Effect属性的投影效果 控件中包含的每个控件都有一个投影。 有没有办法将阴影设置到边框而不是边框中包含的每个控件? 这是我的代码的一个简短示例:
我正在尝试创建一个带有阴影的对象。我相信您需要 CSS3 来执行此操作,到目前为止我已经有了类似的东西。 div { width:300px; height:100px; background
我希望能够为我的 drawables 文件夹中的矢量添加阴影。目前,当我将具有阴影的 svg 导入 Android Studio 时,转换为 xml 会删除阴影。 我将如何在 Android Stud
使用 NHibernate 2.1,我试图将一个实体及其子集合投影到 DTO 中。我的实体看起来像这样.. public class Application { public int Id {ge
我有问题还是好,我不知道如何将x,y,z值的3d点转换为2d点, 我必须绘制投影,其中的点确实有x,y,z值,但是我不知道如何将它们转换为2d,所以我可以将它们移动到我的轴上。 我一直在寻找Wiki和
我有域类位置 public abstract class BaseEntity where T: struct { public virtual T Id { get; set
我有一个使用 Android Material 图标作为背景的 ImageView 。我尝试添加标高以创建投影效果,但仅显示图标。是否可以将标高添加到矢量资源可绘制对象中? 矢量代码:
我正在尝试连接并以逗号分隔(或空格)列表并将其投影。我在下面有一些示例代码。 public class Friend { public string Name { get; set; } }
是否有任何库可以轻松地允许 Java bean 投影? 我有一个按照 Javabean 约定用 getter 和 setter 编写的 bean,并且在运行时在不同的地方我想要获取一个完全填充的 be
我可以成功地做到: point.transform(new OpenLayers.Projection("EPSG:900913"), new OpenLayers.Projection("EPSG:
我对 OpenLayers 3 有点问题。我有以下脚本: var map = new ol.Map({ view : new ol.View({ center : [5.611
我正在尝试向 ImageView 添加阴影。 Stackoverflow 的另一个答案似乎是使用 Canvas 和位图等,比需要的复杂得多。 在 iOS 上我会做这样的事情: myImageView.
我有一个 JPanel 元素,我想给它添加一个阴影,我怎样才能给元素添加一个漂亮的褪色阴影?我需要使用外部库还是可以使用内置的东西? 例子: 最佳答案 所以我查看了 swingx它扩展了 JPanel
如何使用 MongoDB 查询预测作者的名字 { name: "Wings Of Fire", author: { first: "Abdul", last: "Kalam" } }
我有一个集合“帐户”,其中包含类似于此结构的文档: { "email" : "john.doe@acme.com", "groups" : [ {
我试图弄清楚如何使用枚举列表(@ElementCollection)对实体进行 DTO 投影。不幸的是,缺少 QueryDsl 文档,在这里我只能找到版本 3 的结果 不是 适用于版本 4。 @Ent
我想要悬停 div 时出现的箭头 here也投下影子。箭头是从 CSS 绘制的: .arrow { position:absolute; margin-top:-50px; left:80px; bo
如何使用 QueryOver 和 AliasToBean 将枚举值转换为字符串值?我有以下但在尝试转换 Enum 时出错: SomeDTO someDTO = null;
我有这个外部 GeoJSON 文件: {"type": "FeatureCollection", "features": [ {"type":"Feature", "id":382, "propert
我对 Hibernate 的预测和标准有点困惑。何时使用预测以及何时使用标准? 最佳答案 它们并不相互排斥,您可以同时使用两者。预测通常在某些标准的背景下使用。 简单地说,Hibernate Proj
我是一名优秀的程序员,十分优秀!