麻辣GIS微信平台

更多 GIS 干货

微信关注不错过

「GIS教程」使用Python将GeoJSON转换成TopoJSON

在之前的文章《「GIS教程」什么是TopoJSON》、《「GIS教程」将GeoJSON转换成TopoJSON的方法》中,我们了解到了TopoJSON这一数据格式,并且分享了使用NodeJS或者在线转换的方法。由于本站粉丝使用Python比较多,本文继续介绍使用Python做数据转换的方法(GeoJSON -> TopoJSON)。

新建一个TopoJSON的Python环境

由于小编使用的是Conda,直接使用如下命令:

conda create --name topojson
    conda deactivate
    conda activate topojson

安装依赖

conda install -c conda-forge topojson

开始转换

简要的代码如下:

import topojson as tp
import json

with open("./100000.geojson", 'r') as f:
    data = json.load(f)

# assert data['type'] == 'FeatureCollection'
topo = tp.Topology(data)

topo.to_json("./100000.topo.json")

# to visualise we use the (optional!) package Altair.
topo.to_alt()

上面的代码实现了将geojson从文件中读取,然后保存成topojson的过程,最后并使用altair来可视化。效果图:

对比生成文件大小

更多玩法

如果你还嫌大,这个包还提供了一个simplify方法,可以对数据做进一步简化,不过也要注意不要玩大了,那样就只剩下一个最简单的轮廓了。

比如下图是设置0.1的结果。

import topojson as tp
import json

with open("./100000.geojson", 'r') as f:
    data = json.load(f)

# assert data['type']) == 'FeatureCollection'
topo = tp.Topology(data)

topo.to_json("./100000.topo.json")

# to visualise we use the (optional!) package Altair.
topo.toposimplify(0.1).to_alt()

如果设置成0.5,效果如图:

总结

数据大小和精度不可兼得。

相关阅读

麻辣GIS-Sailor

作者:

GIS爱好者,学GIS,更爱玩GIS。

声明

1.本文所分享的所有需要用户下载使用的内容(包括但不限于软件、数据、图片)来自于网络或者麻辣GIS粉丝自行分享,版权归该下载资源的合法拥有者所有,如有侵权请第一时间联系本站删除。

2.下载内容仅限个人学习使用,请切勿用作商用等其他用途,否则后果自负。

手机阅读
公众号关注
知识星球
手机阅读
麻辣GIS微信公众号关注
最新GIS干货
关注麻辣GIS知识星球
私享圈子

留言板(小编看到第一时间回复)