<!DOCTYPE html>
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
<head>
|
<title>空间统计</title>
|
<meta http-equiv="Expires" content="0" />
|
<meta http-equiv="Cache" content="no-cache" />
|
<meta http-equiv="Pragma" content="no-cache" />
|
<meta http-equiv="Cache-control" content="no-cache" />
|
<!--<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />-->
|
<meta http-equiv="X-UA-Compatible" content="IE=9" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<script src="../Jquery/jquery.min.js"></script>
|
<script src="../ToolsCommon71.js"></script>
|
<link href="../Style.css" rel="StyleSheet" type="text/css" />
|
<style>
|
html, body {
|
margin: 0;
|
padding: 0;
|
height: 100%;
|
width: 100%;
|
}
|
</style>
|
<script>
|
var gAsync = true;
|
var gDebug = false;
|
var groupName = "空间统计";
|
//var layerName = "JMD_1002";
|
|
var rs = {
|
count: 0, // 要素总个数
|
|
lineLen: 0, // 线对象长度
|
|
polyArea: 0, // 多边形面积
|
|
volume: 0, // 三维体体积
|
|
minHeight: 0, // 三维体最低高度
|
|
maxHeight: 0, // 三维体最高高度
|
|
data: [],
|
|
reset: function () {
|
//SGWorld.ProjectTree.EnableRedraw(0);
|
var layers = getFeatureLayers();
|
for (var i in layers) {
|
try {
|
SGWorld.ProjectTree.GetObject(layers[i]).Refresh();
|
} catch (e) {
|
console.log(e);
|
}
|
}
|
//SGWorld.ProjectTree.EnableRedraw(1);
|
|
this.count = 0;
|
this.lineLen = 0;
|
this.polyArea = 0;
|
this.volume = 0;
|
this.minHeight = 0;
|
this.maxHeight = 0;
|
this.data = [];
|
|
return this;
|
},
|
|
format: function () {
|
this.lineLen = parseFloat(this.lineLen.toFixed(2));
|
this.polyArea = parseFloat(this.polyArea.toFixed(2));
|
this.volume = parseFloat(this.volume.toFixed(2));
|
this.minHeight = parseFloat(this.minHeight.toFixed(2));
|
this.maxHeight = parseFloat(this.maxHeight.toFixed(2));
|
|
return this;
|
},
|
|
setVal: function () {
|
$("#totalNum").html("" + this.count);
|
$("#lineLen").html("" + this.lineLen);
|
$("#polyArea").html("" + this.polyArea);
|
$("#volume").html("" + this.volume);
|
$("#minHeight").html("" + this.minHeight);
|
$("#maxHeight").html("" + this.maxHeight);
|
$("#cc").html(this.getHtmlByData());
|
},
|
|
getHtmlByData: function () {
|
if (!this.data || !this.data.length) return "";
|
|
var html = "<table class='PropertiesSheet' cellspacing='0' cellpadding='2' style='max-height: 256px; overflow: auto'>";
|
html += "<tr><td>序号</td><td>图层名</td><td>面积</td><td>高度</td><td>体积</td></tr>";
|
for (var i = 0, c = this.data.length; i < c; i++) {
|
html += "<tr><td>" + (i + 1) + "</td><td>" + this.data[i].name + "</td><td>" + this.data[i].area + "</td><td>" + this.data[i].height + "</td><td>" + this.data[i].vol + "</td></tr>";
|
}
|
html += "</table>";
|
|
return html;
|
}
|
};
|
|
$(function () {
|
init();
|
});
|
|
function init() {
|
window.ondragstart = function () { return false; }
|
}
|
|
function getGroupId() {
|
var gid = SGWorld.ProjectTree.FindItem(groupName);
|
if (gid) return gid;
|
|
return SGWorld.ProjectTree.CreateLockedGroup(groupName);
|
}
|
|
function delGroup() {
|
try {
|
var gid = SGWorld.ProjectTree.FindItem(groupName);
|
if (gid) SGWorld.ProjectTree.DeleteItem(gid);
|
}
|
catch (e) { }
|
}
|
|
function getFeatureLayers() {
|
var layers = [];
|
BuildObjectsList(SGWorld.ProjectTree.RootID, layers, 36);
|
|
return layers;
|
}
|
|
function clear(e) {
|
rs.reset();
|
rs.setVal();
|
delGroup();
|
}
|
|
function startQuery(e) {
|
this.clear();
|
if (drawing.drawingEditMode != -1) {
|
drawing.abort();
|
return;
|
}
|
|
SGWorld.Window.ShowMessageBarText("按 Esc 键退出");
|
drawing.drawPolygon({
|
style: {
|
lineColor: "#ff0000",
|
lineWidth: 3,
|
},
|
altitudeMethod: 2, // use 2 of "OnTerrain" and 3 for "Absolute" (above mean sea level)
|
deleteWhenExit: false, //
|
parentGoupID: getGroupId(),
|
saveOnExit: true, // save the polyline/polygon when exiting the project. Default = false
|
onFinish: DrawPoly,
|
onAbort: ResetAsync
|
});
|
}
|
|
function DrawPoly(geometry, type, altitudeType) {
|
var layers = getFeatureLayers();
|
for (var i in layers) {
|
try {
|
var layer = SGWorld.ProjectTree.GetObject(layers[i]);
|
var fs = layer.ExecuteSpatialQuery(geometry, 1); // 1-IT_INTERSECT, 2-IT_WITHIN
|
if (fs.Count == 0) continue;
|
|
rs.count += fs.Count;
|
if (layer.GeometryType == 1) { // LGT_POLYLINE
|
for (var j = 0; j < fs.Count; j++) {
|
var f = fs.Item(j);
|
rs.lineLen += f.Geometry.Length;
|
}
|
}
|
if (layer.GeometryType == 2) { // LGT_POLYGON
|
var hField = $.trim($("#hField").val()), fName = layer.TreeItem.Name;
|
for (var j = 0; j < fs.Count; j++) {
|
var f = fs.Item(j);
|
rs.polyArea += f.Geometry.Area;
|
|
try {
|
var height = parseFloat(f.FeatureAttributes.GetFeatureAttribute(hField).Value);
|
|
rs.volume += f.Geometry.Area * height;
|
if (rs.maxHeight < height) rs.maxHeight = height;
|
if (!rs.minHeight || rs.minHeight > height) rs.minHeight = height;
|
|
rs.data.push({ "name": fName, "area": f.Geometry.Area.toFixed(2), "height": height.toFixed(2), "vol": (f.Geometry.Area * height).toFixed(2) });
|
} catch (ex) {
|
console.log(ex);
|
}
|
}
|
}
|
for (var j = 0; j < fs.Count; j++) {
|
fs.Item(j).Tint.abgrColor = 0xff800080;
|
}
|
} catch (e) {
|
console.log(e);
|
//layers.splice(i, 1);
|
}
|
}
|
|
rs.format();
|
rs.setVal();
|
}
|
|
function ResetAsync(FirstTime, FromMouseInputMode) {
|
if (gAsync)
|
setTimeout(function () { Reset(FirstTime, FromMouseInputMode); }, 100);
|
else
|
Reset(FirstTime, FromMouseInputMode);
|
}
|
|
function Reset(FirstTime, FromMouseInputMode) {
|
try {
|
if (gPolyObj != null) SGWorld.Creator.DeleteObject(gPolyObj.ID);
|
} catch (e) { }
|
|
gPolyObj = null;
|
SGWorld.ProjectTree.EnableRedraw(1);
|
SGWorld.Window.HideMessageBarText();
|
bInEdit = false;
|
|
if (FirstTime != 1 && FromMouseInputMode == 0) SGWorld.Window.SetInputMode(0);
|
}
|
</script>
|
</head>
|
<body class="hideUntillTranslated">
|
<table style="width: 100%; border: 0;" cellspacing="0" cellpadding="2">
|
<tr>
|
<td class="ToolTopArea" id="TopAreaTD" width="100%" valign="middle">
|
<table border="0" width="100%" cellspacing="0" cellpadding="0">
|
<tr>
|
<td width="55px">
|
<img style="margin-left: 5px;" src="img/ToolIcon.png" alt="" /></td>
|
<td id="TitleTD" align="center" class="s12w i18n">空间统计</td>
|
<td align="right" id="CloseHelpTd">
|
<img style="margin-right: 5px; cursor: pointer;" alt="" src="../CommonImg/help.png" border="0" class="i18n" alt="help" title="帮助" onclick="DisplayHelpPopup6(SGLang.i18nFile('help.html'),SGLang.i18n('help'))" /></td>
|
</tr>
|
</table>
|
</td>
|
</tr>
|
<tr>
|
<td class="ToolTopSeperator"></td>
|
</tr>
|
<tr class="s8">
|
<td>
|
<table class="PropertiesSheet" cellspacing="0" cellpadding="2">
|
<tr class='TableOtherLine'>
|
<td class="s8b">
|
<label for="Mode" class="i18n">要素总个数</label>
|
</td>
|
<td> <span id="totalNum">0</span> 个
|
</td>
|
</tr>
|
<tr>
|
<td class="s8b">
|
<label for="Mode" class="i18n">线对象长度</label>
|
</td>
|
<td> <span id="lineLen">0</span> 米
|
</td>
|
</tr>
|
<tr>
|
<td class="s8b">
|
<label for="Mode" class="i18n">多边形总面积</label>
|
</td>
|
<td> <span id="polyArea">0</span> 平方米
|
</td>
|
</tr>
|
<tr>
|
<td class="s8b">
|
<label for="Mode" class="i18n">三维体总体积</label>
|
</td>
|
<td> <span id="volume">0</span> 立方米
|
</td>
|
</tr>
|
<tr>
|
<td class="s8b">
|
<label for="Mode" class="i18n">三维体高度</label>
|
</td>
|
<td> 最低 <span id="minHeight">0</span> 米,最高 <span id="maxHeight">0</span> 米
|
</td>
|
</tr>
|
<tr>
|
<td class="s8b">
|
<label for="Mode" class="i18n">高度字段</label>
|
</td>
|
<td> <input id="hField" type="text" value="GD" />
|
</td>
|
</tr>
|
</table>
|
</td>
|
</tr>
|
<tr class="s8">
|
<td id="cc"></td>
|
</tr>
|
<tr class="s8">
|
<td align="center" class="ToolButtonsArea">
|
<div id="SurfaceDiv">
|
<button id="clipboardButton" class="MenuButton" onclick="clear(this);" style="cursor: pointer;">
|
<img src="img/delete.png" /><br />
|
<span class="i18n">清 除</span></button>
|
<button id="DrawPlaneBtn" class="MenuButton MenuButtonLast" onclick="startQuery(this);" style="cursor: pointer;">
|
<img src="../commonImg/polygon.png" /><br />
|
<span class="i18n">开始统计</span></button>
|
</div>
|
</td>
|
</tr>
|
<tr>
|
<td>
|
<object id="SGWorld" style="display:none" classid="CLSID:3a4f9199-65a8-11d5-85c1-0001023952c1"></object>
|
</td>
|
</tr>
|
</table>
|
</body>
|
</html>
|