全国高分辨率土地利用数据服务 土地利用数据服务 土地覆盖数据服务 坡度数据服务 土壤侵蚀数据服务 全国各省市DEM数据服务 耕地资源空间分布数据服务 草地资源空间分布数据服务 林地资源空间分布数据服务 水域资源空间分布数据服务 建设用地空间分布数据服务 地形、地貌、土壤数据服务 分坡度耕地数据服务 全国大宗农作物种植范围空间分布数据服务
多种卫星遥感数据反演植被覆盖度数据服务 地表反照率数据服务 比辐射率数据服务 地表温度数据服务 地表蒸腾与蒸散数据服务 归一化植被指数数据服务 叶面积指数数据服务 净初级生产力数据服务 净生态系统生产力数据服务 生态系统总初级生产力数据服务 生态系统类型分布数据服务 土壤类型质地养分数据服务 生态系统空间分布数据服务 增强型植被指数数据服务
多年平均气温空间分布数据服务 多年平均降水量空间分布数据服务 湿润指数数据服务 大于0℃积温空间分布数据服务 光合有效辐射分量数据服务 显热/潜热信息数据服务 波文比信息数据服务 地表净辐射通量数据服务 光合有效辐射数据服务 温度带分区数据服务 山区小气候因子精细数据服务
全国夜间灯光指数数据服务 全国GDP公里格网数据服务 全国建筑物总面积公里格网数据服务 全国人口密度数据服务 全国县级医院分布数据服务 人口调查空间分布数据服务 收入统计空间分布数据服务 矿山面积统计及分布数据服务 载畜量及空间分布数据服务 农作物种植面积统计数据服务 农田分类面积统计数据服务 农作物长势遥感监测数据服务 医疗资源统计数据服务 教育资源统计数据服务 行政辖区信息数据服务
Landsat 8 高分二号 高分一号 SPOT-6卫星影像 法国Pleiades高分卫星 资源三号卫星 风云3号 中巴资源卫星 NOAA/AVHRR MODIS Landsat TM 环境小卫星 Landsat MSS 天绘一号卫星影像
COM 中,和我们打交道的是接口,也就是说类对我们是隐形的,那么我们要做开发,要使用这些功能, 我们只能通过接口,通过接口暴露出来的方法,COM 是一种服务器端/客户端架构,服务器端定义了操作 的方法,客户端通过接口调用这些方法。下面的这幅图很能说明 COM 的结构:
C#+QI的例子
言归正传,说这篇博文的主题 QI,还记得上一篇我强调的,一个接口可以被多个类实现,而 QI 要解 决的就是一个类实现多个接口的问题。在 COM 中,接口定义了方法,类实现了接口中定义的方法,而一个 接口只能使用自己内部定义的方法,而不能越界,就好比一个班级一样,这个班级内有班长,有学习委员, 有体育委员,每位干部各司其职,每一位干部负责自己职权范围之内的事情,各位干部相互协作,解决班 级内的事情,这班级内的每一位干部就相当于一个接口,而这个班级就相当于实现了这些接口的类。当这 个班级的一些事情需要班长处理的时候,我们就执行班长这个接口中定义的方法,当需要学习委员处理的 话,我们再将执行权交给学习委员这个接口,这也就是接口之间的互相访问(Query Interface),通过这 个我们大体上对 QI 有了感性上的认识,下面我们通过实例演示一下。我定义了两个接口:
IFavoriteFood 接口
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace QITest
{
interface IFavoriteFood
{
void Food ();
}
}
IVoice接口
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace QITest
{
interface IVoice
{
void Voice ();
}
}
然后定义了一个 Cat 的类实现这里面的方法:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace QITest
{
class Cat : IFavoriteFood, IVoice
{
public void Food ()
{
Console.WriteLine ("我喜欢的食物是老鼠.");
}
public void Voice ()
{
Console.WriteLine ("喵,喵,喵...");
}
}
}
这个 Cat 类的功能就是实现两个接口的方法,猫最喜欢的事物是老鼠,而他的声音是“喵,喵,喵”。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace QITest
{
class Program
{
static void Main (string\[\] args)
{
IVoice pVoice = new Cat ();
pVoice.Voice (); //只能调用IVoice中定义的方法
// pVoice.Food();这个就会报错,因为 IVoice 接口中没有这个方法的定义 IFavoriteFood pFavoriteFood = pVoice as IFavoriteFood; pFavoriteFood.Food();//只能调用IFavoriteFood定义的方法 Console.ReadLine();
}
}
}