【问题标题】:d3: us states in topojson format filesize is way too larged3:我们声明 topojson 格式的文件大小太大了
【发布时间】:2013-11-25 08:34:40
【问题描述】:

我在我的网页中渲染了两张地图,我正在使用 d3 来完成它。一个是显示所有国家边界的世界地图。我正在使用的文件是这个版本: https://raw.github.com/mbostock/topojson/master/examples/world-110m.json

第二张地图是美国各州。我所需要的只是州界(不是县)。我正在使用此文件的修改版本: http://bl.ocks.org/mbostock/raw/4090846/us.json

我已修改这两个文件以包含我用于工具提示的名称和两个字母的州或国家/地区代码。

world-110m.json 文件大约 100kb。 states.json 文件超过 650kb。谁能解释这是为什么?而且,更重要的是,我可以从 states.json 文件中删除什么以显着减小其大小,同时仍然有效?

两个文件都为每个节点定义了弧,并且在文件末尾附近有一个“弧”节点。各州的弧节点是巨大的。我有一种感觉,states json 文件包含所有我不需要的县边界。

【问题讨论】:

  • 您可能想使用topojson 而不是geojson。
  • 有趣。我以为我使用的是 WAS topojson 的 json 文件,而不是 geojson。不知道为什么 Mike Bostock 会在这个例子中使用 geojson,而他似乎在其他地方都提倡使用 topojson。谢谢指点。

标签: json d3.js topojson


【解决方案1】:

除了 rysloan 建议之外,您还可以使用 MapshaperQGIS 来提取州边界。这两个也是免费的。要仅获取美国状态,请执行以下步骤:

  • 上传us.json文件到Mapshaper;
  • 将其导出为形状文件;
  • 打开压缩包,您会注意到 Mapshaper 已经将您的 topojson 分成 3 个形状文件,其中一个是 us-states;
  • 将 us-states.shp 和 us-states.shx 上传到 Mapshaper(您必须先刷新 Mapshaper 才能删除原来的 us.json 文件);和
  • 另存为 topojson,您将拥有一个 58kb 大小的文件。

【讨论】:

【解决方案2】:

如果您的状态 json 文件仍然包含:

objects:{"counties..." 

那么您的文件中仍有县界。在使用之前,您需要对文件进行一些预处理。您也许可以使用 javascript 删除“counties”属性(下划线是一个很好的对象操作库,请参阅 _.omit)。其他选项包括使用一些地理信息系统来分解县多边形。 PostGIS 和 R 将是免费执行此操作的两种方法(请参阅 postgis 中的 ST_UNION 或 R 的 maptools 库中的 unionSpatialPolygons)。

至于缩小世界边界地图,我不太确定。看起来就像它的骨头一样。

【讨论】:

    猜你喜欢
    • 2014-01-24
    • 2013-03-09
    • 2013-06-07
    • 2016-11-14
    • 1970-01-01
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多