gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15947
  • QQ554730525
  • 铜币25339枚
  • 威望15364点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
阅读:2655回复:8

[转帖]arcims(HtmlView)开发经验总结

楼主#
更多 发布于:2005-07-13 22:14
<P>aimsLayers.js  <BR>变量定义含义,知道这些,我们自己写  arcXML请求时,不用把图层具体信息硬编码到程序中。<BR>比如 要知道图层的字段, 我们可以从这些数组中得到,而不要写到程序中。</P>
<P>var layerCount = 0;//图层数量</P>
<P>var LayerName = new Array();//图层名称<BR>var LayerID = new Array();      //ID<BR>var LayerVisible = new Array(); //是否可见<BR>var LayerType = new Array();    //图层类型     <BR>var LayerIsFeature = new Array();//是否为矢量图层  <BR>var LayerExtent = new Array();   //图层显示范围    以|分界的字符串<BR>var LayerMinScale = new Array();  //最小比例<BR>var LayerMaxScale = new Array();  //最大比例<BR>var LayerRenderString = new Array();</P>
<P>var LayerShapeField = new Array();   //SHAPE字段的名称  为  #SHAPE#<BR>var LayerIDField = new Array();      //主键 字段名称   MAPUSER.  .OBJECTID<BR>var LayerFieldList = new Array();          //字段名称 以 , 隔开的字符串<BR>var LayerFieldTypeList = new Array();        //字段类型 以 , 隔开的字符串<BR>var LayerFieldSizeList = new Array();        //字段长度 以 , 隔开的字符串<BR>var LayerFieldPrecisionList = new Array();   //精确度   以 , 隔开的字符串</P>
<P>var LayerFields = new Array();         //活动图层的字段名称<BR>var LayerFieldType = new Array();      //活动图层的字段类型<BR>var LayerFieldCount=0;                 //活动图层的字段数量<BR>var ActiveLayer="";                    //活动图层的ID<BR>var ActiveLayerType="";                //活动图层的类型</P>
<P>var layerLeft = 0;                     //没用<BR>var layerRight = 0;                    //没用<BR>var layerTop = 0;                      //没用<BR>var layerBottom = 0;                   //没用</P>
<P>var fieldIndex = 0;                    //没用<BR>var FeatureLayerCount = 0;             // 矢量层的数量</P>
<P>// field aliases arrays<BR>var AliasFieldName = new Array();      //没用  <BR>var AliasFieldAlias = new Array();     //没用  <BR>var LayerListOpen=false;<BR>var queryOpen = false;<BR>var displayLayerInfoButton=false;<BR>var setLayerVisible = new Array();<BR></P>
喜欢0 评分0
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15947
  • QQ554730525
  • 铜币25339枚
  • 威望15364点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
1楼#
发布于:2005-07-13 22:14
<P>这些是ims中放大操作的坐标转换 。</P>
<P>var x1,y2;   //起点   坐标<BR>var y1 ,x2;   //对角点坐标 <BR>//开始拉框。由鼠标点击触发<BR>function startZoomBox(e) {<BR>    //把地图所在的<DIV>移动到初始位置。 <BR>moveLayer("theMap",hspc,vspc);<BR>//得到开始的屏幕坐标(相对与地图的哦) mouseX   mouseY<BR>getImageXY(e);<BR>//判断是否在地图中点击   地图宽度 iWidth   地图高度 iHeight<BR>if ((mouseX<iWidth) ;; (mouseY<iHeight)) {<BR>if (zooming) {//zooming表示正在放大中<BR>stopZoomBox(e);//停止拉框<BR>} else {<BR>x1=mouseX;//开始点 x<BR>y1=mouseY//停止点  y<BR>x2=x1+1; //表示你画的框的宽度<BR>y2=y1+1;</P>
<P>zleft=x1;//你画的框 左边 的位置<BR>ztop=y1;//你画的框 上边 的位置<BR>zbottom=y1;//你画的框 下边 的位置<BR>zright=x1//你画的框 右边 的位置<BR>boxIt(x1,y1,x2,y2);//画红框,dhtml实现<BR>zooming=true;      //表示正在放大中<BR>}<BR>}<BR>return false;<BR>}<BR>//拉框中,移动鼠标<BR>function mouseStuff() {<BR>x2=mouseX; //得到当前鼠标坐标<BR>y2=mouseY; //得到当前鼠标坐标</P>
<P>if (x1>x2) {//判断起点 终点 x坐标大小,重新给zright zleft附值<BR>zright=x1;<BR>zleft=x2;<BR>} else {<BR>zleft=x1;<BR>zright=x2;<BR>}<BR>if (y1>y2) {//判断起点 终点 y zbottom ztop 附值<BR>zbottom=y1;<BR>ztop=y2;<BR>} else {<BR>ztop=y1;<BR>zbottom=y2;<BR>}<BR>//如果起点 终点不是一个点时,画框<BR>if ((x1 != x2) ;; (y1 != y2)) {<BR>boxIt(zleft,ztop,zright,zbottom);<BR>}<BR>}</P>
<P>//停止拉框,鼠标释放触发事件<BR>function stopZoomBox(e) {<BR>zooming=false;//表示放大完成</P>
<P>//当我们拉框太小,小于线的宽度时,就当作点放大。<BR>if ((zright <zleft+2) ;; (zbottom < ztop+2)) {<BR>zoomin(e);<BR>} else {//拉框放大</P>
<P>var tempLeft=lastLeft;<BR>var tempRight=lastRight;<BR>var tempTop=lastTop;<BR>var tempBottom=lastBottom;<BR>saveLastExtent();</P>
<P>//得到 横向 每个象素代表的 实际距离  xDistance 表示当前地图比例时,横向距离。<BR>//其实是 每个象素代表的 经纬度<BR>pixelX = xDistance / iWidth;<BR>        //拉框上边 和 地图底边的距离  屏幕距离<BR>//为什么要定义这个呢?? <BR>//屏幕坐标 左上角为坐标原点 <BR>//地理坐标  我们当成 左下角为坐标原点<BR>var theY = iHeight - ztop;<BR>//得到 纵向 每个象素代表的 实际距离  yDistance 表示当前地图比例时,纵向距离。<BR>pixelY = yDistance / iHeight;<BR>        //大家仔细看下面代码, 得到我们操作后,上下左右 的(距离)经纬度<BR>//结果上边经度  = 每个象素代表的经度 * /拉框上边和地图底边的距离(屏幕距离)+ 操作以前的底边经度<BR>//在这里eTop等是地理坐标  zTop等是屏幕坐标<BR>eTop = pixelY * theY + eBottom;   <BR>eRight = pixelX * zright + eLeft;<BR>eLeft = pixelX * zleft + eLeft;<BR>theY = iHeight - zbottom;<BR>pixelY = yDistance / iHeight;<BR>eBottom = pixelY * theY + eBottom;<BR>        <BR>//得到 eTop eRight eLeft eBottom 四个经纬度值,请求ims服务器,返回合适的地图。<BR>sendMapXML();<BR>}<BR>return true;<BR>}<BR></P>
举报 回复(0) 喜欢(0)     评分
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15947
  • QQ554730525
  • 铜币25339枚
  • 威望15364点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
2楼#
发布于:2005-07-13 22:15
<P>有幸在arcims mapxtreme两大平台上做过开发,谈谈个人感受</P>
<P>   抛开arcgis9 的 arcServer.先说arcIms开发。(以Image Services为例,ArcMap Image Services我估计在arcgis9中会不放到ims体系)<BR>arcIms的核心是AcrXML,也可以说是围绕着ArcXML进行的开发,如果熟悉了ArcXML,估计关于arcIms的开发就掌握了60%. 象htmlview,javaconnect,Activex等各种连接,只是对ArcXML的一个封装。</P>
<P>  ArcIMS服务器,其实相当于一个webservice.我们输入一定格式的参数,他处理后就返回相应的结果。而这个格式就是ArcXML。(其实ArcXML还是imsr的配置文件,由author生成。)ARCXML包括内容丰富,还在不断增强。 我们常用的请求为Using GET_IMAGE and IMAGE with Image Services,Using GET_FEATURES and FEATURES 分别得到图象和属性值。<BR>  <BR>     对于我们二次开发来说,我们只是不断的组合请求的ArcXML,得到我们想要的结果。然后显示这些结果。 我把这个过程分为 GIS业务应用和WEB编程。 比如:北京工交网: 其实就是组合了几个ARCXML ,然后显示出来。IT公司变成肯定没问题,所以现在GIS行业焦点在如何最大的挖掘需求,挖掘行业应用。 作了两年GIS,做的基本都是放大,缩小。业务上,在中国行业很难提出什么应用来。估计以后是个方向。<BR> <BR>我较喜欢htmlview, 用他可以作出很漂亮的界面(有段时间我认为做GIS和做美工性质一样。)但安全性低,都用javascript实现。至于javaConnect等,更符合OOP,但是1、因为webGIS系统有很多状态,比如地图的比例,活动层的选择等要保持,要保持这些状态,必须把这些放到缓冲中,那对于大用户量来说,性能是个大问题。2、javaconnect和mapxtreme很类似, 改变地图要刷新页面,所以状态要保持,对web服务器也是个挑战。对很酷的地图操作也是个挑战。</P>
<P>在ArcGIS9中,ESRI公司有了新的webGIS编程模型,主要针对J2ee 和 .Net平台。 新内容有 1、由arcgis   Server管理AO对象 2、可以远程调用这些AO对象3、有个ArcObject Develop FrameWork(ADF) 和 运行时,支持J2ee,.net平台,可以开发webgis.4、webservice,EJB<BR>看了一下文档,焦点在对象的远程调用 和 对象状态的保持 两方面。 第一点,性能问题,没用过,但估计没有ArcIms好, 但AO对象强大的功能能搬到web上来了,值得期待。 第二点:对象状态保持, 和mapxtreme一样,有对象池了概念。和EJB的有状态bean 无状态Bean类似。和有状态Bean一样,对象状态保持问题好象解决的不好。但gis大多为有状态对象。麻烦啊。状态保持方案 好象有  shallowly stateful application 和 deeply stateful Web application。需要很大的变成技巧。 个人感觉,.net在这开发还好。J2ee的JSF不知道什么时候能成熟啊。</P>
举报 回复(0) 喜欢(0)     评分
butry
路人甲
路人甲
  • 注册日期2004-07-18
  • 发帖数312
  • QQ
  • 铜币1004枚
  • 威望0点
  • 贡献值0点
  • 银元0个
3楼#
发布于:2005-07-19 16:19
我有很好的应用需求。
4S(RS+GPS+GIS+CS)工程师 失望过,徘徊过,伤心过,但我心依然坚强! 偶炒蛋不累!4S更不累!!就是没有力气上床了……
举报 回复(0) 喜欢(0)     评分
erqie
路人甲
路人甲
  • 注册日期2005-08-19
  • 发帖数17
  • QQ
  • 铜币146枚
  • 威望0点
  • 贡献值0点
  • 银元0个
4楼#
发布于:2005-08-19 16:33
挺好的。学习中。。。
举报 回复(0) 喜欢(0)     评分
南院
路人甲
路人甲
  • 注册日期2005-03-22
  • 发帖数46
  • QQ
  • 铜币217枚
  • 威望0点
  • 贡献值0点
  • 银元0个
5楼#
发布于:2005-09-23 10:16
<IMG src="http://www.gisempire.com/bbs/Skins/Default/emot/em02.gif">
举报 回复(0) 喜欢(0)     评分
GIStemplet
路人甲
路人甲
  • 注册日期2005-04-16
  • 发帖数8
  • QQ
  • 铜币146枚
  • 威望0点
  • 贡献值0点
  • 银元0个
6楼#
发布于:2005-10-16 20:06
<img src="images/post/smile/dvbbs/em01.gif" />
举报 回复(0) 喜欢(0)     评分
license
路人甲
路人甲
  • 注册日期2003-08-20
  • 发帖数235
  • QQ33281522
  • 铜币366枚
  • 威望0点
  • 贡献值0点
  • 银元0个
7楼#
发布于:2005-12-12 01:49
<img src="images/post/smile/dvbbs/em01.gif" /><img src="images/post/smile/dvbbs/em01.gif" /><img src="images/post/smile/dvbbs/em01.gif" />
Gis的小石块 QICQ:33281522 EMAIL:license@vip.sina.com GIS的麦田守望者,希望和大家交流。 〓〓〓〓〓〓〓〓〓 〓 GISEMPIRE 〓 〓 灌水★波菜 〓 〓 专 用 章 〓 〓〓〓〓〓〓〓〓〓
举报 回复(0) 喜欢(0)     评分
Albert99CN
路人甲
路人甲
  • 注册日期2005-01-19
  • 发帖数50
  • QQ
  • 铜币63枚
  • 威望0点
  • 贡献值0点
  • 银元0个
8楼#
发布于:2006-03-01 17:05
<P>Very good</P>
<P>That's the direction of development of GIS in the future</P><img src="images/post/smile/dvbbs/em01.gif" />
举报 回复(0) 喜欢(0)     评分
游客

返回顶部