9.3.8 专题制图
1.基本概念
专题制图可以根据空间数据的属性值,以不同颜色符号或者直方图、饼图等来表现,从而直观表现数据所指定属性间的相互关系。每一个具有属性数据地物类都可以创建多个专题图层。
专题图创建可以通过服务配置管理工具中专题图创建向导生成,也可以直接调用GeoSurf提供的专题图组件生成所需的专题图层。
创建好的专题图层可以和图层信息一起保存在地图定义文件中,用户下一次打开地图时,访问地图定义文件,就可以显示已保存的专题图层。
GeoSurf提供的专题图,根据其表现属性不同方式可以分为两大类:专题表现和专题图表。专题表现又分为专题符号和专题标注两类。
在表现上,专题符号将会覆盖所属图层要素对象原有的绘制方式;专题标注将会覆盖所属图层要素对象原有标注的绘制方式。
一层专题表现类的专题图只能用来表现所属图层的某一项属性。该项属性可以为数值型、字符型、字符串型、日期型或布尔型。
专题表现的定义方式又可分为分级和独立值两种。分级方式是通过指定多个属性区间画法对来定义,独立值方式是通过指定多个属性值画法对来确定。属性区间画法对(RangedBin)包含一个取值区间及其相对应的画法,属性值画法对(ValueBin)包含一个属性值及其对应画法。
不论采取哪种定义方式,用户都可以指定是否采用缺省画法以及缺省画法的定义。当采用缺省画法时,对于没有落在任何指定取值区间或不与任何指定属性值相等的对象将采用缺省画法绘制;当不使用缺省画法时,将不会绘制这些对象。
专题图表只是在所属图层要素对象之上根据指定属性值进行绘制,包括直方图、饼图、格网图和趋势图4种样式。与专题表现不同,一层专题图表类型的专题图可同时表示其所属图层的多个数值型属性项的取值。
每个矢量图层都有一个专题图集合来存放该图层的专题图。一个专题图集合中的专题图层之间的压盖顺序可以调整。当矢量图层的专题图集合中包含多幅专题图时,专题符号、专题标注和专题图表这3种专题图都只显示其可视的最上层专题图。
2.获取专题图集合
一个专题图集合只能与一个矢量图层相关,并存放在该矢量图层内,不需要用户去单独创建。调用以下代码即可获取专题图集合:
ThemeCollection themeCollection=featureLayer.getThemeCollection();
生成的专题图通过以下代码可加入到专题图集合中:
themeCollection.addThemeMap(map);
3.生成分级专题图符号
以下代码实现了为矢量层featureLayer创建分级专题图符号的功能,该专题符号使用featureLayer层中名为“population”的字段制作,不使用缺省画法。
//根据指定的矢量图层创建分级专题符号
RangedThemeSymbol themeSymbol=new RangedThemeSymbol(featureLayer);
//设定专题图名称
themeSymbol.setThemeMapName("RangedThemeSymbolExample");
//设定专题图为可见
themeSymbol.setVisible(true);
//设定专题图使用的属性
themeSymbol.setAttrName("population");
//设定不使用缺省画法
themeSymbol.setIsUseDefaultRendition(false);
//创建属性区间画法对集合
RangedBinSet binset=new RangedBinSet();
//创建属性区间画法对,并加入到属性区间画法对集合中
RangedBin bin1=new RangedBin(attValueB1,attValueT1,rendition1);
RangedBin bin2=new RangedBin(attValueB2,attValueT2,rendition2);
RangedBin bin3=new RangedBin(attValueB3,attValueT3,rendition3);
binset.add(bin1);
binset.add(bin2);
binset.add(bin3);
//设定专题图使用的属性区间画法对集合
themeSymbol.setBinSet(binSet);
4.生成独立值专题图符号
以下代码实现了为矢量层featureLayer创建独立值专题图符号的功能,该专题符号使用featureLayer层中名为“population”的字段制作,并使用指定的缺省画法defaultRendition。
//根据指定的矢量图层创建独立值专题符号
IndividualThemeSymbol themeSymbol=new IndividualThemeSymbol(featureLayer);
//设定专题图名称
themeSymbol.setThemeMapName("IndividualThemeSymbolExample");
//设定专题图为可见
themeSymbol.setVisible(true);
//设定专题图使用的属性
themeSymbol.setAttrName("population");
//设定使用缺省画法
themeSymbol.setIsUseDefaultRendition(true);
themeSymbol.setDefaultRendition(defaultRendition);
//创建属性值画法对集合
IndividualBinSet binset=new IndividualBinSet();
//创建属性值画法对,并加入到属性值画法对集合中
ValueBin bin1=new ValueBin(attValue1,rendition1);
ValueBin bin2=new ValueBin(attValue2,rendition2);
ValueBin bin3=new ValueBin(attValue3,rendition3);
binset.add(bin1);
binset.add(bin2);
binset.add(bin3);
//设定专题图使用的属性值画法对集合
themeSymbol.setBinSet(binSet);
5.生成分级专题图标注
以下代码实现了为矢量层featureLayer创建分级专题图标注的功能,该专题标注使用featureLayer层中名为“population”的字段制作,并不使用缺省画法。
//根据指定的矢量图层创建分级专题标注
RangedThemeLabel themeLabel=new RangedThemeLabel(featureLayer);
//设定专题图名称
themeLabel.setThemeMapName("RangedThemeSymbolExample");
//设定专题图为可见
themeLabel.setVisible(true);
//设定专题图使用的属性
themeLabel.setAttrName("population");
//设定不使用缺省画法
themeLabel.setIsUseDefaultRendition(false);
//创建属性区间画法对集合
RangedBinSet binset=new RangedBinSet();
//创建属性区间画法对,并加入到属性区间画法对集合中
RangedBin bin1=new RangedBin(attValueB1,attValueT1,rendition1);
RangedBin bin2=new RangedBin(attValueB2,attValueT2,rendition2);
RangedBin bin3=new RangedBin(attValueB3,attValueT3,rendition3);
binset.add(bin1);
binset.add(bin2);
binset.add(bin3);
//设定专题图使用的属性区间画法对集合
themeLabel.setBinSet(binSet);
6.生成独立值专题图标注
以下代码实现了为矢量层featureLayer创建独立值专题图标注的功能,该专题标注使用featureLayer层中名为“population”的字段制作,并使用指定的缺省画法defaultRendition。
//根据指定的矢量图层创建独立值专题标注
IndividualThemeLabel themeLabel=new IndividualThemeLabel(featureLayer);
//设定专题图名称
themeLabel.setThemeMapName("IndividualThemeSymbolExample");
//设定专题图为可见
themeLabel.setVisible(true);
//设定专题图使用的属性
themeLabel.setAttrName("population");
//设定使用缺省画法
themeLabel.setIsUseDefaultRendition(true);
themeLabel.setDefaultRendition(defaultRendition);
//创建属性值画法对集合
IndividualBinSet binset=new IndividualBinSet();
//创建属性值画法对,并加入到属性值画法对集合中
ValueBin bin1=new ValueBin(attValue1,rendition1);
ValueBin bin2=new ValueBin(attValue2,rendition2);
ValueBin bin3=new ValueBin(attValue3,rendition3);
binset.add(bin1);
binset.add(bin2);
binset.add(bin3);
//设定专题图使用的属性值画法对集合
themeLabel.setBinSet(binSet);
7.生成饼图
以下代码实现了为矢量层featureLayer创建饼图功能,该专题图表使用featureLayer层中名为“pop1990”、“pop1995”、“pop1999”的字段制作,并为这三个属性分别指定蓝色、绿色和红色。
//根据指定的矢量图层创建饼图
PieThemeGraph graph=new PieThemeGraph(featureLayer);
//设定专题图名称
graph.setThemeMapName("");
//设定专题图为可见
graph.setVisible(true);
int baseScale=1;
int pieOutR=25;
int pieAperture=0;
//设定的饼图相关参数
graph.setPieGraphParam(pieOutR,pieAperture,baseScale);
//设定专题图表的定位方式为中心定位
graph.setLocStyle(0);
//设定专题图表使用的颜色,排列顺序与属性项名称相对应
int[]colorArray={255,65280,16711680};
graph.setAttrColor(colorArray);
//设定专题图表使用的属性项名称
String[]attrNames={"pop1990","pop1995","pop1999"};
graph.setAttrName(attrNames);
//最后调用专题图表计算方法
graph.calculateData();
8.生成直方图
以下代码实现了为矢量层featureLayer创建直方图的功能,该专题图表使用featureLayer层中“pop1990”、“pop1995”、“pop1999”字段制作,并为这三个属性分别指定蓝色、绿色和红色。
//根据指定的矢量图层创建直方图
RecThemeGraph graph=new RecThemeGraph(featureLayer);
//设定专题图名称
graph.setThemeMapName("");
//设定专题图为可见
graph.setVisible(true);
byte recStyle=0;
int baseScale=1;
int recSizeW=5;
int recSizeH=30;
int recSizeGap=2;
//设定的直方图相关参数
graph.setRecGraphParam(recSizeW,recSizeH,recSizeGap,recStyle,baseScale);
//设定专题图表的定位方式为中心定位
graph.setLocStyle(0);
//设定专题图表使用的颜色,排列顺序与属性项名称相对应
int[]colorArray={255,65280,16711680};
graph.setAttrColor(colorArray);
//设定专题图表使用的属性项名称
String[]attrNames={"pop1990","pop1995","pop1999"};
graph.setAttrName(attrNames);
//最后调用专题图表计算方法
graph.calculateData();
9.生成格网图
以下代码实现了为矢量层featureLayer创建格网图的功能,该专题图表使用featureLayer层中“pop1990”、“pop1995”、“pop1999”字段制作,并为这三个属性分别指定蓝色、绿色和红色。
//根据指定的矢量图层创建格网图
GridThemeGraph graph=new GridThemeGraph(featureLayer);
//设定专题图名称
graph.setThemeMapName("");
//设定专题图为可见
graph.setVisible(true);
int baseScale=1;
int gridSize=5;
int gridW=4;
int gridH=4;
//设定的格网图相关参数
graph.setGridGraphPrarm(gridSize,gridW,gridH,baseScale);
//设定专题图表的定位方式为中心定位
graph.setLocStyle(0);
//设定专题图表使用的颜色,排列顺序与属性项名称相对应
int[]colorArray={255,65280,16711680};
graph.setAttrColor(colorArray);
//设定专题图表使用的属性项名称
String[]attrNames={"pop1990","pop1995","pop1999"};
graph.setAttrName(attrNames);
//最后调用专题图表计算方法
graph.calculateData();
10.生成趋势图
以下代码实现了为矢量层featureLayer创建趋势图的功能,该专题图表使用featureLayer层中“pop1990”、“pop1995”、“pop1999”字段制作,并为这三个属性分别指定蓝色、绿色和红色。
//根据指定的矢量图层创建趋势图
TrendThemeGraph graph=new TrendThemeGraph(featureLayer);
//设定专题图名称
graph.setThemeMapName("");
//设定专题图为可见
graph.setVisible(true);
byte trendStyle=0;
byte trendLocModel=0;
int baseScale=1;
int trendMaxSize=30;
//设定的趋势图相关参数
graph.setTrendGraphParam(trendMaxSize,trendStyle,trendLocModel,baseScale);
//设定专题图表的定位方式为中心定位
graph.setLocStyle(0);
//设定专题图表使用的颜色,排列顺序与属性项名称相对应
int[]colorArray={255,65280,16711680};
graph.setAttrColor(colorArray);
//设定专题图表使用的属性项名称
String[]attrNames={"pop1990","pop1995","pop1999"};
graph.setAttrName(attrNames);
//最后调用专题图表计算方法
graph.calculateData();
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。