Пустой многоугольник, созданный с помощью OpenTripPlanner, генерирует ошибку с инструкцией .is_empty Shapely

У меня есть многоугольник изохрон, созданный с помощью OpenTripPlanner:

{"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[]},"properties":{"time":-47},"id":"fid--576b228b_15b66d32d71_-7cbd"}]}

Этот многоугольник транслируется как объект Shapely со следующей инструкцией:

isochrone = shapely.geometry.asShape(isochroneJSON['features'][0]['geometry'])

Вот как это выглядит в Spyder:

{u'type': u'FeatureCollection', u'features': [{u'geometry': {u'type': u'MultiPolygon', u'coordinates': []}, u'type': u'Feature', u'properties': {u'time': -47}, u'id': u'fid--576b228b_15b66d32d71_-7a54'}]}

Мне он действительно кажется пустым многоугольником. Моя проблема в том, что я хочу исключить его из остальной части моего лечения и проверить, является ли он действительным и/или пустым. И следующая инструкция:

if not isochrone.is_empty:

Генерирует ошибку с инструкцией shapely .is_empty:

return (self._geom is None) or bool(self.impl['is_empty'](self))
self.__geom__, n = self.factory(self.context)

И я полностью потерян, потому что единственный похожий вопрос, кажется, не имеет моей собственной проблемы.


person the world is not flat    schedule 14.04.2017    source источник


Ответы (1)


Пустая геометрия немного сложна, в вашем конкретном случае (MultiPolygons) вы можете частично исправить это, используя shape вместо asShape:

import json
from shapely.geometry import MultiPolygon, shape, mapping, asShape

Q = shape({'type': 'MultiPolygon', 'coordinates': []})
print(Q.is_empty)
print(Q.geom_type)
print(json.dumps(mapping(Q)))

это выводит (geom_type в случае пустого мультиполигона действительно не равно MultiPolygon):

True
GeometryCollection
{"type": "MultiPolygon", "coordinates": []}
person ewcz    schedule 18.04.2017
comment
В моем случае просто использование «shape» вместо «asShape» устранило ошибку. Но не спрашивайте меня почему!! - person the world is not flat; 18.04.2017