【发布时间】:2016-02-05 01:41:01
【问题描述】:
这个简单的 geojson 矩形在一些 geojson 查看器中正确显示,我得到了一个预期的矩形。但是当我用 d3 做它时,矩形似乎环绕。
var polygonData = {
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [
[
[ -100, -20 ],
[ -100, 20 ],
[ 100, 20 ],
[ 100, -20 ],
[ -100, -20 ]
]
]
},
"properties": {}
};
var width = 1000;
var height = 500;
var projection = d3.geo.equirectangular()
.scale(100)
.translate([width / 2, height / 2])
.rotate([0, 0])
.center([0, 0])
.precision(0);
var path = d3.geo.path()
.projection(projection);
var svg = d3.select("body").append("svg")
.attr({
width: width,
height: height
});
svg.append('path')
.datum(polygonData)
.attr({
d: path,
fill: 'orange',
opacity: 0.5
});
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.5/d3.min.js"></script>
<style>
</style>
</head>
<body>
</body>
这是我通过geojson viewer 得到的:
但这就是我从上面的d3 code得到的:
颠倒缠绕顺序只会填充相反的形状,并不能解决问题。我猜这是一个逆子午线切割问题。一种解决方法是添加一些中间点以强制路径不环绕,但我需要能够使用更复杂的路径自动执行此解决方案。
知道如何将这个 geojson 与 d3 一起使用,并强制它像其他 geojson 查看器一样显示为地图上的一个简单矩形?
【问题讨论】:
-
从他默认的反子午线切割切换到小圆圈切割似乎可以解决问题:projection.clipAngle(181) stackoverflow.com/a/30996241/537080 我想知道是否更好的解决方法是使用投影流?