作者:LX
背景
在前面的文章《SuperMap流資料技術及應用實踐》中介紹流資料技術的時候提到了空間過濾器—地理圍欄。是以很多小夥伴好奇地理圍欄的作用是什麼,在SuperMap産品中如何使用,應用的效果如何等。為了讓大家對流資料分析中的地理圍欄有更多的了解,本文将在上一篇文章的基礎上詳細介紹一下流資料分析的地理圍欄及其應用。
一、 地理圍欄簡介
地理圍欄是基于移動位置服務的一種新應用,即用一個虛拟的栅欄圍出一個虛拟地理邊界。SuperMap iServer Streaming Service通過地理圍欄技術來判斷流服務傳輸的對象是否在某個區域内,以及判斷流服務對象和某個區域的空間關系狀态變化。
二、 地理圍欄應用實踐
1、 資料準備
1)流資料來源:flights2w.csv(通過WebSocket發送,模拟流資料)
2)圍欄資料:fencedata.udb
ps:資料可點選文末的連結下載下傳
2、流資料服務中配置地理圍欄
1)先按照《SuperMap流資料技術及應用實踐》的“SuperMap流資料應用實踐”部分,完成模拟器發送資料,以及流模型中的WebSocket接收器和WebSocket發送器的添加和配置。
2) 然後打開流處理模型,将“地理圍欄轉換器”拖到“節點編輯器”中,并将“WebSocket接收器”右側的綠色方塊拖出的箭頭指向“地理圍欄轉換器”,然後将“WebSocket接收器”右側的綠色方塊拖出的箭頭指向“WebSocket發送器”,如下圖所示:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TPBRWe5c0Y3Z1MjdnRXJWeWd0Yx40MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL5QjM3IzNxcTM5EjNwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
3) 滑鼠單擊“節點編輯器”中的“地理圍欄轉換器”,配置如下參數:
“節點名稱”:可以自己更改
“節點描述”:可選填
“地理圍欄資料”:必選,目前隻有FeatureConnection類型。
“名稱字段名”:必填,進入地理圍欄對象的Name屬性字段。
“ID字段名”:必填,進入地理圍欄對象的ID字段,也就是唯一辨別該對象的字段。
“進入地理圍欄字段名”:必填,新增字段的字段名稱,該字段用于記錄目前對象是否在地理圍欄内。
“狀态字段名”:必填,新增字段的字段名稱,該字段用于記錄目前對象的狀态是進入地理圍欄還是離開地理圍欄。
4)滑鼠點選“FeatureConnection”,在随後顯示的頁面中,填寫如下資訊:
“資料源類型”:udb,目前隻支援這一種類型
“資料源連接配接資訊”:添加” DsInfo”,有多少個資料源就添加多少個” DsInfo”。
5)點選“DsInfo-0”标簽,填寫“資料源檔案路徑”和“資料集名稱”如下:
6) 然後釋出流模型,打開之前釋出好的資料流服務,訂閱到websocket推送過來的資料如下圖:
添加地理圍欄轉換器之前流服務訂閱的資料如下:
對比增加地理圍欄之前,可以看出增加地理圍欄之後推送的資料增加了地理圍欄轉換器配置的字段geoWithin 、geoStatus。
geoWithin:記錄目前對象是否在地理圍欄内,取值0和1。
0表示目前對象再地理圍欄外
1表示表示目前對象再地理圍欄内
geoStatus:記錄目前對象的狀态是進入地理圍欄還是離開地理圍欄,取值0、1、2、3。
0表示不知道目前對象的狀态
1表示進入地理圍欄
2表示離開地理圍欄
3表示保持在地理圍欄裡面
附上流處理模型釋出後生成的streaming檔案,不想通過流模型編輯器建立的的小夥伴可以直接釋出streaming檔案:
{
"sparkParameter": {
"checkPointDir": "tmp",
"interval": 2000
},
"stream": {
"nodeDic": {
"WebSocketClientSender": {
"formatter": {
"className": "com.supermap.bdt.streaming.formatter.GeoJsonFormatter"
},
"path": "ws://localhost:8800/iserver/services/dataflow/dataflow/broadcast?token=-tDPP6TivAixmhgNik3eLWQnfuUImTou9MpVnUhDs9GAkhDISEZgRqRifQ7Puy9kn2yWggqiNTXXfWGCyS1ibA..",
"nextNodes": [],
"name": "WebSocketClientSender",
"prevNodes": [
"GeoTaggerMapper"
],
"caption": "WebSocket發送器",
"className": "com.supermap.bdt.streaming.sender.WebSocketClientSender"
},
"WebSocketReceiver": {
"metadata": {
"epsg": 3857,
"fieldInfos": [
{
"name": "id",
"source": "1",
"nType": "TEXT"
},
{
"name": "direction",
"source": "0",
"nType": "INT32"
},
{
"name": "x",
"source": "2",
"nType": "DOUBLE"
},
{
"name": "y",
"source": "3",
"nType": "DOUBLE"
}
],
"featureType": "POINT",
"idFieldName": "id"
},
"nextNodes": [
"GeoTaggerMapper"
],
"reader": {
"className": "com.supermap.bdt.streaming.formatter.CSVFormatter",
"separator": ","
},
"name": "WebSocketReceiver",
"prevNodes": [],
"caption": "WebSocket接收器",
"className": "com.supermap.bdt.streaming.receiver.WebSocketReceiver",
"url": "ws://127.0.0.1:8181"
},
"GeoTaggerMapper": {
"className": "com.supermap.bdt.streaming.map.GeoTaggerMapper",
"caption": "地理圍欄轉換器",
"name": "GeoTaggerMapper",
"nextNodes": [
"WebSocketClientSender"
],
"prevNodes": [
"WebSocketReceiver"
],
"description": null,
"connection": {
"type": "udb",
"info": [
{
"server": "E:\\Data\\fencedata\\fencedata.udb",
"datasetNames": [
"regin"
]
}
]
},
"fenceName": "NAME",
"fenceID": "SmID",
"withinFieldName": "geoWithin",
"statusFieldName": "geoStatus"
}
}
},
"version": 9000
}
streaming檔案中地理圍欄相關參數說明:
connection:地理圍欄對象的來源。
type——String類型。資料源類型
Info——Array[DsInfo]類型。資料源連接配接資訊。
server:地理圍欄資料的路徑
datasetNames:用Array[String]類型。用于地理圍欄的資料集名稱
fenceName——String類型。進入地理圍欄對象的Name屬性字段。
fenceID——String類型。進入地理圍欄對象的ID字段,也就是唯一辨別該對象的字段。
withinFieldName——String類型。新增字段的字段名稱,該字段用于記錄目前對象是否在地理圍欄内。
statusFieldName——String類型。新增字段的字段名稱,該字段用于記錄目前對象的狀态是進入地理圍欄還是離開地理圍欄。
本文所用到的資料和流模型可通路下面的連結下載下傳:
https://download.csdn.net/download/supermapsupport/11434541