错误32:使用getMapId()时管道破裂



我正在阅读一个包含数千栋建筑足迹的大型geojson文件。此文件如下所示:

{
"type":"FeatureCollection",
"features":
[
{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-97.208203,50.90649],[-97.208203,50.906568],[-97.208367,50.906568],[-97.208367,50.90649],[-97.208203,50.90649]]]},"properties":{}},
{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-97.138545,50.91915],[-97.1387,50.919146],[-97.138692,50.919018],[-97.138537,50.919022],[-97.138545,50.91915]]]},"properties":{}},
{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-97.106312,50.949822],[-97.106178,50.949845],[-97.106255,50.950025],[-97.106389,50.950002],[-97.106312,50.949822]]]},"properties":{}},
.
.
.
]
}

我正在读取此文件,并将其加载到具有以下的ee.FeatureCollection()

import json
# Open file to parse
with open('/content/drive/My Drive/Earthengine/buildings.geojson') as f:
data = json.load(f)
# Parse each of the polygons to features
polygons = []
for feat in data['features']:
polygons.append(ee.Feature(feat))
# Create the feature collection
buildings = ee.FeatureCollection(polygons)

但当我试图用将这些建筑展示成三叶草时

polyImage = ee.Image(0).byte().paint(buildings, 1)
polyImage = polyImage.updateMask(polyImage)
mapid = polyImage.getMapId()
map = folium.Map(location=[38., -100.], zoom_start=5)
folium.TileLayer(
tiles=EE_TILES.format(**mapid),
attr='Google Earth Engine',
overlay=True,
name='training polygons',
).add_to(map)
map.add_child(folium.LayerControl())
map

我得到以下错误:

---------------------------------------------------------------------------
BrokenPipeError                           Traceback (most recent call last)
<ipython-input-7-3c769c73ff13> in <module>()
2 polyImage = polyImage.updateMask(polyImage)
3 
----> 4 mapid = polyImage.getMapId()
5 map = folium.Map(location=[38., -100.], zoom_start=5)
6 folium.TileLayer(
15 frames
/usr/lib/python3.6/ssl.py in write(self, data)
640         The 'data' argument must support the buffer interface.
641         """
--> 642         return self._sslobj.write(data)
643 
644     def getpeercert(self, binary_form=False):
BrokenPipeError: [Errno 32] Broken pipe

会因为文件太大而发生这种情况吗?有办法解决这个问题吗?

我很确定这是因为地球引擎仍在计算,并且在没有收到响应后,客户端的连接被关闭。有关"断管"的详细信息,请参阅此答案。

假设你有很多多边形,地球引擎必须构建多边形,然后光栅化它们,这可能不需要大量计算,但可能需要一些时间,因此管道破裂。解决此问题的一种方法是将建筑物多边形保存为资源,然后直接将资源加载到地图中。

您可以使用以下语法导出featureCollection:

task = ee.batch.Export.table.toAsset(
collection=buildings,
description='my-buildings', 
assetId='users/myusername/buildings'
)
task.start()

最新更新