将shapefile和geoJson转换为TopoJson和/或使用geo2topo

时间:2017-04-21 18:03:47

标签: node.js d3.js topojson

我是Node.js的完全新手。我无法使用TopoJson将我的geoJson文件转换为TopoJson格式。我有topojson v3.0.0

我写了一个test.js文件,我正在用node.exe执行。

如下所示:

var tjson = require("topojson")

tjson.topojson -p --no-stitch-poles -o zip3.topo.json -- zip3.geo.json

console.log("hello")

抱怨no-stitch参数。但我尝试了很多东西,现在我怀疑我错过了一些巨大的东西。我查看了github,现在我很确定将geo转换为topo的过程在某些时候发生了变化。也许他可能将功能分解为子部分?我不确定。

节点新手的任何帮助?

我开始对是否从cmd提示符,节点内启动内容或创建js文件并使用节点启动该文件感到困惑。我还是不知道该做什么。我通过创建一个js文件并使用node.exe启动该js获得了最佳结果。但我似乎仍然缺少一些东西。

我尝试了console.log(tjson),它向我展示了topojson的功能列表。但我不知道如何启动这些功能。我试图遵循节点的一些教程,但它们似乎不适用于TopoJson。

感谢您提供了出色的工具和您的帮助。

我一直在看他关于使用geo2topo的教程 https://medium.com/@mbostock/command-line-cartography-part-1-897aa8f8ca2c

https://medium.com/@mbostock/command-line-cartography-part-3-1158e4c55a1e

我认为geo2topo未定义。我只能猜测教程正在做出某种假设,我知道在哪个文件夹中运行这些命令的环境。

2 个答案:

答案 0 :(得分:0)

地图教程中的所有代码示例都是命令行片段,与此处的var tjson = require("topojson")完全不同。如果您只是坚持使用迈克的示例并从CLI启动它们就应该没问题。

geo2topotopojson的一部分,您将https://docs.oracle.com/javase/7/docs/api/java/text/MessageFormat.html作为全局节点包安装,其中包含npm install -g topojson

Mike的示例正在使用MacOS(即unixoid)CLI,就像我使用Linux一样 - 因此您可能需要稍微修改语法以使其在Windows上运行或将可执行文件添加到路径环境变量中。但这超出了我的意识。也许nodejs文档是这里的起点!?

答案 1 :(得分:0)

要在nodejs脚本/应用程序中使用它,您需要d3-geo-projection软件包以及npm install d3-geo-projection topojson-server 软件包(以操纵投影),因此继续安装它们:

const fs = require('fs')
const geostitch = require('d3-geo-projection').geoStitch
const topojson = require('topojson-server')

// read the file
fs.readFile('./zip3.geo.json', {encoding: 'utf-8'}, (err, data) => {
  // Treat read exception if any
  if (err)
    return console.error(err)

  // Convert to topo
  const topoData = topojson.topology(geostitch(data))

  // Now `topoData` contains the topojson we can proceed into saving it into a file
  fs.writeFile('zip3.topo.json', topoData, err => {
    if (err)
      return console.error(err)
    return console.log('GeoJson converted to TopoJson, successfully saved at `zip3.topo.json`') 
  }
})

现在,在您的.js文件上,我们将需要读取文件并将其转换,然后可以将其写入其他文件(请注意,以下代码使用goeStitch投影,您可以使用所需的投影或忽略它,同时验证路径,因为代码使用静态路径)

CTFontManagerRegisterGraphicsFont