SuperMap.IS.AjaxScript缓冲区分析及专题图制作

在缓冲区分析上,SuperMap.IS.AjaxScript提供的主要功能函数有spatialAnalystManager.BufferQuerybufferParam,qeruyParam,onComplete,onError,以及最近地物查询的函数QueryManager.FindNearestpoint,tolerance,queryparam,onComplete,onError)这两个。(后者只会显示一条记录,曾因这个方法而以为是程序出了问题而调试了半天……^_^)。bufferParam对象的相关属性可以查询该类的帮助,包括高亮显示,是否查询所有图层,查询字段等,写的时候感觉比写AGSADF要舒服很多。先贴是缓冲区的代码。^_^


ContractedBlock.gif ExpandedBlockStart.gif Code
  1///<summary>缓冲区半径、最近物查询</summary>
  2
  3ExpandedBlockStart.gifContractedBlock.gifHJMapUtils.AnalysisUtils = Class(object, {
  4
  5ExpandedSubBlockStart.gifContractedSubBlock.gif Create: function(mapControl, divResult) {
  6
  7    ///<summary>构造函数</summary>
  8
  9    ///<param name="mapControl">操作的mapcontrol对象</param>
 10
 11    ///<param name="divResult">查询结果显示的div块</param>
 12
 13        this.MapControl1 = mapControl;
 14
 15        object.divResult = divResult;
 16
 17}
,
 18
 19ExpandedSubBlockStart.gifContractedSubBlock.gifFindNearestByMapCoord_Buffer: function(x, y, distance, hasGeometry, returnFields, whereClause, queryLayers, highLight, penColor, brushColor, backTransparent) {
 20
 21    ///<summary>根据坐标值来进行缓冲区分析</summary>
 22
 23    ///<param name="x">坐标x值</param>
 24
 25    ///<param name="y">坐标x值</param>
 26
 27    ///<param name="distance">缓冲区查询范围</param>
 28
 29   ///<param name="hasGeometry">是否查询空间数据</param>
 30
 31    ///<param name="returnFields">返回字段(多字段用','隔开)</param>
 32
 33    ///<param name="whereClause">图层限制条件(多字段用','隔开)</param>
 34
 35    ///<param name="queryLayers">查询图层(多字段用','隔开)</param>
 36
 37    ///<param name="highLight">是否高亮显示</param>
 38
 39    ///<param name="penColor">线颜色</param>
 40
 41    ///<param name="brushColor">填充颜色</param>
 42
 43    ///<param name="backTransparent">背景色是否透明</param>
 44
 45 
 46
 47        var spatialAnalystManager = this.MapControl1.GetSpatialAnalystManager();
 48
 49        var bufferParam = new SuperMap.IS.BufferParam();//设置缓冲区查询参数
 50
 51        bufferParam.distance = parseFloat(distance);
 52
 53        bufferParam.fromCustomGeo = true;
 54
 55        bufferParam.geometries = new Array();
 56
 57        bufferParam.queryMode = 9;//缓冲区查询模式(很多的,具体参照帮助)
 58
 59        var geo = new SuperMap.IS.Geometry();//这里是指定单点查询,自定义类别
 60
 61        geo.feature = 1;
 62
 63        geo.points = new Array();
 64
 65        var point = new SuperMap.IS.MapCoord(parseFloat(x), parseFloat(y));
 66
 67        geo.points[0= point;
 68
 69        bufferParam.geometries[0= geo;
 70
 71 
 72
 73        var queryParam = new SuperMap.IS.QueryParam();//查询参数(高亮等)
 74
 75        queryParam.hasGeometry = hasGeometry;
 76
 77        queryParam.expectCount = 10000;
 78
 79        queryParam.highlight = new SuperMap.IS.Highlight();
 80
 81        queryParam.highlight.highlightResult = highLight;
 82
 83        queryParam.highlight.queryAreaStyle = new SuperMap.IS.Style();
 84
 85        queryParam.highlight.queryAreaStyle.penColor = parseInt(penColor);
 86
 87        queryParam.highlight.queryAreaStyle.brushBackTransparent = backTransparent;
 88
 89 
 90
 91        var returnFields = returnFields.split(';');//查询字段
 92
 93        var wc = null;
 94
 95ExpandedSubBlockStart.gifContractedSubBlock.gif        if (whereClause != null && whereClause) {
 96
 97            wc = whereClause.split(",");
 98
 99        }

100
101        var queryLayers = queryLayers.split(',');
102
103        queryParam.queryLayers = new Array();
104
105ExpandedSubBlockStart.gifContractedSubBlock.gif        for (var i = 0; i < queryLayers.length; i++{
106
107            queryParam.queryLayers[i] = new SuperMap.IS.QueryLayer();
108
109            queryParam.queryLayers[i].layerName = queryLayers[i];
110
111            var returnFields2 = returnFields[i];
112
113            queryParam.queryLayers[i].returnFields = returnFields2.split(",");
114
115ExpandedSubBlockStart.gifContractedSubBlock.gif            if (wc && wc != null{
116
117                queryParam.queryLayers[i].whereClause = wc[i];
118
119            }

120
121        }

122
123        this.MapControl1.ClearHighlight();
124
125        spatialAnalystManager.BufferQuery(bufferParam, queryParam, this.onQueryComplete, this.onError);//调用bufferquery方法进行查询,在onQueryComplete这个函数中进行对结果数据集的处理。
126
127    }

128
129 
130
131}

132
133

 

专题制作上SuperMap.IS.Ajax提供了不同专题的解决方案,很多类别,可以参照那些以theme结尾的一些类。不过在写的过程中发现一些问题,颜色不知道咋处理,貌似都是ole颜色….有知道的能否指教下.下面是分段专题相关编写。贴代码,^_^

 

ContractedBlock.gif ExpandedBlockStart.gif Code
  1
  2
  3///<summary>分段专题</summary>
  4
  5ExpandedBlockStart.gifContractedBlock.gifHJMapUtils.ThemeUtils = Class(object, {
  6
  7ExpandedSubBlockStart.gifContractedSubBlock.gif    Create: function(mapControl, divResult) {
  8
  9        this.MapControl1 = mapControl;
 10
 11        object.divResult = divResult;
 12
 13    }
,
 14
 15ExpandedSubBlockStart.gifContractedSubBlock.gif    ThemeRangeMap: function(layerName, expressionName, rangeList, caption) {
 16
 17        ///<summary>分段专题图</summary>
 18
 19        ///<param name="layerName">专题图所在图层</param>
 20
 21        ///<param name="expressionName">所在字段</param>
 22
 23        ///<param name="rangeList">范围及颜色,格式为(范围(多个用','隔开);颜色(对应范围多一个颜色,同样多个用','隔开))</param>
 24
 25        ///<param name="caption">专题标题</param>
 26
 27ExpandedSubBlockStart.gifContractedSubBlock.gif        if (!this.MapControl1.layers || !this.MapControl1.layers.length) { alert("不存在图层!"); return; }
 28
 29        var rangeLayer = new SuperMap.IS.Layer();//专题图层
 30
 31ExpandedSubBlockStart.gifContractedSubBlock.gif        for (var j = 0; j < this.MapControl1.layers.length; j++{
 32
 33            var layertext = this.MapControl1.layers[j].name;
 34
 35ExpandedSubBlockStart.gifContractedSubBlock.gif            if (layerName.toLowerCase() == layertext.toLowerCase()) {
 36
 37                rangeLayer = this.MapControl1.layers[j];
 38
 39                break;
 40
 41            }

 42
 43        }
;
 44
 45        if (rangeLayer == null)
 46
 47ExpandedSubBlockStart.gifContractedSubBlock.gif        { alert("没有对应图层!"); return; };
 48
 49        this.ClearTheme(rangeLayer);
 50
 51        var theme = new SuperMap.IS.RangeTheme();//分段专题类相关设置
 52
 53        theme.caption = caption;
 54
 55        theme.enabled = true;
 56
 57        theme.expression = expressionName;
 58
 59        theme.breakValues = new Array();
 60
 61        var breaks = rangeList.split(';')[0].split(',');//分段点断点的设置
 62
 63        var breaksarr = new Array();
 64
 65ExpandedSubBlockStart.gifContractedSubBlock.gif        for (var k = 0; k < breaks.length; k++{
 66
 67            theme.breakValues[k] = parseFloat(breaks[k]);
 68
 69ExpandedSubBlockStart.gifContractedSubBlock.gif            if (k == 0{
 70
 71                breaksarr.push("0~" + breaks[k]);
 72
 73ExpandedSubBlockStart.gifContractedSubBlock.gif            }
 else {
 74
 75                breaksarr.push(breaks[k - 1+ "~" + breaks[k]);
 76
 77            }

 78
 79        }
;
 80
 81        breaksarr.push(breaks[breaks.length - 1+ "~");
 82
 83        theme.displays = new Array();
 84
 85        var colors = rangeList.split(';')[1].split(',');//各分段的颜色设置(貌似只支持ole颜色)
 86
 87        var colorsarr = new Array();
 88
 89ExpandedSubBlockStart.gifContractedSubBlock.gif        for (var i = 0; i < colors.length; i++{
 90
 91            theme.displays[i] = new SuperMap.IS.Style();
 92
 93            theme.displays[i].brushColor = parseInt(colors[i]);
 94
 95            colorsarr.push(colors[i]);
 96
 97        }

 98
 99        var strHtml = "";
100
101ExpandedSubBlockStart.gifContractedSubBlock.gif        for (var l = 0; l < colorsarr.length; l++{
102
103            strHtml += "<span style='display:block;width:20px;height:20px;background-color:" + colorsarr[l] + "'></span><div>" + breaksarr[l] + "</div><br/>";//返回一个html块标示(不过颜色很郁闷)
104
105        }

106
107        rangeLayer.themeRange = theme;
108
109        this.MapControl1.Update();
110
111        return strHtml;
112
113    }

114
115}

转载于:https://www.cnblogs.com/hjcook/archive/2008/12/08/1350678.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值