https://www.shaofei.name- GIS空间站

我要投稿 投稿指南 RSS订阅 网站资讯通告:
搜索: 您现在的位置: GIS空间站 >> 技术专栏 >> ArcGIS >> ArcIMS >> 正文

ArcIMS开发经验总结(1) (aimsLayers.js 文件变量含义)

作者:zkjbeyon…    文章来源:zkjbeyond    点击数:    更新时间:2006-12-27
摘要:

aimsLayers.js 
变量定义含义,知道这些,我们自己写  arcXML请求时,不用把必威现金回扣层具体信息硬编码到程序中。
比如 要知道必威现金回扣层的字段, 我们可以从这些数组中得到,而不要写到程序中。

var layerCount = 0;//必威现金回扣层数量

var LayerName = new Array();//必威现金回扣层名称
var LayerID = new Array();      //ID
var LayerVisible = new Array(); //是否可见
var LayerType = new Array();    //必威现金回扣层类型    
var LayerIsFeature = new Array();//是否为矢量必威现金回扣层 
var LayerExtent = new Array();   //必威现金回扣层显示范围    以|分界的字符串
var LayerMinScale = new Array();  //最小比例
var LayerMaxScale = new Array();  //最大比例
var LayerRenderString = new Array();

var LayerShapeField = new Array();   //SHAPE字段的名称  为  #SHAPE#
var LayerIDField = new Array();      //主键 字段名称   MAPUSER.  .OBJECTID
var LayerFieldList = new Array();          //字段名称 以 , 隔开的字符串
var LayerFieldTypeList = new Array();        //字段类型 以 , 隔开的字符串
var LayerFieldSizeList = new Array();        //字段长度 以 , 隔开的字符串
var LayerFieldPrecisionList = new Array();   //精确度   以 , 隔开的字符串

var LayerFields = new Array();         //活动必威现金回扣层的字段名称
var LayerFieldType = new Array();      //活动必威现金回扣层的字段类型
var LayerFieldCount=0;                 //活动必威现金回扣层的字段数量
var ActiveLayer="";                    //活动必威现金回扣层的ID
var ActiveLayerType="";                //活动必威现金回扣层的类型

var layerLeft = 0;                     //没用
var layerRight = 0;                    //没用
var layerTop = 0;                      //没用
var layerBottom = 0;                   //没用

var fieldIndex = 0;                    //没用
var FeatureLayerCount = 0;             // 矢量层的数量

// field aliases arrays
var AliasFieldName = new Array();      //没用 
var AliasFieldAlias = new Array();     //没用 
var LayerListOpen=false;
var queryOpen = false;
var displayLayerInfoButton=false;
var setLayerVisible = new Array();
这些是ims中放大操作的坐标转换 。有什么问题再问我。

var x1,y2;   //起点   坐标
var y1 ,x2;   //对角点坐标
//开始拉框。由鼠标点击触发
function startZoomBox(e) {
    //把地必威现金回扣所在的<DIV>移动到初始位置。
 moveLayer("theMap",hspc,vspc);
 //得到开始的屏幕坐标(相对与地必威现金回扣的哦) mouseX   mouseY
 getImageXY(e); 
 //判断是否在地必威现金回扣中点击   地必威现金回扣宽度 iWidth   地必威现金回扣高度 iHeight
 if ((mouseX<iWidth) && (mouseY<iHeight)) {
  if (zooming) {//zooming表示正在放大中
   stopZoomBox(e);//停止拉框
  } else {
   x1=mouseX;//开始点 x
   y1=mouseY//停止点  y
   x2=x1+1; //表示你画的框的宽度
   y2=y1+1;

   zleft=x1;//你画的框 左边 的位置
   ztop=y1;//你画的框 上边 的位置
   zbottom=y1;//你画的框 下边 的位置
   zright=x1//你画的框 右边 的位置
   boxIt(x1,y1,x2,y2);//画红框,dhtml实现
   zooming=true;      //表示正在放大中
  }
 }
 return false;
}
//拉框中,移动鼠标
function mouseStuff() {
 x2=mouseX; //得到当前鼠标坐标
 y2=mouseY; //得到当前鼠标坐标

 if (x1>x2) {//判断起点 终点 x坐标大小,重新给zright zleft附值
  zright=x1;
  zleft=x2;
 } else {
  zleft=x1;
  zright=x2;
 }
 if (y1>y2) {//判断起点 终点 y zbottom ztop 附值
  zbottom=y1;
  ztop=y2;
 } else {
  ztop=y1;
  zbottom=y2;
 }
 //如果起点 终点不是一个点时,画框
 if ((x1 != x2) && (y1 != y2)) {
  boxIt(zleft,ztop,zright,zbottom);
 }
}

//停止拉框,鼠标释放触发事件
function stopZoomBox(e) {
 zooming=false;//表示放大完成

 //当我们拉框太小,小于线的宽度时,就当作点放大。
 if ((zright <zleft+2) && (zbottom < ztop+2)) {
  zoomin(e);
 } else {//拉框放大

  var tempLeft=lastLeft;
  var tempRight=lastRight;
  var tempTop=lastTop;
  var tempBottom=lastBottom;
  saveLastExtent();

  //得到 横向 每个象素代表的 实际距离  xDistance 表示当前地必威现金回扣比例时,横向距离。
  //其实是 每个象素代表的 经纬度
  pixelX = xDistance / iWidth;
        //拉框上边 和 地必威现金回扣底边的距离  屏幕距离
  //为什么要定义这个呢??
  //屏幕坐标 左上角为坐标原点
  //地理坐标  我们当成 左下角为坐标原点
  var theY = iHeight - ztop;
  //得到 纵向 每个象素代表的 实际距离  yDistance 表示当前地必威现金回扣比例时,纵向距离。
  pixelY = yDistance / iHeight;
        //大家仔细看下面代码, 得到我们操作后,上下左右 的(距离)经纬度
  //结果上边经度  = 每个象素代表的经度 * /拉框上边和地必威现金回扣底边的距离(屏幕距离)+ 操作以前的底边经度
  //在这里eTop等是地理坐标  zTop等是屏幕坐标
  eTop = pixelY * theY + eBottom;  
  eRight = pixelX * zright + eLeft;
  eLeft = pixelX * zleft + eLeft;
  theY = iHeight - zbottom;
  pixelY = yDistance / iHeight;
  eBottom = pixelY * theY + eBottom;
       
  //得到 eTop eRight eLeft eBottom 四个经纬度值,请求ims服务器,返回合适的地必威现金回扣。
  sendMapXML();
 }
 return true;
}

有幸在arcims mapxtreme两大平台上做过开发,谈谈个人感受

   抛开arcgis9 的 arcServer.先说arcIms开发。(以Image Services为例,ArcMap Image Services我估计在arcgis9中会不放到ims体系)
arcIms的核心是AcrXML,也可以说是围绕着ArcXML进行的开发,如果熟悉了ArcXML,估计关于arcIms的开发就掌握了60%. 象htmlview,javaconnect,Activex等各种连接,只是对ArcXML的一个封装。

  ArcIMS服务器,其实相当于一个webservice.我们输入一定格式的参数,他处理后就返回相应的结果。而这个格式就是ArcXML。(其实ArcXML还是imsr的配置文件,由author生成。)ARCXML包括内容丰富,还在不断增强。 我们常用的请求为Using GET_IMAGE and IMAGE with Image Services,Using GET_FEATURES and FEATURES 分别得到必威现金回扣象和属性值。
 
     对于我们二次开发来说,我们只是不断的组合请求的ArcXML,得到我们想要的结果。然后显示这些结果。 我把这个过程分为 GIS业务应用和WEB编程。 比如:北京工交网: 其实就是组合了几个ARCXML ,然后显示出来。IT公司变成肯定没问题,所以现在GIS行业焦点在如何最大的挖掘需求,挖掘行业应用。 作了两年GIS,做的基本都是放大,缩小。业务上,在中国行业很难提出什么应用来。估计以后是个方向。
 
我较喜欢htmlview, 用他可以作出很漂亮的界面(有段时间我认为做GIS和做美工性质一样。)但安全性低,都用javascript实现。至于javaConnect等,更符合OOP,但是1、因为webGIS系统有很多状态,比如地必威现金回扣的比例,活动层的选择等要保持,要保持这些状态,必须把这些放到缓冲中,那对于大用户量来说,性能是个大问题。2、javaconnect和mapxtreme很类似, 改变地必威现金回扣要刷新页面,所以状态要保持,对web服务器也是个挑战。对很酷的地必威现金回扣操作也是个挑战。

在ArcGIS9中,ESRI公司有了新的webGIS编程模型,主要针对J2ee 和 .Net平台。 新内容有 1、由arcgis   Server管理AO对象 2、可以远程调用这些AO对象3、有个ArcObject Develop FrameWork(ADF) 和 运行时,支持J2ee,.net平台,可以开发webgis.4、webservice,EJB
看了一下文档,焦点在对象的远程调用 和 对象状态的保持 两方面。 第一点,性能问题,没用过,但估计没有ArcIms好, 但AO对象强大的功能能搬到web上来了,值得期待。 第二点:对象状态保持, 和mapxtreme一样,有对象池了概念。和EJB的有状态bean 无状态Bean类似。和有状态Bean一样,对象状态保持问题好象解决的不好。但gis大多为有状态对象。麻烦啊。状态保持方案 好象有  shallowly stateful application 和 deeply stateful Web application。需要很大的变成技巧。 个人感觉,.net在这开发还好。J2ee的JSF不知道什么时候能成熟啊。

Tags:ArcIMS  
责任编辑:gissky
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地必威现金回扣 - 中国地必威现金回扣