日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

对geobeansEvent事件回调函数的改进

發布時間:2025/7/25 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 对geobeansEvent事件回调函数的改进 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

demo中提供的geobeansEvent事件回調函數如下:

function?geobeansEvent(id,v1,v2,v3,v4,v5,v6,v7,v8,v9){
?
var?pMap?=?document.GeoBeansMap;
?
switch(id){
?
case?0:
??alert(
"coError:"+id+"\n"+"v1:"+v1+"\n"+"v2:"+v2+"\n"+"v3:"+v3+"\n"+"v4:"+v4+"\n"+"v5:"+v5);
??
break;
?
case?7:
??
//alert("coViewMap:"+id+"\n"+"顯示比例:"+v1+"\n"+"XMIN:"+v2+"\n"+"YMIN:"+v3+"\n"+"XMAX:"+v4+"\n"+"YMAX:"+v5);
??break;
?
case?17://完成地圖繪制
??//alert("coPainted:"+id+"\n"+"v1:"+v1+"\n"+"v2:"+v2+"\n"+"v3:"+v3+"\n"+"v4:"+v4+"\n"+"v5:"+v5);
??
??cc();
??
break;
?
case?18://自動停止閃爍
??//alert("coFlashed:"+id+"\n"+"v1:"+v1+"\n"+"v2:"+v2+"\n"+"v3:"+v3+"\n"+"v4:"+v4+"\n"+"v5:"+v5);
??break;
?
case?8:?//鼠標移動時的圖形坐標
??//alert("coViewPosition:"+id+"\n"+"X:"+v1+"\n"+"Y:"+v2+"\n"+"v3:"+v3+"\n"+"v4:"+v4);
??parent.TOCFrame.setShapeXY(v1,v2);
??
break;
?
case?36://鼠標單擊事件
??//alert("coMouseClick:"+id+"\n"+"X:"+v1+"\n"+"Y:"+v2+"\n"+"v3(ClickCount,x,y):"+v3+"\n"+"v4:"+v4);
??parent.TOCFrame.setShapeXY(v1,v3);
??
break;
?
case?10://成功加載地圖工程
??var?pManager??=?pMap.getManager();
??
var?pLayers?=?document.all("MapConfig");
??
//動態創建圖層配置信息
??var?strBody="<table?width=100%?border=1?cellpadding=0?cellspacing=0>";
??strBody?
+="<tr><td><font?face=黑體?size=2><strong>地圖配置</strong></font></td></tr>";
??
var?nCount=1;
??
var?pNode?=?pManager.getRootNode();
??
while(pNode!=null){
???strBody?
+="<tr><td>";
???strBody?
+=?"<input?type=checkbox?name=C"+nCount+"?value=";
???strBody?
+=?pNode.getName();
???strBody?
+=?"?onClick=JavaScript:setLayerVisible(this)?";
???strBody?
+=?(pNode.isVisible()==true)?"checked>":">";
???strBody?
+=?"<font?size=1>";
???strBody?
+=?pNode.getName();
???strBody?
+=?"</font>";
???strBody?
+=?"</td></tr>";
???pNode?
=?pNode.getSibling();nCount++;
??}

??strBody?
+=?"</table>";
??pLayers.innerHTML
=?strBody;
??
var?pOverview?=?document.VEE;
??pMap.setOverview(pOverview.getOverview());
??pMap.getOptions().setHighlightColorFromString(
"#0000FF");

??
??
break;
?
case?16://成功加載了MapExpress
??//ContextMenu();
??
??
break;
?
case?12://Loading?Layer
??//alert("開始裝載圖層:"+id+"\n"+"圖層名:"+v1);
??break;
?
case?11:
??
//alert("裝載圖層:"+id+"\n"+"圖層名:"+v1+"\n"+"v2:"+v2+"\n"+"v3:"+v3+"\n"+"v4:"+v4);
??//if(v1=="chinar"){
??//?pMap.setLayer("Tiper","CHINAR");
??//}
??//if(v1=="CHINAP")pMap.setLayer("Tiper","CHINAP");
??ok=1;parent.TOCFrame.ok=1;
??
break;
?
case?19:
??
//alert("下載子圖:"+id+"\n子圖號="+v1);
??break;
?
case?21://Overview
??alert("coOverview:"+id+"\nVisible="+v1);
??
break;
?
case?101:case?102:case?103:case?105:case?106:
??
//alert("屬性查詢:"+id+"\n"+"圖層名:"+v1+"\n"+"圖元個數:"+v2+"\n"+"圖元編碼:"+v3+"\n"+"v4:"+v4);
??if(v2=="-1"){
???parent.AttrFrame.location
=v3;
??}
else{
???parent.TOCFrame.setSelectedItem(v1,v3,v4);
??}

??
//獲得被選中的圖形
??//var?pSelector?=?pMap.getSelector();
??//if(pSelector!=null){alert(""+pSelector);
??//?var?pShapes?=?pSelector.getShapes();
??//?if(pShapes)alert(""+pShapes);
??//}
??break;
?
case?101+50:
??
//alert("屬性查詢:"+id+"\n"+"X坐標:"+v1+"\n"+"Y坐標:"+v2+"\n"+"v3:"+v3+"\n"+"v4=:"+v4);
??break;
?
case?102+50:
??alert(
"屬性查詢:"+id+"\n"+"圓心坐標X:"+v1+"\n"+"圓心坐標Y:"+v2+"\n"+"半徑:"+v3+"\n"+"v4=:"+v4+"\n"+"v5=:"+v5);
??
break;
?
case?103+50:
??
//alert("屬性查詢:"+id+"\n"+"X最小值:"+v1+"\n"+"Y最小值:"+v2+"\n"+"X最大值:"+v3+"\n"+"Y最大值:"+v4);
??break;
?
case?105+50:
??
var?pDrawer??=?pMap.getDrawer();
??
var?pPoints??=?pDrawer.getWorldPoints();
??
var?nCount=pPoints.size();
??
var?strValue?=?""+nCount+"(";
??
for(i=0;i<nCount;i++){
???
var?pPoint=pPoints.dotAt(i);
???strValue?
+=?pPoint.m_x?+?"?"?+?pPoint.m_y;
???
if(i<nCount-1)
????strValue?
+=?","
???
??}

??strValue?
+=?")";
??alert(
"屬性查詢:"+id+"\nPoint="?+?strValue);
??
break;
?
case?301+50:
??alert(
"緩沖區查詢:"+id+"\n"+"X坐標:"+v1+"\n"+"Y坐標:"+v2+"\n"+"v3:"+v3+"\n"+"v4=:"+v4);
??
break;
?
case?302+50:
??alert(
"緩沖區查詢:"+id+"\n"+"圓心坐標X:"+v1+"\n"+"圓心坐標Y:"+v2+"\n"+"半徑:"+v3+"\n"+"v4=:"+v4);
??
break;
?
case?303+50:
??alert(
"緩沖區查詢:"+id+"\n"+"X最小值:"+v1+"\n"+"Y最小值:"+v2+"\n"+"X最大值:"+v3+"\n"+"Y最大值:"+v4);
??
break;
?
case?2001:
??alert(
"添加標注點:"+id+"\n"+"圖層名:"+v1+"\n"+"X坐標:"+v2+"\n"+"Y坐標:"+v3);
??parent.TOCFrame.setShapeXY(v2,v3);
??
break;
?
case?2003:
??alert(
"刪除標注點:"+id+"\n"+"圖層名:"+v1+"\n"+"圖元編碼:"+v2);
??
break;
?
case?2004:
??alert(
"修改標注點:"+id+"\n"+"圖層名:"+v1+"\n"+"圖元編碼:"+v2);
??
break;
????????
case?202:case?203:
??
//如果圖形是經緯度坐標,可以利用以下代碼計算地球表面的距離,單位公里
??//var?pDrawer??=?pMap.getDrawer();
??//var?pPoints??=?pDrawer.getWorldPoints();
??//alert("折線長度:"+pPoints.ellipsoidDistance(1)+"公里");
??alert("折線\n長度:"+v1);
??
break;
?
case?211:
??alert(
"圓形區域\n面積:"+v1?+?"\n周長:"+v2);
??
break;
?
case?212:
??alert(
"矩形區域\n面積:"+v1?+?"\n周長:"+v2);
??
break;
?
case?213:
??
//如果圖形是經緯度坐標,可以利用以下代碼計算地球表面的面積,單位平方公里
??//var?pDrawer??=?pMap.getDrawer();
??//var?pPoints??=?pDrawer.getWorldPoints();
??//alert("多邊形面積:"+pPoints.ellipsoidArea()+"平方公里");
??//alert("多邊形區域\n面積:"+v1?+?"\n周長:"+v2);
??break;
?
case?214:
??alert(
"面積查詢:"+id+"\n"+"圖層名:"+v1+"\n"+"圖元個數:"+v2+"\n"+"圖元面積:"+v3+"\n"+"v4:"+v4);
??
break;
?
case?201+50:case?202+50:case?203+50:case?211+50:case?212+50:case?213+50:case?214+50:
??alert(
"地圖量算"+id);
??
break;??
?
//快捷菜單
?case?65://coContextMenuPre
??//pMap.ContextMenu("aaaaaa=8001;bbbbbb=8002",0,0);
??//alert("事件:?"+id+"\n"+"v1:"+v1+"\n"+"v2:"+v2+"\n"+"v3:"+v3+"\n"+"v4:"+v4+"\n"+"v5:"+v5);
??break;
?
case?107:
?
case?8001:
?
case?8002:
?
case?8003:
?
case?8004:
??alert(
"自定義事件:?"+id+"\n"+"v1:"+v1+"\n"+"v2:"+v2+"\n"+"v3:"+v3+"\n"+"v4:"+v4+"\n"+"v5:"+v5);
??
break;
?
case?23://MouseReleased?:?v1=x,v2=y
??//var?pLayer;
??//pLayer.setAutoLabel(0x2000);
??//var?pInfo=pLayer.getLabelInfo();?//此處pInfo為GINote對象,可通過該參數修改標注的字體信息
??//pInfo
??//alert("MouseReleased");
??break;
?}

}

使用switch語句對事件id進行分支判斷。那么,能否對其進行改造呢,肯定是可以的。希望能去掉這個switch語句,具體實現過程如下:
1、實現一個方法,可以判斷某個函數是否存在(相當于反射,根據對象名創建對象的實例,這里采用js實現執行給定名稱的函數,當然要利用eval這個有用的方法了),如果存在則執行這個方法。

/**//**
?*?判斷名稱為給定字符串的一個或多個函數是否存在,執行第一個存在的函數并返回值。
?*?@param?{Array}?funcArguments?函數參數
?*?@arguments?{string}?一個或多個函數名稱
?*?@return?函數執行后的返回值
?
*/

var?applyEval?=?function(funcArguments)?
{
????
for(var?i?=?1;?i?<?arguments.length;?i++)
????
{
????????
var?fName?=?arguments[i];
????????
if(eval('typeof?'?+?fName)?==?"function")
????????
{
????????????
return?eval(fName?+?'.apply(this,?funcArguments)');
????????}

????}

}

2、定義一個geobeans事件哈希表。

?

var?userEventKey?=?{
????Key2:?'OnZoomIn',
????Key7:?'OnZoom',
????Key10:?'Onloaded',
????Key11:?'OnLoadLayer',
????Key21:?'OverView',
????Key36:?'OnClick',
????Key2001:'OnDbClick'
}
;

示例暫時先只定義這幾個事件,可以自己擴展。

3、改造geobeansEvent事件回調函數,使其更利于用戶擴展。

?

var?geobeansEvent?=?function()
{????
????????
var?keyName?=?'Key'?+?arguments[0].toString();
????
if(typeof?userEventKey?!=?'undefined'?&&?userEventKey?!=?null)
????
{
????????
var?f1Name?=?userEventKey[keyName];
????????applyEval(arguments,?f1Name);
????}

}

現在你想寫哪個事件的回調函數,只要寫userEventKey中對應事件的方法就可以了,比如我想在圖層加載事件(事件11,userEventKey中的Key11)回調中進行自定義處理,我只要提供OnLoadLayer方法即可。

以上只是個人的一些改造方法,可能還有其它的好方法,歡迎一起討論。

轉載于:https://www.cnblogs.com/gao241/archive/2006/08/25/486308.html

總結

以上是生活随笔為你收集整理的对geobeansEvent事件回调函数的改进的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。