#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, чтобы лучше ознакомиться с концепцией.