上一个项目使用mapXtreme开发的,这次的预研试了试supermap.两者都不算精通.最大的感觉就是mapXtreme的自定义功能开发方便.程序员可以很方便的介入后台处理.如点图后根据图元id,在其他属性表中查与此图元相关的属性.mapXtreme很方便可以直接查.而supermap分成了ajax和普通.net版本.处理各有不同.ajax版封装太死.我现在还没法干预.mapcontrol控件说明是有QueryCompleted事件,但是实际上根本不会触发. .net版本QueryCompleted事件可以触发,但是由于随便做个postback就要刷新整个网页,结果也很是不便.
来个具体的例子吧:
用户点地图上的一栋楼房,然后出个表显示这栋楼每个个房间的属性
mapxtreme的处理方法
1自定义一个工具,注册这个工具课通过javascript函数向后台请求(我要查1栋的房间属性)
2后台可以自定义响应函数.处理发回来的请求,然后返回处理结果(得到1栋的数据库id,然后查与这个id相关联的房间,xml返回房间集合)
3前台页面接收到处理结果后显示(通过xsl得到表单)
supermap(以ajaxDemo中的拉框选择为例吧)
1调用SetRectQueryAction();
2后台响应(Querying事件可以响应,但是你在其中自定义的东西会给覆盖.而QueryCompleted根本不响应)
3返回结果
第一步调用的SetRectQueryAction()在pages.js中
function SetRectQueryAction() {
//var layersInfo=GetQueryableFromLegend();
//var whereClause= GetWhereClause();
var layersInfo="ARCAREA";
var whereClause= GetWhereClause();
rectQueryAction = new SuperMap.IS.RectQueryAction(layersInfo, null,whereClause,onQueryComplete,onQueryError);
MapControl1.SetAction(rectQueryAction);
}
实际起作用的就是SuperMap.IS.RectQueryAction这个函数看到有哪些参数了吗?显然单从这个函数无法介入查表的过程whereClause只能设置查询条件.这样你就只能得到返回的id.当然可以绕个弯子.前台得到id后又写个请求去后台查房间.但是这样太没有效率了吧?明明一次就可以在后台做完的事情为什么要做两次?如果数据量大怎么办?平白无故的增加了不需要的流量.
换到mapxtreme.由于可以后台自定义响应函数,所以可以一步到位,相当方便
我感觉supermap应该可以通过重写前台的查询和后台的响应来达到同样的效果.但是即使能行,相对mapxtreme来说也过于繁琐.
最后来个结论吧.supermap很华丽.预设的功能很全很强大.但是自定义不方便.mapxtreme相对界面有点土,但是自定义很方便.supermap就像GridView控件,封装了很多功能,但是自定义点东西很麻烦.mapxtrme就像普通的html table,你可以很方便的改很多东西,但是相应的界面功能要自己去定制