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

3

HJMapUtils.AnalysisUtils = Class(object,
{4

5

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

19

FindNearestByMapCoord_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

95

if (whereClause != null && whereClause)
{96

97
wc = whereClause.split(",");98

99
}100

101
var queryLayers = queryLayers.split(',');102

103
queryParam.queryLayers = new Array();104

105

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

115

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颜色….有知道的能否指教下.下面是分段专题相关编写。贴代码,^_^。
1

2

3
///<summary>分段专题</summary>4

5

HJMapUtils.ThemeUtils = Class(object,
{6

7

Create: function(mapControl, divResult)
{8

9
this.MapControl1 = mapControl;10

11
object.divResult = divResult;12

13
},14

15

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

27

if (!this.MapControl1.layers || !this.MapControl1.layers.length)
{ alert("不存在图层!"); return; }28

29
var rangeLayer = new SuperMap.IS.Layer();//专题图层30

31

for (var j = 0; j < this.MapControl1.layers.length; j++)
{32

33
var layertext = this.MapControl1.layers[j].name;34

35

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

47

{ 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

65

for (var k = 0; k < breaks.length; k++)
{66

67
theme.breakValues[k] = parseFloat(breaks[k]);68

69

if (k == 0)
{70

71
breaksarr.push("0~" + breaks[k]);72

73

} 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

89

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

101

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
}