园子里不见国内GIS的一些软件开发经验介绍,刚好在写关于SuperMap AjaxScript的一些开发,就将一些心得体验记录下来,当以后的参考。也希望能给刚接触的人以一些提示。^_^

 

1、 技术研究

SuperMap IS .NET AjaxScripts是一套基于ASP .NET Ajax脚本库,通过Ajax技术封装的客户端脚本开发控件(可以和AGS 9.3出的Javascript Api做做比较,^_^)通过XMLHttpRequest对象进行异步通信来向服务器发送请求,实现无刷新的地图显示和操作。我们在web.config中可以查看到一些配置信息。

 

Code

 

这些便是程序中处理各种服务请求的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

   

     在使用控件时需要注意变量名要和页面的id一致,要不会出现些问题。这样就完成了个简单的地图配置的类,现在我们就可以在页面中进行页面调用来显示地图了。还是贴代码,^_^


Code

        

    在New方法中写上对应的初始化参数,如地图名,maphandler(告诉哪里去获取像query.ashxhandler,图片格式,图片的放置容器,比例尺范围等,另可设置对应的常规控件的是否显示等,然后调用CreateMap()我们就完成了简单的地图基本配置和常规控件的使用了。