在三維GIS的規(guī)劃、公安等應用系統(tǒng)中,常需要操作者在地圖上動態(tài)勾畫出面狀區(qū)域,以便用來觀看,并能夠進行保存查看。
創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),邛崍企業(yè)網(wǎng)站建設(shè),邛崍品牌網(wǎng)站建設(shè),網(wǎng)站定制,邛崍網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,邛崍網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。skyline的BS開發(fā)是采用JavaScript語言進行開發(fā),最新版的6.6可以支持chrome、Firefox、IE瀏覽器,但隨著chrome的更新,不再支持npgapi的方式,最新版的chrome上會失效,一直以來在IE瀏覽器上的支持比較穩(wěn)定,建議在IE上開發(fā)使用。
面狀區(qū)域繪制類似于TerraExplorer上的畫面操作,只是這個用程序?qū)崿F(xiàn)。
具體步驟如下:
在開始進行標繪時,首先仿照TE的方式,先將鼠標的樣式變化一下,之后進行事件綁定
//變換鼠標的樣式,定義全局使用對象
SGWorld.Window.SetInputMode(1,"",0);
LbFlags=true;
polygon=null;
//綁定TE的三個事件:左鍵、右鍵、每幀變化 SGWorld.AttachEvent("OnLButtonDown", OnleftbtnUp); SGWorld.AttachEvent("OnRButtonDown", OnRButtonUpp); SGWorld.AttachEvent("OnFrame", Onframe); //OnleftbtnUp、OnRButtonUpp、Onframe是三個事件的具體實現(xiàn),使用JavaScript的function即可; //左鍵事件實現(xiàn) function OnleftbtnUp(Flags,X,Y) { if (LbFlags) { //首先獲得屏幕上點擊的左鍵鼠標的地圖位置,需要將鼠標位置轉(zhuǎn)換地圖坐標 var CursorCoord = SGWorld.Window.pixelToWorld(X, Y); if (CursorCoord == null) return false; if (polygon == null) { // 在進行畫面的時候,通常是先畫一條線,因為一個面至少需要3個點 var myGeometry = SGWorld.Creator.GeometryCreator.CreateLineStringGeometry([CursorCoord.Position.x, CursorCoord.Position.y, 0, CursorCoord.Position.x, CursorCoord.Position.y, 0]); polygon = SGWorld.Creator.createPolyline(myGeometry, SGWorld.Creator.CreateColor(255, 255, 0, 1), 2, -1,"gPolylineText"); polygon.LineStyle.Width = 1; polygon.Geometry.StartEdit(); } else { if (polygon.ObjectType == 1) { //當有3個點的時候,就把前邊畫的線給刪除掉 var x = polygon.Geometry.Points.Item(0).X; var y = polygon.Geometry.Points.Item(0).Y; SGWorld.Creator.DeleteObject(polygon.ID); // 開始畫面 var myGeometry = SGWorld.Creator.GeometryCreator.CreateLinearRingGeometry([x, y, 0, CursorCoord.Position.x, CursorCoord.Position.y, 0, CursorCoord.Position.x, CursorCoord.Position.y, 0]) polygon = SGWorld.Creator.createPolygon(myGeometry, SGWorld.Creator.CreateColor(255, 255, 0, 255), SGWorld.Creator.CreateColor(255, 255, 0, 255), 2, 0, "gPolygonText"); polygon.LineStyle.Width = 1; polygon.Terrain.GroundObject = true; polygon.Geometry.StartEdit(); } else { //編輯面的環(huán)中點,并增加點 polygon.Geometry.Rings(0).Points.Item(polygon.Geometry.Rings(0).Points.count - 1).X = CursorCoord.Position.x; polygon.Geometry.Rings(0).Points.Item(polygon.Geometry.Rings(0).Points.count - 1).Y = CursorCoord.Position.y; polygon.Geometry.Rings(0).Points.Item(polygon.Geometry.Rings(0).Points.count - 1).Z = 0; polygon.Geometry.Rings(0).Points.AddPoint(CursorCoord.Position.x, CursorCoord.Position.y, 0); } } } } //每幀事件,實現(xiàn)在沒有完成畫面的時候,面的最后一個跟隨鼠標移動 function Onframe() { if (polygon != null) { try { //獲得當前鼠標的位置,使面的最后一個點隨著鼠標移動 var mouseInfo = SGWorld.Window.GetMouseInfo() var CursorCoord = SGWorld.Window.pixelToWorld(mouseInfo.X, mouseInfo.Y); if (CursorCoord == null) return false; if (polygon.ObjectType == 2) { polygon.Geometry.Rings(0).Points.Item(polygon.Geometry.Rings(0).Points.count - 1).X = CursorCoord.Position.x; polygon.Geometry.Rings(0).Points.Item(polygon.Geometry.Rings(0).Points.count - 1).Y = CursorCoord.Position.y; polygon.Geometry.Rings(0).Points.Item(polygon.Geometry.Rings(0).Points.count - 1).Z = 0; } else { polygon.Geometry.Points.Item(polygon.Geometry.Points.count - 1).X = CursorCoord.Position.x; polygon.Geometry.Points.Item(polygon.Geometry.Points.count - 1).Y = CursorCoord.Position.y; polygon.Geometry.Points.Item(polygon.Geometry.Points.count - 1).Z = 0; } } catch (e) { } } } //右鍵事件,面繪制完成時,將狀態(tài)恢復到畫面之前,完成畫面。
function OnRButtonUpp(Flags, X, Y){
//SGWorld.ProjectTree.EndEdit();
if (polygon != null)
{
if (polygon.ObjectType == 1)
polygon.Geometry.Points.DeletePoint(polygon.Geometry.Points.count - 1);
else polygon.Geometry.Rings(0).Points.DeletePoint(polygon.Geometry.Rings(0).Points.count - 1);
polygon.Geometry.EndEdit();
}
SGWorld.Window.SetInputMode(0,"",0);
LbFlags=false;
}
上邊是整個應用功能實現(xiàn)的代碼,其中像線寬、填充顏色等參數(shù),參照API文檔,就可以自定義進行實現(xiàn)。
創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務部署。公司持有工信部辦法的idc、isp許可證, 機房獨有T級流量清洗系統(tǒng)配攻擊溯源,準確進行流量調(diào)度,確保服務器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務器買多久送多久。
本文標題:skyline應用-BS動態(tài)繪制面狀區(qū)域-創(chuàng)新互聯(lián)
新聞來源:http://jinyejixie.com/article26/dcghcg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計、虛擬主機、云服務器、品牌網(wǎng)站設(shè)計、網(wǎng)站收錄、微信公眾號
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容