梅 新,王文薈,鐘少波,宋敦江,梅白帆
(1.湖北大學(xué) 資源環(huán)境學(xué)院,武漢 430062;2.北京城市系統(tǒng)工程研究中心,北京 100102;3.中國科學(xué)院科技戰(zhàn)略咨詢研究院,北京 100190;4.江蘇電力信息科技有限公司,南京 210000)
隨著工業(yè)化和信息化的迅速發(fā)展,人類社會運轉(zhuǎn)速度越來越快,如物質(zhì)、能量、信息等各種有形或無形的元素都處于不斷加速移動過程中,而這些動態(tài)數(shù)據(jù)的集合稱為空間流量數(shù)據(jù)[1]。隨著傳感器和GPS 技術(shù)的快速發(fā)展,時空數(shù)據(jù)的獲取變得不再困難,面對海量的空間流量數(shù)據(jù),如何提取有效信息和建立信息間的聯(lián)系引起了眾多學(xué)者的關(guān)注[2]。
線空間流量數(shù)據(jù)是指以線數(shù)據(jù)形式保存的含有流動屬性的一種地理空間數(shù)據(jù),利用線空間流量數(shù)據(jù)可以有效表達從出發(fā)地至目的地人流、物流和信息流等信息。如一列貨車的行駛路徑就是線數(shù)據(jù),其載重量是它的屬性。很多空間流量數(shù)據(jù)即線空間數(shù)據(jù),它們來源于最短路徑分析方法,比如知道兩個中轉(zhuǎn)站點的位置,可以通過最短路徑分析方法計算得到這兩點的最短路徑,如果一輛貨車要從其中一個站點轉(zhuǎn)運貨物到另外一個站點,那么一次運送貨物產(chǎn)生的數(shù)據(jù)就是最短路徑線空間流量數(shù)據(jù)。對于線空間流量數(shù)據(jù),在大范圍區(qū)域間,文獻[3]通過對數(shù)線性模型方法,分析1990 年和2000 年美國和墨西哥的人口普查數(shù)據(jù),探討其人口遷移規(guī)律。文獻[4]對覆蓋絕大多數(shù)發(fā)達國家和發(fā)展中國家的約360 個港口之間的依存關(guān)系進行定量分析,以各港口的進出口貿(mào)易流量數(shù)據(jù)為依據(jù),探索全球港口類型的分布規(guī)律以及交通網(wǎng)絡(luò)和地方發(fā)展的內(nèi)在聯(lián)系。文獻[5]基于鐵路交通網(wǎng)絡(luò)數(shù)據(jù),以2003 年和2008 年省會城市鐵路交通網(wǎng)絡(luò)的最短旅行時間為度量指標(biāo),利用改正引力模型分析測算各省區(qū)域間空間可達性、空間格局、經(jīng)濟聯(lián)系強度及其空間指向。
在研究大范圍區(qū)域間關(guān)系時,一般是以區(qū)域間少數(shù)城市作為研究對象[6],或者間接統(tǒng)計分析點與點之間的關(guān)系,不直接通過線空間流量數(shù)據(jù)[4,7],究其原因主要是面對海量線空間流量數(shù)據(jù)時難以快速處理分析,將網(wǎng)絡(luò)關(guān)系具體至每一條線路。而在小范圍區(qū)域內(nèi),文獻[8]采用基于網(wǎng)格索引的方法,利用里雅斯特市的道路路網(wǎng),評估城市地區(qū)的網(wǎng)絡(luò)密度并分析檢索區(qū)域中心。文獻[9]使用開放街道地圖提供的網(wǎng)絡(luò)結(jié)構(gòu)數(shù)據(jù),通過將交通網(wǎng)絡(luò)與社區(qū)劃分相聯(lián)系的方法,利用ArcGIS 軟件提供的“Line Density 線密度”工具,揭示吉隆坡市的路網(wǎng)發(fā)展。文獻[10]根據(jù)出租車軌跡大數(shù)據(jù)中提取的短時非運營行為,采用線要素核密度分析和Ripley’s K 函數(shù)兩種方法,研究出租車短時非運營行為的時空特征及其與加氣站間的空間相關(guān)性。而上述研究中的方法,均為對線空間流量數(shù)據(jù)以柵格形式輸出每個像元鄰域內(nèi)的線狀要素的密度,并能指定權(quán)重值對線要素進行統(tǒng)計,有效地分析線數(shù)據(jù)的空間聚集效應(yīng)和時空分布關(guān)系。然而,相較于柵格數(shù)據(jù),矢量數(shù)據(jù)在表示空間位置關(guān)系和空間網(wǎng)絡(luò)的相互作用關(guān)系上更為精確,并且易于進行拓撲分析和網(wǎng)絡(luò)分析,更適合定量描述,為后續(xù)其他空間分析提供數(shù)據(jù)基礎(chǔ)[11]。
針對海量數(shù)據(jù)情況下數(shù)據(jù)處理效率較低和矢量數(shù)據(jù)輸出存在的問題,本文提出一種基于空間操作的線要素聚合方法。由于線要素是由一個或多個相連或不相連的路徑組成的有序集合,因此可以直接對線要素拆分后進行聚合操作。線數(shù)據(jù)均由節(jié)點按一定順序連接形成,可以通過對節(jié)點進行聚合操作,再重新生成新的線數(shù)據(jù)。該方法分別基于ArcGIS和PostGIS 兩個平臺實現(xiàn),并以北京到2 845 個縣市(區(qū))的交通路網(wǎng)數(shù)據(jù)為實例進行驗證。
線空間流量數(shù)據(jù)包含空間位置信息、屬性特征信息和時域特征信息,本文暫不討論時域特征信息。線空間聚合方法是將復(fù)雜多樣的線空間流量數(shù)據(jù)細化,更直觀地反映事物間的聯(lián)系,同時壓縮減少冗余數(shù)據(jù)[12]。本文的最短路徑線空間流量數(shù)據(jù)是以原線空間流量數(shù)據(jù)的相交點或已有端點作為節(jié)點,重新連接相鄰兩個節(jié)點形成的線數(shù)據(jù),且包含該線數(shù)據(jù)空間位置應(yīng)保留的屬性特征信息。經(jīng)過線空間聚合方法生成的最短路徑線空間流量數(shù)據(jù)是一種空間上無重疊的線數(shù)據(jù),即兩個直接相連的節(jié)點之間只有一條線,這條線的屬性是所有落在這條線上的流量值的和。因此,線聚合后的線空間數(shù)據(jù)可以更精準地表達區(qū)域間或區(qū)域內(nèi)事物的屬性特征關(guān)系以及拓撲網(wǎng)絡(luò)關(guān)系。
在線要素分析研究中,將整體線數(shù)據(jù)拆分為單獨的線要素甚至多組折線段的研究有很多,文獻[13]利用歷史和現(xiàn)實的交通流量基礎(chǔ)數(shù)據(jù),通過瓶頸識別算法、聚類相似特征數(shù)據(jù)和在線搜索算法預(yù)測各路段道路擁堵時間。文獻[14]在為廣義框架引入稀疏性概念的條件下,提出一種采用線段作為聚類代表,聚類數(shù)據(jù)點的距離作為代表線段的距離,分析處理二維空間中線性形狀的聚類算法。文獻[15]通過對每條線要素分別計算化簡閾值范圍,逐段化簡,最后根據(jù)最高匹配相似度判斷結(jié)果,實現(xiàn)矢量線要素匹配。本文基于這一思想,提出基于ArcGIS 平臺下的線空間聚合方法。
基于ArcGIS 的線空間聚合方法有拆分線數(shù)據(jù)、按位置匹配線數(shù)據(jù)和融合線數(shù)據(jù)3 個步驟,從而完成線空間聚合。圖1 所示為基于ArcGIS 的線要素空間聚合方法流程。本文基于ArcGIS 提供的ArcPy 站點包實現(xiàn)線空間聚合方法。
圖1 基于ArcGIS 的線要素空間聚合流程Fig.1 Procedure of polyline spatial aggregation based on ArcGIS
基于ArcGIS 的線空間聚合方法具體如下:
1)通過屬性“流量權(quán)重”表示線空間流量數(shù)據(jù)所包含的需要參與統(tǒng)計計算的屬性特征信息。拆分線數(shù)據(jù)過程是指將線空間流量數(shù)據(jù)通過求取線要素與線要素的相交點,并在相交點處斷開的過程,目的是將每一條線空間流量數(shù)據(jù)拆分成為以相鄰節(jié)點為端點的弧段,拆分后的子弧段均繼承父線的“流量權(quán)重”屬性。
利用ArcGIS 中已有的“Feature To Line 要素轉(zhuǎn)線”工具完成拆分線數(shù)據(jù)?;贏rcGIS 方法的線空間流量數(shù)據(jù)如圖2 所示。以圖2(a)為例,L1和L2是兩條線空間流量數(shù)據(jù),A、B、C、D是4 個節(jié)點。L1是起點為點A,經(jīng)過點B,終點為點C的線要素,其屬性“Id”為1,屬性“流量權(quán)重”為20。L2是起點為點A,經(jīng)過點B,終點為點D的線要素,其屬性“Id”為2,屬性“流量權(quán)重”為10。表1 是L1和L2集合列表。
圖2 基于ArcGIS 方法的線空間流量數(shù)據(jù)示例Fig.2 Example of polyline spatial flow data based on ArcGIS method
表1 線要素空間流量數(shù)據(jù)集合Table 1 Aggregate of polyline spatial flow data
對L1、L2進行拆分線要素步驟,得到4 條弧段,表2 是其拆分后的集合列表。根據(jù)拆分線要素的規(guī)則,L1拆分后得到兩條弧段L1,1和L1,2,L1,1是起點為A,終點為B,屬性“流量權(quán)重”為20 的弧段,L1,2是起點為B,終點為C,屬性“流量權(quán)重”為20 的弧段,同理可得L2拆分后的弧段,如圖2(b)所示。
表2 線要素空間流量數(shù)據(jù)拆分后集合Table 2 Aggregate of polyline spatial flow data split
2)按位置匹配線數(shù)據(jù)。按照弧段的空間位置進行匹配,將完全重合的弧段分為一組,并為之添加唯一屬性。由于直接判斷線與線的位置關(guān)系較為復(fù)雜,因此采用弧段上某一點的坐標(biāo)輔助判斷弧段與弧段的重合關(guān)系,ArcGIS 軟件提供工具可以得到弧段的起點、終點和弧段中點即將弧段分為長度相等的兩個部分的點(不一定是折點)。此處,本文選用弧段中點輔助判斷弧段間的拓撲關(guān)系。因為線狀目標(biāo)之間的拓撲關(guān)系可以簡單分為相離、相鄰、相交和重合[16],如圖3 所示,此時所有線要素均已拆分,拆分后的弧段間不存在相交的拓撲關(guān)系,所以不完全重合的線段的中點坐標(biāo)均是唯一坐標(biāo),同時若兩條弧段中點坐標(biāo)相同,則兩條弧段完全重合。
圖3 線狀目標(biāo)之間的拓撲關(guān)系Fig.3 Topological relationships between linear targets
利 用ArcGIS 中“Feature Vertices To Points 要素折點轉(zhuǎn)點”、“Add XY Coordinates 添加XY 坐標(biāo)”和“Spatial Join 聯(lián)合”工具,為所有弧段添加屬性“中點坐標(biāo)”。
3)將屬性“中點坐標(biāo)”相同的弧段融合,即融合位置重疊的弧段。利用ArcGIS 中“Dissolve 融合”工具,并通過工具提供的屬性統(tǒng)計功能,重新計算融合后弧段的屬性,如SUM 方法可為新生成弧段添加指定字段的合計值。由于L1,1和L2,1兩條弧段位置完全重合,因此將其融合,并通過SUM 方法,累加屬性“流量權(quán)重”,為融合后弧段重新賦值,而L1,2和L2,2為單一弧段,所以無變化。L1、L2完成線空間聚合后形成3 條最短路徑的線空間流量數(shù)據(jù),如圖2(c)所示,分別是線M1,起點為A,終點為B,屬性“流量權(quán)重”為30 的線數(shù)據(jù),線M2起點為B,終點為C,屬性“流量權(quán)重”為20 的線數(shù)據(jù),線M3起點為B,終點為D,屬性“流量權(quán)重”為10的線數(shù)據(jù),表3 所示為最短路徑線空間流量數(shù)據(jù)的集合。
表3 最短路徑線要素空間流量數(shù)據(jù)的集合Table 3 Aggregate of shortest path of polyline spatial flow data
線要素分析與點要素分析關(guān)系密切,文獻[17]采用k-鏈最短路徑的思想,利用平行點逼近的方法擬合折線。文獻[18]利用基于位置的社交網(wǎng)絡(luò)和出租車GPS 數(shù)字足跡組合,實現(xiàn)個性化、交互式和流量感知的旅游路線規(guī)劃。文獻[19]利用GPS 軌跡數(shù)據(jù),通過一個合適的圓圈確定單個道路交叉口的邊界特征點,重建道路交叉路口,同時保持道路網(wǎng)絡(luò)的拓撲關(guān)系,生成高質(zhì)量詳細的道路路網(wǎng)數(shù)據(jù)?;谏鲜鏊悸?,本文選擇將線空間流量數(shù)據(jù)離散為節(jié)點,對節(jié)點進行聚合分析,再由完成聚合分析后的節(jié)點重新連接生成最短路徑的線空間流量數(shù)據(jù),并且在PostGIS 平臺的支持下實現(xiàn)該方法?;赑ostGIS 的線空間聚合方法流程如圖4 所示。
圖4 基于PostGIS 的線要素空間聚合流程Fig.4 Procedure of polyline spatial aggregation based on PostGIS
1.2.1 PostGIS 空間數(shù)據(jù)庫引擎
PostGIS 空間數(shù)據(jù)庫引擎是在關(guān)系型數(shù)據(jù)庫PostgreSQL 上的空間數(shù)據(jù)存儲和各種數(shù)據(jù)操作的一個插件。PostGIS 通過SQL 語句進行數(shù)據(jù)操作,空間對象以表的形式儲存,每個空間幾何實體對應(yīng)數(shù)據(jù)表中的一條記錄,其中記錄了坐標(biāo)信息和屬性信息,并支持多種開源投影庫。PostGIS 提供大量空間函數(shù),下面只列出本文所使用的主要函數(shù):
1)ST_NPoints(geometry geom)。返回geometry的頂點總數(shù),對所有的geometry 類型都支持。
2)generate_series(start,stop,step)。按照規(guī)則產(chǎn)生一系列的填充數(shù)據(jù),生成一個數(shù)值序列,從start到stop,步進為step(若無step,則默認為1)。
3)ST_PointN(geometry a_linestring,integern)。返回單個linestring 的第n個point 對象,如果幾個對象中不包括LineString 對象,則返回NULL。
4)ST_Equals(geometry,geometry)。判斷2 個幾何對象是否相等,如果相等則返回TRUE。
5)ST_MakeLine(geometry[]geoms_array)。利用一個數(shù)組的point 或line 生成一個LineString 對象。
1.2.2 線要素離散化節(jié)點
在OGC 的Geometry 類體系中有如下聚合關(guān)系:Point(2+)->LineString,即2 個及以上的點要素可以聚合成為線要素,反之,線要素亦可離散為點要素,將所有線段視為有序或無序的節(jié)點集合[20-21],相較于直接對線要素進行處理,點要素的聚合更為簡單,通過搜索一定范圍內(nèi)的點即可完成點要素聚合。設(shè)線要素的節(jié)點序列形式為:
其中,Li由節(jié)點Pi,1,Pi,2,…,Pi,n按順序連接而成,i和n均為自然數(shù)。
創(chuàng)建一個空間對象數(shù)據(jù)表child_point 用于儲存離散后的節(jié)點,該表中主要有屬性“Id”、屬性“weight”、屬性“ptindex”和屬性“geom”。其中,屬性“Id”和“weight”分別繼承父線的屬性“Id”和“流量權(quán)重”,而屬性“ptindex”為節(jié)點在原父線中的頂點序列號,屬性“geom”幾何對象為點空間數(shù)據(jù)。
利用PostGIS 中提供ST_NPoints(geometry geom)函數(shù)獲取線要素的頂點總數(shù),generate_series(start,stop,step)函數(shù)生成所有頂點的序列號,ST_PointN(geometry a_linestring,integern)函數(shù)獲得第n個節(jié)點,將所有節(jié)點插入到創(chuàng)建的空間對象數(shù)據(jù)表test_pt 中。本文示例中L1和L2如圖5(a)所示,與1.1 節(jié)中示例一致,其集合列表見表1,此處不再贅述。L1將離散為P1,1,P1,2,…,P1,5,它們繼承父線L1的屬性“Id”和“流量權(quán)重”,分別為1 和20。而L2將離散為P2,1,P2,2,…,P2,5,它們繼承父線L2的屬性“Id”和“流量權(quán)重”,分別為2 和10,表4 是離散后節(jié)點的集合列表。如圖5(b)所示,點P1,1和P2,1完全重合,點P1,2和P2,2完全重合,點P1,3和P2,3完全重合。
圖5 基于PostGIS 的線要素空間流量數(shù)據(jù)示例Fig.5 Example of polyline spatial flow data based on PostGIS
表4 節(jié)點集合Table 4 Aggregate of nodes
1.2.3 節(jié)點空間索引的創(chuàng)建
地理空間索引是指依據(jù)地理要素的空間位置、形狀或地理對象之間的某種空間關(guān)系,按一定的順序排列的一種數(shù)據(jù)結(jié)構(gòu),目的是為了快速定位地理對象,提高空間操作的速度和效率。
Gist 索引是一種平衡的樹狀索引,它易于擴展數(shù)據(jù)類型和查詢類型,且B-Tree、R-Tree 以及其他索引形式也能作為Gist 的擴展實現(xiàn)。本文選用PostgreSQL 數(shù)據(jù)庫中默認支持的Gist 索引來提高線數(shù)據(jù)空間聚合的速度,由于線要素離散化后的點數(shù)據(jù)的屬性進行更新操作頻繁,因此這里為空間對象數(shù)據(jù)表child_point 中的點數(shù)據(jù)創(chuàng)建Gist 空間索引。
1.2.4 節(jié)點聚合
點數(shù)據(jù)的空間聚合一般是通過一定規(guī)則,搜索范圍內(nèi)所有的點進行聚合,用少量的點表達多數(shù)點的方法。該節(jié)點的聚合是針對離散后的節(jié)點中屬性“weight”的聚合。
父線是由節(jié)點按順序連接組成,所以父線中位置完全重合的弧段,離散后的節(jié)點位置也完全重合。創(chuàng)建一個空間對象數(shù)據(jù)表temporary_point,輔助更新節(jié)點屬性“流量權(quán)重”,該數(shù)據(jù)表僅包含2個屬性:“weight”和“geom(點要素幾何對象)”。通過PostGIS 中提供的空間數(shù)據(jù)查詢和分析功能,將child_point 中位置完全重合的節(jié)點數(shù)據(jù)分為一組并統(tǒng)計計算屬性值,如SUM方法可以用于累加屬性信息,實現(xiàn)屬性“流量權(quán)重”的聚合,將節(jié)點數(shù)據(jù)插入空間對象數(shù)據(jù)表temporary_point中。此時,保證該表中任意位置節(jié)點均為唯一節(jié)點,且有與之相對應(yīng)的屬性“流量權(quán)重”,即數(shù)據(jù)表child_point中該位置所有節(jié)點的屬性“流量權(quán)重”之和。如圖5(b)所示,P1,1和P2,1節(jié)點位置處,在空間對象數(shù)據(jù)表temporary_point 存在有一點數(shù)據(jù)與這2 個節(jié)點位置重合,其屬性“流量權(quán)重”為它們的該屬性之和,即P1,1.weight與P2,1.weight 的和等于30。
此時,利用數(shù)據(jù)表child_point和數(shù)據(jù)表temporary_point 中節(jié)點位置重合的特征,更新數(shù)據(jù)表child_point 中節(jié)點屬性“weight”,目的是在實現(xiàn)點的聚合過程中,不破壞原節(jié)點的屬性“Id”和屬性“ptindex”。更新屬性“weight”后,位置重合的節(jié)點該屬性也是一致的,如表5 所示。表5 是聚合后的節(jié)點集合列表,可以得出更新后的節(jié)點P1,1,其屬性“Id”為1,屬性“ptindex”為1,屬性“weight”為30,同理節(jié)點P2,1,其屬性“Id”為2,屬性“ptindex”為1,屬性“weight”為30,以此類推。而原節(jié)點位置僅有唯一節(jié)點時,不發(fā)生變化。
表5 完成節(jié)點聚合后節(jié)點的集合列表Table 5 List set of completed nodes aggregation
1.2.5 節(jié)點重新連接生成的線要素
完成節(jié)點的聚合后,需要將節(jié)點按照規(guī)則重新連接成為折線,并賦值屬性“流量權(quán)重”,具體流程如圖6所示。
圖6 節(jié)點重新連接生成線要素流程Fig.6 Procedure of reconnecting nodes to generate polylines features
首先創(chuàng)建一個空間對象數(shù)據(jù)表connection_line用于儲存節(jié)點按規(guī)則連接后生成的新線要素。該表包含屬性“Id”、屬性“weight”和屬性“geom”。其中屬性“geom”幾何對象為線空間數(shù)據(jù)。
然后按照如下步驟將節(jié)點連接生成新的線要素:
1)創(chuàng)建一個用于存儲點數(shù)據(jù)的數(shù)組array[]。按照節(jié)點數(shù)據(jù)的屬性“Id”排序,再根據(jù)節(jié)點的序列號即屬性“ptindex”進行遍歷,將第1 條記錄賦值給beforrec,存入array[]中,更新為array[beforrec]。
2)將相鄰(序列號相連)且屬性“weight”相等的節(jié)點依次存入數(shù)組array[]中,直至屬性“Id”或?qū)傩浴皐eight”發(fā)生改變。有以下3 種情況:
(1)當(dāng)前記錄rec 的屬性“Id”與前一條記錄beforrec 的屬性“Id”不一致。如圖7(a)所示,當(dāng)前記錄為點C,前一條記錄為點B,設(shè)此時數(shù)組為array[A,B],利用ST_MakeLine(geometry[]geoms_array)函數(shù)將array[A,B]轉(zhuǎn)為折線AB,插入儲存線要素的空間對象數(shù)據(jù)表中,屬性“weight”為節(jié)點B的屬性“weight”。刷新array[],將當(dāng)前記錄C存入,成為下一條折線的起點,更新為array[C]。虛線部分是輔助標(biāo)識下一條折線的軌跡,不再贅述。
(2)當(dāng)前記錄rec 與前一條記錄beforrec 的屬性“Id”一致,但屬性“weight”小于前一條記錄。如圖7(b)所示,當(dāng)前記錄為點C,前一條記錄為點B,設(shè)此時數(shù)組為array[A,B],利用ST_MakeLine(geometry[]geoms_array)函數(shù)將array[A,B]轉(zhuǎn)為折線AB,插入儲存線要素的空間對象數(shù)據(jù)表中,屬性“weight”為節(jié)點B的屬性“weight”。刷新array[],將前一條記錄B和當(dāng)前記錄C順序存入,成為下一條折線的初始點,更新為array[B,C]。
(3)當(dāng)前記錄rec與前一條記錄beforrec的屬性“Id”一致,但屬性“weight”大于前一條記錄。如圖7(c)所示,當(dāng)前記錄為點C,前一條記錄為點B,設(shè)此時數(shù)組為array[A,B],將當(dāng)前記錄C存入數(shù)組中,數(shù)組更新為array[A,B,C],利用ST_MakeLine(geometry[]geoms_array)函數(shù)將array[A,B,C]轉(zhuǎn)為折線ABC,插入儲存線要素的空間對象數(shù)據(jù)表中,屬性“weight”為節(jié)點B的屬性“weight”。刷新array[],將當(dāng)前記錄C存入,成為下一條折線的起點,更新為array[C]。
圖7 節(jié)點連接為線要素示意圖Fig.7 Schematic diagram of nodes connected to polylines
3)遍歷所有節(jié)點后,利用ST_MakeLine(geometry[]geoms_array)函數(shù)將最后一次刷新的數(shù)組中的點按順序連接成折線,插入儲存線要素的空間對象數(shù)據(jù)表中,屬性“weight”為前一條記錄的屬性“weight”。
至此,所有節(jié)點均重新連接為折線。在本文示例中,節(jié)點連接成為新的線要素集合如表6 所示,共有4 條線要素,分別為折線P1,1P1,2P1,3、P2,1P2,2P2,3、P1,3P1,4P1,5和P2,3P2,4P2,5,對應(yīng)屬性“weight”見表6。
表6 節(jié)點連接為線要素后的集合Table 6 Aggregate of nodes connected to polylines
1.2.6 線空間聚合
由實現(xiàn)節(jié)點重新連接為折線的集合列表可知其中存在位置重復(fù)的線,因此通過空間數(shù)據(jù)查詢和插入功能,將位置重復(fù)的線去除,獲取唯一折線。
在點歸并為線的過程中,會出現(xiàn)一種情況,當(dāng)array[]中有且僅有前一條記錄beforrec,而此時當(dāng)前記錄rec與前一條記錄beforrec的屬性“Id”一致,但屬性“weight”小于前一條記錄,函數(shù)ST_MakeLine(geometry[]geoms_array)依舊會執(zhí)行,但由于數(shù)組中僅有一個點,從而形成一條圖形為空的線,因此將其刪除。
如圖5(c)所示,采用基于PostGIS 的線空間聚合方法后,共獲得3 條最短路徑的線空間流量數(shù)據(jù),分別為:起點為N1,經(jīng)過N2,終點為N3,屬性“流量權(quán)重”為30 的線要素;起點為N3,經(jīng)過N4,終點為N5,屬性“流量權(quán)重”為20 的線要素;起點為N3,經(jīng)過N6,終點為N7,屬性“流量權(quán)重”為10 的線要素。其中,N1,N2,…,N7僅為節(jié)點位置,如N1與P1,1、P2,1重合,依此類推。
為驗證本文方法的有效性,本文實驗數(shù)據(jù)選取兩組不同規(guī)模的真實線性空間流量數(shù)據(jù)集進行測試,其特征信息如表7所示。數(shù)據(jù)集1是由武漢市市轄區(qū)至長江中游城市群其他182個縣級單元的最短公路路徑組成,包含182條軌跡,每條軌跡流量屬性為2015年終點縣級單元的年末人口數(shù)。數(shù)據(jù)集2是由長江中游城市群31個市級單元(包括湖北省省屬直轄市天門市、仙桃市和潛江市)兩兩間最短公路路徑組成,包含465條軌跡,每條軌跡流量屬性為2015年兩端點市級單元的年末人口數(shù)之和。模擬實驗針對上述兩組數(shù)據(jù)集采用常見商業(yè)軟件ArcGIS方法和本文方法進行對比分析。實驗環(huán)境如下:操作系統(tǒng)為Windows10,主頻為3.4 GHz的CPU i7-6700,內(nèi)存為16 GB,方法分別利用ArcGIS10.5和PostgreSQL10.6、PostGIS2.5基于Python語言編程實現(xiàn)。
表7 兩組數(shù)據(jù)集信息Table 7 Two sets of dataset information
兩種方法在兩組數(shù)據(jù)集上的實驗結(jié)果如表8所示。
表8 兩組數(shù)據(jù)集下不同方法的效率Table 8 Efficiency of different methods under two data sets
由表7、表8 可以看出,對于不同數(shù)據(jù)量和不同網(wǎng)絡(luò)復(fù)雜度的兩組數(shù)據(jù)集情況,本文方法相對于常見商業(yè)軟件ArcGIS 的方法在時間效率上具有較大的優(yōu)勢。
本文選用北京市至全國2 845 個區(qū)縣(市)的交通線路路網(wǎng)數(shù)據(jù)作為實驗數(shù)據(jù),共計2 845 條線要素,每條線路的屬性值是該區(qū)縣(市)2010 年常住人口,數(shù)據(jù)來源為2010 年的《第六次全國人口普查公報》。通過線要素聚合方法,對2 845 條線進行聚合,得到共計5 085條線要素,并按屬性值大小將線聚合結(jié)果分為4個等級:將屬性值為20×108人~80×108人設(shè)為三級軸線;5×108人~20×108人設(shè)為二級軸線;2×108人~5×108人設(shè)為一級軸線,可以得到一級軸線的終點城市為西安市、駐馬店市和徐州市,二級軸線的終點城市包括長春市、無錫市、荊州市、成都市、重慶市、永州市、廣州市、吉安市等。二級軸線的終點城市太多,這里不再列出。本文未考慮江河湖海的阻隔作用,因此,若不考慮沿江沿海的作用,這些一級和二級軸線上的城市將會發(fā)揮重要的“橋頭堡”作用。
由于是矢量數(shù)據(jù)輸出,可以直接進行查看,精確到每座城市間,并且能為后續(xù)空間操作提供數(shù)據(jù)基礎(chǔ)。
在全國實例數(shù)據(jù)分析中,基于ArcGIS 的線空間聚合方法共需43 min,而基于PostGIS 的線空間聚合方法僅需4 min。充分說明在面對海量數(shù)據(jù)時,基于PostGIS 的線空間聚合方法具有明顯優(yōu)勢。
本文提出一種基于PostGIS 的線要素空間聚合方法,該方法在面對大型數(shù)據(jù)時處理速度較快,比當(dāng)前GIS 領(lǐng)域常用的ArcGIS 軟件更適合處理地理大數(shù)據(jù),能夠適應(yīng)海量數(shù)據(jù)環(huán)境下的線空間流量數(shù)據(jù)分析。PostGIS 是一款開源GIS 軟件,功能豐富可擴展性強,能夠較好地應(yīng)用于地理空間數(shù)據(jù)處理研究。下一步將在并行計算環(huán)境下提高GreenPlum 的計算效率,同時把線要素的空間聚合方法擴展到面要素的空間聚合任務(wù)中。