抱歉,如果这是一个简单的案例,我对显而易见的事情视而不见,但我试图整理一个页面,显示以太平洋为中心的墨卡托投影中的世界地图(来自TopoJSON文件的数据).即左边的欧洲,右边的美国和中间的澳大利亚.有点像这样......
从这一点开始,我希望能够将地图缩放并平移到我心中的愿望,但是当我向东或向西平移时,我希望地图能够"环绕"并且不会到达世界末日(我希望这样做感).
我目前正在处理的代码在这里(或在下面的Gist(https://gist.github.com/d3noob/4966228)或块(http://bl.ocks.org/d3noob/4966228));
<!DOCTYPE html>
<meta charset="utf-8">
<style>
body {font-size:11px;}
path {
stroke: black;
stroke-width: 0.25px;
}
</style>
<body>
<script src="http://d3js.org/d3.v3.min.js"></script>
<script src="http://d3js.org/topojson.v0.min.js"></script>
<script>
var width = 960,
velocity = .005,
then = Date.now()
height = 475;
var projection = d3.geo.mercator()
.center([0, 0 ])
.scale(1000);
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height);
var path = d3.geo.path()
.projection(projection);
var g = svg.append("g");
d3.json("world-110m.json", function(error, topology) {
g.selectAll("path")
.data(topojson.object(topology, topology.objects.countries).geometries)
.enter()
.append("path")
.attr("d", path)
.style("fill","black")
d3.timer(function() {
var angle = velocity * (Date.now() - then);
projection.rotate([angle,0,0]);
svg.selectAll("path")
.attr("d", path.projection(projection));
});
var zoom = d3.behavior.zoom()
.on("zoom",function() {
g.attr("transform","translate("+d3.event.translate.join(",")+")scale("+d3.event.scale+")")
});
svg.call(zoom)
});
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
代码是一个混合的示例,因此我可以看到一个可以自动向西旋转的地图,我可以使用鼠标进行平移和缩放,但是当平移和缩放时,从我所知道的,我正在影响内部"g"元素而不是"svg"元素中的地图.
有很多很好的例子可以平移和缩放以子午线为中心的地图.但是我发现的反子午线上没有一个.
任何帮助将不胜感激.
归档时间: |
|
查看次数: |
6186 次 |
最近记录: |