ArcGIS中的連接和關聯表


大多數數據庫的設計指導方針都傾向於將數據庫組織成多個表 - 每個表關注一個特定的主題 - 而非一個包含所有必要字段的大型表。設置多個表可以避免數據庫中的信息發生重復,因為只會將信息在一個表中存儲一次。當需要當前表中未包含的信息時,可以將兩個表關聯起來。

例如,您可能會從組織中的其他部門獲取數據,向供應商購買具有商業價值的數據,或者直接從 Internet 下載數據。如果這些信息本身存儲在表文件(如 dBASE、INFO 或地理數據庫表)中,您就可以將其與地理要素相關聯,而后在地圖上顯示這些數據。

ArcGIS 允許您通過一個公用字段(也稱為鍵)將一個表中的記錄與另一個表中的記錄相關聯。可通過多種方式進行此類關聯,其中包括在地圖中臨時連接或關聯表,或者在地理數據庫中創建可以保持更長久關聯的關系類。例如,可將宗地所有權信息表與宗地圖層進行關聯,因為它們共享一個宗地 ID 字段。

當對兩表進行連接時,基於兩個表的公用字段可以將屬性從一個表追加到另一個表上。關聯表也用於定義兩個表間的關系 - 這也基於公用字段 - 但並不把屬性從一個表追加到另一個表;而是在需要時訪問關聯的數據。

連接表的屬性

通常,會根據在這兩個表中均可找到的字段值將數據表連接到圖層。這一字段的名稱可以不同,但數據類型必須相同;例如,必須將數字連接到數字,將字符串連接到字符串,依此類推。可以使用連接數據對話框(通過在 ArcMap 中右鍵單擊某個圖層來訪問)或添加連接工具執行連接操作。

假設您已獲取反映各國家人口百分率變化的數據,並想要根據此信息生成人口增長地圖。只要人口數據存儲在數據庫的表中並且與您當前圖層共享公用字段,您就可以將其連接到地理要素,然后使用其他字段來符號化、標注、查詢或分析該圖層要素。

一對一和多對一的關系

在 ArcMap 中連接表時,將在圖層屬性表和包含要連接的信息的表之間建立一對一或多對一的關系。下例說明了每個國家與其國家人口數據變化之間的一對一的關系。也就是說,一個國家對應着一個人口變化。

根據連接的人口數據符號化要素

下面是一個多對一的關系示例。假設您有一個圖層,按其土地利用類型來對每個面要素進行歸類。圖層屬性表僅存儲土地利用編碼;而獨立表中存儲了每個土地利用類型的全部類型描述。連接這兩個表可建立一個多對一的關系,因為圖層屬性表中的許多記錄都將連接到土地利用描述表中的同一記錄。然后,當為您的地圖生成圖例時,就可以使用更多的描述文本。

多對一的關系示例

一對多和多對多的關系

使用存在一對多或多對多關系的數據時,應使用關聯或關系類來建立數據集之間的關系。但是,也可在這些情況下創建連接。在這種情況下創建連接時,會根據數據的來源,工具和其他特定圖層設置的工作方式而存在差別。如果使用地理數據庫數據創建連接,則返回所有匹配記錄。如果使用 shapefile 或 dBASE 表等非數據庫數據創建連接,則只返回第一條匹配記錄。

這意味着,如果使用地理數據庫數據創建了一對多或多對多連接,則在生成的報表中可以看到多條記錄,每個匹配項對應一條記錄。在符號化連接圖層、標注、識別要素、生成圖表和使用“查找”或“超鏈接”工具時,如果使用連接字段也可以看到多個匹配項。如果使用連接圖層作為地理處理工具的輸入或用在導出操作中,則將使用多條匹配記錄。

警告 警告:

在所有一對多連接的情況下,僅連接第一條匹配記錄並顯示在圖層的屬性表中。

按空間位置連接數據

當地圖上的圖層未共享公共屬性字段時,可以使用空間連接將其連接起來,即根據圖層中要素的位置連接兩個圖層的屬性。

可以使用連接數據對話框(通過在 ArcMap 中右鍵單擊某個圖層來訪問)或空間連接工具執行空間連接操作。

使用空間連接,您可以找到以下任意內容:

  • 距其他要素最近的要素
  • 要素內包括什么
  • 什么與要素相交
  • 落在每個面要素內的點數

按位置連接(或空間連接)將使用空間關聯在所涉及的圖層之間將一個圖層中的字段追加到另一個圖層。空間連接與屬性和關系類連接不同,它不是動態連接,而是需要將結果保存到新的輸出圖層中。

可使用下述三種關聯中的其中一種來執行空間連接:

  • 將每個要素與最近的一個或多個要素匹配:在此關聯中,您可以添加最近要素的屬性或最近要素數字屬性的一個聚合(最小、最大等)。
  • 將每個要素與其所屬的要素匹配:在此情況下,追加當前要素所屬的要素的屬性。例如,這種類似情況包括落在面要素內的點或者完全包含(也就是重疊)在其他線段內的線段。
  • 將每個要素與其相交的一個或多個要素匹配:類似於上面提到的最近要素關聯,您可以追加一個相交要素的屬性或相交要素數值型屬性的一個聚合。

對於每個點、面和線的組合,只有最常用的這些關聯在連接對話框中才可用。但使用 VBA,可以執行基於任何關聯的連接,並可以使用點、線或面要素圖層的任何組合。

關聯表

與連接表不同,關聯表只是在兩個表間定義一個關系。關聯的數據不會像連接表那樣附加到圖層的屬性表。但是,在使用此圖層的屬性時可以訪問到關聯的數據。

例如,如果您選擇一個建築,則可以查找此建築的所有承租人。同樣地,如果您選擇一個承租人,則可以查找承租人所在的建築(或者在多個購物中心的連鎖店的情況下為若干建築 - 多對多關系)。然而,如果您對這些數據上執行連接,ArcMap 將僅查找每個建築的第一個承租人,而忽略其他承租人。

ArcMap 中定義的關聯實質上與地理數據庫中定義的簡單關系類相同,只是前者是與地圖一起保存而不是保存在地理數據庫中。

如果數據存儲在地理數據庫中,並且定義了關系類,您可以直接使用這些關系類而無需在 ArcMap 中建立關聯。當您將參與關系類中的一個圖層添加到地圖中時,該關系類將自動可用。請注意,當數據存儲在一個地理數據庫中時,要定義不同的多對多關系。一般情況下,如果在您的地理數據庫中定義了關系類,則應該使用這些關系類而不是在 ArcMap 中創建新的關系類。

了解創建關系類的方法

地理數據庫中的關系類

關系類中存儲了地理數據庫中要素和記錄之間的關聯信息,這有助於確保數據的完整性。

了解有關使用關系類的優勢的詳細信息

連接與關聯

以下為針對數據是選擇連接還是關聯的一般指導方針:

  • 當兩個表中的數據存在一對一或多對一的關系時,則可以連接這兩個表。
  • 當兩個表中的數據存在一對多或多對多的關系時,則可以關聯這兩個表。

了解有關在關系類、連接和關聯之間進行選擇的詳細信息

保存連接與關聯

當您保存包含連接和關聯的地圖時,ArcMap 將保存兩個屬性表之間的連接方式定義,而不保存所連接的數據本身。下次打開地圖時,不論是連接還是關聯,ArcMap 都將通過從數據庫中讀取這兩個表來重新建立二者之間的關系。這樣,自上次查看地圖上的關系后,在源表中所進行的任何更改都將自動包括並反映在地圖上。

連接可存儲在 ArcMap 文檔或圖層文件中。如果您打算在某個時候移動數據,則應該使用相對路徑保存您的 ArcMap 文檔。如果數據發生了移動,在打開文檔后您可以修復表和圖層,但除非目標表和連接表位於同一個目錄或工作空間中,否則無法修復連接。如果使用相對路徑保存文檔,只要相對於數據移動的位置相應地移動文檔,就可自動恢復表和圖層的連接。

通過導出包含連接數據的圖層,就可輕松制作該圖層的永久磁盤副本。要導出圖層,在“內容列表”中右鍵單擊圖層,將鼠標指向數據,然后單擊導出數據。這樣可以創建一個具有所有屬性(包含連接字段)的新要素類。

結合使用連接、關聯和關系類

如果既要對數據執行連接又要執行關聯,則連接和關聯的創建順序將非常重要。如果您的圖層或表包含關聯,則當該圖層或表與數據建立連接時,關聯將被移除。如果在連接的圖層或表上執行關聯操作,則當移除連接時關聯也會被移除。作為一般的經驗規則,最好先創建連接然后再添加關聯。

假設要將 tableA 連接到 layerC 並將 tableB 關聯到 layerC,有三種可能的操作方法,其中兩種可行。下面分別介紹每種情況:

  • 將 tableA 連接到 layerC,然后將 tableB 關聯到 layerC:該情況可行。此操作以與 tableB 建立關聯的連接圖層結束。
  • 將 layerC 關聯到 tableB,然后將 tableA 連接到 layerC:該情況也可行。由於關聯是雙向的,因此無論關聯隸屬於哪個表,所涉及的這兩個表都可以使用此關聯。在這種情況下,tableB 擁有關聯,因此當 tableA 連接到 layerC 時,關聯不會被移除。
  • 將 tableB 關聯到 layerC,然后將 tableA 連接到 layerC:該情況不可行。這種情況與上述情況的不同在於 layerC 擁有關聯。因此,當 tableA 連接到 layerC 時,關聯將被移除。

連接表所擁有的關聯將不會受到連接的影響。但是,目標表或圖層無法訪問這些關聯。

執行連接或取消連接從不會移除關系類。無論數據是包含在連接還是關聯中,關系類都可以正常使用。


免責聲明!

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



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