如何提取TSV文件列中存储的GeoJSON数据?支持任意语言或方法
提取TSV列中GeoJSON数据的可行方法
R语言解决方案
- 优先用
data.table读取TSV,它对特殊字符的处理更稳定:
# 加载依赖包 library(data.table) library(geojsonsf) library(sf) # 读取TSV文件,替换为你的实际文件名 tsv_data <- fread("中非地区道路数据.tsv", stringsAsFactors = FALSE) # 提取GeoJSON列(替换为实际列名,比如'geometry'或'geo_json') geo_json_strings <- tsv_data$geo_json # 将所有GeoJSON字符串转换为sf对象,再导出为标准GeoJSON sf_objects <- geojson_sf(geo_json_strings) st_write(sf_objects, "中非地区道路提取结果.geojson", driver = "GeoJSON")
注意:如果遇到解析错误,可先检查单条GeoJSON字符串的格式是否合法,用geojson_sf(geo_json_strings[1])测试第一条数据。
Python解决方案
- 用pandas+geopandas处理,兼容多数转义格式:
import pandas as pd import geopandas as gpd import json from shapely.geometry import shape # 读取TSV文件 df = pd.read_csv("中非地区道路数据.tsv", sep="\t") # 定义解析函数,处理可能的转义问题 def parse_geometry(row): try: return shape(json.loads(row['geo_json'])) # 替换为实际列名 except Exception: return None # 生成几何列并过滤无效数据 df['geometry'] = df.apply(parse_geometry, axis=1) gdf = gpd.GeoDataFrame(df.drop(columns=['geo_json']), geometry='geometry') gdf = gdf[gdf.geometry.notna()] # 导出为GeoJSON gdf.to_file("中非地区道路提取结果.geojson", driver='GeoJSON')
命令行快速处理方案
无需编程环境,用csvkit和jq工具完成:
- 提取TSV中的GeoJSON列(替换
geo_json为实际列名):
csvcut -t -c geo_json 中非地区道路数据.tsv > temp_geo_lines.txt
- 将单行GeoJSON合并为标准FeatureCollection:
jq -s '{"type": "FeatureCollection", "features": .}' temp_geo_lines.txt > 中非地区道路提取结果.geojson
内容的提问来源于stack exchange,提问作者r_user_17
相关产品推荐
相关产品推荐

