邻近度(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. JavaScript 把字符串类型转换成日期类型

    今天在写习题时,遇到些小问题,在这里把答案分享给大家,希望能帮助到大家! 一.把字符串转换成日期类型 var str = "1997-3-12"; var d = new Date ...

  2. 使用普通用户执行 docker

    CentOS 版本 7.4,Docker 版本 docker-1.13 及以下 ll /var/run/docker.sock srw-rw----. 1 root root 0 May 25 14: ...

  3. Jquery插件开发之图片放大镜效果(仿淘宝)

    原网转载地址:http://www.cnblogs.com/hnvvv/archive/2011/11/19/2255197.html 需求:公司某个网站,需要实现图片预览效果,并能像淘宝一样实现局部 ...

  4. 【读书笔记】iOS-iOS安全基础知识

    一,iOS硬件/设备的类型. iPad的问世,就是在这一方向上迈出的第一步.第一代iPad使用了ARM Cortex-A8架构的CUP,它的速度大约是第一代iPhone所使用CPU速度的两倍. iPa ...

  5. SQL Server 临时表和表变量系列之选择篇

    原文地址:https://yq.aliyun.com/articles/69187 摘要: # 摘要 通过前面的三篇系列文章,我们对临时表和表变量的概念.对比和认知误区已经有了非常全面的认识.其实,我 ...

  6. Linux : Vim 使用与配置 (附 GitHub 自动化配置脚本)

    由于经常使用 vim 编辑配置文件,有时候也会进行使用vim 编写一些脚本和c/c++ 程序,所以配置一个常用的 vim 是很是必要的.这篇博文主要是记录vim使用和配置相关的一些知识点. 关于vim ...

  7. 用Python实现数据结构之映射

    映射与字典 字典dict是Python中重要的数据结构,在字典中,每一个键都对应一个值,其中键与值的关系就叫做映射,也可以说是每一个键都映射到一个值上. 映射(map)是更具一般性的数据类型,具体到P ...

  8. dell r420 H310/H810阵列配置教程及常见问题

    进入H310/H810阵列卡BIOS界面 阵列卡管理快捷键 如何创建RAID0和RAID1和RAID5 阵列修复篇 Foreign(外来)状态的硬盘应如何处理 1.进入H310/H810阵列卡BIOS ...

  9. Windows端部署zabbix-agent

    一.windows客户端的配置关闭windows防火墙或者开通10050和10051端口(1).关闭防火墙(不推荐直接关闭,测试可以这样做,尤其是最近勒索病毒猛烈)开始—控制面板—windows防火墙 ...

  10. 菜鸟水平如何在Android Studio中添加uiautomator测试框架

    1.启动AS,弹出创建Android Studio项目 2.选择 "Start a new Android Studio project",输入 application name ...