Arcgis-Issues_02Shp文件修復


前言

在Arcgis中打開Shapefile文件遇到這種問題,返回錯誤:“打開要素類錯誤.幾何形狀數量與表的紀錄數不匹配。”

image-20200313192537578

問題分析

Arcgis提示已很明確,形狀數與表記錄數不一致,即圖形與屬性表的記錄數不一致,情況也就兩種,一是圖形比屬性記錄數多,另一種就是圖形比屬性記錄數少。

出現第一種情況原因很多,可能是意外斷電或者程序崩潰,屬性未得到及時保存,也可能有其他的原因;第二種可能是在編輯過程中只增加了屬性記錄,而未進行圖形的增加。還有就是可能通過其他的軟件對shp附帶的dbf文件進行了編輯,造成記錄的增多或減少,進而造成圖形與屬性記錄不一致。

解決辦法

不管問題出現是什么原因,解決辦法很簡單。那就是屬性記錄少了就補上,多了就刪掉。那么如何得知屬性表記錄是多了還是少了呢,就要用到一個叫 shapechk 的工具,工具執行順序 Shapefile——Build Shx——Check DBF。因為造成問題的原因有很多,程序在簡單問題情況下,會自動處理,而復雜情況下就需要手動處理了。

image-20200313192643817

手動處理步驟

選擇shp文件,點擊Build Shp按鈕,會彈窗提示是否刪除現有索引文件,點擊確定會刪除shp附帶的sbn和sbx文件,在程序中可以看到有614個要素,在這里就拿到了圖形數。

image-20200313192749100

再點擊Check DBF,可以看到dbf記錄數為611,比圖形數少了3個。

image-20200313192816337

也無需其他dbf編輯軟件,將shp附帶的dbf文件改個與shp不同的名字,用Arcgis打開——開始編輯——增加三條記錄——停止編輯——保存。再將名稱改回去,再用Arcgis打開就會發現問題已解決了。

問題擴展

有些愛動腦的小伙伴們不禁又要問了,你這樣修復之后屬性和圖形還是對應的嗎?還真是不一定,這要分幾種情況:

  • dbf記錄多了,這種情況一般修復后沒問題,即使在shp文件中存在幾何為空的要素,shapechk也是會將其認定為一個圖形的,所以不用擔心dbf記錄刪多了,而一般情況下是不會在dbf中間去插入記錄的,所以刪除的多數情況並不會造成圖形與屬性匹配問題。
  • dbf記錄少了,如果由於各種意外情況刪除的是最后的幾條記錄,那么影響的只是最后的圖形丟失屬性,問題不大;如果刪除的是中間的記錄,雖然手工修復將記錄補齊,則會造成從刪除位置開始的屬性錯位問題。如果出現這種問題就要自求多福了,如果你的屬性中存在與圖形有關的屬性,那就可以相互驗證進行調整,如果沒有那就只能提醒你下次小心點了,數據無價,謹慎操作。

修復幾何

對於以上問題修復幾何為什么沒有作用呢,這里就把修復幾何的幫助搬過來,可以看到並沒有針對以上問題的修復,在矢量編輯過程中要注意數據規范,避免出現下面的這些問題。

檢查要素類中每個要素的幾何問題。發現幾何問題后,將應用相關修復,並打印一行描述,以便識別要素並確定遇到的問題。

有效的輸入為 shapefile、個人地理數據庫要素類和文件地理數據庫要素類。

  • 下面是所有幾何問題和此工具將執行的相應修復的列表:
    • Null geometry - 從要素類中刪除記錄。要保留具有空幾何的記錄,請取消選中刪除幾何為空的要素(使用 Python 中有關 KEEP_NULL 參數的 delete_null 選項)。
    • Short segment - 刪除幾何的短線段。
    • Incorrect ring ordering - 更新幾何以獲得正確的環走向。
    • Incorrect segment orientation - 更新幾何以獲得正確的線段方向。
    • Self intersections - 融合面中的重疊區域。
    • Unclosed rings - 通過連接環的端點可將非閉合環閉合。
    • Empty parts - 刪除 null 或空的部分。
    • Duplicate vertex - 刪除其中一個折點。
    • Mismatched attributes - 更新 z 或 m 坐標以實現匹配。
    • Discontinuous parts - 根據現有的不連續部分創建多部分。
    • Empty Z values:將 z 的值設置為 0。
    • Bad envelope - 更新要素的包絡矩形以實現更正。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM