GIS学习文档开发要求:建立java+flex合并工程发布好的GIS服务地图底图(如何调整地图、发布服务参照附录2、GIS服务器端)GIS是一种为地理研究和地理决策服务的计算机技术系统。其基本功能是将表格型数据(无论它来自数据库,电子表格文件或直接在程序中输入)转换为地理图形显示,然后对显示结果浏览,操作和分析。其中显示对象包括人口,销售情况,运输线路以及其他内容。对于我们来说,主要是用于人口方向。GIS技术是一门空间信息分析技术,GIS技术在数据库管理与数据挖掘方面具有不可替代的优势。对于我们来说,主要用gis技术将空间数据同人口数据结合起来,给人口数据附加精确的空间属性,并以直观的形式展现出来,为做好人口信息决策支持功能做好准备。Flex和GIS技术结合使用。这两门技术(客户端还可以用js技术做)是共生的关系。一、PopulationGis项目(全国流动人口管理信息系统GIS部分);已经发布为服务:将项目部署到tomcat服务器,右击RunAs---Web应用程序---研究是如何渲染的。项目描述:1、从业务角度(1)各省流动人口数据在地图上以不同的颜色表示,然后是点击省后渲染它的所有市,同样地,点击市后渲染它的所有县。(2)在地图上点击不同地区,结果展示窗口中可显示相应的数据,以表格和柱状图两种方式显示。2、从技术角度(1)选择参数访问数据库展示数据点击地图PopulationGis.mxmlJueCeZhuTi.java查看附录中的1、渲染。(2)查看附录中的1、渲染。二、beiJingSuperMap(可以在本机电脑上发布服务);北京市全员人口管理信息系统决策支持子系统升级改造项目人口数据空间化(1)环境准备:首先,安装超图公司的客户端软件(iClient)和服务端软件(iServer);然后,打开客户端软件,使用学习资料哪本书提供的示范地图beijing.smwu,做一些风格设置后打开服务端软件,将这幅地图发布为服务,之后就可以用代码访问到地图了。(2)项目描述A、从业务角度基本和第一个项目一样的功能,对北京市16个区县根据不同的数据显示不同的颜色。除此之外,还开发了专题图、时间轴功能B、从技术角度组件和类的功能与arcgis差不多,名称不同,关键是找到对应的类。①渲染:查看附录中的4、渲染(北京GIS)②专题图:查看附录中的5、专题图(北京GIS)③时间轴:查看附录中的6、时间轴(北京GIS)附录:1、渲染esri:Mapid=maplogoVisible=falseload=onMapComplete()mapClick=onMapClick(event)esri:ArcGISTiledMapServiceLayerid=myTiledMapServiceurl=:ArcGISTiledMapServiceLayeresri:GraphicsLayerid=graphicsLayer//esri:Map其中ArcGISTiledMapServiceLayer图层是用于显示底图用的,GraphicsLayer图层是用于叠加底图用的,所以要放在ArcGISTiledMapServiceLayer图层的后面。RunAsPopulationGis.mxml之后(1)执行Application组件的creationComplete事件,[此事件是当组件完成其构建、属性处理、测量、布置和绘制后触发(不一定是Application组件,也可能是其他flex组件)]对应的dataInitialize方法:对一些会用到的组件进行了设置大小、格式等初始化操作。(2)执行Application容器里的Map组件(esri公司提供的开发API[:agslib-1.2-2009-05-15.swc]中的组件)的load事件:当地图加载完之后执行的事件。对应的onMapComplete方法:封装了地图的初始化查询方法myInitialize,用于查询地图的所有几何体,存储起来以备后面使用。(3)查询地图的代码涉及到GIS的学习:①QueryTask组件(esri提供):QueryTask类是一个进行空间和属性查询的功能类,它可以在地图服务的某个子图层内进行查询。②QueryTask组件有一个url属性,定位到要查询的图层;③QueryTask类有一个方法com.esri.ags.tasks.QueryTask.execute(query:Query,responder:IResponder=null):AsyncToken,第一个参数是查询条件对象,第二个参数是一个响应器,对查询这个操作进行监听,有对应的查询成功的函数与查询失败的函数。④其中查询条件对象是Query类(esri提供)的实例对象,有where属性,用于设置查询条件;returnGeometry属性等[可以直接在浏览器中输入上面的url地址,点击进入最后一行的QueryLayer,进行查询练习(在where输入框中输入条件,比如objectid0,然后点击下面的find,就可以看到能查到什么东西可以把ReturnGeometry选择No看看查询出什么东西。对比可以发现查询速度是不同的,选择No的时候明显很快,这就提示代码中的returnGeometry属性设置为false的时候可以大大提高查询速度!但是后面就无法完成渲染的操作,所以还是得设置为true,在效率与目标之间寻找平衡),这就是代码中将要进行的查询方式]⑤查询成功的监听函数中,com.esri.ags.tasks.FeatureSet类实例对象fsfs.features是一个数组类型,即结果集数组,要把这个数组存储起来,以备不时之需。(可以打印一下这个数组看看里面存的是什么东西)(4)map组件的mapClick事件点击地图时触发的事件,对应的onMapClick函数也是做一个查询,查询出你点击的是哪一个几何对象(某个省或者某个市),有一个if判断,不同对象(省级城市、市级城市、县级城市)进行不同的处理。查询组件QueryTask有一个事件executeComplete是查询之后触发的事件,用于处理一些逻辑:得到点击的省几何对象后取出Name属性,根据Name属性值再去进行市级城市的查询、渲染。(这里有一个if判断,如果是没选择参数前点击地图是没有反应的,需要稍微控制下,否则会出bug,用了一个全局变量allInformation[从数据库中查询出来的集合]控制,因为选择参数前是不会去数据库去查询人口数据的。)这是选择参数前的点击事件,选择参数后的点击事件又是另一种情况。(5)选择参数触发的事件(Tree组件的itemClick事件)①对应的函数LGDataChoose是去Oracle数据库中查询人口数据,因为情况多,所以有多个控制变量,分别存储点击的树节点、它的父节点、它的父节点父节点等等直到再没有父节点为止。(主要是应对育龄妇女选择项,节点和文件夹并存时候的逻辑控制)然后进入与java工程通讯的函数QueryLGDataFromDataBase,关于如何进行flex工程与java工程的通信之前在转工程的时候你已经学习成功了。通讯成功后有监听函数QueryLGDataFromDataBaseResult②QueryLGDataFromDataBaseResult函数做了两件事情:一是把从Oracle数据库中查询出的人口数据存储起来以备后面使用;二是开始渲染地图。A、Oracle数据查询:一次查询,多次使用,尽量避免flex与java工程频繁的通信,因为会影响效率。B、渲染:先构造图例,再根据图例渲染。C、for循环中,对于每一个几何体,先得到Name、District属性(这个属性后面查询市级城市的时候会用到,所以现在需要得到。),然后根据几何体的Name查询对应的省级城市的人口数据,再根据人口数据与图例进行这个几何体的渲染。最后把这个几何体添加到graphicsLayer图层(这里涉及到一个思想:图层叠加思想,即最开始是一张底图,渲染就是把一个个的几何体叠加到地图上,就是说一个个的几何体先添加到graphicsLayer图层,然后把graphicsLayer图层放到底图上面)D、渲染后还要对结果面板showPic做一些处理才能用柱状图显示人口数据。(6)渲染之后①点击事件:点击一个省级城市,触发一个查询,去GIS服务器查询点击的几何体的属性信息(为了下一步的市级城市的查询),然后进行市级城市的查询与渲染。同样的,点击一个市级城市,触发一个查询,然后进行县级城市的查询与渲染。点击一个县级城市,触发一个查询,但是不再有渲染,而是用弹窗弹出这个县的数据。showdatawindow里的map组件的infoWindow属性需要弹出的位置,这个位置是一个点,即你点击的时候光标所在的那个位置,通过鼠标事件得到,并且赋值给一个point对象(MapPoint类)②结果面板的双击放大、隐藏、显示纯属flex代码。2、GIS服务器端(1)找到GIS服务所在的计算机(10.1.92.27)里E:\Arcgis\wfh_data\china.mxd(2)复制,自己去测试,不要在原图上修改测试保存(因为这是正在用的底图)(3)双击打开地图(默认是用ArcMap客户端软件打开),给图层设置最大最小显示比例尺①点击菜单栏右面WindowHelp下面的比例尺框的右面的按钮,选择CustomizeThisList…,再选择StandardScales选项卡,在输入框中输入1:32000000,点击Add,然后依次顺序输入1:20000000,1:15000000,1:5500000,1:5499996,1:4000000,1:2000000,1:1000000,共八级比例尺,添加之后点击确定,再回到刚才的按钮发现多了这些比例尺,然后开始给每一个图层设置最大最小显示比例尺。②比例尺分母越大,表名比例尺的值越小,那么从1:32000000到1:1000000比例尺是逐级变大的,比例尺越大地图显示的越详细、清晰。因此随着比例尺变大先是显示省再是显示市最后显示县。刚开始(最小级别1:32000000)省市县的数据是糅合在一起显示的,如图:设置前先设计比例尺显示级别:省2级;市2级;县4级,那么A、给县级图层设置最小比例尺:选择1:5499996,在左方Display选项下的图层Layers中右击县图层VisibleScaleRangeClearScaleRange,然后继续VisibleScaleRangeSetMinimumScale,表名比此时的比例尺再小时县的图层就不再显示。选择1:5500000,发现地图上没有了县的信息。B、给市级图层设置最大显示比例尺、最小显示比例尺选择1:5500000,右击市级图层VisibleScaleRangeClearScaleRange,VisibleScaleRangeSetMaximum设置最大显示比例尺;选择1:15000000,右击市级图层…SetMinimum设置最小显示比例尺。选择1:5499996或者1:20000000都不会看到市的信息。C、给省级图层设置最大显示比例尺选择1:20000000,右击省级图层…SetMaximumScale设置最大显示比例尺。(4)然后很重要的一步:将比例尺调整到最小1:32000000,保存地图。(后面发布服务的时候是已保存前地图的形态来作为默认比例尺的!)(5)发布服务:开始程序ArcGISArcCatalog(用于管理服务的桌面端应用程序):A、使用ArcCatalog管理服务,首先需要连接GISServer,类似于一般关系数据库的客户端,需要设