我遇到了一些似乎无法解决的问题,为了保持简单,我将仅使用一些库存示例来解释我想要做什么。
http://bl.ocks.org/mbostock/5126418——这个基本功能
我想要做的是,当单击地图上的“区域”时,该区域会被隐藏,并且所选区域会在屏幕上居中并展开
我的问题是,每次我尝试此操作时,所选对象都会被推离屏幕。
我确信我做错了什么我是 D3 的新手,并且只使用了几天
.on("click", function(d){
svg
.append("g")
.attr("id", "tract")
.append("g")
.attr("id", "wrapper")
.selectAll("path")
.data([d])
.enter()
.append("path")
.attr("d", path)
.attr("id", "tract"),
d3.select("#wrapper")
.transition()
.duration(800)
.ease("cubic-bezier(0.785, 0.135, 0.150, 0.860)")
.attr("transform", "scale(" + 3 + "), translate(" + (width/2) + ", " + (height/2) + ")");
})
Run Code Online (Sandbox Code Playgroud)
这让我抓狂,因此我们将不胜感激。
我对 d3 也很陌生 - 我会尝试解释我是如何理解它的,但我不确定我是否一切都正确。
\n\n投影具有中心的概念,以地图单位给出:
\n\n\n\n\n投影.center([位置])
\n\n如果指定了 center,则将投影\xe2\x80\x99s 中心设置为指定位置(以度为单位的经度和纬度的二元素数组)并返回投影。如果未指定center,则返回当前中心,默认为\xe2\x9f\xa80\xc2\xb0,0\xc2\xb0\xe2\x9f\xa9。
\n
还有平移,即投影中心在屏幕中的位置(以像素为单位)。
\n\n\n\n\n投影.翻译([点])
\n\n如果指定了point,则将projection\xe2\x80\x99s平移偏移设置为指定的二元素数组[x, y]并返回投影。如果未指定 point,则返回当前平移偏移量,默认为 [480, 250]。平移偏移确定投影\xe2\x80\x99s 中心的像素坐标。默认平移偏移将 \xe2\x9f\xa80\xc2\xb0,0\xc2\xb0\xe2\x9f\xa9 放置在 960\xc3\x97500 区域的中心。
\n
秘密在于知道有些方法在制图空间上运行,而另一些则在画布上运行。
\n\n为了使画布中的某个特征居中,例如将投影中心设置为特征边界框的中心 - 这适用于墨卡托(WGS 84,用于谷歌地图),不确定其他投影。
\n\n例如,给定投影和路径:
\n\nvar projection = d3.geo.mercator()\n .scale(1);\n\nvar path = d3.geo.path()\n .projection(projection);\nRun Code Online (Sandbox Code Playgroud)\n\nboundsfrom 的方法返回以像素为单位path的边界框。使用它来找到正确的比例,将像素大小与地图单位大小进行比较(0.95 为您提供比宽度或高度的最佳拟合多 5% 的边距):
var b = path.bounds(feature),\n s = 0.95 / Math.max(\n (b[1][0]-b[0][0])/width, \n (b[1][1]-b[0][1])/height\n );\nRun Code Online (Sandbox Code Playgroud)\n\n使用该d3.geo.bounds方法以地图单位查找边界框:
b = d3.geo.bounds(feature);\nRun Code Online (Sandbox Code Playgroud)\n\n将投影中心设置为边界框的中心:
\n\nprojection.center([(b[1][0]+b[0][0])/2, (b[1][1]+b[0][1])/2]);\nRun Code Online (Sandbox Code Playgroud)\n\n使用该translate方法将地图中心移动到画布中心:
projection.translate([width/2, height/2]);\nRun Code Online (Sandbox Code Playgroud)\n\n现在,您应该已经将地图中心的要素以 5% 的边距进行了缩放。
\n| 归档时间: |
|
| 查看次数: |
3604 次 |
| 最近记录: |