【问题标题】:d3.geo.path strange large boundsd3.geo.path 奇怪的大范围
【发布时间】:2016-02-09 09:55:24
【问题描述】:

有人可以向我解释以下场景吗?

假设我有一个 GeoJSON 文件,其中一个多边形特征仅包含四个坐标:

var json = {
  "type": "FeatureCollection", 
  "features": [
    {
      "geometry": {
        "type": "Polygon", 
        "coordinates": [
          [
            [
              6.55757, 
              45.4283625
            ], 
            [
              6.50925565, 
              45.3728949
            ], 
            [
              6.5249137, 
              45.3728329
            ], 
            [
              6.52511385, 
              45.37276325
            ]
          ]
        ]
      }, 
      "type": "Feature", 
      "properties": {
        "uid": "fb3f3081-c6cf-4f64-8ccb-67918a3dbe84"
      }
    }
  ]
}

现在我想将它投影到墨卡托并获得边界框:

var projection = d3.geo.mercator()
.scale(1)
.precision(0);

var path = d3.geo.path()
.projection(projection);

var pathBounds = path.bounds(json.features[0]);
var geoBounds = d3.geo.bounds(json.features[0]);

json.features[0].geometry.coordinates[0].map(function(d) {
    console.log("projection:", projection(d)[0], projection(d)[1]);
});

console.log('path.bounds:', pathBounds[0][0], pathBounds[0][1])
console.log('path.bounds:', pathBounds[1][0], pathBounds[1][1])

console.log('d3.geo.bounds:', geoBounds[0][0], geoBounds[0][1])
console.log('d3.geo.bounds:', geoBounds[1][0], geoBounds[1][1])

结果不太直观。路径的边界框比任何投影点都大,地理边界框为[[-180,-90],[180,90]]

看起来多边形被解释为多边形外部的整个世界。这是预期的吗?为什么这样做而不是将多边形仅视为列出点内的区域?

Fiddle(打开调试器查看控制台日志):

https://jsfiddle.net/pkerpedjiev/emr2g4f8/

【问题讨论】:

  • 坐标应该是顺时针才能正确解释。
  • 是的,没错!就在文档中的 important 部分下,我最不可能检查的地方。如果您将其添加为答案,我将很乐意接受。

标签: d3.js d3.geo


【解决方案1】:

documentation 说:

重要:多边形的内部是多边形按顺时针顺序缠绕的所有点。

如果你颠倒你的点的顺序,它应该可以正常工作。

【讨论】:

    猜你喜欢
    • 2013-03-30
    • 1970-01-01
    • 2023-03-20
    • 2013-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多