Shapefile到TopoJSON的转换问题

时间:2013-06-04 18:39:06

标签: d3.js shapefile geojson topojson

我正在尝试将shapefile转换为GeoJSON,然后转换为TopoJSON,如Let's Make a Map中所述。在链的某处,某些东西被破坏,我的结果图像如下所示: Corrupt VT map

我的工作流程如下:

  1. http://vcgi.vermont.gov/warehouse/search_tools下载shapefile - 我正在处理Master Town Boundary数据,特别是“Boundary_BNDHASH_region_towns.shp”文件。
  2. 将shapefile转换为GeoJSON

    ogr2ogr -f GeoJSON vt_towns.json Boundary_BNDHASH_region_towns.shp
    
  3. 将GeoJSON转换为TopoJSON

    topojson -p TOWNNAME -p CNTY -o vt.json vt_towns.json
    
  4. 插入基本模板,对Mike Bostock的示例进行一些小修改

    <!DOCTYPE html>
    <meta charset="utf-8">
    <style>
    
    /* CSS goes here. */
    
    </style>
    <body>
    <script src="http://d3js.org/d3.v3.min.js"></script>
    <script src="http://d3js.org/topojson.v1.min.js"></script>
    <script>
    
        var width = 960,
            height = 1160;
    
        var svg = d3.select("body").append("svg")
            .attr("width", width)
            .attr("height", height);
    
        var projection = d3.geo.transverseMercator()
                .rotate([72.57, -44.20])
                .translate([175,185])
                .scale([100]);
    
        // Define path generator
        var path = d3.geo.path()
            .projection(projection);
    
        d3.json("vt.json", function(error, vt) {
    
            var vermont = topojson.feature(vt, vt.objects.vt_towns);
    
            svg.append("path")
                .datum(vermont)
                .attr("d", path);
    
        });
    
    </script>
    
  5. 这不是我的第一张d3地图(这是我的第二张!)但我对于出了什么问题非常不知所措。我最好的猜测是它与包含许多shapefile及其附带文件的解压缩数据集有关。

1 个答案:

答案 0 :(得分:4)

您的文件似乎使用网格坐标系,使用-t_srs EPSG:4326选项获取纬度和经度:

ogr2ogr -f GeoJSON -t_srs EPSG:4326 vt_towns.json Boundary_BNDHASH_region_towns.shp

然后继续您的工作流程。