Java 多分辨率图形的良好数据结构是什么?

Java 多分辨率图形的良好数据结构是什么?,java,data-structures,Java,Data Structures,我有一个由数亿个数据点组成的数据集。我希望能够根据缩放级别(即轴比例)有效地渲染此类集合。我希望能够有一个采样子集渲染在全视图。放大时,您将能够看到更详细的数据点,直到达到最大缩放,此时您将能够看到单个数据点。什么样的数据结构可以存储这样的数据集并允许多分辨率访问?不是100%确定要渲染的数据类型,但我想您可以进行采样并计算近似值,并且随着放大,近似值越来越精确?您需要保持点的空间索引,因为“离群点”和“密度”是空间属性——离群点是恰好位于低密度区域的点;“缩小”意味着用“采样”点替换一组紧密相

我有一个由数亿个数据点组成的数据集。我希望能够根据缩放级别(即轴比例)有效地渲染此类集合。我希望能够有一个采样子集渲染在全视图。放大时,您将能够看到更详细的数据点,直到达到最大缩放,此时您将能够看到单个数据点。什么样的数据结构可以存储这样的数据集并允许多分辨率访问?

不是100%确定要渲染的数据类型,但我想您可以进行采样并计算近似值,并且随着放大,近似值越来越精确?

您需要保持点的空间索引,因为“离群点”和“密度”是空间属性——离群点是恰好位于低密度区域的点;“缩小”意味着用“采样”点替换一组紧密相连的点;当“放大”时,你真的,真的想忽略掉所有落在当前窗口之外的点。您的操作可能类似于:

void addPoint(Point2D p);
void removePoint(Point2D p);
Iterator<Point2D> getPointsToPaint(Rectangle2D viewArea, int maxDensity, double densityArea);
void addPoint(点2dp);
空洞清除点(点2D p);
迭代器GetPointStopPaint(矩形2D视图区域、int maxDensity、double densityArea);
其中,
viewArea
表示要为其查找点的窗口,
maxDensity
参数可用于控制点抽象:当超过maxDensity点落在
densityArea
正方形内时,您将返回该区域内的
maxDensity
随机点
getPointsToPaint
然后将使用
densityArea
采样框覆盖您的
viewArea
,并返回以下范围内的点:如果小于
maxDensity
,则返回真实点;如果大于
maxDensity
,则返回“采样”点(没有人会注意到1mm2区域内的10个点是否为随机点)


典型的空间结构有(2d)和(任意数量的ds)。然而,在它们的默认实现中,它们都不适合快速更改动态数据。另一种选择是使用;但是你似乎真的需要一个多层次的方法,对于多层次的方法来说,树永远是最好的选择。通过快速查看“动态空间索引”的搜索结果,您可能正在寻找一种变体。请注意,这些数据结构不容易从头开始实现。最好的方法可能是依靠外部GIS系统为您记账。有几种可用。

可能是图像金字塔?从哪里获取数据。你是动态加载的吗?@aDoubleSo是的,我有一个数据库后端,提供数据。你可以使用一种平滑算法来减少数据。更多的缩放更少的平滑。@aDoubleSo这仍然需要我遍历整个数据集,这是我试图避免的。根据数据集的不同,保证采样不会遗漏“重要点”可能很困难。特别是,不丢弃离群值的采样要求先识别离群值