Я пытаюсь открыть шейп-файл с помощью блокнота Jupyter, но не могу открыть его. Шейп-файл находится в той же папке, что и моя книга, и Python не может его идентифицировать, даже если я использую полный путь.
import shapefile as shp
import matplotlib.pyplot as plt
sf = shp.Reader(r'C:\Users\Public\Documents\1-11-99n.shp')
ShapefileException: Unable to open C:\Users\Public\Documents\1-11-99n.dbf or C:\Users\Public\Documents\1-11-99n.shp.
Открытие его с помощью фионы и геопанды также не работает.
import fiona
shape = fiona.open("1-11-99n.shp")
и
import geopandas as gp
shp = gp.GeoDataFrame.from_file('1-11-99n.shp')
print (shp)
оба заканчивают с
CPLE_OpenFailedError: b'Unable to open 1-11-99n.shx or 1-11-99n.SHX.Try --config SHAPE_RESTORE_SHX true to restore or create it'
Я знаю, что это может быть тривиальной проблемой, но я новичок в использовании шейп-файлов и пространственных библиотек Python, поэтому я действительно не знаю, как обойти эту проблему.
Ответы:
Есть ловушка для новых пользователей шейп-файлов. Фактический шейп-файл (.shp) бесполезен без сопутствующих файлов: .dbf, .shx, .prj и т. Д.
Это изложено в технической спецификации шейп-файла, но это немного продвинуто, статья Esri может быть более подходящей для быстрого объяснения.
Очень важно, чтобы все файлы, принадлежащие шейп-файлу, рассматривались как единое целое. Если шейп-файл редактируется на каком-либо этапе, даже если меняется только атрибут, FID (идентификаторы объектов) изменяются, что означает изменение порядка в файле .DBF. Если вы редактируете атрибуты шейп-файлов и копируете только файл .DBF, перезаписывая существующий файл .DBF, фигуры будут указывать на неправильные строки. Всегда копируйте ВСЕ файлы вместе .
При отправке шейп-файла по электронной почте, в Dropbox, на Google Диске и т. Д. Я считаю целесообразным заархивировать все файлы в один архив, чтобы при распаковке все связанные файлы появлялись вместе.
источник
Если у вас есть только элемент .shp, и вы можете обойтись без других частей, рассмотрите это решение, открывая и сохраняя из OpenJump. /gis//a/306228 Вам все еще может понадобиться файл .proj, в зависимости от вашей цели, но, возможно, вам удастся выбрать «стандартный» файл, скопированный из другого проекта и переименованный в соответствии с вашим шейп-файлом , если это использует ту же проекцию.
источник