`
talentnba
  • 浏览: 92618 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SuperMap IS.NET自定义Action之兴趣点标注

阅读更多

在SuperMap IS.NET AjaxScripts开发中,提供了一个名为SuperMap.IS.Action.js的脚本文件,供开发人员添加自定义动作。

兴趣点(Point Of  Interest)标注算是经常用到的功能,供用户在浏览地图时,对自己感兴趣内容在图上进行标注。

本脚本算是初步完成,提供文本、点、线和面的标注。代码如下:

//用户自定义兴趣点标注
//title: 标注名
//note: 备注
//showPic: 是否显示logo ture/false
//hotpic: logo图片名(包含后缀)
SuperMap.IS.DrawMarkPointAction=function(title, note, showPic, hotpic)
{
    this.type="SuperMap.IS.DrawMarkPointAction";
    var x=null;
    var y=null;
    var _showPic=false;
    var _hotpic=null;
   
    this.Init=function(mapControl)
    {
        this.mapControl=mapControl;
        if(ygPos.browser=="ie")
        {
            mapControl.container.style.cursor="images/cursors/PointQuery.cur";
        }
        else
        {
            mapControl.container.style.cursor="crosshair";
        }
        
        if(showPic != null)
        {
            _showPic = showPic;
        }
        
        if(hotpic == null)
        {
            _hotpic = "images/hotball.gif";
        }
        else
        {
            _hotpic = "images/" + hotpic;
        }
    }
    
    this.Destroy=function()
    {
        this.mapControl=null;
        x=null;
        y=null;
    }
    
    function _OnClick(e)
    {
       x = e.mapCoord.x;
       y = e.mapCoord.y;
       
       if(_showPic == true)
       {
           this.mapControl.CustomLayer.AddMark("markPoint", x, y, null, null, "<div><img src='" + _hotpic + "' style='cursor:pointer' title='" + note + "' /><span> " + title + "</span></div>");
       }
       else
       {
           this.mapControl.CustomLayer.AddMark("markPoint", x, y, null, null, "<div><b>" + title + "</b> " + note + "</div>");
       }
    }
    
    function _OnContextMenu(e)
    {
        this.mapControl.SetAction(null);
    }
    
    function _GetJSON()
    {
        return _ActionToJSON(this.type,[]);
    }

    this.OnClick=_OnClick;
    this.OnContextMenu=_OnContextMenu;
    this.GetJSON=_GetJSON;
}

//用户自定义兴趣线标注
//title: 标注名
//note: 备注
//showPic: 是否显示标注内容
//hotpic: logo图片名(包含后缀)
SuperMap.IS.DrawMarkLineAction=function(title, note, showLabel, hotpic)
{
    this.type="SuperMap.IS.DrawMarkLineAction";
    var actionStarted=false;    
    var keyPoints=new Array();
    var xs=new Array();
    var ys=new Array();
    var _showLabel=false;
    var _hotpic=null;
    
    this.Init=function(mapControl)
    {
        this.mapControl=mapControl;
        if(ygPos.browser=="ie")
        {
            mapControl.container.style.cursor="images/cursors/PointQuery.cur";
        }
        else
        {
            mapControl.container.style.cursor="crosshair";
        }
        
        if(showLabel != null)
        {
            _showLabel = showLabel;
        }
        
        if(hotpic == null)
        {
            _hotpic = "images/hotball.gif";
        }
        else
        {
            _hotpic = "images/" + hotpic;
        }
    }
    
    this.Destroy=function()
    {
        this.mapControl=null;
        xs=null;
        ys=null;
    }
    
    function _OnClick(e)
    {        
        if(!actionStarted)
        {
            keyPoints.push(e.mapCoord);
            xs.push(e.mapCoord.x);ys.push(e.mapCoord.y);
            actionStarted=true;         
        }       
        
        keyPoints.push(e.mapCoord);
        xs.push(e.mapCoord.x);ys.push(e.mapCoord.y);
    }
    
    this.OnMouseMove=function(e){
        if(!actionStarted){return false;}
        keyPoints.pop();
        xs.pop();ys.pop();
        keyPoints.push(e.mapCoord);
        xs.push(e.mapCoord.x);ys.push(e.mapCoord.y);
        this.mapControl.CustomLayer.InsertLine(title,xs,ys,2,"blue");
    }
        
    function _OnContextMenu(e)
    {
        if(_showLabel == true)
        {
            var i = Math.round(keyPoints.length / 2) - 1;    
            this.mapControl.CustomLayer.InsertMark("markPoint", xs[i], ys[i], null, null, "<div><img src='" + _hotpic + "' style='cursor:pointer' title='" + note + "' /><span>" + title + "</span></div>");
        }
        
        this.mapControl.SetAction(null);
    }
    
    function _GetJSON()
    {
        return _ActionToJSON(this.type,[]);
    }

    this.OnClick=_OnClick;
    this.OnContextMenu=_OnContextMenu;
    this.GetJSON=_GetJSON;
}

//用户自定义兴趣面标注
//title: 标注名
//note: 备注
//showPic: 是否显示标注内容
//hotpic: logo图片名(包含后缀)
SuperMap.IS.DrawMarkPolygonAction=function(title, note, showLabel, hotpic)
{
    this.type="SuperMap.IS.DrawMarkPolygonAction";
    var actionStarted=false;
    var keyPoints=new Array();
    var xs=new Array();
    var ys=new Array();
    var xcenter=0;
    var ycenter=0;
    var _showLabel=false;
    var _hotpic=null;
    
    this.Init=function(mapControl)
    {
        this.mapControl=mapControl;
        if(ygPos.browser=="ie")
        {
            mapControl.container.style.cursor="images/cursors/PointQuery.cur";
        }
        else
        {
            mapControl.container.style.cursor="crosshair";
        }
        
        if(showLabel != null)
        {
            _showLabel = showLabel;
        }
        
        if(hotpic == null)
        {
            _hotpic = "images/hotball.gif";
        }
        else
        {
            _hotpic = "images/" + hotpic;
        }
    }
    
    this.Destroy=function()
    {
        this.mapControl=null;
        xs=null;
        ys=null;
    }
    
    function _OnClick(e)
    {        
        if(!actionStarted)
        {
            keyPoints.push(e.mapCoord);
            xs.push(e.mapCoord.x);ys.push(e.mapCoord.y);
            actionStarted=true;         
        }       
        
        keyPoints.push(e.mapCoord);
        xs.push(e.mapCoord.x);ys.push(e.mapCoord.y);
    }
    
    this.OnMouseMove=function(e){
        if(!actionStarted){return false;}
        keyPoints.pop();
        xs.pop();ys.pop();
        keyPoints.push(e.mapCoord);
        xs.push(e.mapCoord.x);ys.push(e.mapCoord.y);
        this.mapControl.CustomLayer.InsertPolygon(title, xs, ys, 2, "blue", "white", 0.6,1);
    }
        
    function _OnContextMenu(e)
    {
        if(_showLabel == true)
        {
            // 多边形几何中心
            var n = keyPoints.length;
            for(var i=0; i<n; i++)
            {
                xcenter += xs[i] / n;
                ycenter += ys[i] / n;
            }
            
            this.mapControl.CustomLayer.InsertMark("markPoint", xcenter, ycenter, null, null, "<div><img src='" + _hotpic + "' style='border:0px; cursor:pointer' title='" + note + "' /><span>" + title + "</span></div>");
        }
        
        this.mapControl.SetAction(null);
    }
    
    function _GetJSON()
    {
        return _ActionToJSON(this.type,[]);
    }

    this.OnClick=_OnClick;
    this.OnContextMenu=_OnContextMenu;
    this.GetJSON=_GetJSON;
}
调用方法:

function SetCustomMark()
{
    var caption = $("Caption").value;
    var remark = $("Remark").value;
    var type = $("mark_type").value;
   
    switch(type)
    {
        case "text":
            SetMarkTextAction(caption,remark);
            break;
        case "point":
            SetMarkPointAction(caption,remark);
            break;
        case "line":
            SetMarkLineAction(caption,remark);
            break;
        case "polygon":
            SetMarkPolygonAction(caption,remark);
            break;
        default:
            break;
    }
}

function SetMarkTextAction(caption,remark)
{
    markPointAction = new SuperMap.IS.DrawMarkPointAction(caption,remark,false);
    MapControl1.SetAction(markPointAction);
}

function SetMarkPointAction(caption,remark)
{
    markPointAction = new SuperMap.IS.DrawMarkPointAction(caption,remark,true);
    MapControl1.SetAction(markPointAction);
}

function SetMarkLineAction(caption,remark)
{
    markLineAction = new SuperMap.IS.DrawMarkLineAction(caption,remark);
    MapControl1.SetAction(markLineAction);
}

function SetMarkPolygonAction(caption,remark)
{
    markPolygonAction = new SuperMap.IS.DrawMarkPolygonAction(caption,remark);
    MapControl1.SetAction(markPolygonAction);
}
脚本下载地址:http://download.csdn.net/source/591063


还有部分待完善,使自主标注内容能在线保存:)


欢迎提供建议!

分享到:
评论

相关推荐

    SuperMap Objects .NET自定义模型显示

    7. **集成到应用**:最后,将自定义模型集成到SuperMap应用中,可能需要处理地图的投影、坐标系统转换,以及与其他GIS元素(如图层、标注等)的协调。 通过以上步骤,开发者可以利用SuperMap Objects .NET的强大...

    SuperMap iObjects .NET 自定义鼠标右键移动地图

    本示例主要关注如何利用SuperMap iObjects .NET 自定义鼠标右键来实现地图的移动功能,这对于交互式地图应用来说是非常关键的一部分。 首先,理解`SuperMap iObjects .NET`的核心概念是至关重要的。它是SuperMap ...

    supermap is.net GIS案例 专题图制作 缓冲分析 图层查询 图层编辑 点选 框选 点居中 点选

    supermap is.net GIS案例 专题图制作 缓冲分析 图层查询 图层编辑 点选 框选 点居中 点选supermap is.net GIS案例 专题图制作 缓冲分析 图层查询 图层编辑 点选 框选 点居中 点选supermap is.net GIS案例 专题图制作...

    iclient for silverlight使用SuperMap IS.NET自定义引擎功能

    本篇文章将深入探讨如何利用iClient for Silverlight调用SuperMap IS.NET的自定义引擎功能,特别是动态分段这一特性。 首先,理解“自定义引擎”是关键。在GIS领域,自定义引擎允许开发者根据特定需求定制地图渲染...

    SuperMap Objects .NET 自定义鼠标光标

    本示例主要聚焦于如何利用SuperMap Objects .NET 自定义地图操作时的鼠标光标,以实现更加个性化的用户体验。 首先,我们要了解在.NET环境中,SuperMap Objects 提供了丰富的接口和类来处理地图对象和操作。其中,...

    SuperMap Deskpro .NET 自定义对象绘制

    本文将深入探讨如何在SuperMap Deskpro .NET中使用GeometryDrawing类来实现自定义对象的绘制,特别是绘制箭头对象。 首先,我们需要了解GeometryDrawing类。这是SuperMap .NET SDK中的一个重要类,用于在地图上绘制...

    SuperMap IS .NET 2008 帮助文档

    SuperMap IS .NET 2008 帮助文档

    SuperMap Objects .NET制作自定义专题图

    在本文中,我们将深入探讨如何使用SuperMap Objects .NET库来创建自定义专题图。SuperMap Objects .NET是SuperMap GIS软件开发套件的一部分,它为开发者提供了丰富的接口和类库,使得在.NET环境中构建GIS应用程序变...

    SuperMap IS .NET 培训 PPT

    SuperMap IS .NET 1.整体介绍 SuperMap IS .NET 2.架构体系 SuperMap IS .NET 3.配置与部署 SuperMap IS .NET 5.Ajax开发的原理 SuperMap IS .NET 6.AjaxMap对象结构 SuperMap IS .NET 7.地图对象开发 SuperMap IS ...

    SuperMap IS .NET 使用手册

    - **全球化应用**:SuperMap IS .NET 作为一款基于 Internet 的 GIS 解决方案,能够支持全球任何地点的用户访问其提供的服务。这意味着无论用户身处何地,只要连接到互联网,就能够利用这套系统进行 GIS 数据的操作...

    SuperMap Objects .NET 自定义图层对象压盖顺序

    本文将深入探讨如何利用SuperMap Objects .NET 实现自定义图层对象的压盖顺序,根据图层数据集中的特定字段值进行升序或降序排列。 首先,理解图层(Layer)是GIS中的基本概念,它包含了同一类型的数据,如点、线、...

    SuperMap Objects .NET 自定义专题图转换为CAD数据集

    本示例主要关注如何使用SuperMap Objects .NET进行自定义专题图到CAD数据集的转换,并实现图层替换。下面我们将详细探讨这个过程涉及的关键知识点。 首先,我们要理解什么是自定义专题图。专题图是GIS中的一个重要...

    SuperMap IS.NET6客户端聚合GoogleMap源码

    1. 初始化SuperMap IS.NET 6地图控件:首先,我们需要创建一个IS.MapControl对象,并设置其属性,如地图宽度、高度、初始中心点等。 ```csharp IS.MapControl mapControl = new IS.MapControl(); mapControl.Width ...

    SuperMap Deskpro .NET 6R自定义桌面登陆界面

    总之,自定义SuperMap Deskpro .NET 6R的桌面登录界面是一项技术性和创新性的工作,它要求开发者具备.NET Framework和SuperMap API的扎实基础,同时也考验着设计师的用户体验设计能力。通过灵活运用这些知识,开发者...

    SuperMap IS .NET开发入门教程

    SuperMap IS .NET开发入门教程 GettingStart SuperMap IS .NET.pdf

    SuperMap iObject .NET在WPF应用程序开发

    本篇文章将深入探讨如何在WPF(Windows Presentation Foundation)应用程序中利用SuperMap iObject .NET进行开发,以及涉及的关键技术点。 首先,我们要理解WPF与SuperMap iObject .NET的集成机制。WPF是微软推出的...

    supermap object.net入门

    ### SuperMap Objects.NET入门知识点详解 #### 一、SuperMap Objects.NET概述 **SuperMap Objects.NET**是一款由北京超图软件股份有限公司开发的基础地理信息系统(GIS)开发平台,专为.NET技术栈设计,旨在加速...

Global site tag (gtag.js) - Google Analytics