D3.js 如何提高d3地质图的坐标分辨率

D3.js 如何提高d3地质图的坐标分辨率,d3.js,D3.js,我有一个GeoJSON文件,其中包含一些小细节和特性,我希望使用D3来呈现这些细节和特性。不幸的是,重要的细节丢失了,因为D3 删除间距很近的多边形坐标对 我举了一个小例子来说明这一点。这两个链接使用完全相同的GeoJSON数据,通过github使用D3 geo和mapbox呈现。 具体来说,请注意由红色圆圈标记的两个区域 顶部的一个标记了多边形的一部分,该部分使用许多紧密间隔的坐标对进行了圆角处理,但D3删除了大多数点,只绘制了一个粗糙的方形端点 下面的红色圆圈表示一个小三角形,该三角形被

我有一个GeoJSON文件,其中包含一些小细节和特性,我希望使用D3来呈现这些细节和特性。不幸的是,重要的细节丢失了,因为D3 删除间距很近的多边形坐标对

我举了一个小例子来说明这一点。这两个链接使用完全相同的GeoJSON数据,通过github使用D3 geo和mapbox呈现。 具体来说,请注意由红色圆圈标记的两个区域

顶部的一个标记了多边形的一部分,该部分使用许多紧密间隔的坐标对进行了圆角处理,但D3删除了大多数点,只绘制了一个粗糙的方形端点

下面的红色圆圈表示一个小三角形,该三角形被完全删除。相邻多边形应该精确接触,但也会受到D3精度损失的影响

我还没有找到任何关于D3坐标精度或(可配置)特征尺寸限制的文档。 我已经尝试降低D3 geo的ε和相关的ε2值,这就解决了这个问题(对我来说),尽管我确信更小的功能仍然会受到影响

假设这与D3对多边形线段使用正确的测地线有关,而其他贴图库仅绘制直线(在输出坐标空间中), 我希望这一过程只能引入新的观点

我还没有发现其他用户在使用小功能时遇到类似的问题,尽管我很惊讶以前从未出现过这种情况。 有人知道如何正确处理这个问题吗


通过epsilon,我把问题缩小到了使用。这表明clipCircle的问题在于考虑到密集坐标相等,并将其删除。
事实上,如果我禁用圆形剪裁
projection.clipAngle(null)
,问题就会消失。

如果我没有弄错的话。D3不会对提供的点进行重采样:它会对直线进行重采样,添加点。重采样率由
projection.precision()
设置-如果将比例设置为非常小的值,则可以看到这一点-路径的
d
属性不会简化以反映多少细节可见。我将你的比例设置为400,你的整个特征在1平方像素内,并且拥有所有原始顶点。这就是为什么不在d3中使用过于详细的功能很重要的原因-不仅加载时间会受到影响,而且不可见细节的渲染也会受到影响。projection.precision()设置的值以像素为单位(根据文档),而错误以坐标单位为单位(因为它与缩放比例无关)。无论如何,在发布的示例中,这并没有什么不同。这不仅是详细特性的问题,也是非详细但较小特性的问题。您提到重新采样不是原因,因为它只能添加点。如果它们在坐标空间中的间隔小于(常数倍)ε,这仍然是真的吗,就像在例子中一样?嗯,这里有一些非常奇怪的东西。再仔细看一看,我只能在方位投影(如d3.geoporthographic)上复制这一点,在从d3.geo删除重新采样后,问题仍然存在。在d3中使用基准方位投影函数进行投影时,可能存在精度问题?您的放大程度足够,您应该能够替换不同的投影(假设这是您的用例),但我会考虑更多。感谢您花时间研究此问题。缩小精度的损失是无关紧要的,但在放大时更改投影将是混乱的。看看EPSILON的用法,唯一有意义的原因是它在resample.js中的用法。D3不会对提供的点进行重采样:它会对直线进行重采样,添加点。重采样率由
projection.precision()
设置-如果将比例设置为非常小的值,则可以看到这一点-路径的
d
属性不会简化以反映多少细节可见。我将你的比例设置为400,你的整个特征在1平方像素内,并且拥有所有原始顶点。这就是为什么不在d3中使用过于详细的功能很重要的原因-不仅加载时间会受到影响,而且不可见细节的渲染也会受到影响。projection.precision()设置的值以像素为单位(根据文档),而错误以坐标单位为单位(因为它与缩放比例无关)。无论如何,在发布的示例中,这并没有什么不同。这不仅是详细特性的问题,也是非详细但较小特性的问题。您提到重新采样不是原因,因为它只能添加点。如果它们在坐标空间中的间隔小于(常数倍)ε,这仍然是真的吗,就像在例子中一样?嗯,这里有一些非常奇怪的东西。再仔细看一看,我只能在方位投影(如d3.geoporthographic)上复制这一点,在从d3.geo删除重新采样后,问题仍然存在。在d3中使用基准方位投影函数进行投影时,可能存在精度问题?您的放大程度足够,您应该能够替换不同的投影(假设这是您的用例),但我会考虑更多。感谢您花时间研究此问题。缩小精度的损失是无关紧要的,但在放大时更改投影将是混乱的。看看EPSILON的使用,唯一有意义的原因是它在resample.js中的使用。