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