园子里不见国内GIS
的一些软件开发经验介绍,刚好在写关于SuperMap AjaxScript
的一些开发,就将一些心得体验记录下来,当以后的参考。也希望能给刚接触的人以一些提示。^_^
。
1、 技术研究
SuperMap IS .NET AjaxScripts是一套基于ASP .NET Ajax脚本库,通过Ajax技术封装的客户端脚本开发控件(可以和AGS 9.3出的Javascript Api做做比较,^_^)通过XMLHttpRequest对象进行异步通信来向服务器发送请求,实现无刷新的地图显示和操作。我们在web.config中可以查看到一些配置信息。
Code
1![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
2![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
3
<httpHandlers>
4![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
5
<add verb="*" path="ImageHandler.ashx" type="SuperMap.IS.Web.ImageHandler, SuperMap.IS.WebLib, Version=5.3.0.0, Culture=neutral, PublicKeyToken=753ce5cde00ec9b6"/>
6![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
7
<add verb="*" path="common.ashx" type="SuperMap.IS.Ajax.CommonHandler, SuperMap.IS.AjaxLib, Version=5.3.0.0, Culture=neutral, PublicKeyToken=753ce5cde00ec9b6"/>
8![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
9
<add verb="*" path="path.ashx" type="SuperMap.IS.Ajax.PathHandler, SuperMap.IS.AjaxLib, Version=5.3.0.0, Culture=neutral, PublicKeyToken=753ce5cde00ec9b6"/>
10![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
11
<add verb="*" path="map.ashx" type="SuperMap.IS.Ajax.MapHandler, SuperMap.IS.AjaxLib, Version=5.3.0.0, Culture=neutral, PublicKeyToken=753ce5cde00ec9b6"/>
12![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
13
<add verb="*" path="edit.ashx" type="SuperMap.IS.Ajax.EditHandler, SuperMap.IS.AjaxLib, Version=5.3.0.0, Culture=neutral, PublicKeyToken=753ce5cde00ec9b6"/>
14![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
15
<add verb="*" path="query.ashx" type="SuperMap.IS.Ajax.QueryHandler, SuperMap.IS.AjaxLib, Version=5.3.0.0, Culture=neutral, PublicKeyToken=753ce5cde00ec9b6"/>
16![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
17
</httpHandlers>
18
这些便是程序中处理各种服务请求的handler,在Bin文件夹中的SuperMap.IS.AjaxLib这个程序集中。我们可以通过发送一个服务请求来详细看到其工作的机制。做个点选的功能函数,点击,监视可获取其发送的请求如下: http://localhost:13386/SuperMapAjaxTest/query.ashx?map=changchun&method=QueryByPoint&point={"x": 4110.897189336289, "y": -5563.251397196728}&tolerance=200&queryParam={"customParams": "", "expectCount": 20, "hasGeometry": true, "highlight": {"forceUseDefaultStyles": false, "highlightQueryArea": true, "highlightResult": true, "lineStyle": null, "pointStyle": null, "queryAreaStyle": null, "regionStyle": null, "textStyle": null}, "queryAllLayer": false, "queryLayers": [{"groupClause": "", "layerId": 0, "layerName": "school@changchun", "returnFields": ["smid", "name"], "sortClause": "", "whereClause": ""}], "networkType": 0, "returnFields": null, "startRecord": 0, "whereClause": "", "returnCenterAndBounds": true, "returnShape": false}&trackingLayerIndex=-1&userID=""&jsonp=supermap_callbacks[12281294209726434]§ionCount=1§ionIndex=0&jsonpUserID=1228129420972&t=1228129420972
通过query.ashx这个handler来获取传入的各项参数(json格式),如方法名称,点坐标,查询参数,查询图层等,然后就可以通过地理服务器处理返回如下的信息。
supermap_callbacks[12281294209726434]( '{"currentCount":1,"customResponse":"","recordsets":[{"layerId":13,"layerName":"School@changchun","records":[{"bounds":{"leftBottom":{"x":4055.537136,"y":-5588.455825},"rightTop":{"x":4055.537136,"y":-5588.455825}},"center":{"x":4055.537136,"y":-5588.455825},"fieldValues":["132","吉林工学院"],"shape":null}],"returnFields":["smid","name"]}],"totalCount":1,"trackingLayerIndex":0,"userID":"dfa5a57f-3be6-40ea-a568-12fbf8b37fba"}' );
即调用个回调函数来处理返回的信息,如返回图层、字段,记录集等信息,然后再再通过异步显示结果图片和相关信息。
2、 编程实现
下面就试试写个地图显示页面来。学习javascript主要学习了李战的那本书,所以在写的过程中也使用了他的那个原型模型。下面来实现地图的基本配置及常用控件的使用。先贴代码,hoho!
Code
1![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
2![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
3
///<summary>地图基本设置及其控件设置(基类object扩展了个MapControl1的对象)</summary>
4![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
5
HJMap = Class(object,
6![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
7![ExpandedBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![ContractedBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
8![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
9
scaleBarControl: null,
10![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
11
MapName: "changchun",
12![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
13
MapHandler: "http://localhost/SuperMapAjaxTest/",
14![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
15
MapFormat: "gif",
16![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
17
MapContainer: "map",
18![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
19
MapScale: null,
20![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
21
ZoomLevel: 5,
22![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
23
ScaleBarControlContainer: "scaleBarControl",
24![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
25
ShowScaleBarControl: false,
26![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
27![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
Create: function(mapName, mapHandler, mapFormat, mapContainer, mapScale, zoomLevel)
{
28![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
29
///<summary>配置地图参数</summary>
30![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
31
///<param name="mapName">地图名称</param>
32![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
33
///<param name="mapHandler">地图Handler(Url地址)</param>
34![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
35
///<param name="mapFormat">地图格式(gif,png
)</param>
36![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
37
///<param name="mapContainer">放置地图容器</param>
38![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
39
///<param name="mapScale">地图比例尺范围设置</param>
40![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
41
///<param name="mapScale">缩放级别数</param>
42![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
43
this.MapFormat = mapFormat;
44![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
45
this.MapHandler = mapHandler;
46![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
47
this.MapName = mapName;
48![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
49
this.MapContainer = $(mapContainer);
50![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
51
this.MapScale = mapScale;
52![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
53
this.ZoomLevel = zoomLevel;
54![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
55
},
56![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
57![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
CreateMap: function()
{
58![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
59
///<summary>创建地图</summary>
60![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
61
///<return>MapControl</return>
62![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
63
var param = new Object();
64![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
65
param.mapName = this.MapName;
66![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
67
param.mapHandler = this.MapHandler;
68![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
69
param.imageFormat = this.MapFormat;
70![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
71
param.fixedView = false;
72![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
73
param.mapScales = this.MapScale;
74![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
75
param.zoomLevel = this.ZoomLevel;
76![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
77
object.MapControl1 = new SuperMap.IS.MapControl(this.MapContainer, param);
78![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
79![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if (this.ShowScaleBarControl == true)
{
80![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
81
var scaleBarParam = new Object();//控件很多属性可以通过查询找到
82![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
83
scaleBarParam.ordinal = true;
84![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
85
this.scaleBarControl = new SuperMap.IS.ScaleBarControl($(this.ScaleBarControlContainer), object.MapControl1, scaleBarParam);
86![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
87
}
88![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
89
object.MapControl1.Init();
90![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
91
return object.MapControl1;
92![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
93
}
94![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
95
});
96![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
97
98
在使用控件时需要注意变量名要和页面的id一致,要不会出现些问题。这样就完成了个简单的地图配置的类,现在我们就可以在页面中进行页面调用来显示地图了。还是贴代码,^_^。
Code
1![ExpandedBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
function OnLoad()
{
2![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
3
mapUtils = New(HJMap, ["changchun", "http://localhost:13386/SuperMapAjaxTest/", "gif", "map", [1 / 100000, 1 / 80000, 1 / 50000, 1 / 10000, 1 / 8000, 1 / 2000], 6]);
4![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
5
mapUtils.ShowScaleBarControl = true;
6![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
7
mapControl = mapUtils.CreateMap();//生成地图
8![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
9
}
10
在New方法中写上对应的初始化参数,如地图名,maphandler(告诉哪里去获取像query.ashx等handler),图片格式,图片的放置容器,比例尺范围等,另可设置对应的常规控件的是否显示等,然后调用CreateMap()我们就完成了简单的地图基本配置和常规控件的使用了。