全国高分辨率土地利用数据服务 土地利用数据服务 土地覆盖数据服务 坡度数据服务 土壤侵蚀数据服务 全国各省市DEM数据服务 耕地资源空间分布数据服务 草地资源空间分布数据服务 林地资源空间分布数据服务 水域资源空间分布数据服务 建设用地空间分布数据服务 地形、地貌、土壤数据服务 分坡度耕地数据服务 全国大宗农作物种植范围空间分布数据服务
多种卫星遥感数据反演植被覆盖度数据服务 地表反照率数据服务 比辐射率数据服务 地表温度数据服务 地表蒸腾与蒸散数据服务 归一化植被指数数据服务 叶面积指数数据服务 净初级生产力数据服务 净生态系统生产力数据服务 生态系统总初级生产力数据服务 生态系统类型分布数据服务 土壤类型质地养分数据服务 生态系统空间分布数据服务 增强型植被指数数据服务
多年平均气温空间分布数据服务 多年平均降水量空间分布数据服务 湿润指数数据服务 大于0℃积温空间分布数据服务 光合有效辐射分量数据服务 显热/潜热信息数据服务 波文比信息数据服务 地表净辐射通量数据服务 光合有效辐射数据服务 温度带分区数据服务 山区小气候因子精细数据服务
全国夜间灯光指数数据服务 全国GDP公里格网数据服务 全国建筑物总面积公里格网数据服务 全国人口密度数据服务 全国县级医院分布数据服务 人口调查空间分布数据服务 收入统计空间分布数据服务 矿山面积统计及分布数据服务 载畜量及空间分布数据服务 农作物种植面积统计数据服务 农田分类面积统计数据服务 农作物长势遥感监测数据服务 医疗资源统计数据服务 教育资源统计数据服务 行政辖区信息数据服务
Landsat 8 高分二号 高分一号 SPOT-6卫星影像 法国Pleiades高分卫星 资源三号卫星 风云3号 中巴资源卫星 NOAA/AVHRR MODIS Landsat TM 环境小卫星 Landsat MSS 天绘一号卫星影像
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不知道什么时候能成熟啊。