一直想找到一个合适的构架来开发WebGIS,以前一直用的是Web ADF,然而经常遇到很大的技术阻力,因为,自己的JAVASCRIPT不怎么好,所以一直想尽量避免,现在看来,这个想法完全是错误的,想要做出动态性能很好的网页,不可能和JS避开的。
而且以前我用的是Web ADF开发,基本不自己写JS代码(以为ADF没有对应的JS库),然后,走到一定时候,完全走不下去了,感觉用此架构,完全是把客户端要处理的东西全部放到用服务器端,这个涉及到服务器端很混乱的代码编写,有点受不了。于是开始探索新出路。
首先开始尝试 ArcGIS JavaScript API,在ESRI的官网上有详细参考类库和例子http://resources.esri.com/help/9.3/arcgisserver/apis/javascript/arcgis/help/jssamples_start.htm
但是后来发现,这个东西引用的库要完全是在线的,我下载了离线文档,但是没有成功,开个头好难啊。而且官方网上给的例子都是用的DOJO架构的客户端编码方式,如果要用这种构架,又要学这个,我只是尝试,所以不要想在此上面浪费太多时间了,而且一旦尝试成功,也就意味着我以前半年的工夫用ADF做出来的成果全部要重写了,这个可不好。
今天偶然发现ADF 的JS API,仔细研究了下,发现它照样提供了比较强大的功能,用的是ASP.NET 的AJAX 客户端编码格式,虽然也很麻烦,但没办法了,只好硬着头皮上了,否则ADF开发这条路真的走不下去了。和一些网友交流,得知,ADF开发GIS,是一种可以比较深度开发的方式,而那种用纯JavaScript apis开发的只是一种轻量级应用(而且,还要求开发人员的电脑是连接了公网的,否则那个库很难引用,反正我试用离线包没有成功),但ADF的缺点就是太依赖服务器端处理数据了(有时候,很多应该是客户端处理的内容,结果都放到服务器端了),这样子的话,就会导致服务器严重负担,而且数据量交换成本过高,效率会比较低。 现在发现了ADF也是对应的客户端JS API,如果好好利用的话,这种情况也会有所改观,可以分担下服务器的负担。所以,现在决定还是用 Web ADF进行开发,不过,以后要大量引入ADF 的JS API,这样会更高效,而且用JS在客户端处理服务器控件也会更加方便而且直观些。具体怎么做,有哪些难度,还是要继续研究和探索。
了解web adf javascript library:
到网上GOOGLE搜索:web adf javascript library
找到了这个网页:http://resources.esri.com/help/9.3/arcgisserver/adf/dotnet/developer/ADF/adfjavascript_overview.htm
下面有一些摘录,供大家一起分享吧。
前面的一些英文,好像已经有人译成中文了:
[转]http://bbs.esrichina-bj.cn/ESRI/thread-34274-1-6.html
Arcgis Server 9.3之Web ADF JavaScript Library和ArcGIS JavaScript API
Web ADF JavaScript Library:ArcGIS Server Web ADF包含了一套JavaScript Library,名字为Web ADF JavaScript Library。它是在ASP.NET AJAX JavaScript Library基础上创建的,提供了一套复杂的客户端框架,通过这套框架可以在脚本环境中与Web ADF控件或组件进行交互。这将意味着你可以使用javascript和Web ADF控件进行交互,比如浏览地图,添加graphics到地图上,创建map tips,不需要任何的服务器端代码。从另一个角度来说,Web ADF JavaScript Library为web adf开发人员提供了另外一个工具。Web ADF JavaScript 设计用来利用客户端的技术来增强Web ADF应用,以支持客户端/服务器端的同步以及纯客户端的交互,而不是代替服务器端编程独立使用的。这套library只要页面中有Web ADF控件便可使用,它不需要独立安装,嵌入在web adf控件中,不可更改。它在Web ADF之外不可使用,它主要用来配合arcgis server web adf进行开发使用的。Web ADF JavaScript Library依赖于ASP.NET AJAX JavaScript Library,ASP.NET AJAX JavaScript Library提供了一个复杂的基础,在此基础上用来创建AJAX的解决方案。它管理着客户端与远程服务,以及服务器端的控件的交互。它提供一种机制在客户端呈现Web控件以及客户端的事件处理。另外,它提供了跨浏览器的支持,所有的这些特性都在Web ADF JavaScript Library被使用了。下面是它们几者的关系图。关于Web ADF JavaScript Library的详细帮助可以在arcgis server的帮助中查到。 ArcGIS JavaScript API:
ArcGIS JavaScript API是用来嵌入GIS地图和任务到GIS Maps中的一种轻量的方式,它是免费使用和部署的,它需要的就是ArcGIS Server提供的可用的地图和工具。ArcGIS JavaScript API是一套基于客户端的API,用于开发高性能,易于使用的地图应用。它使你非常容易在你的网页中嵌入地图。ArcGIS JavaScript API适用于非GIS专业人士,但是又需要在Web网页中嵌入地图的情况。它使用容易,不需要了解类似于象ArcGIS Server这样的GIS专业开发软件,只需要了解javascript,便可以在非GIS的web应用中嵌入和使用地图。通过它可以:·显示一幅定制的专业的地图
·在服务器端执行一个GIS model并且在客户端显示结果
·在ArcGIS Online base map上显示自己的数据
·在GIS数据中搜索要素以及属性并显示结果
·搜索地址并显示结果
(大致的中文意思如上,就是讲的ADF JS API和ARCGIS JS API的区别,下面还有一些重要的地方,我来译下吧,和大家一起分享下)
下面还有一句,陈述编写客户端JS脚本时的一个让人沮丧的事实:
Common Visual Studio capabilities used by .NET developers to enhance the code writing experience are not available when coding JavaScript, such as intellisense, code completion, or integrated help. In addition, JavaScript is an interpreted language (interpreted at runtime by the browser) so catching errors at compile time is not possible.
当你用Visual Studio 环境编写JavaScript代码时,很多以前提供给.NET开发人员的用来提高编写代码体验的功能都没有用了,比如:代码智能提示,代码自动完成,交互式气泡帮助这些好功能都没有了。另外,JavaScript是一种解释性语言(在运行时由浏览器来解释),所以你是不可能用Visual Studio来对这些代码进行编译和捕捉错误了。(不过,笔者到网上找到一个帖子,说Visual Studio2008加入了对JS脚本编辑的支持,可以进行一些简单基本的代码提示和自动完成功能,所以,大家可以将VS2005升级下,这个功能可不错哦。)
所以,写JS代码时,尽量不要自己写,尽量引用现成的代码库,如果ExtJS,ActiveWidget,或者到网上找相关的已经有的程序集合。因为JS是客户端代码,所以基本上都是开源的,比如你到一个网页上看到一个好的JS效果,你可以查看这个网页的源代码,也可以找到相关的JS函数,可以直接COPY,修改一下就是你的了。
关于如何调试JS,开始也是一个困扰笔者的问题,后来找到了一个简单的方法,就是在你要调试的JS脚本语句前面加上一句debugger;当浏览器解释到这一句的时候,就会自动中断进入调试状态,如果你安装了Visual Studio,那么会有弹出对话框提示你启动VS程序对JS代码进行调试,然后就可以像调试普通编译型语句那样查看中间变量的值了。