[地图SkyLine二次开发]框架(5)完结篇

上节讲到,将菜单悬浮到地图上面,而且任何操作都不会让地图把菜单盖住。

这节带大家,具体开发一个简单的功能,来了进一步了解,这个框架。

1.想菜单中添加按钮

-上节定义的mainLayout.js文件里,定义按钮,并实例化它。

-将按钮添加到,ZZH.view.MainLayout中。

-运行看一下效果。

2.按钮加事件

-app/control文件夹里创建MainController.js里加上如下代码

-运行,并点击按钮测试,就是如下效果。

3.开发一个,画直线的功能。

-在MainController.js文件最下面加上如下代码。

//创建线对象
var CreateTerrainProfile_Line = null;
function CreateTerrainProfile_DrawLine() {

    if (sgworld == null) {
        sgworld = CreateSGObj();
    }
    CreateTerrainProfile_Line = null;
    sgworld.AttachEvent("OnLButtonDown", CreateTerrainProfile_OnLButtonDown);
    sgworld.AttachEvent("OnFrame", CreateTerrainProfile_OnFrame);
    sgworld.AttachEvent("OnRButtonDown", CreateTerrainProfile_OnRButtonDown);
    sgworld.Window.SetInputMode(1);

}

//创建线右键事件
function CreateTerrainProfile_OnRButtonDown(Flags, X, Y) {

    sgworld.DetachEvent("OnFrame", CreateTerrainProfile_OnFrame);
    sgworld.DetachEvent("OnLButtonDown", CreateTerrainProfile_OnLButtonDown);
    sgworld.DetachEvent("OnRButtonDown", CreateTerrainProfile_OnRButtonDown);
    var lineGeometry = CreateTerrainProfile_Line.Geometry;
    lineGeometry.Points.DeletePoint(lineGeometry.Points.Count - 1);
    sgworld.Window.SetInputMode(0);
    CreateTerrainProfile_Line.Geometry.EndEdit();
    return true;

}
//创建线左键事件
function CreateTerrainProfile_OnLButtonDown(Flags, X, Y) {
    var groupid = sgworld.ProjectTree.FindItem("[画图]");

    var startPoint = sgworld.Window.PixelToWorld(X, Y);

    if (startPoint == null) {
        return false;
    }
    else {
        if (CreateTerrainProfile_Line == null) {
            var lineString = sgworld.Creator.GeometryCreator.CreateLineStringGeometry([startPoint.Position.X, startPoint.Position.Y, 0, startPoint.Position.X, startPoint.Position.Y, 0]);

            CreateTerrainProfile_Line = sgworld.Creator.CreatePolyline(lineString, sgworld.Creator.CreateColor(255, 0, 255, 155), 0, groupid, "polyline");
            CreateTerrainProfile_Line.LineStyle.Width = -2;
            CreateTerrainProfile_Line.Geometry.StartEdit();

        }
        else {
            var lineGeometry = CreateTerrainProfile_Line.Geometry;
            var endPoint = lineGeometry.EndPoint;
            endPoint.X = startPoint.Position.X;
            endPoint.Y = startPoint.Position.Y;
            endPoint.Z = 0;
            lineGeometry.Points.AddPoint(startPoint.Position.X, startPoint.Position.Y, 0);
        }
    }
    return true;

}
//画线橡皮筋效果
function CreateTerrainProfile_OnFrame() {
    var mouseInfo = sgworld.Window.GetMouseInfo();
    var endPoint = sgworld.Window.PixelToWorld(mouseInfo.X, mouseInfo.Y);
    if (CreateTerrainProfile_Line != null) {
        var lineGeometry = CreateTerrainProfile_Line.Geometry;
        var lineEndPoint = lineGeometry.Endpoint;
        lineEndPoint.X = endPoint.Position.X;
        lineEndPoint.Y = endPoint.Position.Y;
        lineEndPoint.Z = 0;
    }
}

-并在MainController我们刚添加的测试按钮中,添加CreateTerrainProfile_DrawLine()的调用

-运行看效果(图片上五角星就是我画出来的折线)

-在工程树上可以看到刚画出来折线的对象,这里就不展示了。

4.结束语

  到这里,我们的SkyLine项目的前段Web应用框架就搭好了,具体菜单页的布局,以及菜单的伸缩等等,这都要靠大家的想象力啦。。。

开发了3-4个月左右,感觉Skyline项目不是那么太难,涉及到的算法或技术,在帮助文档里面也都能找到。

问题就在前端美工,用Skyline自带的弹出式HTML页,有很多不便,所以才采用了Iframe配合Extjs的这种前端框架。

框架部分就更新到这里,希望对大家有所帮助。

希望大家多多推荐,顶起来。^^

时间: 2024-08-26 13:04:30

[地图SkyLine二次开发]框架(5)完结篇的相关文章

[地图SkyLine二次开发]框架(2)

上节讲到,地图加载. 但我们可以发现,当没有页面布局的情况下,<OBJECT>控件,没有占满整个屏幕,这里我们就要用到Extjs的功能了. 这节要讲的是用Extjs为<OBJECT>控件布局,让它适应任何版本的IE浏览器(因为SkyLine目前只支持IE). 1.将Extjs包引进项目. -这里需要注意,网上下载的Extjs5.0包里,包含有很多例子之类的,为了保证项目尽可能的干净,我们只去一小部分. 2.在项目中应用 -我们在上一节,将OBJECT空间直接写在Index.csht

[地图SkyLine二次开发]框架(3)

上节将显示我们地图的OBJECT控件,布了一下局,但地图没有进行加载. 这是因为我们要在另一个页面,对OBJECT控件进行地图加载,并且得到该控件的sgworld,以便对其进行我们想要的开发. 这里,细心的人会说,为什么要在另一个页面加载呢?为什么不在OBJECT所在页面进行加载呢? 这也是一个比较关键性的问题,原因很简单, 因为Object控件上,放置任何DIV,SPAN,或者其他控件时,都会被Object控件覆盖在下面. 在网上找了很多办法,最有效的,而且项目中常用到的就是IFRAME方法.

[地图SkyLine二次开发]框架(4)

继续上一节... 1.Extjs5.0版Menu. -将Extjs包引入MenuPage.html页. 2.前段用Extjs的MVC框架 -在根目录下创建app文件夹,文件夹下分别创建controller,model,store,view文件夹 -根目录下创建app.js文件 -view文件夹下创建MainLayout.js文件 -controller文件夹下创建MainController.js文件 3.菜单页面布局 -MainLayout.js代码 Ext.define('ZZH.view.

[地图SkyLine二次开发]关于IE内存限制问题(1G)......(续)

二次开发Skyline时(B/S),经常会遇到,IE浏览器内存不够,导致崩溃的问题. 在上一个博文中写到,将IE-32bit浏览器内存限制扩展的解决办法. 上一个博文中做出来的iexplore.exe的基础上,将Skyline的安装包,以及适应浏览器版本的程序,打包成一个安装包. 在客户第一次登陆本系统时,让客户只需安装一次就OK. 一.准备工作: 1.下载.NetFrameWork4.5 2.将IE各个版本,按上一个博文中的方法,对应每一个版本,都做出来iexplore.exe 3.做适应IE

[地图SkyLine二次开发]关于IE内存限制问题(1G)

相信很多人也遇到过同样的问题,地图加载中,IE占用的内存一直增加,到了1G多一些的时候,IE就崩溃了. 在网上查阅了一番,有很多结果,下面归纳一下: a).64bit的IE最多可达到4G的内存,但Skyline6.5只支持IE-32bit,据说6.6会支持Google,Fireforx,IE-64bit等浏览器,但目前解决不了问题,pass掉 b).360.捷豹等国内开发且使用IE-32bit内核的,据说对内存问题有所改善,测试了一下,结果还算令人满意,但项目要求支持IE浏览器,So Pass掉

【0002(基础)】Skyline二次开发入门经典系列教程&mdash;&mdash;目录

这段时间由于个人事务太多,以至于没有按照时间更新系列教程,本人将尽快补上所欠章节,在此说声抱歉!   这一章在我心目中占有很重要的地位,因为我想通过这一章的内容来确定整个系列的大致走向.然而在整理的过程中,发现现实远比想象要复杂得多:首先想尽可能介绍较多的知识点,其次又要考虑学习的简易程度,再次又要确定顺当的知识体系流程-- 由于暂时的考虑无论如何也是不可能完备的,因此为了不影响后面教程的编写,暂定把这一章作为一个[流动性质]的可变章节,在编写每一章时,动态根据实际情况修改(添加.移动.修改)系

【0001(基础)】Skyline二次开发入门经典系列教程总览

本人是从2012年开始接触Skyline二次开发的,经历过 v6.0~v6.5(最新的6.6版本还未使用)的所有版本.作为一名非GIS专业毕业的大学本科生,鬼使神差般地进入了这个瑰丽的GIS领域.因此,在从事了4年多的Skyline二次开发工作后,我不能说我是"授业有专攻",更不能说我是"闻道有先后".在这个领域内,大牛之人比比皆是,正是因为他们的存在与指引,才使得我现在有点东西可以写出来供大家交流沟通.   整理这个系列教程的原因主要出于如下几点的考虑: 1.Sk

百度地图API二次开发小经验分享

最近在做一个物流后台系统,需要用地图来把订单地址展示出来,需要在地图上批量框选坐标进行排单,需要看到配送员的实时位置等等功能. 在高德地图.腾讯地图.百度地图三者间,我选了百度地图,没有原因,个人偏好,因此我也不知道高德地图和腾讯地图好不好用.反正到目前为止,我所想到的功能,百度都有对应的接口提供,点个赞. 一.关于百度地图的JavaScript API 在网站上通过js直接来调用百度的api,使用方法很简单,可以参考官网:http://developer.baidu.com/map/index

业务系统-呼叫中心二次开发(已完结)

一. 批量筛号: 1.输入:案件批次号 输出:该批次的所有电话号码(非有效状态),进行批量筛号,将未知状态的号码标志为有效和无效. 2.Table: Call_Filter_Task     =(Id, Step, Status, BatchId,  CateGoryId, TaskType, TotalNum, Creator, CreateTime, RunBeginTime, RunEndTime) Call_Filter_Send_Batch    = (Id, Status, Filt