【发布时间】:2018-06-24 17:59:25
【问题描述】:
阅读前请注意: 如果你知道答案,这是我正在为大学课程做的一个项目;请只提示我正确的方向或举一个例子。出于同样的原因,我也不会发布我的全部代码,但我会详细描述我的进度。
对于这个项目,我用 d3 创建了一个地图。我正在添加功能,但在互联网上搜索了几个小时并尝试了一些东西后,我找不到这个问题的答案:
要在地图的侧边栏中显示额外信息,我需要检查数据中的坐标是否在给定的 svg 路径中。 我可以在我的地图上显示坐标,使用:
var coords = projection([longitude, latitude]);
之后我可以使用数组在正确的区域显示坐标。
路径是这样绘制的:
svg.selectAll(".geodata")
.data(geodata)
.enter().append("path")
地理数据定义为:
var geodata = topojson.feature(data, data.objects.collection).features;
这是一个转换为 geojson 的 topojson。 (它被存储为一个 topojson,因为它们是较小的文件,这将用于 web 应用程序。)
但是,我无法检查某些坐标是否在给定路径中,这是我尝试过的:
- polygonContains() - 我相信这个不起作用,因为我正在处理路径,即使它在技术上是一个多边形,它当然不会存储为一个多边形,所以我不能以这种方式操作它。李>
- document.elementByPoint() - 这会返回最顶部的元素并转到较低的元素将无济于事,因为那时我无法区分具体路径。
如果您有想法或知道示例,我想在下面听到。 :)
给出的答案:
将显示设置为无并在 elementByPoint 下方找到您的元素:
console.log(this);
var element = document.elementFromPoint(coords[0], coords[1]);
console.log(element);
element.style.display = "none";
我的评论: 这不起作用,它会在 div-tags 中为您提供结果,而不是您单击的相应路径(本例中为县)。
【问题讨论】:
-
我假设您的意思是 elementFromPoint 因为 elementFromPath 似乎不存在。我将我的评论添加到主帖子以进行格式化。
-
使用 svg 路径来查看一个点是否在多边形内假定笛卡尔坐标 - 虽然 d3 沿大圆坐标对路径进行采样,但采样率可能足够粗略以至于一个点落在 svg 之外形状但在地理特征内(它会在视觉上出现在我们的边界上)。使用原始地理数据尝试 d3.geoContains()(如果您的原始地理数据是球形:纬度和经度对)
-
我不明白你所说的“它在 -tags 中给你一个结果而不是相应的路径”是什么意思。顺便说一句,你需要一个循环来显示 none 有任何点,因为它在那里删除元素作为下一个 elementFromPoint 调用的候选者。
标签: javascript d3.js svg