Shapefile 到 TopoJSON 的转换问题

Mat*_*lla 2 shapefile geojson d3.js topojson

我正在尝试将 shapefile 转换为 GeoJSON,然后转换为 TopoJSON,如Let's Make a Map 中所述。沿着链条的某个地方,有些东西被破坏了,我得到的图像如下所示: 损坏的VT地图

我的工作流程如下:

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

    ogr2ogr -f GeoJSON vt_towns.json Boundary_BNDHASH_region_towns.shp
    
    Run Code Online (Sandbox Code Playgroud)
  3. 将 GeoJSON 转换为 TopoJSON

    topojson -p TOWNNAME -p CNTY -o vt.json vt_towns.json
    
    Run Code Online (Sandbox Code Playgroud)
  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>
    
    Run Code Online (Sandbox Code Playgroud)

这不是我的第一张 d3 地图(这是我的第二张!)但我非常不知道出了什么问题。我最好的猜测是它与包含许多 shapefile 及其随附文件的解压缩数据集有关。

Pab*_*rro 5

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

ogr2ogr -f GeoJSON -t_srs EPSG:4326 vt_towns.json Boundary_BNDHASH_region_towns.shp
Run Code Online (Sandbox Code Playgroud)

然后继续您的工作流程。