邻近度(Proximity)描述了地理空间中两个地物距离相近的程度,是空间分析的一个重要手段。

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>ToolTitle</title> <script language="javascript" src="ToolsCommon65.js"></script> <link rel="StyleSheet" href="Style.css" type="text/css">
<style>
.MenuButton
{
height: 78px;
width: 65px;
margin: 5px;
white-space: normal;
}
.MenuButtonHighlight
{
color: Red;
font-weight: bold;
}
</style>
</head>
<body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" style="border: 0;
overflow: auto; background-color: #ffffff" id="Body" onload="Init()" onunload="Reset(0,0);DeleteTarget();">
<!--oncontextmenu="return false;" onclick="bHide=true;HideOptionsNow()" > -->
<table border="0" width="100%" cellspacing="0" cellpadding="2">
<tr>
<td id="TopAreaTD" height="50px" width="100%" valign="middle" style="background-color: #CAD8E2">
<table border="0" width="100%" cellspacing="0" cellpadding="0">
<tr>
<td width="12px"></td>
<td width="55px"><img src="data:images/ProximityIcon.gif" align="absmiddle" /></td>
<td id="TitleTD" align="center" class="s12b i18n">ToolName</td>
<!--<td valign="top" align="right" id="CloseHelpTd"><img src="../CommonImg/help.gif" border="0" class="i18n" alt="help" title="help" onclick="DisplayHelpPopup6 (SGLang.i18nFile('help.html'),SGLang.i18n('help'))" style="cursor: pointer;"></td>-->
</tr>
</table>
</td>
</tr>
<tr height="1px">
<td style="background-repeat: repeat-x;" background="../CommonImg/separator.gif">
</td>
</tr>
<tr>
<td>
<br />
</td>
</tr>
</table>
<table border="0" cellspacing="1" cellpadding="3" bgcolor="#ffffff" class="s8" width="100%">
<tr >
<td class="s8b">
<label for="createAs" class="i18n">Text30</label>
</td>
<td align="left">
<input id="targetID" type="text" value="" style="width:100px" readonly="readonly"/>
<!-- &nbsp;&nbsp;<button id="SetTargetFromSelected" type="button" onclick="SetTargetFromSelectedPress()"><span id="Span1" class="i18n">Text31</span></button>
&nbsp;&nbsp;<button id="CreateTarget" type="button" onclick="CreateTargetPress()"><span id="Span3" class="i18n">Text43</span></button>-->
<br />
<a id="SetTargetFromSelected" class="link i18n" onclick="SetTargetFromSelectedPress();">Text31</a> |
<a id="CreateTarget" class="link i18n" class="link" onclick="CreateTargetPress();">Text43</a></div>
</td>
</tr>
<tr class='TableOtherLine'>
<td class="s8b">
<label for="createAs" class="i18n">Text32</label>
</td>
<td align="left">
<input id="trackedGroupID" type="text" value="" style="width:100px" readonly="readonly"/>
<!--&nbsp;&nbsp;<button id="SetGroupFromSelected" type="button" onclick="SetGroupFromSelectedPress()"><span id="Span2" class="i18n">Text31</span></button>-->
<br />
<a id="SetGroupFromSelected" class="link i18n" onclick="SetGroupFromSelectedPress();">Text31</a> <span id="Span1" >
</td>
</tr>
<tr >
<td align="top" class="s8b i18n">
<label for="createAs" class="i18n">Text33</label>
</td>
<td align="left">
<input id="warningRadiusID" type="text" value="700" style="width:100px; background-color:#FFD7C1"/><label for="createAs" class="i18n">Text35</label>
</td>
</tr>
<tr class='TableOtherLine'>
<td class="s8b">
<label for="createAs" class="i18n">Text34</label>
</td>
<td align="left">
<input id="dangerRadiusID" type="text" value="300" style="width:100px; background-color:#FFD7D7;"/><label for="createAs" class="i18n">Text35</label>
</td>
</tr>
<tr >
<td class="s8b">
<label for="createAs" class="i18n">Text42</label>
</td>
<td align="left">
<input id="chkTint" type="checkbox" style="width:20px;" onclick="bTint = document.getElementById('chkTint').checked;" checked="checked"/>
</td>
</tr>
<tr>
<td colspan="2" valign="top" class="s8b i18n" align="center"> <button id="startStopButton" class="MenuButton" onclick="StartStop()"><img src="data:images/startCursor.gif" /><br /> <span id="startstopSpan" class="i18n">Text36</span></button> </td>
</tr>
</table> <object id="SGWorld" classid="CLSID:3a4f9197-65a8-11d5-85c1-0001023952c1"> </object> <script language="JavaScript">
function DetectTEMode()
{
var vMode = document.documentMode;
var rMode = 'IE5 Quirks Mode';
if(vMode == 8){
rMode = 'IE8 Standards Mode';
} else if(vMode == 7){
rMode = 'IE7 Strict Mode';
} else if(vMode == 9){
rMode = 'IE9 Strict Mode';
}
//alert('Rendering in: ' + rMode);
}
DetectTEMode(); //***delete the uneeded ones at the end
var gDisplayHeadingSlope ;
var gDisplayMinMaxSlope ;
var gDisplayCoordinateInfo;
var gLastClickMouseX;
var gLastClickMouseY;
///var popupMsg;
var timeoutID;
var measureDistance;
var warningSlope;
var alertSlope;
var arrowMaxPositive;
var arrowMaxNegative;
var arrowHeading;
var labelMaxPositive;
var labelMaxNegative;
var labelHeading;
var labelCoordinateInfo;
var groupID;
var colorNormalPositive ;
var colorNormalNegative;
var colorHeading;
var colorLinewarning ;
var colorLineAlert;
var colorLabel;
var colorTextNormal;
var colorTextWarning;
var colorTextAlert;
var gNameIndex = 1; var cameraClickPos;
var rootId; //Proximity globals
var isStart = false;
var warningRadius;
var dangerRadius;
var targetObj;
var trackedObjArray = [];
var colorLineWarning;
var colorLineDanger;
var bTint = true;
var tmpGroup;
var bInPlaceTarget = false;
var manualTargetLabel; //--------------
// Init
function Init() { targetObj = null;
manualTargetLabel = null; SGWorld.AttachEvent("onFrame", onFrame); colorLineWarning = SGWorld.Creator.CreateColor(238, 173, 23, 255);
colorLineDanger = SGWorld.Creator.CreateColor(255, 117, 117, 255); Reset(true, false); TargetPathNameParam = GetParamValue("TargetPathName", "");
if (TargetPathNameParam != "")
SetTargetFromPathName(TargetPathNameParam);
else {
if (SGWorld.ProjectTree.FindItem("Target") != 0)
SetTargetFromPathName("Target");
} TrackedGroupPathNameParam = GetParamValue("TrackedGroupPathName", "");
if (TrackedGroupPathNameParam != "")
SetTrackedGroupFromPathName(TrackedGroupPathNameParam);
else {
if (SGWorld.ProjectTree.FindItem("Tracked Group") != 0)
SetTrackedGroupFromPathName("Tracked Group");
} if (document.getElementById("targetID").value != "" && document.getElementById("trackedGroupID").value != "")
StartStop(); } //------------
//onFrame
function onFrame() {
if (isStart == false || targetObj == null)
return; displayProximityInfo(); } //--------------
// SetTargetFromSelectedPress
function SetTargetFromSelectedPress() {
var node = SGWorld.ProjectTree.GetNextItem("", 10);
if (node == 0 || SGWorld.ProjectTree.IsGroup(node)) {
alert(SGLang.i18n("Text38"));
return;
}
SetTarget(node);
} //--------------
// SetTargetFromPathName
function SetTargetFromPathName(pathName) {
var node = SGWorld.ProjectTree.FindItem(pathName);
if (node == 0 || SGWorld.ProjectTree.IsGroup(node)) {
alert(SGLang.i18n("Text38"));
return;
}
SetTarget(node);
} //--------------
// SetTarget
function SetTarget(node) { try {
var object = SGWorld.ProjectTree.GetObject(node);
var targetPosition = object.Position;
if (!targetPosition) {
alert(SGLang.i18n("Text38"));
return;
}
document.getElementById("targetID").value = object.TreeItem.Name;
DeleteTarget();
targetObj = object;
}
catch (err) {
alert(SGLang.i18n("Text38"));
return;
}
} //--------------
// CreateTargetPress
function CreateTargetPress() {
if (!bInPlaceTarget) {
bInPlaceTarget = true;
SGWorld.AttachEvent("OnLButtonUp", CreateTarget);
SGWorld.AttachEvent("OnRButtonUp", CreateTargetRButtonUp);
SGWorld.AttachEvent("OnInputModeChanged", ResetCreateTarget); document.getElementById("CreateTarget").innerText = SGLang.i18n("Text46"); SGWorld.Window.SetInputMode(1, abspath() + "/cursor_m.cur");
SGWorld.Window.ShowMessageBarText(SGLang.i18n("Text44"));
}
else {
ResetCreateTarget();
}
} //--------------
// CreateTargetRButtonUp
function CreateTargetRButtonUp(Flags, X, Y) {
ResetCreateTarget();
} //--------------
// ResetCreateTarget
function ResetCreateTarget() {
document.getElementById("CreateTarget").innerText = SGLang.i18n("Text43"); SGWorld.DetachEvent("OnLButtonUp", CreateTarget);
SGWorld.DetachEvent("OnInputModeChanged", ResetCreateTarget);
bInPlaceTarget = false;
SGWorld.Window.SetInputMode(0);
} //--------------
// CreateTarget
function CreateTarget(Flags, X, Y) {
var CursorCoord = SGWorld.Window.pixelToWorld(X, Y);
if (CursorCoord == null)
ResetCreateTarget(); var imageLabelStyle = SGWorld.Creator.CreateLabelStyle(0);
imageLabelStyle.Scale = 1.0; DeleteTarget(); manualTargetLabel = SGWorld.Creator.CreateImageLabel(CursorCoord.Position, abspath() + "/Images/icon.png", imageLabelStyle, SGWorld.ProjectTree.HiddenGroupID, SGLang.i18n("Text45"));
manualTargetLabel.SaveInFlyFile = false;
document.getElementById("targetID").value = manualTargetLabel.TreeItem.Name;
targetObj = manualTargetLabel;
ResetCreateTarget();
} //--------------
// DeleteTarget
function DeleteTarget() {
if (manualTargetLabel != null) {
SGWorld.Creator.DeleteObject(manualTargetLabel.ID);
manualTargetLabel = null;
}
} //--------------
// SetGroupFromSelectedPress
function SetGroupFromSelectedPress() {
var node = SGWorld.ProjectTree.GetNextItem("", 10);
SetTargetGroup(node);
} //--------------
// SetTrackedGroupFromPathName
function SetTrackedGroupFromPathName(pathName) {
var node = SGWorld.ProjectTree.FindItem(pathName);
SetTargetGroup(node);
} //--------------
// SetGroupFromSelectedPress
function SetTargetGroup(nodeID) {
var node = nodeID;
/*To allow layers as well ViewshedQuery tool uses: if (node == 0 || !(SGWorld.ProjectTree.IsGroup(node) || SGWorld.ProjectTree.IsLayer(node))) { */
if (node == 0 || SGWorld.ProjectTree.IsLayer(node)) {
alert(SGLang.i18n("Text39"));
return;
}
if (SGWorld.ProjectTree.IsGroup(node)) {//group
EmptytrackedObjArray();
searchObjects2(node, AddObjectToArray);
document.getElementById("trackedGroupID").value = SGWorld.ProjectTree.GetItemName(node);
}
else {//object
var object = SGWorld.ProjectTree.GetObject(node);
var trackedPosition = object.Position;
if (!trackedPosition) {
alert(SGLang.i18n("Text38"));
return;
} EmptytrackedObjArray();
PushtrackedObj2Array(object);
document.getElementById("trackedGroupID").value = object.TreeItem.Name;
} } //--------------
// StartStop
function StartStop() {
if (!isStart) {
isStart = true;
document.getElementById("targetID").disabled = true;
document.getElementById("SetTargetFromSelected").disabled = true;
document.getElementById("CreateTarget").disabled = true;
document.getElementById("trackedGroupID").disabled = true;
document.getElementById("SetGroupFromSelected").disabled = true;
document.getElementById("warningRadiusID").disabled = true;
document.getElementById("dangerRadiusID").disabled = true;
document.getElementById("chkTint").disabled = true; startstopSpan.innerHTML = SGLang.i18n("Text37"); warningRadius = document.getElementById("warningRadiusID").value;
dangerRadius = document.getElementById("dangerRadiusID").value; }
else {
Reset(false, false);
} } //------------------
// Reset
//------------------
function Reset(FirstTime, FromMouseInputMode) { try {
startstopSpan.innerHTML = SGLang.i18n("Text36");
if (isStart && SGWorld.Project.Name != "") {
isStart = false;
deleteObjs();
}
isStart = false; document.getElementById("targetID").disabled = false;
document.getElementById("SetTargetFromSelected").disabled = false;
document.getElementById("trackedGroupID").disabled = false;
document.getElementById("SetGroupFromSelected").disabled = false;
document.getElementById("warningRadiusID").disabled = false;
document.getElementById("dangerRadiusID").disabled = false;
document.getElementById("chkTint").disabled = false;
document.getElementById("CreateTarget").disabled = false;
}
catch (err) { isStart = false; }
} //-------------
// AddObjectToArray
function AddObjectToArray(object, type, altitudeType) { SGWorld.Window.ShowMessageBarText(SGLang.i18n("Text40"));
SGWorld.ProjectTree.EnableRedraw(0); if (type == 1) {
//In the future may want to work on the pivot of the polyline. was: if (!DrawOnPolyline(geometry, type, altitudeType))
return false;
}
else if (type == 2)
{
//In the future may want to work on the pivot of the polyline. was: if (!DrawOnPolygon(geometry, type, altitudeType))
return false;
}
else // Selected points
{
PushtrackedObj2Array(object);
}
return true;
} //-------------------
//searchObjects2 - modified from ToolsCommon65 searchGeometries
function searchObjects2(parentNode, callbackFunc) {
SGWorld.ProjectTree.EnableRedraw(0);
searchObjectsLeaf2(parentNode, callbackFunc);
SGWorld.ProjectTree.EnableRedraw(1);
}
//-------------------
// searchObjectsLeaf2 - modified from ToolsCommon65 searchGeometriesLeaf2
function searchObjectsLeaf2(parentNode, callbackFunc) { if (SGWorld.ProjectTree.IsLayer(parentNode)) // Layer
{
var layer = SGWorld.ProjectTree.GetLayer(parentNode);
var featureGroups = layer.FeatureGroups;
for (var i = 0; i < featureGroups.Count; i++) // Traverse all sub-layers
{
var featureGroup = featureGroups.Item(i);
var altitudeType = AltitudeMethodToAltitudeType(featureGroup.GetProperty("Altitude Method"));
var features = featureGroup.Features;
for (var j = 0; j < features.Count; j++) {
var ret;
if (featureGroup.GeometryType != 0)
ret = callbackFunc(features.Item(j).Geometry, featureGroup.GeometryType, altitudeType);
else {
if (features.Item(j).Geometry.GeometryType == 0) // Point
{
var position = SGWorld.Creator.CreatePosition(features.Item(j).Geometry.X, features.Item(j).Geometry.Y, features.Item(j).Geometry.Z);
ret = callbackFunc(position, featureGroup.GeometryType, altitudeType);
}
}
if (!ret)
return;
}
}
}
else {
var node = SGWorld.ProjectTree.GetNextItem(parentNode, 11);
while (node != "") {
if (SGWorld.ProjectTree.IsGroup(node) || SGWorld.ProjectTree.IsLayer(node))
searchObjectsLeaf2(node, callbackFunc);
else {
var Object = SGWorld.Creator.GetObject(node);
if (Object != null) {
var altitudeType = Object.Position.AltitudeType;
var ret;
if (Object.ObjectType == 1 || Object.ObjectType == 2)
ret = callbackFunc(Object/*.Geometry*/, Object.ObjectType, altitudeType);
else
ret = callbackFunc(Object/*.Position*/, Object.ObjectType, altitudeType); if (!ret)
return;
}
} node = SGWorld.ProjectTree.GetNextItem(node, 13);
}
}
} //--------------
// EmptytrackedObjArray
function EmptytrackedObjArray() {
while (trackedObjArray.length > 0) {
trackedObjArray.pop();
}
} //--------------
// PushtrackedObj2Array
function PushtrackedObj2Array(object) {
trackedObjArray.push({
"object": object,
"lineObj": null,
"distLabelObj": null,
"level": "undefined"
});
} //------------
//deleteObjs
function deleteObjs() {//In the future move logic to deleteObj that can be called from here and from other places.
try {
//while (trackedObjArray.length > 0)
for (var i = 0; i < trackedObjArray.length; i++) {
//var item = trackedObjArray.pop();
var item = trackedObjArray[i];
if (item.lineObj != null) {
SGWorld.Creator.DeleteObject(item.lineObj.ID);
item.lineObj = null;
}
if (item.distLabelObj != null) {
SGWorld.Creator.DeleteObject(item.distLabelObj.ID);
item.distLabelObj = null;
}
item.level = "undefined";
if (bTint) item.object.Terrain.Tint = SGWorld.Creator.CreateColor(0, 0, 0, 0); }
}
catch (err) { alert(SGLang.i18n("Text41") + err); Reset(0, 0); }
} //------------
//displayProximityInfo
function displayProximityInfo() {
//debugger;
if (!isStart || targetObj == null ) {
return false;
}
try {
for (var i = 0; i < trackedObjArray.length; i++) { //calculate distance
var dist = SGWorld.CoordServices.GetDistance3D(targetObj.Position, trackedObjArray[i].object.Position);
if (dist <= warningRadius) {
//Create/Update polygon
if (trackedObjArray[i].lineObj == null) {
var absoluteTargetObj = targetObj.Position.ToAbsolute(0);
var absoluteTrackedObj = trackedObjArray[i].object.Position.ToAbsolute(0);
var pointsArray = [absoluteTargetObj.X, absoluteTargetObj.Y, absoluteTargetObj.Altitude, absoluteTrackedObj.X, absoluteTrackedObj.Y, absoluteTrackedObj.Altitude];
trackedObjArray[i].lineObj = SGWorld.Creator.CreatePolylineFromArray(pointsArray, colorLineDanger, 3, SGWorld.ProjectTree.HiddenGroupID); //leave this comment: ATC_TERRAIN_ABSOLUTE = 3
trackedObjArray[i].lineObj.SaveInFlyFile = false;
trackedObjArray[i].lineObj.SetParam(5440, 1);
trackedObjArray[i].lineObj.LineStyle.Width = -2
}
else {
trackedObjArray[i].lineObj.Geometry.StartEdit()
//update second point
var absolutePosition = trackedObjArray[i].object.Position.ToAbsolute(0);
trackedObjArray[i].lineObj.Geometry.Points.Item(1).X = absolutePosition.X;
trackedObjArray[i].lineObj.Geometry.Points.Item(1).Y = absolutePosition.Y;
trackedObjArray[i].lineObj.Geometry.Points.Item(1).Z = absolutePosition.Altitude;
trackedObjArray[i].lineObj.Geometry.EndEdit()
}
//Create/Update Text ***arik: Does it look good? what to do when below ground
if (trackedObjArray[i].distLabelObj == null) {
var absoluteTargetObj = targetObj.Position.ToAbsolute(0);
var absoluteTrackedObj = trackedObjArray[i].object.Position.ToAbsolute(0);
var middlePosition = absoluteTargetObj.MoveToward(absoluteTrackedObj, dist / 2);
middlePosition.Altitude = middlePosition.Altitude + warningRadius / 40; var labelStyle = SGWorld.Creator.CreateLabelStyle(0);
labelStyle.Bold = true;
//labelStyle.LineToGround = false;
labelStyle.Scale = warningRadius / 20;
labelStyle.FontSize = 10; trackedObjArray[i].distLabelObj = SGWorld.Creator.CreateTextLabel(middlePosition, dist.toFixed(2), labelStyle, SGWorld.ProjectTree.HiddenGroupID);
trackedObjArray[i].distLabelObj.SaveInFlyFile = false; }
else {
var absoluteTargetObj = targetObj.Position.ToAbsolute(0);
var absoluteTrackedObj = trackedObjArray[i].object.Position.ToAbsolute(0);
var middlePosition = absoluteTargetObj.MoveToward(absoluteTrackedObj, dist / 2);
middlePosition.Altitude = middlePosition.Altitude + warningRadius / 40;
trackedObjArray[i].distLabelObj.Position = middlePosition;
trackedObjArray[i].distLabelObj.Text = dist.toFixed(2);
} //Color objects
var newLevel = (dist > dangerRadius) ? "warning" : "danger";
if (trackedObjArray[i].level != newLevel) {
trackedObjArray[i].lineObj.LineStyle.Color = (newLevel == "danger") ? colorLineDanger : colorLineWarning;
trackedObjArray[i].distLabelObj.Style.TextColor = (newLevel == "danger") ? colorLineDanger : colorLineWarning;
if (bTint) {
trackedObjArray[i].object.Terrain.Tint = (newLevel == "danger") ? colorLineDanger : colorLineWarning;
trackedObjArray[i].object.Terrain.Tint.SetAlpha(0.5);
}
} }
else {
if (trackedObjArray[i].lineObj != null) {
SGWorld.Creator.DeleteObject(trackedObjArray[i].lineObj.ID);
trackedObjArray[i].lineObj = null;
}
if (trackedObjArray[i].distLabelObj != null) {
SGWorld.Creator.DeleteObject(trackedObjArray[i].distLabelObj.ID);
trackedObjArray[i].distLabelObj = null;
}
trackedObjArray[i].object.Terrain.Tint = SGWorld.Creator.CreateColor(0, 0, 0, 0);
} } }
catch (err) { alert(SGLang.i18n("Text41") + err); Reset(0, 0); }
} </script> </body>
</html>

SkylineGlobe 邻近度(Proximity)分析JavaScript源代码的更多相关文章

  1. 分析setting源代码获取sd卡大小

    分析setting源代码获取sd卡大小 android系统有一个特点,即开源,我们可以得到任何一个应用的源代码,比如我们不知道这样的android代码怎么写,我们可以打开模拟器里面的设置(settin ...

  2. 通过分析 JDK 源代码研究 TreeMap 红黑树算法实现

    本文转载自http://www.ibm.com/developerworks/cn/java/j-lo-tree/ 目录: TreeSet 和 TreeMap 的关系 TreeMap 的添加节点 Tr ...

  3. C#/vbscript/JS如何加密保护HTML/javascript源代码

    原文地址:http://www.coding123.net/article/20121008/encrypt-javascript-by-charp-vbscript.aspx 本文通过将源代码进行u ...

  4. Memcached源代码分析 - Memcached源代码分析之消息回应(3)

    文章列表: <Memcached源代码分析 - Memcached源代码分析之基于Libevent的网络模型(1)> <Memcached源代码分析 - Memcached源代码分析 ...

  5. 如何捕获和分析 JavaScript Error

    前端工程师都知道 JavaScript 有基本的异常处理能力.我们可以 throw new Error(),浏览器也会在我们调用 API 出错时抛出异常.但估计绝大多数前端工程师都没考虑过收集这些异常 ...

  6. JS高级调试技巧:捕获和分析 JavaScript Error详解

    前端工程师都知道 JavaScript 有基本的异常处理能力.我们可以 throw new Error(),浏览器也会在我们调用 API 出错时抛出异常.但估计绝大多数前端工程师都没考虑过收集这些异常 ...

  7. 简单分析JavaScript中的面向对象

    初学JavaScript的时候有人会认为JavaScript不是一门面向对象的语言,因为JS是没有类的概念的,但是这并不代表JavaScript没有对象的存在,而且JavaScript也提供了其它的方 ...

  8. 从一道面试题分析javascript闭包

    据说是一不注意就会做错的五道javascript面试题之一,我们来看看这道题长什么样 function Container( properties ) { var objthis = this; fo ...

  9. Java提高篇——通过分析 JDK 源代码研究 Hash 存储机制

    HashMap 和 HashSet 是 Java Collection Framework 的两个重要成员,其中 HashMap 是 Map 接口的常用实现类,HashSet 是 Set 接口的常用实 ...

随机推荐

  1. 2017-11-20 中文代码示例之Vuejs入门教程(一)问题后续

    "中文编程"知乎专栏原文 第一个issue: Error compiling template if using unicode naming as v-for alias · I ...

  2. 【读书笔记】iOS-微信公众平台搭建与开发揭秘

    一,微信公众平台. 1,“再小的个体,也有自己的品牌”,这是微信公众平台的官方广告. 2,微信公众平台没有认证门槛,只需要一个邮箱和手持身份证照片.目前一个身份证号只可注册两个微信公众帐号. 二,LB ...

  3. kvm 安装操作系统问题

    1.出现error processing drive: 解决: --ram 设置到1024 2.分区的时候磁盘文件大小为0 解决:创建虚拟机的时候添加参数ormat=qcow2,size=7,bus= ...

  4. 《AngularJS入门与进阶》图书简介

    一.图书封面 二.图书CIP信息 图书在版编目(CIP)数据 AngularJS入门与进阶 / 江荣波著. – 北京 : 清华大学出版社, 2017 ISBN 978-7-302-46074-9 Ⅰ. ...

  5. Ansible--inventory

    简介 Inventory 是 Ansible 管理主机信息的配置文件,相当于系统 HOSTS 文件的功能,默认存放在 /etc/ansible/hosts.为方便批量管理主机,便捷使用其中的主机分组, ...

  6. 原来这样就可以开发出一个百万量级的Android相机

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由QQ空间开发团队发表于云+社区专栏 最近我负责开发了一个跟Android相机有关的需求,新功能允许用户使用手机摄像头,快速拍摄特定尺寸 ...

  7. onSaveInstanceState场景

    需要注意的是, onSaveInstanceState()方法并不是一定会被调用的, 因为有些场景是不需要保存状态数据的. 比如用户按下BACK键退出activity时, 用户显然想要关闭这个acti ...

  8. 转 fiddler常见的应用场景

    fiddler常见的应用场景   在移动互联网时代,作为软件测试工程师,fiddler绝对是值得掌握并添加进技术栈里的工具之一. 那么,fiddler在日常的测试工作中,一般都有哪些常见的应用场景呢? ...

  9. 将 Azure VM 迁移到 Azure 中的托管磁盘

    Azure 托管磁盘无需单独管理存储帐户,从而简化了存储管理. 还可以将现有的 Azure VM 迁移到托管磁盘,以便受益于可用性集中 VM 的更佳可靠性. 它可确保可用性集中不同 VM 的磁盘完全相 ...

  10. 11-OpenLDAP主从同步

    OpenLDAP主从同步 阅读视图 部署环境 OpenLDAP服务器初始化 配置主服务器同步策略 配置从服务器 OpenLDAP主从同步验证 故障诊断 1. 部署环境 本文以两台服务器为蓝本演示其同步 ...