D3.js d3和x27;s path.bounds工作吗?

D3.js d3和x27;s path.bounds工作吗?,d3.js,topojson,datamaps,D3.js,Topojson,Datamaps,我有一个TopoJson格式的文件world.topo.json,我从中获取并在d3地理图中使用它(使用merchant投影) 它工作得很好,但我发现很奇怪,当我调用path.bounds(.objects.world.feature)并获得以下值时: [ [-25.272818452358365, -114.9648719971861], [917.2049776245796, 507.5180814546301] ] 那么,为什么botom/左角指向-25和-114?它们不

我有一个TopoJson格式的文件
world.topo.json
,我从中获取并在d3地理图中使用它(使用
merchant
投影)

它工作得很好,但我发现很奇怪,当我调用
path.bounds(.objects.world.feature)
并获得以下值时:

[
    [-25.272818452358365, -114.9648719971861],
    [917.2049776245796, 507.5180814546301]
]
那么,为什么botom/左角指向-25和-114?它们不应该是
0,0
-917,-507

更新:我有一个缩放行为对象绑定到我的d3图表上,这对我来说就像预期的一样。因此,我为每次缩放/拖动都编写了一个
console.log
,如下所示:

const topojson = <response of an ajax request>;
const bounds = path.bounds(topojson.objects.world.feature);
console.log(translate, JSON.stringify(path.bounds(feature))); // XXX
第一个数组是当前的translate,第二个数组是边界

但是,当我拖动/平移或缩放时,输出如下:

[0.021599999999999998, 0.10368] "[[-25.272818452358365,-114.9648719971861],[917.2049776245796,507.5180814546301]]"
[24.88185889212827, 119.4329226822157] "[[-25.272818452358365,-114.9648719971861],[917.2049776245796,507.5180814546301]]"
[25, 120] "[[-25.272818452358365,-114.9648719971861],[917.2049776245796,507.5180814546301]]"
[25, 120] "[[-25.272818452358365,-114.9648719971861],[917.2049776245796,507.5180814546301]]"
[-15, 119] "[[-25.272818452358365,-114.9648719971861],[917.2049776245796,507.5180814546301]]"
[-27, 117] "[[-25.272818452358365,-114.9648719971861],[917.2049776245796,507.5180814546301]]"
[-27.32184332502962, 117.03468139278337] "[[-25.272818452358365,-114.9648719971861],[917.2049776245796,507.5180814546301]]"
[-125.83796642848066, 127.65064293410353] "[[-25.272818452358365,-114.9648719971861],[917.2049776245796,507.5180814546301]]"
[-165.15379127139124, 131.88726199045166] "[[-25.272818452358365,-114.9648719971861],[917.2049776245796,507.5180814546301]]"
[-173.98081187505056, 132.83844955550114] "[[-25.272818452358365,-114.9648719971861],[917.2049776245796,507.5180814546301]]"
[-173.98081187505056, 132.83844955550114] "[[-25.272818452358365,-114.9648719971861],[917.2049776245796,507.5180814546301]]"
[-173.4557969093005, 132.7818746669505] "[[-25.272818452358365,-114.9648719971861],[917.2049776245796,507.5180814546301]]"
[-89.06290511198648, 123.68781305086063] "[[-25.272818452358365,-114.9648719971861],[917.2049776245796,507.5180814546301]]"
[-89.06290511198648, 123.68781305086063] "[[-25.272818452358365,-114.9648719971861],[917.2049776245796,507.5180814546301]]"
如您所见,尽管第一个参数根据缩放和平移事件不断变化,但边界保持不变。

关于
路径。边界(对象)
已涵盖:

返回指定GeoJSON对象的投影平面边界框(通常以像素为单位)。边界框由二维数组表示:[[x]₀, Y₀], [x₁, Y₁]], 其中x₀ 是最小x坐标,y₀ 是最小y坐标,x₁ 是最大x坐标,y坐标₁ 是最大y坐标

因此,-25和-114是最小的
x
y
值,指的是左上角(在SVG坐标系中),而不是左下角

请记住,
path.bounds
不同于:

返回指定GeoJSON功能的球形边界框。边界框由二维数组表示:[[left,bottom],[right,top]],其中left是最小经度,bottom是最小经度,right是最大经度,top是最大经度

它是如何工作的?

path.bounds(object)
将使用投影在对象周围绘制一个“矩形”,并返回一个包含该矩形四个角的数组,如上所述。让我们看看它在这些演示中是如何工作的(此代码不是我的):

在第一个演示中,日本地图的比例尺为1000。请检查控制台以查看
path.bounds

var topoJsonUrl=”https://dl.dropboxusercontent.com/u/1662536/topojson/japan.topo.json";
可变宽度=500,
高度=500,
比例=1;
d3.选择(“正文”).附加(“svg”)
.attr(“宽度”,宽度)
.attr(“高度”,高度)
.附加(“g”).attr(“id”、“all-g”);
var projection=d3.geo.mercator()
.center([138,38])
.比例尺(1000)
.翻译([宽度/2,高度/2]);
json(topoJsonUrl,onload映射);
函数onLoadMap(错误,jpn){
var path=d3.geo.path()
.投影(投影);
var features=topojson.object(jpn,jpn.objects.japan);
var-mapJapan=特征;
log(JSON.stringify(path.bounds(mapJapan)))
d3.选择(“全部g”)
.append(“g”).attr(“id”,“path-g”).selectAll(“path”)
.数据(特征.几何)
.输入()
.append(“路径”)
.attr(“填充”,“#f0”)
.attr(“id”,函数(d,i){return“path”+i})
.attr(“笔划”,“999”)
.attr(“笔划宽度”,0.5/刻度)
.attr(“d”,路径);
}
路径{
笔画:黑色;
}


好的,好的,我得到了下/左vs上/左,但我的问题是为什么它是-25/-114,而其他坐标是917507?我的意思是,它是如何找到这些数字的?对我来说,逻辑值应该是0,0或者其他坐标中相同值的负数。你明白我的意思吗?在-25和917之间没有逻辑关系,在-113和507之间。这些值是从哪里产生的?我知道它们不是绝对值,它们根据GeoJSON/TopoJSON的内容而变化,我知道。我的意思是:为什么-25而另一个是917?我感谢你的努力,但我想你还没有明白我的问题。你看到-12和529之间没有相关性吗?我是说,是难道它不是0和541吗?或者也许是270.5和270.5,如果它在中间有0,0?我意思是- 12?再一次:逻辑上讲,当它输出一个宽度为541的矩形的边界时,左边应该是0,右边应该是541。你还不能理解为什么118和389,你能看到吗?你说的是没有意义的。为什么它应该在0开始?为什么0应该在中间?它在SVG坐标系中返回矩形的位置,相对于它的SVG。改变上面演示中的翻译,你会看到四个值的变化。g、 我无法解释得更多。请看一下SVG坐标系和D3投影函数。这也是一个很好的阅读:“相对于SVG,它位于”@MarinhoBrandão关于您的编辑:
path。边界(对象)
取决于投影。投影工作完成后,您将翻译元素。
[0.021599999999999998, 0.10368] "[[-25.272818452358365,-114.9648719971861],[917.2049776245796,507.5180814546301]]"
[24.88185889212827, 119.4329226822157] "[[-25.272818452358365,-114.9648719971861],[917.2049776245796,507.5180814546301]]"
[25, 120] "[[-25.272818452358365,-114.9648719971861],[917.2049776245796,507.5180814546301]]"
[25, 120] "[[-25.272818452358365,-114.9648719971861],[917.2049776245796,507.5180814546301]]"
[-15, 119] "[[-25.272818452358365,-114.9648719971861],[917.2049776245796,507.5180814546301]]"
[-27, 117] "[[-25.272818452358365,-114.9648719971861],[917.2049776245796,507.5180814546301]]"
[-27.32184332502962, 117.03468139278337] "[[-25.272818452358365,-114.9648719971861],[917.2049776245796,507.5180814546301]]"
[-125.83796642848066, 127.65064293410353] "[[-25.272818452358365,-114.9648719971861],[917.2049776245796,507.5180814546301]]"
[-165.15379127139124, 131.88726199045166] "[[-25.272818452358365,-114.9648719971861],[917.2049776245796,507.5180814546301]]"
[-173.98081187505056, 132.83844955550114] "[[-25.272818452358365,-114.9648719971861],[917.2049776245796,507.5180814546301]]"
[-173.98081187505056, 132.83844955550114] "[[-25.272818452358365,-114.9648719971861],[917.2049776245796,507.5180814546301]]"
[-173.4557969093005, 132.7818746669505] "[[-25.272818452358365,-114.9648719971861],[917.2049776245796,507.5180814546301]]"
[-89.06290511198648, 123.68781305086063] "[[-25.272818452358365,-114.9648719971861],[917.2049776245796,507.5180814546301]]"
[-89.06290511198648, 123.68781305086063] "[[-25.272818452358365,-114.9648719971861],[917.2049776245796,507.5180814546301]]"