📄 util.js
字号:
Util = new Object();
//yttyy
//dfsd
//create the only id
Util.createUniqueID = function(prefix) {
if (prefix == null) {
prefix = "id_";
}
return prefix + Math.round(Math.random() * 10000000);
}
Util.getValueOfNoPX = function(valueString){
if(!valueString)
return ;
if (valueString.indexOf("px")) {
var i = valueString.indexOf("px");
return Number(valueString.substring(0, i));
}
return Number(valueString);
};
//控制右键菜单的显示
Util.RightMenu = null;
Util.SubElemtRightMenu = false;
Util.CloseRightMenu = function()
{
if( Util.RightMenu !=null )
{
if( Util.RightMenu.hidden )
{
Util.RightMenu.hidden();
}
if( Util.RightMenu.hide )
{
Util.RightMenu.hide();
}
}
Util.RightMenu = null;
return;
}
//用户点击地图 [主要解决用户已进入拖动功能,但这时他又不想拖动了,
//点击门牌/楼宇以外的位置即可解决拖动功能]
CurDragItem = null;
Util.DragItemReset = function ()
{
//如果已进行拖动操作,则取消拖动操作
Drag.CancelEvent();
if( CurDragItem!=null )
{
if( CurDragItem.ResetStatus )
{
CurDragItem.ResetStatus();
}
CurDragItem = null;
}
};
Util.getRealMapWidth = function(fullExtent){
// return Util.distanceByLnglat(fullExtent.getMinX()/1e16,fullExtent.getMaxY()/1e16,fullExtent.getMaxX()/1e16,fullExtent.getMaxY()/1e16);
return dblFullImagWidth;
}
Util.getRealMapHeight = function(fullExtent){
// return Util.distanceByLnglat(fullExtent.getMinX()/1e16,fullExtent.getMinY()/1e16,fullExtent.getMinX()/1e16,fullExtent.getMaxY()/1e16);
return dblFullImagHeight;
}
Util.getRealMapBound1 = function(fullExtent, level){
//获取当前级别地图的比例尺
var scale = Util.zoomScale(level);
var xmin = fullExtent.getMinX()/1e16;
var xmax = fullExtent.getMaxX()/1e16;
var ymin = fullExtent.getMinY()/1e16;
var ymax = fullExtent.getMaxY()/1e16;
//瓦片的长度
//Changed By Deng Guoqi 2008-06-24
var tileWidth = TileSize/96*2.54*scale/100; // 原计算方法逻辑上正确,但与ArcMap中的计算偏差较大,为保持一致,采用固定行列数来进行计算
var cols = Util.getRealMapWidth(fullExtent)/tileWidth; // double
var rows = (ymax - ymin)/((xmax - xmin)/cols);
xmax = (xmax-xmin)/cols*Math.ceil(cols)+xmin;
ymin = ymax -(ymax-ymin)/rows*Math.ceil(rows);
return new Bound(xmin*1e16, xmax*1e16, ymin*1e16, ymax*1e16);
};
//ArcMap出图参数
//全范围宽度(以米为单位)
var dblFullImagWidth = 75979.1643319367;
var dblFullImagHeight = 88513.2661164073;
//1:3000时单张图片宽度(以米为单位)
var dblImgWidth = 173.251652173423;
//1:3000时单张图片宽度(以弧度为单位)
var dblImgE = 0.0018131492526265447 ;
Util.getRealMapBound = function(fullExtent, level){
//获取当前级别地图的比例尺
var scale = Util.zoomScale(level);
var dblImgRW = dblImgE * scale /3000;
var xmin = fullExtent.getMinX()/1e16;
var xmax = fullExtent.getMaxX()/1e16;
var ymin = fullExtent.getMinY()/1e16;
var ymax = fullExtent.getMaxY()/1e16;
//瓦片的长度
//Changed By Deng Guoqi 2008-06-24
var tileWidth = dblImgWidth*(scale/3000);
var cols = Util.GetRealCols(level) + 1;
var rows = Util.GetRealRows(level)+1;
xmax = dblImgRW * cols +xmin;
ymin = ymax - dblImgRW * rows;
return new Bound(xmin*1e16, xmax*1e16, ymin*1e16, ymax*1e16);
};
//原计算方法逻辑上正确,但与ArcMap中的计算偏差较大,为保持一致,采用固定行列数来进行计算
Util.getRealTileSize = function(level){
var scale = Util.zoomScale(level);
var tileWidth = dblImgWidth*(scale/3000);;
return tileWidth;
};
//------------------测试-------------------------------------------------------------
//ArcIMS中距离测量方法
var numDecimals = 5;
function calcDistance(lng1,lat1,lng2,lat2) {
// Note: decimal are not hard coded to allow use with locales using commas instead of points.
var MapUnits = "DEGREES";
// if (clickCount>0) {
var mUnits = MapUnits;
var mDistance = 0;
// var p = clickCount-1;
var Lon1 = lng1;
var Lon2 = lng2;
var Lat1 = lat1;
var Lat2 = lat2;
var LonDist = Lon1-Lon2;
var LatDist = Lat1-Lat2;
if (MapUnits=="DEGREES") {
var A = Math.pow(Math.sin(LatDist / 2),2) + Math.cos(Lat1) * Math.cos(Lat2) * Math.pow(Math.sin(LonDist /2),2);
//var A = Math.cos(Lat1) * Math.cos(Lat2) * Math.pow(Math.sin(LonDist /2),2);
var C = 2 * Math.asin(Math.min(1, Math.sqrt(A)));
var D = (3963 - 13 * Math.sin((Lat1 + Lat2) / 2)) * C
mDistance = D * 5280;
mUnits = "FEET";
} else {
var xD = Math.abs(mX - clickPointX[p]);
var yD = Math.abs(mY - clickPointY[p]);
mDistance = Math.sqrt(Math.pow(xD,2) + Math.pow(yD,2));
}
var theDist = convertUnits(mDistance,mUnits,"METERS");//ScaleBarUnits);
var u = Math.pow(10,numDecimals);
currentMeasure = parseInt(theDist*u+(5/10))/u;
return currentMeasure;
// }
}
// convert the amounts to new units
function convertUnits(theDist1,mUnits,sUnits) {
// Note: decimal are not hard coded to allow use with locales using commas instead of points.
var theDist = parseFloat(theDist1);
var mDistance = theDist;
//alert(theDist);
if (mUnits == "FEET") {
if (sUnits=="MILES") {
mDistance = theDist / 5280;
} else if (sUnits == "METERS") {
mDistance = theDist * (3048/10000);
} else if (sUnits == "KILOMETERS") {
mDistance = theDist * (3048/10000000);
}
} else {
if (sUnits=="MILES") {
mDistance = theDist * (6213711922/10000000000000);
} else if (sUnits == "FEET") {
mDistance = theDist * (3280839895/1000000000);
} else if (sUnits == "KILOMETERS") {
mDistance = theDist / 1000;
}
}
var u = Math.pow(10,numDecimals);
//alert(u);
// if (!isNav)
mDistance = parseInt(mDistance * u + (5/10)) / u;
//alert(mDistance);
return mDistance;
}
//Google Eath 中的距离测量方法
Util.distanceByLnglat = function(lng1,lat1,lng2,lat2){
var radLat1 = Util.Rad(lat1);
var radLat2 = Util.Rad(lat2);
var a = radLat1 - radLat2;
var b = Util.Rad(lng1) - Util.Rad(lng2);
var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
s = s * 6378137.0;// 取WGS84标准参考椭球中的地球长半径(单位:m)
s = Math.round(s * 10000) / 10000;
var s1 = calcDistance(Util.Rad(lng1),radLat1,Util.Rad(lng2),radLat2);
//由于两种JS测量结果与ArcMap中的测量结果相比较,一个偏大,一个偏小,故这里取平均值,以保持与ArcMap中一致
//Changed By Deng Guoqi 2008-06-24
//return s;
return ((s1+s)/2);
}
//得到弧度
Util.Rad = function(d){
return d * Math.PI / 180.0;
}
//-------------------------------------------------------------------------------------------
//获得标尺
Util.zoomScale = function(level){
var scale;
switch(level)
{
case 1:
scale = '250000';
break;
case 2:
scale = '150000';
break;
case 3:
scale = '100000';
break;
case 4:
scale = '50000';
break;
case 5:
scale = '25000';
break;
case 6:
scale = '15000';
break;
case 7:
scale = '8000';
break;
case 8:
scale = '6000';
break;
case 9:
scale = '3000';
break;
default:
scale = -1;
break;
}
return scale;
}
//--------------------------------------
//具体数值适合于2008-5-20切的铜陵市地图
//2008-05-21
//Added by Dengguoqi
//取实际切出的各等级下地图图片的行数
Util.GetRealRows = function(level){
var tileRows;
switch(level)
{
case 1:
tileRows = 3;
break;
case 2:
tileRows = 5;
break;
case 3:
tileRows = 7;
break;
case 4:
tileRows = 15;
break;
case 5:
tileRows = 30;
break;
case 6:
tileRows = 50;
break;
case 7:
tileRows = 94;
break;
case 8:
tileRows = 126;
break;
case 9:
tileRows = 252;
break;
default:
tileRows = -1;
break;
}
return tileRows;
}
//取实际切出的各等级下地图图片的列数
Util.GetRealCols = function(level){
var tileCols;
switch(level)
{
case 1:
tileCols = 5;
break;
case 2:
tileCols = 8;
break;
case 3:
tileCols = 13;
break;
case 4:
tileCols = 26;
break;
case 5:
tileCols = 52;
break;
case 6:
tileCols = 88;
break;
case 7:
tileCols = 165;
break;
case 8:
tileCols = 220;
break;
case 9:
tileCols = 440;
break;
default:
tileCols = -1;
break;
}
return tileCols;
}
//--------------------------------------440
//创建div层
Util.createDiv = function(id,left,top,width,height,img,position,border,opacity){
if(document.getElementById(id)){
return document.getElementById(id);
}
var e = document.createElement('div');
if(id)
e.id = id ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -