使用Vincent读取topojson文件时画布太大

时间:2014-09-11 16:50:39

标签: python shapefile topojson vincent

我想使用Vincent显示topojson文件。我用这个命令将shapefile转换为topojson:

topojson -o /path/to/output/file.topo.json -- /path/to/input/file.shp

为了显示它,我使用了这段代码(在Ipython笔记本中):

import vincent
vincent.core.initialize_notebook()
world_topo = r'scot.topo.json'
geo_data = [{'name': 'countries',
              'url': world_topo,
             'feature': 'scot'}]

vis = vincent.Map(geo_data=geo_data, scale=1000)
vis.display()

然而,这是结果:

enter image description here

有谁知道为什么我使用文森特获得太多空白?这也是在不使用Ipython Notebook的情况下发生的。

我还在QGIS中验证了shapefile,看起来是正确的,因此原始文件中没有多余的空白。

更新

我能够使图像居中并减少空白量,但我不确定它为什么会起作用。这是代码:

import vincent
vincent.core.initialize_notebook()
world_topo = r'scot.topo.json'
geo_data = [{'name': 'countries',
              'url': world_topo,
             'feature': 'scot'}]

vis = vincent.Map(geo_data=geo_data, scale=6000, center=[0,57])
vis.display()

enter image description here

有谁知道获得正确参数的想法是什么?我首先尝试让它在D3中运行,虽然代码中有相似之处,但vincent和d3似乎不会产生相同参数的相同结果。这是d3代码:

var width = 350,
    height = 450;

var svg = d3.select("body").append("svg")
    .attr("width", width)
    .attr("height", height);

d3.json("scot.topo.json", function(error, s) {
  if (error) return console.error(error);
    var subunits = topojson.feature(s, s.objects.scot);
    var projection = d3.geo.albers()
        .center([0, 57])
        .rotate([4.4, 0])
        .parallels([50,60])
        .scale(4000)
        .translate([width / 2, height / 2]);
    var path = d3.geo.path()
        .projection(projection);
    svg.append("path")
        .datum(subunits)
        .attr("d", path);

}); 

0 个答案:

没有答案