WebGIS 8-1 緩衝區分析
載入底圖
請參考底部完整程式碼
單圈緩衝區分析
一.建立一個多邊形
- 多點構成弧段
// 建立一個陣列用於此存放點
var points = new Array();
// 用for迴圈傳入四個點的座標
points[0]=new Zondy.Object.Point2D(0.46, 30.1);
points[1] = new Zondy.Object.Point2D(11.48, 6.22);
points[2] = new Zondy.Object.Point2D(36.73, 7.6);
points[3] = new Zondy.Object.Point2D(58.77, 25.51);
points[4] = new Zondy.Object.Point2D(41, 51);
// 構成區要素的弧段
var arc = new Zondy.Object.Arc(points);
// 構成折線的弧段
var arc = new Zondy.Object.Arc(points);
- 多弧段構成折線
// 構成區要素的折線
var anyLine = new Zondy.Object.AnyLine([arc]);
- 多折線構成區
//// 構成區要素
var gRegion = new Zondy.Object.GRegion([anyLine]);
建立區(合併程式碼)
// 建立多邊形
var gRegion = new Zondy.Object.GRegion([
new Zondy.Object.AnyLine([
new Zondy.Object.Arc([
new Zondy.Object.Point2D(0.46, 30.1),
new Zondy.Object.Point2D(11.48, 6.22),
new Zondy.Object.Point2D(36.73, 7.6),
new Zondy.Object.Point2D(58.77, 25.51),
new Zondy.Object.Point2D(41, 51)
])
])
]);
- 設定幾何引數資訊
// 建立構成區要素的幾何資訊
var regGeom = new Zondy.Object.FeatureGeometry();
// 傳入幾何資訊
regGeom.setRegGeom([gRegion]);
- 設定圖形引數資訊(前面需要設定符號引數資訊)
// 隨機輸出1-1502之間的整數
<!--Math.floor 取最大整數-->
var fillColor = Math.floor(Math.random() * 1502 + 1);
// 設定區的符號資訊
var cRegionInfo = new Zondy.Object.CRegionInfo({
FillColor: fillColor //設定填充顏色
});
// 設定圖形引數
var GraphicInfo = new Zondy.Object.WebGraphicsInfo({
InfoType: 3, //設為區型別
RegInfo: cRegionInfo //傳入符號資訊
});
- 設定屬性結構
// 設定屬性結構
var attStruct = new Zondy.Object.CAttStruct({
FldName: ["ID", "周長", "面積", "name"],
FldNumber: 4,
FldType: ["long", "double", "double", "string"]
});
- 設定屬性值Value
// 設定屬性值
var attValue = [1234845, 45546, 4444444, "mdzz"];
var valueRow = new Zondy.Object.CAttDataRow(attValue, 1);
- 建立要素
// 建立要素
var feature = new Zondy.Object.Feature({
fGeom: regGeom, //傳入幾何資訊
GraphicInfo: GraphicInfo, //傳入圖形引數資訊
AttValue: attValue //傳入屬性值
});
- 設定要素型別
// 將要素設定為區要素
feature.setFType(3);
- 建立要素資料集(Zondy.Object.FeatureSet())
// 建立要素資料集
var featureSet = new Zondy.Object.FeatureSet();
// 設定資料集的屬性結構
featureSet.AttStruct = attStruct;
// 將要素新增到資料集中
featureSet.addFeature(feature);
- 建立編輯服務類
// 建立一個編輯服務類
var editService = new Zondy.Service.EditLayerFeature("gdbp://MapGisLocal/OpenLayerVecterMap/ds/世界地圖經緯度/sfcls/世界政區",
{
ip: "127.0.0.1", //伺服器ip
port: "6163" //埠
});
// 將要素資料集新增到圖層中並使用回撥函式
editService.add(featureSet);
二.進行緩衝區分析
- 例項化單圈緩衝區分析物件
// 例項化單圈緩衝區分析物件
var featureBuffBySR = new Zondy.Service.FeatureBuffBySingleRing({
ip: "127.0.0.1",
port: "6163",
leftRad: 10,//左緩衝半徑
rightRad: 10 //右緩衝半徑
});
- 設定必要引數
//設定必要引數
featureBuffBySR.sfGeometryXML = $.toJSON([regGeom]); //幾何資訊
featureBuffBySR.attStructXML = $.toJSON([attStruct]);//屬性結構
featureBuffBySR.attRowsXML = $.toJSON([valueRow]);//屬性值
featureBuffBySR.traceRadius = 0.0001; //跟蹤半徑
// 設定生成的緩衝區要素的存放路徑及檔名 //必填!!
featureBuffBySR.resultName = "gdbp://MapGisLocal/OpenLayerVecterMap/sfcls/緩衝結果" + getCurrentTime();
- 執行緩衝(execute)
// 執行緩衝區分析並呼叫回撥函式
featureBuffBySR.execute(AnalysisSuccess);
- 回撥函式內將圖層新增並顯示
// 回撥函式
function AnalysisSuccess(data) {
// 如果獲取到結果
if (data.results) {
// 如果獲取的結果陣列元素數量不為0
if (data.results.length != 0) {
// 新建圖層儲存緩衝區分析結果
var resultLayer = new Zondy.Map.Layer("結果圖層", [data.results[0].Value], {
ip: '127.0.0.1',//ip
port: '6163',//埠
isBaseLayer: false//不為基礎圖層
});
map.addLayer(resultLayer);//將圖層新增到地圖容器中
}
} else {
alert('緩衝失敗,請檢查引數');//彈窗提醒
}
}
獲取當前時間函式
// 獲取當前時間函式
function getCurrentTime() {
//例項化一個日期物件
var now = new Date();
var year = now.getFullYear(); //四位數字返回年份。
var month = now.getMonth() + 1; //月份 (0 ~ 11)。
var day = now.getDate(); //一個月中的某一天 (1 ~ 31)
var hh = now.getHours(); //獲取小時 0-23
var mm = now.getMinutes(); //獲取分鐘 0-59
var ss = now.getSeconds(); //獲取秒 0-59
// 定義一個物件儲存時間
var clock = year + "-"; //2016-
// 如果月份小於10則在月份前加0
if (month < 10) clock += "0";
clock += month + "-"; //2016-07-
// 如果天數小於10則在天數前加0
if (day < 10) clock += "0";
clock += day + "-"; //2016-07-27-
// 如果小時小於10則在小時前加0
if (hh < 10) clock += "0";
clock += hh; //2016-07-27-21
// 如果分鐘小於10則在分鐘前加0
if (mm < 10) clock += "0";
clock += mm; //2016-07-27-2135
// 如果秒數小於10則在秒數前加0
if (ss < 10) clock += "0";
clock += ss; //2016-07-27-213523
// 返回clock的值
return (clock);
}
完整程式碼
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<link href="../css/mapDefault.css" type="text/css" rel="stylesheet"/>
<script src="../libs/jquery-1.11.2.min.js" type="text/javascript"></script>
<script src="../libs/OpenLayers.js" type="text/javascript"></script>
<script src="../libs/zdclient.js" type="text/javascript"></script>
<script type="text/javascript">
var map, layer;
function init() {
// 新增地圖容器
map = new OpenLayers.Map('map1', {
controls: [
new OpenLayers.Control.MousePosition(),//此控制元件顯示滑鼠移動時,所在點的地理座標
new OpenLayers.Control.Navigation(),//此控制元件處理伴隨滑鼠事件的地圖瀏覽
new OpenLayers.Control.LayerSwitcher(),//圖層切換控制元件
new OpenLayers.Control.OverviewMap() //鷹眼
]
});
//建立圖層
layer = new Zondy.Map.Layer("Map", ["gdbp://MapGisLocal/OpenLayerVecterMap/ds/世界地圖經緯度/sfcls/世界政區"], {
ip: "127.0.0.1", //ip
port: "6163",//埠
isBaseLayer: true //作為底圖
});
// 將圖層新增到地圖中
map.addLayers([layer]);
// 設定地圖顯示中心及縮放級別
map.setCenter(new OpenLayers.LonLat(0, 0), 2);
}
<!-------------------單圈緩衝區分析------------------- -->
function singleBuffAnalysis() {
// 建立多邊形
var gRegion = new Zondy.Object.GRegion([
new Zondy.Object.AnyLine([
new Zondy.Object.Arc([
new Zondy.Object.Point2D(0.46, 30.1),
new Zondy.Object.Point2D(11.48, 6.22),
new Zondy.Object.Point2D(36.73, 7.6),
new Zondy.Object.Point2D(58.77, 25.51),
new Zondy.Object.Point2D(41, 51)
])
])
]);
//// 建立一個陣列用於此存放點
// var points = new Array();
//// 用for迴圈傳入四個點的座標
// points[0]=new Zondy.Object.Point2D(0.46, 30.1);
// points[1] = new Zondy.Object.Point2D(11.48, 6.22);
// points[2] = new Zondy.Object.Point2D(36.73, 7.6);
// points[3] = new Zondy.Object.Point2D(58.77, 25.51);
// points[4] = new Zondy.Object.Point2D(41, 51);
//
//// 構成折線的弧段
// var arc = new Zondy.Object.Arc(points);
//// 構成區要素的折線
// var anyLine = new Zondy.Object.AnyLine([arc]);
//// 構成區要素
// var gRegion = new Zondy.Object.GRegion([anyLine]);
// 建立構成區要素的幾何資訊
var regGeom = new Zondy.Object.FeatureGeometry();
// 傳入幾何資訊
regGeom.setRegGeom([gRegion]);
// 隨機輸出1-1502之間的整數
<!--Math.floor 取最大整數-->
var fillColor = Math.floor(Math.random() * 1502 + 1);
// 設定區的符號資訊
var cRegionInfo = new Zondy.Object.CRegionInfo({
FillColor: fillColor //設定填充顏色
});
// 設定圖形引數
var GraphicInfo = new Zondy.Object.WebGraphicsInfo({
InfoType: 3, //設為區型別
RegInfo: cRegionInfo //傳入符號資訊
});
// 設定屬性結構
var attStruct = new Zondy.Object.CAttStruct({
FldName: ["ID", "周長", "面積", "name"],
FldNumber: 4,
FldType: ["long", "double", "double", "string"]
});
// 設定屬性值
var attValue = [1234845, 45546, 4444444, "mdzz"];
var valueRow = new Zondy.Object.CAttDataRow(attValue, 1);
// 建立要素
var feature = new Zondy.Object.Feature({
fGeom: regGeom, //傳入幾何資訊
GraphicInfo: GraphicInfo, //傳入圖形引數資訊
AttValue: attValue //傳入屬性值
});
// 將要素設定為區要素
feature.setFType(3);
// 建立要素資料集
var featureSet = new Zondy.Object.FeatureSet();
// 設定資料集的屬性結構
featureSet.AttStruct = attStruct;
// 將要素新增到資料集中
featureSet.addFeature(feature);
// 建立一個編輯服務類
var editService = new Zondy.Service.EditLayerFeature("gdbp://MapGisLocal/OpenLayerVecterMap/ds/世界地圖經緯度/sfcls/世界政區",
{
ip: "127.0.0.1", //伺服器ip
port: "6163" //埠
});
// 將要素資料集新增到圖層中並使用回撥函式
editService.add(featureSet);
// 例項化單圈緩衝區分析物件
var featureBuffBySR = new Zondy.Service.FeatureBuffBySingleRing({
ip: "127.0.0.1",
port: "6163",
leftRad: 10,//左緩衝半徑
rightRad: 10 //右緩衝半徑
});
//設定必要引數
featureBuffBySR.sfGeometryXML = $.toJSON([regGeom]); //幾何資訊
featureBuffBySR.attStructXML = $.toJSON([attStruct]);//屬性結構
featureBuffBySR.attRowsXML = $.toJSON([valueRow]);//屬性值
featureBuffBySR.traceRadius = 0.0001; //跟蹤半徑
// 設定生成的緩衝區要素的存放路徑及檔名 //必填!!
featureBuffBySR.resultName = "gdbp://MapGisLocal/OpenLayerVecterMap/sfcls/緩衝結果" + getCurrentTime();
// 執行緩衝區分析並呼叫回撥函式
featureBuffBySR.execute(AnalysisSuccess);
}
// 回撥函式
function AnalysisSuccess(data) {
// 如果獲取到結果
if (data.results) {
// 如果獲取的結果陣列元素數量不為0
if (data.results.length != 0) {
// 新建圖層儲存緩衝區分析結果
var resultLayer = new Zondy.Map.Layer("結果圖層", [data.results[0].Value], {
ip: '127.0.0.1',//ip
port: '6163',//埠
isBaseLayer: false//不為基礎圖層
});
map.addLayer(resultLayer);//將圖層新增到地圖容器中
}
} else {
alert('緩衝失敗,請檢查引數');//彈窗提醒
}
}
// 獲取當前時間函式
function getCurrentTime() {
//例項化一個日期物件
var now = new Date();
var year = now.getFullYear(); //四位數字返回年份。
var month = now.getMonth() + 1; //月份 (0 ~ 11)。
var day = now.getDate(); //一個月中的某一天 (1 ~ 31)
var hh = now.getHours(); //獲取小時 0-23
var mm = now.getMinutes(); //獲取分鐘 0-59
var ss = now.getSeconds(); //獲取秒 0-59
// 定義一個物件儲存時間
var clock = year + "-"; //2016-
// 如果月份小於10則在月份前加0
if (month < 10) clock += "0";
clock += month + "-"; //2016-07-
// 如果天數小於10則在天數前加0
if (day < 10) clock += "0";
clock += day + "-"; //2016-07-27-
// 如果小時小於10則在小時前加0
if (hh < 10) clock += "0";
clock += hh; //2016-07-27-21
// 如果分鐘小於10則在分鐘前加0
if (mm < 10) clock += "0";
clock += mm; //2016-07-27-2135
// 如果秒數小於10則在秒數前加0
if (ss < 10) clock += "0";
clock += ss; //2016-07-27-213523
// 返回clock的值
return (clock);
}
</script>
<body onload="init()">
<div>
<input type="button" class="ButtonLib" value="單層緩衝區分析" onclick="singleBuffAnalysis()">
</div>
<div id="map1">
</div>
</body>
</html>
效果
相關文章
- 緩衝區分析
- 緩衝區溢位小程式分析
- C 標準庫IO緩衝區和核心緩衝區的區別
- Java NIO:緩衝區Java
- getchar緩衝區
- Java NIO 之緩衝區Java
- Unity深度緩衝區指令Unity
- Java整數緩衝區Java
- nginx 緩衝區構造Nginx
- stdio流緩衝區
- Node.js Buffer(緩衝區)Node.js
- PHP的輸出緩衝區PHP
- JavaScript WebGL 幀緩衝區物件JavaScriptWeb物件
- Linux 命令 管道 緩衝區Linux
- log buffer(日誌緩衝區)
- Java NIO 之 Buffer(緩衝區)Java
- Java NIO2:緩衝區Java
- 動態更新——緩衝區物件物件
- 緩衝區溢位實驗
- PHP 輸出緩衝區應用PHP
- Java-NIO之Buffer(緩衝區)Java
- Redis效能篇(五)Redis緩衝區Redis
- 8、Node.js Buffer(緩衝區)Node.js
- node.js中緩衝區–BufferNode.js
- C語言緩衝區問題C語言
- cuug 資料緩衝區調優
- Buffer Cache Size(資料緩衝區)
- 程式分析與優化 - 9 附錄 XLA的緩衝區指派優化
- WebGIS產品分析Web
- 調節Oracle資料緩衝區引數,緩衝整個資料庫(轉)Oracle資料庫
- MySQL中讀頁緩衝區buffer poolMySql
- 《Lua-in-ConTeXt》10:緩衝區魔法Context
- Java NIO 緩衝區學習筆記Java筆記
- 緩衝區的個人理解!(終結版)
- RMAN的IO記憶體緩衝區記憶體
- C語言清空輸入緩衝區C語言
- javascript緩衝運動框架程式碼分析JavaScript框架
- CVE-2010-2883-CoolType.dll緩衝區溢位漏洞分析