Python ไม่สามารถอ่าน shapefile ได้


11

ฉันกำลังพยายามเปิด shapefile ด้วยสมุดบันทึก Jupyter แต่ฉันไม่สามารถเปิดได้ Shapefile ตั้งอยู่ในโฟลเดอร์เดียวกับสมุดงานของฉันและ 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.

การเปิดด้วย fiona และ geopandas ก็ไม่ทำงานเช่นกัน

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 เชิงพื้นที่ดังนั้นฉันไม่รู้วิธีแก้ปัญหานี้จริงๆ


แทนที่ลบที่มีการขีดเส้นใต้และลองอีกครั้ง .. ชื่อ shapefile ควรจะประกอบด้วยตัวอักษรตัวเลขและขีดล่างเท่านั้น เป็นความคิดที่ดีที่จะเริ่มต้นชื่อด้วยตัวอักษร หากปัญหายังคงมีอยู่รูปร่างไฟล์อาจเสียหายหรือ. SHX หายไป .. คุณมีเพียงไฟล์. HP หรือคุณมีไฟล์ครบชุด (.SHP, .SHX, .DBF, .PRJ ฯลฯ ) )?
Michael Stimson

อาจเป็นไฟล์รูปร่างของคุณเสียหาย ฉันบันทึกหนึ่งไฟล์รูปร่างโดยพลการเป็น1-11-99n.shpและฉันไม่ได้มีปัญหาใด ๆ กับสคริปต์ขนาดเล็กของคุณด้วยหุ่นดีฟิโอน่าหรือ geopandas
xunilk

3
ใช่ปัญหาคือฉันไม่ได้รวมไฟล์ shx, dbf อื่น ๆ ที่ฉันต้องการ ฉันไม่เคยใช้ไฟล์ shp มาก่อนดังนั้นฉันจึงไม่รู้ว่ามันต้องการไฟล์เสริม ชื่อไฟล์ทำงานได้ดีโดยไม่ต้องเปลี่ยน ขอบคุณ!
ลีโอนาร์ชชอว์

1
@ LeonardShaw โปรดลองตอบคำถามของคุณเพื่อให้เราสามารถพิจารณาคำถามนี้ได้
แอรอน

หากต้องการย้ำอีกครั้งมันเป็นการละเมิดข้อกำหนดคุณสมบัติของไฟล์เพื่อให้มีตัวเลขหรือขีดกลางนำหน้าในชื่อไฟล์ เป็นแนวปฏิบัติที่เหมาะสมที่สุดเพื่อหลีกเลี่ยงการตั้งชื่อซึ่งจะทำให้เกิดความล้มเหลวในการประยุกต์ใช้ตัวอ่าน shapefile บางตัว
วินซ์

คำตอบ:


21

มีกับดักสำหรับผู้ใช้งาน Shapefiles เป็นครั้งแรก shapefile จริง (.shp) ไม่มีประโยชน์หากไม่มีไฟล์ร่วม: .dbf, .shx, .prj เป็นต้น

นี่เป็นรายละเอียดทางเทคนิคของไฟล์รูปร่างแต่สูงไปหน่อยบทความ Esriอาจเหมาะกว่าสำหรับคำอธิบายอย่างรวดเร็ว

เป็นสิ่งสำคัญที่ไฟล์ทั้งหมดที่เป็นของ shapefile จะถือว่าเป็นหน่วยเดียว หากมีการแก้ไข shapefile ในทุกขั้นตอนแม้เพียงแค่เปลี่ยนแอตทริบิวต์การเปลี่ยน FID (ตัวระบุคุณสมบัติ) ซึ่งหมายถึงลำดับในไฟล์. DBF นั้นเปลี่ยนไป .. คุณควรแก้ไขแอตทริบิวต์ของ shapefiles และคัดลอกเฉพาะไฟล์. DBF เท่านั้น เขียนทับไฟล์. DBF ที่มีอยู่รูปร่างจะชี้ไปที่แถวที่ไม่ถูกต้อง คัดลอกไฟล์ทั้งหมดเข้าด้วยกันเสมอ

เมื่อส่งไฟล์รูปร่างทางอีเมล, Dropbox, Google Drive ฯลฯ ฉันคิดว่ามันเป็นการสมควรที่จะบีบอัดไฟล์ทั้งหมดลงในไฟล์เก็บถาวรไฟล์เดียว


1
เพื่อให้แม่นยำยิ่งขึ้น: .shp, .dbf และ. shx เป็นค่าต่ำสุดที่แน่นอน (ตามมาตรฐาน) QGIS / OGR จะช่วยให้คุณเปิดไฟล์ที่มี. dbf หายไป แต่คุณจะไม่สามารถลบหรือแก้ไขคุณสมบัติเหล่านั้นได้ อย่างไรก็ตามคุณสามารถใช้ ogr2ogr เพื่อสร้าง dbf-File ที่ขาดหายไป (พร้อมตารางแอตทริบิวต์ว่างเปล่า)
LuWi

2
@LuWi แม้ไฟล์. SHX สามารถสร้างขึ้นมาใหม่ได้มันเป็นดัชนีเชิงพื้นที่มีเครื่องมือและตัวเลือกที่สามารถสร้างดัชนีอวกาศจากรูปร่างที่มีอยู่ จำนวนที่แม่นยำของไฟล์ที่เกี่ยวข้องแตกต่างกันไป แต่ก็มักจะดีที่สุดเพื่อให้ทุกอย่างเข้าด้วยกัน
Michael Stimson

0

หากรายการเดียวที่คุณมีคือไฟล์. shp และคุณสามารถทำได้โดยไม่ต้องใช้ส่วนอื่น ๆ ให้พิจารณาโซลูชันนี้การเปิดและบันทึกจาก OpenJump https://gis.stackexchange.com/a/306228 คุณอาจยังต้องใช้ไฟล์. proj ขึ้นอยู่กับวัตถุประสงค์ของคุณ แต่อาจสามารถใช้ไฟล์ "มาตรฐาน" ที่คัดลอกมาจากโครงการอื่นและเปลี่ยนชื่อให้ตรงกับไฟล์รูปร่างของคุณ หากใช้การฉายภาพเดียวกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.