GEE学习笔记 三十二:GEE导出SHP文件介绍

日期:

目前使用Google Earth Engine(GEE)平台的用户越来越多,同时谷歌对于GEE的开发也是投入了非常大的心血。从谷歌刚刚开完的GEE开发者大会统计可以了解到,目前国内使用GEE的用户也是非常多(虽然目前大部分是学者和学生在使用),相信未来会有越来越多的企业会使用GEE作为自己的一个重要生产平台。

 

废话不多讲,接下来一段时间我会将GEE平台目前更新的一些主要内容做一下简单介绍。主要的内容包括:

  • 新的UI组件
  • 新的图像分割算法(终于成为正式的算法了, )
  • 支持更多的导出内容
  • GEE新增加的资源
  • 还有最为重要的就是这次GEE开发者大会介绍的一些内容总结

由于自己学疏才浅,不可能深度详细介绍所有内容,但是我会尽力比较详细介绍我所了解的一切内容。


首先我们从简单的来讲起,今天主要简单说一下新的资源导出类型。关于如何从GEE中导出资源前面的文章有过专门的介绍,这里就不在啰嗦。这次新增加的资源导出类型是table可以支持导出“SHP”格式的文件到Google cloud或者是Google Drive中。

 

有人看到这里忍不住就去查GEE的API,天呐,夭寿了!GEE的API如下图所示,显示并不支持“SHP”格式啊!

千万别慌,我们用代码实验一下:

//这个资源是私有的,不会分享的,嘿嘿!
var roi = ee.FeatureCollection("xxxx/341500");
Map.addLayer(roi);
Map.centerObject(roi, 7);
var sroi = ee.FeatureCollection(roi.filter(ee.Filter.eq("PAC", 341521)));
print(sroi);


//就是这里,导出的格式写为SHP
Export.table.toDrive({
  collection:sroi,
  description: "341521",
  fileNamePrefix: "341521",
  fileFormat: "SHP"
});

 

这段代码除了最后的格式是“SHP”外,相信大家都非常熟悉了,点击运行后提示界面如下:

 

大家发现了没有,新的格式SHP。导出到Google Drive后

 

新的格式其实就是我们平常使用的shape格式。谷歌大神牛啊,我们想什么他加什么。等等,难道真的一点问题都没有吗?凭着鸡蛋里挑骨头的精神,我反复测验了一下,还真的发现了一个问题 。

这个问题主要是影响我们中国人 ,汉字无法解析的问题。具体来讲就是,如果我们的矢量文件中有字段的内容是汉字,那么使用“SHP”格式下载的文件中所有的汉字内容都会变为“????”。

测试内容就是上面导出的文件,然后在GEE中查看矢量文件的内容如下图:

然后导出SHP格式文件使用QGIS查看如下图:

 

使用“KML”和“GeoJson”格式导出的文件使用QGIS查看如下图:

 

出现这个bug的原因,结合我在本地使用GDAL生产矢量文件的经验,这个问题就是导出代码中缺少一句代码,没有转汉字编码。为了验证我的猜想,我在GEE中测试添加如下测试代码:

第一步导出数据到assets中

//保密的数据
var roi = ee.FeatureCollection("xxxx/341500");
Map.addLayer(roi);
Map.centerObject(roi, 7);
var sroi = ee.FeatureCollection(roi.filter(ee.Filter.eq("PAC", 341521)));
//人工添加汉字内容
sroi = sroi.map(function(f){
  f = f.set("n", "中国");
  return f;
});
print(sroi);
//导出数据到assets

Export.table.toAsset({
   collection:sroi,
   description: "341521_new",
   assetId: "341521_new"
});

 

第二步验证汉字是否乱码

var roi = ee.FeatureCollection("users/wangweihappy0/341521_new");
Map.addLayer(roi);
Map.centerObject(roi, 7);
print(roi);

 

测试结果如下,汉字正常添加,但是将这个文件导出SHP格式,字段依然是“???”

 


结论:目前使用导出“SHP”格式可以方便我们在本地不用在使用譬如QGIS的工具进行转换文件格式的步骤,但是带来的问题就是汉字内容的缺失。所以我的个人建议是如果你导出的矢量文件中不包含汉字内容或者这些汉字内容你不使用,那么你可以使用这个格式导出数据;否则建议依然使用KML或者GeoJson格式导出数据,然后在本地转换。