本次依舊使用百度地圖開放平臺(tái),這次使用路徑規(guī)劃API。
本次是計(jì)算駕車出行的等時(shí)圈,因此在路徑規(guī)劃服務(wù)文檔中找到駕車路線規(guī)劃部分。

總體思路如下:
- 按照需求生成等時(shí)圈范圍,并在其中均勻打點(diǎn),將其作為目的地點(diǎn);
- 根據(jù)起點(diǎn)、終點(diǎn)的坐標(biāo)值構(gòu)建請(qǐng)求url訪問API,得到時(shí)間參數(shù);
- 利用每個(gè)點(diǎn)的時(shí)間參數(shù)為值做插值分析,得到等時(shí)圈圖。
1.創(chuàng)建起點(diǎn):
- 添加Creator轉(zhuǎn)換器
使用Creator轉(zhuǎn)換器創(chuàng)建一個(gè)新要素,參數(shù)默認(rèn)即可。

- 添加AttributeManager轉(zhuǎn)換器
使用AttributeManager轉(zhuǎn)換器添加起點(diǎn)坐標(biāo)值,本次采用百度坐標(biāo)以市政府作為起點(diǎn),可以通過百度地圖拾取坐標(biāo)系統(tǒng)獲得。

- 添加VertexCreator轉(zhuǎn)換器
使用VertexCreator轉(zhuǎn)換器將添加的起點(diǎn)轉(zhuǎn)換為一個(gè)點(diǎn)要素。

- 添加CoordinateSystemSetter轉(zhuǎn)換器
因?yàn)楹罄m(xù)需要以起點(diǎn)為圓心做buffer,所以需要先為起點(diǎn)定義一個(gè)坐標(biāo)系,然后將點(diǎn)變換為投影坐標(biāo)系。

- 添加Reprojector轉(zhuǎn)換器
使用Reprojector轉(zhuǎn)換器將點(diǎn)變換為投影坐標(biāo)系。

2.獲取目的地點(diǎn)坐標(biāo):
- 添加Bufferer轉(zhuǎn)換器
以起點(diǎn)為圓心做buffer,半徑可以根據(jù)需要設(shè)定,此處以100KM為例。

- 添加2DGridAccumulator轉(zhuǎn)換器
安裝上一步生成的buffer范圍,劃分網(wǎng)格,并且設(shè)置創(chuàng)建的網(wǎng)格類型為點(diǎn),這樣就生成了目的地點(diǎn)。
此處按照設(shè)置的格子數(shù)量進(jìn)行劃分,將其劃分為60×60的網(wǎng)格。

- 添加Clipper轉(zhuǎn)換器
按照生成的buffer范圍裁剪點(diǎn),得到buffer范圍內(nèi)的點(diǎn)。

- 添加Reprojector轉(zhuǎn)換器
因?yàn)榇藭r(shí)生成的點(diǎn)的坐標(biāo)為投影坐標(biāo),需要使用轉(zhuǎn)換器轉(zhuǎn)換為經(jīng)緯度坐標(biāo)。

- 添加CoordinateExtractor轉(zhuǎn)換器
使用CoordinateExtractor轉(zhuǎn)換器獲取生成的每個(gè)目的地點(diǎn)的坐標(biāo)。

- 添加AttributeManager轉(zhuǎn)換器
使用轉(zhuǎn)換器對(duì)屬性進(jìn)行整理,只保留坐標(biāo)值字段即可。

3.將起點(diǎn)和目的地點(diǎn)相連:
- 添加FeatureMerger轉(zhuǎn)換器
將起點(diǎn)和目的地點(diǎn)連接起來,使得每個(gè)目的地點(diǎn)上夠連接上起點(diǎn)坐標(biāo)。

- 添加Counter轉(zhuǎn)換器
為了區(qū)分每個(gè)目的地點(diǎn),使用Counter轉(zhuǎn)換器為每個(gè)目的地點(diǎn)創(chuàng)建一個(gè)ID(從1開始)。

4.設(shè)置延遲處理:
為了安全起見,添加訪問延遲處理。
- 添加RandomNumberGenerator轉(zhuǎn)換器
RandomNumberGenerator轉(zhuǎn)換器會(huì)生成一個(gè)隨機(jī)數(shù),根據(jù)分別設(shè)置最小值、最大值、小數(shù)點(diǎn)位數(shù)。

- 添加RandomNumberGenerator轉(zhuǎn)換器
設(shè)置延遲時(shí)間,選擇上一步生成的_random_number屬性值。

5.構(gòu)建訪問url并解析返回結(jié)果:
- 添加HTTPCaller轉(zhuǎn)換器
構(gòu)建訪問API的URL。

- 添加JSONFragmenter轉(zhuǎn)換器
不知道為什么使用JSONExtractor轉(zhuǎn)換器后運(yùn)行會(huì)在某一處報(bào)服務(wù)器錯(cuò)誤的錯(cuò)誤,但是JSONFragmenter轉(zhuǎn)換器就不會(huì)出現(xiàn)這種情況,所以這里推薦使用JSONFragmenter轉(zhuǎn)換器。
對(duì)返回的JSON進(jìn)行解析,這里需要注意下語(yǔ)法問題(與獲取{}里面數(shù)據(jù)不同的是獲取[]里面的所有數(shù)據(jù)需要在后面添加一個(gè)[*])以及記得暴露需要的屬性。

- 添加AttributeManager轉(zhuǎn)換器
進(jìn)行屬性整理,刪除多余屬性。

此時(shí)已經(jīng)得到起點(diǎn)與所有目的地點(diǎn)間的距離以及花費(fèi)時(shí)間。
6.根據(jù)時(shí)間值做插值分析,得到等時(shí)圈:
根據(jù)每個(gè)目的地點(diǎn)的時(shí)間值做插值分析,生成等時(shí)圈圖,和ArcGIS中的插值分析一樣。需要注意的是在做插值分析之前,需要轉(zhuǎn)為3D要素。
- 添加3DForcer轉(zhuǎn)換器
根據(jù)時(shí)間字段,將要素轉(zhuǎn)為3維要素。

- 添加Reprojector轉(zhuǎn)換器
因?yàn)楹罄m(xù)做插值分析時(shí)設(shè)置的像元大小是以米為單位,因此需要先將要素轉(zhuǎn)換為投影坐標(biāo)。

- 添加SurfaceModeller轉(zhuǎn)換器
在轉(zhuǎn)換器參數(shù)對(duì)話框中進(jìn)行相關(guān)設(shè)置,其中,
表面容差————當(dāng)點(diǎn)不是很多時(shí),可以設(shè)置為0,就是每個(gè)點(diǎn)都參與插值計(jì)算,當(dāng)點(diǎn)很多時(shí),可以根據(jù)需要設(shè)置其他值。
輸出DEM單元格x軸間隔、輸出DEM單元格y軸間隔————也就是輸出的柵格文件的像元大小,可以根據(jù)需要進(jìn)行設(shè)置。
輸出等高線間隔————此處就是等時(shí)線間隔,此處我們以1800秒,也就是半小時(shí)為間隔。

- 添加寫模塊
添加一個(gè)shapefile格式的寫模塊,因?yàn)檩敵龅膶傩阅J(rèn)為elevation,可以將其name修改為時(shí)間,type修改為long(整數(shù))。

添加一個(gè)TIF格式的寫模塊,

7.運(yùn)行之后得到結(jié)果:

后續(xù)可以使用生成的TIFF文件在ArcGIS中做進(jìn)一步處理。