【发布时间】:2014-11-11 18:59:15
【问题描述】:
我正在尝试使用 D3 绘制 topojson 特征,它们是由 TileStache 从 PostGIS 数据库生成的。小三角形多边形倾向于简化为“线”:3 个点在一条直线上。如果 TopoJSON 是这样的,多边形被绘制成一条线:
"arcs":[[[609,278],[-1,-1],[-1,-1],[2,2]]]
但是,如果 TopoJSON 是这样的:
"arcs":[[[609,278],[-2,-2],[1,1],[1,1]]]}
绘制了一个带有“线形”洞的无限区域,弄乱了地图。当特征是线形时,如何阻止 D3 创建无限区域?
你可以在这里看到两种风格的TopoJSON的效果: http://research.geodan.nl/sites/vectortiling/test/faultytile.html
这些无限功能的更大效果可见这里:http://research.geodan.nl/sites/vectortiling/
【问题讨论】:
-
试试 array.reverse(),绕线顺序在 D3 中很重要,但在其他应用程序中并不总是很重要。
-
正如对 D3 文档的评论所建议的那样,您不能在源 (PostGIS) 数据库中使用 ST_ForceRHR 吗?还是用 TileStache 处理后出现问题?
-
topojson 由 TileStache 使用其 Goodies/VecTiles/topojson.py 提供程序生成。它将特征检索为 WKB 并将其编码到 topojson 中。我注意到它将坐标转换为微分整数,并且很可能通过该操作,完美的顺时针三角形多边形变成了上面提到的线多边形。所以恐怕在 PostGIS 中几乎没有办法解决它。
-
正如我所怀疑的,在 topojson 中放大的一级是一个三角形:
[194,555],[-5,-5],[2,4],[3,1]如果你缩小多边形会缩小,最后三个值将减半:[-2.5,-2.5],[1,2],[3,1]但是因为 topojson 与整数一切都需要四舍五入。根据原始值,两个可能的结果是[-2,-2],[1,1],[1,1]和[-2,-2],[1,2],[1,0]。因此,错误的 topojson 是简化完全有效的多边形并遵循右手定则的结果,尽管值很大 1。所以我认为 D3 在这里是错误的。
标签: javascript d3.js topojson tilestache