下载全球耕地数据集(柬埔寨和越南地区),遇到的坑及解决办法

全球耕地数据集地址:

https://github.com/fiboa/data

List of datasets

Title License Provider
Austria CC-BY-4.0 Agrarmarkt Austria
BRP Crop Field Boundaries for The Netherlands (CAP-based) CC0-1.0
Denmark Crop Fields (Marker) CC-0
Field boundaries for Belgium Wallonia No conditions apply to access and use
Field boundaries for Cambodia and Vietnam (AI4SmallFarms) CC-BY-4.0
Field boundaries for Catalonia, Spain Open Information Use License - Catalonia
Field boundaries for Croatia Publicly available data
Field boundaries for Czech CC-0
Field boundaries for Estonia CC-BY-SA-3.0 Põllumajanduse Registrite ja Informatsiooni Amet
Field boundaries for Flanders, Belgium Licentie modellicentie-gratis-hergebruik/v1.0
Field boundaries for France from Eurocrops (2018) CC-BY-SA-4.0 Institut National de l’Information Géographique et Forestière
Field boundaries for Latvia from EuroCrops (2021) CC-BY-4.0 Lauku atbalsta dienests
Field boundaries for Luxembourg CC-BY-4.0 Luxembourg ministry of Agriculture
Field boundaries for Mecklenburg-Western Pomerania, Germany No restrictions apply
Field boundaries for Portugal No conditions apply
Field boundaries for Saarland, Germany cc-by-4.0 © GDI-SL 2024
Field boundaries for Saxony, Germany dl-de/by-2-0 Sächsisches Landesamt für Umwelt, Landwirtschaft und Geologie
Field boundaries for Slovakia Publicly available data
Field boundaries for Slovenia Publicly available data
Field boundaries for Slovenia from EuroCrops (2021) CC-BY-SA-4.0 Ministrstvo za kmetijstvo, gozdarstvo in prehrano
Field boundaries for Sweden CC0-1.0 Jordbruksverket
Field boundaries for Switzerland Open BY
Field boundaries for The Netherlands CC0-1.0
Field boundaries for ireland CC-BY-4.0 Ireland Department of Agriculture, Food and the Marine
Field boundaries for the west of Bahia state, Brazil CC-BY-4.0
Fields of the World various
Finnish Crop Fields (Maatalousmaa) CC-BY-4.0 Finnish Food Authority
Germany, Berlin / Brandenburg dl-de/by-2-0 Land Brandenburg
Germany, Lower Saxony dl-de/by-2-0 Land Niedersachsen
Germany, North Rhine-Westphalia dl-de/by-2-0 Land Nordrhein-Westfalen / Open.NRW
Germany, Schleswig-Holstein dl-de/zero-2-0 Land Schleswig-Holstein
Germany, Thuringia dl-de/by-2-0 Thüringer Landesamt für Landwirtschaft und Ländlichen Raum
Lacuna labels Participant license agreement for the NICFI contract
UKFields CC-BY-4.0 Bancroft S, Wilkins J

我下载柬埔寨和越南的田地边界的数据,作为示例。

柬埔寨和越南的田地边界(AI4SmallFarms)

页面是英文,我选择机翻,快速办事,看下大概意思。

image-20241119171412073

该大型数据集包含 439,001 个农田多边形,分为 62 个区块,每个区块约 5×5 公里,分布在越南和柬埔寨,涵盖了各种农田和多种景观类型。农田多边形是根据卫星图像精心数字化的,经过严格的多步骤质量控制流程和拓扑一致性检查。

格式是geoParquet。这种数据格式,我是第一次看到。

image-20241119160943130

Parquet是什么

那就去查一查Parquet是什么,还有关键是怎么把它转换为json或者shp。

遇到的坑

Parquet是一种高效的列式存储格式,而JSON是一种常见的数据交换格式。

我们可以使用 pandas读取Parquet数据集。

这里是失败经验,我是一边做一边记录、摸索。这个过程,可以参考下。

具体步骤如下。

安装库:

pip install pandas pyarrow

数据转换步骤:

import pyarrow.parquet as pq
import geopandas as gpd
# 读取Parquet文件
table = pq.read_table('ai4sf.parquet')
# 将Parquet数据转换为DataFrame
df = table.to_pandas()

df是一个43万行 ,7列的表,如下:

image-20241119161900782

其中 geometry 列中的数据是二进制格式。(以 b'\x01\x03\x00\x00\x00\x01\x00\x00\x00\n\x00\...' 形式表示)。这种二进制数据在转换为JSON时可能会引起编码问题,因为JSON要求所有字符串都是有效的UTF-8编码。

所以 我们要用 geopandas进行 数据转换

代码如下 :

import pyarrow.parquet as pq
import geopandas as gpd
# 读取Parquet文件
table = pq.read_table('ai4sf.parquet')

df = table.to_pandas()
df = df.drop(columns=['determination_datetime'])
# 将 DataFrame 转换为 GeoDataFrame
gdf = gpd.GeoDataFrame(df, geometry=gpd.GeoSeries.from_wkb(df['geometry']))
# 设置原始 CRS
gdf.set_crs(epsg=4326, inplace=True)

# 转换 CRS
gdf = gdf.to_crs(epsg=4326)  # 如果需要转换到其他 CRS,可以更改 epsg 值
geojson_data = gdf.to_json()
# 将 GeoJSON 数据保存到文件
with open('output1.geojson', 'w') as f:
    f.write(geojson_data)

print("GeoJSON 文件已保存为 output.geojson")

1

结果

parquet源文件大小:

image-20241119164004024

转换后的 Geojson文件大小:

image-20241119164030772

结果发现 ,使用geopandas对parquet文件进行格式转换是行不通 ,坐标信息错乱了。

image-20241119164916896

成功经验

经过 ,一番探索,发现有个库可以对parquet进行 格式转换,

地址是:https://pypi.org/project/fiboa-cli/

安装:

pip install fiboa-cli 

格式转换语句,在命令行运行。

fiboa create-geojson ai4sf.parquet -o d://

image-20241119165433206

程序运行了3分钟,成功生成了geojson格式 。

可视化方法1:

把它拖拽到QGIS可视化,如下:

image-20241119170301130

比例尺再放大 100倍。如下:

image-20241119170452311

可视化方法2:

之前做了 一个在线网站查看geojson的demo。

https://ytkz.tech/openlayer_test/

可视化结果 如下,:

image-20241119170127348

因为文件太大了,所以很卡。蓝色范围的就是耕地边界。

image-20241119171112020

但是,转换后的json文件,高达294兆。

image-20241119170816597

要知道,parquet源文件才20多兆,文件大小膨胀了10倍!这下我知道了parquet的优点了!

参考

https://blog.csdn.net/qq_57329395/article/details/131891621