Shapely не распознает геометрический тип GeoJSON

#python #geojson #shapefile #geopandas #shapely

#python #geojson #шейп-файл #геопанды #shapely

Вопрос:

Я новичок в shapely, и я пытаюсь прочитать шейп-файл, сохранить его как GeoJSON, а затем использовать shape(), чтобы увидеть тип геометрии. согласно документу, shape():

shapely.geometry.shape(контекст) Возвращает новую независимую геометрию с координатами, скопированными из контекста.

Сохранение шейп-файла как GeoJSON, похоже, работает, но по какой-то причине, когда я пытаюсь использовать shape () в GeoJSON, я получаю ошибку:

Ошибка значения: неизвестный тип геометрии: featurecollection

Это мой скрипт:

 import geopandas
import numpy as np
from shapely.geometry import shape, Polygon, MultiPolygon, MultiLineString


#read shapefile:
myshpfile = geopandas.read_file('shape/myshape.shp')
myshpfile.to_file('myshape.geojson', driver='GeoJSON')


#read as GeoJson and use shape()
INPUT_FILE = 'shape/myshape.geojson'

geo_json = geopandas.read_file(INPUT_FILE)

#try to use shape()
geom = shape(geo_json)

>>>ValueError: Unknown geometry type: featurecollection
 

Я также пытался указать геометрию с помощью нарезки, но кажется невозможным.

 #try to use shape()
geom = shape(geo_json.iloc[:,9])

>>>TypeError: '(slice(None, None, None), 9)' is an invalid key
 

Прямо сейчас я не могу пройти этот уровень, но моя конечная цель — получить тип геометрии при печати geom.geom_type (теперь я получаю ошибку раньше).

Редактировать: когда я проверяю тип сохраненного GeoJSON, я получаю «geopandas.geodataframe.GeoDataFrame»

Комментарии:

1. «GeometryCollection» — это правильный термин для обозначения возможных геометрий.

Ответ №1:

Ваш geo_json объект geopandas.GeoDataFrame имеет столбец с геометрическими формами. Нет необходимости вызывать shape . Если вы хотите проверить geom_type, есть простой способ сделать это напрямую.

 import geopandas
import numpy as np
from shapely.geometry import shape, Polygon, MultiPolygon, MultiLineString


#read shapefile:
myshpfile = geopandas.read_file('shape/myshape.shp')
myshpfile.to_file('myshape.geojson', driver='GeoJSON')


#read as GeoJson and use shape()
INPUT_FILE = 'shape/myshape.geojson'

geo_json = geopandas.read_file(INPUT_FILE)

geo_json.geom_type
 

Это даст вам geom_type для каждой геометрии в dataframe. Возможно, проверьте документацию geopandas, чтобы лучше ознакомиться с концепцией.