一、技术原理
CityMaker中图层(featurelayer)标注指的通过属性字段设置图层的标注样式,具体分类详见如图:
图层标注有两种方法:
·创建图层的时候设置textrender;
·通过setTextRender设置textrender
文字渲染器ITextRender分为简易文字渲染对象ISimpleTextRender、多专题的文字渲染器IValueMapTextRender、配置显示提示信息IToolTipTextRender
简易文字渲染对象一般是通过设置属性字段文字的样式来设置
多专题的文字渲染主要是用渲染方案来设置渲染的效果,渲染方案有两个渲染的规则,一个是范围规则,也就是可以设置在规定范围中显示某种渲染效果,另一个是唯一值渲染规则,也就是可以根据某一类型来实现渲染的效果
二、图层标注
1. .NET
public void textRender() {
//文字渲染风格
ISimpleTextRender textRender = new SimpleTextRender();
textRender.Expression = "''..$(oid)";
ITextSymbol textSymbol = new TextSymbol();
TextAttribute textAttribute = new TextAttribute();
textAttribute.TextColor = 0xff0000ff;
textSymbol.TextAttribute = textAttribute;
textSymbol.PivotAlignment = gviPivotAlignment.gviPivotAlignBottomCenter;
textSymbol.VerticalOffset = 10;
// 注意:必须设置symbol,默认文字不显示
textRender.Symbol = textSymbol;
//创建图层
IFeatureLayer featureLayer = rendercontrol.ObjectManager.CreateFeatureLayer(
fc, geoName, textRender, null, __rootId);
}
//1、简易文字渲染,通过设置颜色,来渲染模型
public void SimpleSymbol() {
// 文字渲染风格
ISimpleTextRender textRender = new SimpleTextRender();
textRender.Expression = "''..$(oid)";
ITextSymbol textSymbol = new TextSymbol();
TextAttribute textAttribute = new TextAttribute();
textAttribute.TextColor = 0xffCCCCCC;
textSymbol.TextAttribute = textAttribute;
textSymbol.PivotAlignment = gviPivotAlignment.gviPivotAlignBottomCenter;
textSymbol.VerticalOffset = 10;
textRender.Symbol = textSymbol;
BuildingFl.SetTextRender(textRender) ;
}
//2、多专题的文字渲染器,通过设置范围来渲染不同范围的模型
public void ValueSymbol() {
//定义文字渲染风格
IValueMapTextRender textRender = new ValueMapTextRender();
textRender.Expression = "''..$(oid)";
//文字属性
TextAttribute textAttribute = new TextAttribute();
textAttribute.TextColor = 0xffff0000;
textAttribute.Font = "黑体";
textAttribute.TextSize = 50;
//文字样式
ITextSymbol textSymbol = new TextSymbol();
textSymbol.TextAttribute = textAttribute;
textSymbol.PivotAlignment = gviPivotAlignment.gviPivotAlignBottomCenter;
//渲染规则
IUniqueValuesRenderRule uniqValRule = new UniqueValuesRenderRule();
uniqValRule.LookUpField = "oid";
uniqValRule.AddValue("1073");
//渲染方案
ITextRenderScheme textScheme = new TextRenderScheme();
textScheme.Symbol = textSymbol;
textScheme.AddRule(uniqValRule);
textRender.AddScheme(textScheme);
BuildingFl.SetTextRender(textRender);
}
2. JavaScript
//创建图层
function createFeaturelayer(){
//初始化一个简易文字渲染
var textRender= __g.new_SimpleTextRender;//文字渲染器
//此处用的是模型图层为例,其他数据类型类似,只是渲染的文字风格不同
textRender.expression = "''..$(oid)";
var textSymbol = __g.new_TextSymbol;//文字样式
var textAttribute = __g.new_TextAttribute;//文字属性
textAttribute.textColor =0x64FFFFFF;
textSymbol.textAttribute=textAttribute;
textSymbol.pivotAlignment = gviPivotAlignment.gviPivotAlignBottomCenter;
textSymbol.verticalOffset = 10;
textRender.symbol=textSymbol;
var fl = __g.objectManager.createFeatureLayer(fc, geoName, textRender, null, __rootId);
}
//1、简易文字渲染
function changeSimpleSymbol(){
var textRender= __g.new_SimpleTextRender;//文字渲染器
textRender.expression = "''..$(oid)";
var textSymbol = __g.new_TextSymbol;//文字样式
var textAttribute = __g.new_TextAttribute;//文字属性
textAttribute.textColor =0xff097CEA;
textSymbol.textAttribute=textAttribute;
textSymbol.pivotAlignment = gviPivotAlignment.gviPivotAlignBottomCenter;
textSymbol.verticalOffset = 10;
textRender.symbol=textSymbol;
buildingFl.setTextRender(textRender);
}
//2、多专题的文字渲染器,通过设置范围来渲染不同范围的模型
function changeValueSymbol(){
//文字渲染风格
var textRender = __g.new_ValueMapTextRender;
textRender.expression = "''..$(oid)";
//文字属性
var textAttribute = __g.new_TextAttribute;
textAttribute.textColor = 0xff097CEA;
textAttribute.font = "黑体";
textAttribute.textSize = 50;
//文字样式
var textSymbol = __g.new_TextSymbol;
textSymbol.textAttribute = textAttribute;
textSymbol.pivotAlignment = gviPivotAlignment.gviPivotAlignBottomCenter;
//渲染规则
var uniqValRule = __g.new_UniqueValuesRenderRule;
uniqValRule.lookUpField = "oid";
uniqValRule.addValue("1073");
//渲染方案
var textScheme = __g.new_TextRenderScheme;
textScheme.symbol = textSymbol;
textScheme.addRule(uniqValRule);
textRender.addScheme(textScheme);
buildingFl.setTextRender(textRender);
}
3. 注意
- 文字渲染 必须设置symbol,默认文字不显示
- 简易文字渲染包含各种数据类型的图层设置,不仅是模型图层,也可以是点线面图层
- 专题渲染可以同时添加多个渲染规则