2.1.4.1 矢量符号化
矢量符号化
前面已经介绍了矢量数据加载图层的配置及矢量数据的加载流程。 矢量的符号化配置作为矢量数据图层加载的最重要环节,每个符号的配置都包含了自身锁拥有的配置参数。
矢量的符号对象包括11种符号,分别是:点符号、线符号、面符号、文字符号、图标符号、模型符号、点挤出符号、线挤出符号、面挤出符号、缓冲区符号、贴地符号和纹理符号。此外每种符号化还可以进行符号化专题配置;
其中纹理符号、球形符号和圆柱体符号不能单独作用于矢量图层。纹理符号在线挤出和面挤出时可作为挤出体的纹理样式,球形符号和圆柱体符号可作为线挤出成管线的套接样式。
表达式类型
在设置符号对象的参数信息时,部分参数可以设置表达式类型,通过表达式类型可以读取矢量属性表中的属性字段值,从而实现要素多状态显示。
表达式类型支持传值和传属性表达式两种方式。传值时直接写入相应类型的值;传表达式时,需要使用[]
将字段名包含,在取值时会获取每个要素对应的字段值。SDK支持的表达式类型有:
1. stringExpression 代表是字符串表达式。如传入"name", 则直接显示name字符串;如传入"[name]", 则显示时会读取矢量属性字段name的值。
2. NumericExpression 代表是数值表达式。表达式中可以传入数值、表达式符号和属性字段。属性字段需要用"[]"包含。如"[height]"。数值表达式支持的类型如下表:
编号 | 名称 | 格式 | 备注 |
---|---|---|---|
1 | 原值 | 数值 | 不用表达式时,直接传数值即可。可以是int、float、double类型 |
2 | 求和 | a+b | 求和时,需传入"a+b"类型字符串,a、b是数字或者属性字段,如"20+[height]" |
3 | 求差 | a-b | 求差时,需传入"a-b"类型字符串,a、b是数字或者属性字段,如"20-[height]" |
4 | 求积 | a*b | 求积时,需传入"a*b"类型字符串,a、b是数字或者属性字段,如"20*[height]" |
5 | 求商 | a/b | 求商时,需传入"a/b"类型字符串,a、b是数字或者属性字段,如"20/[height]" |
6 | 求余 | a%b | 求余时,需传入"a%b"类型字符串,a、b是数字或者属性字段,如"20%[height]" |
7 | 最小值 | min(a,b) | 取最小值时,需传入"min(a,b)"类型字符串,a、b是数字或者属性字段,如"min(20,[height])" |
8 | 最大值 | max(a,b) | 取最大值时,需传入"max(a,b)"类型字符串,a、b是数字或者属性字段,如"max(20,[height])" |
1.点符号
点符号可配置的参数如下表所示:
配置项 | 配置说明 | 值类型 | 备注 |
---|---|---|---|
Size | 点大小 | float | 点符号大小。取值范围1-10之间。默认1.0 |
Color | 点颜色 | R,G,B,A | 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0" |
对应的样式对象需要调用AddSymbol()添加点符号类型(PointSymbol)和AddFilterName()添加几何瓦片化构建器(BuildGeometryTileFilter)。
代码调用示例
Javascript调用
//********************************
// 点矢量加载
//********************************
var pointshpLayer;
var gShpPointPath = " E:\\测试数据\\Vector\\point.shp";
//创建点矢量图层
function createPointShpLayer(){
if(pointShpLayer == null){
//1.创建点符号对象
var pSymbol = map.CreateSymbol("PointSymbol");//创建符号对象,PointSymbol代表点符号
pSymbol.AddConfig("Size", "5");//点大小,(0-10)
pSymbol.AddConfig("Color", "1.0,1.0,0.0,1.0");//颜色值(RGBA,各值取值范围0-1之间)
//2.创建样式对象
var pStyle = map.CreateStyle("style");//创建样式
pStyle.SetName("point");//设置别名point
pStyle.AddSymbol("PointSymbol", pSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
pStyle.AddFilterName("BuildGeometryTileFilter");//添加构建器名称.几何瓦片过滤器:BuildGeometryTileFilter
//3.创建样式表对象
var styleSheet = map.CreateStyleSheet();//创建样式表
styleSheet.AddStyle(pStyle.GetConfig());//将样式对象配置添加至样式表
//4.创建并添加图层对象
var tlo = map.CreateLayerOptions("shp");//创建图层配置对象,名称任意
tlo.AddConfig("LayerOptionsName", "FeatureModelLayerOptions");//图层配置对象名称, FeatureModelLayerOptions代表矢量数据配置
tlo.AddConfig("DataSourceTypeName", "fmgeomtile");//数据源类型,代表瓦片化加载插件
tlo.AddConfig("Driver", "ESRI Shapefile");//ogr数据的解析驱动
tlo.AddConfig("FeatureSourceType", "ogr");//要素数据源类型,本地数据为ogr
tlo.AddConfig("Url", gShpPointPath);//数据路径
tlo.AddConfig("TileSizeFactor", "1.0");//瓦片大小的影响因子,建议是1.0
tlo.AddConfig("TileSize", "1000");//瓦片大小,根据最大显示范围设置,一般为MaxRange的1/10左右
tlo.AddConfig("IsAutoTileSize", "false");//是否自动计算瓦片大小,默认为false
tlo.AddConfig("LiftUp", "33");//图层抬升高度,正值为抬高,负值为降低
//tlo.AddConfig("IsLighted", "true");//灯光开启状态,默认为false
tlo.AddConfig("MaxRange", "50000.0");//最大显示范围,大于最小显示范围-无穷大
tlo.AddConfig("MinRange", "0.0");//最小显示范围,0-无穷大
tlo.AddConfig("Srs", "EPSG:4326");//数据的坐标参考
tlo.AddConfig("MaxX", "180");//数据的范围X向最大值
tlo.AddConfig("MinX", "-180");//数据的范围X向最小值
tlo.AddConfig("MaxY", "90");//数据的范围Y向最大值
tlo.AddConfig("MinY", "-90");//数据的范围Y向最小值
tlo.AddConfig("IsHasTexture", "false");//是否有纹理,默认为false,该参数在进行分析时起效
tlo.AddConfig("StyleSheet", styleSheet.GetConfig());//将样式配置添加至样式表
pointShpLayer = map.CreateLayer("FeatureModelLayer", tlo);//创建矢量图层,第一项参数为FeatureModelLayer
map.AddLayer(pointShpLayer);//添加图层
//pointShpLayer.Locate();//矢量图层定位
}else{
alert("请勿重复创建矢量图层!");
}
}
//显隐点矢量图层
function visiblePointShpLayer(){
if(pointShpLayer){
pointShpLayer.SetVisible(bPointVisible = !bPointVisible);//显隐图层
}else{
alert("无矢量图层,无法显隐!");
}
}
//定位点矢量图层
function locatePointShpLayer(){
if(pointShpLayer){
flyToDestPos(120.219160835, 30.2104997499, 14.7999554612, 2.529926051075526, -0.6947455157445968, 32.81765619515068, 3);
//pointShpLayer.Locate();//定位图层,这里因为自动定位影响视觉效果,故采用定制方式定位
}else{
alert("无矢量图层,无法定位!");
}
}
//删除点矢量图层
function removePointShpLayer(){
if(pointShpLayer){
map.RemoveLayer(pointShpLayer);//移除图层
pointShpLayer = null;
bPointVisible = true;
}else{
alert("无矢量图层,无需移除!");
}
}
C++调用
std::string gShpPointPath = " E:\\测试数据\\Vector\\point.shp";
BaseObjectCOMLib::ILayerObjectPtr pointShpLayer;//点矢量图层
bool pointVisble = true;//点矢量显隐开关
//创建点矢量图层
void Cf0c3VectorLoadDlg::OnBnClickedcreatepointshplayer()
{
if(!pointShpLayer)
{
char temp_status[MAX_PATH];
GetPrivateProfileStringA("Path", "ShpPointPath", "", temp_status, MAX_PATH, mIniPath.c_str());
std::string ShpPointPath(temp_status);
pointShpLayer = createPointShpLayer(ShpPointPath);
}
}
//显隐点矢量图层
void Cf0c3VectorLoadDlg::OnBnClickedvisiblepointshplayer()
{
if(pointShpLayer)
{
pointShpLayer->SetVisible(pointVisble = !pointVisble);//显隐图层
}
}
//定位点矢量图层
void Cf0c3VectorLoadDlg::OnBnClickedlocatepointshplayer()
{
if(pointShpLayer)
{
pointShpLayer->Locate();//定位图层
}
}
//删除点矢量图层
void Cf0c3VectorLoadDlg::OnBnClickedremovepointshplayer()
{
if(pointShpLayer){
map->RemoveLayer(pointShpLayer);//移除图层
pointShpLayer = NULL;
pointVisble = TRUE;
}
}
//加载点矢量图层
BaseObjectCOMLib::ILayerObjectPtr Cf0c3VectorLoadDlg::createPointShpLayer(std::string Url)
{
//1.创建点符号
ConfigOptionsCOMLib::ISymbolObjectPtr pSymbol=map->CreateSymbol("PointSymbol");//创建符号对象,PointSymbol代表点符号
pSymbol->AddConfig("Size", "5");//点大小,(0-10)
pSymbol->AddConfig("Color", "1.0,1.0,0.0,1.0");//颜色值(RGBA,各值取值范围0-1之间)
//2.创建样式对象
ConfigOptionsCOMLib::IStylePtr pStyle = map->CreateStyle("style");//创建样式
pStyle->SetName("point");//设置样式名称为point
pStyle->AddSymbol("PointSymbol", pSymbol->GetConfig());//将符号对象添加到样式
pStyle->AddFilterName("BuildGeometryTileFilter");//添加构建器名称.几何瓦片过滤器:BuildGeometryTileFilter
//3创建样式表
ConfigOptionsCOMLib::IStyleSheetPtr styleSheet = map->CreateStyleSheet();//创建样式表
styleSheet->AddStyle(pStyle->GetConfig());//将样式配置添加至样式表
//4创建图层
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions("shp");//创建图层配置对象,名称任意
tlo->AddConfig("LayerOptionsName", "FeatureModelLayerOptions");//图层配置对象名称, FeatureModelLayerOptions代表矢量数据配置
tlo->AddConfig("DataSourceTypeName", "fmgeomtile");//数据源类型,代表瓦片化加载插件
tlo->AddConfig("Driver", "ESRI Shapefile");//ogr数据的解析驱动
tlo->AddConfig("FeatureSourceType", "ogr");//要素数据源类型,本地数据为ogr
tlo->AddConfig("Url", Url.c_str());//数据路径
tlo->AddConfig("GeometryType", "Polygon");//几何类型。Point-点;Polyline-线;Polygon-面.此项配置不能少或字符串一定不能错误,否则保存文件不成功
tlo->AddConfig("TileSizeFactor", "1.0");//瓦片大小的影响因子,建议是1.0
tlo->AddConfig("TileSize", "1000");//瓦片大小,根据最大显示范围设置,一般为MaxRange的1/10左右
tlo->AddConfig("LiftUp", "33");//图层抬升高度,正值为抬高,负值为降低
tlo->AddConfig("MaxRange", "10000.0");//最大显示范围,大于最小显示范围-无穷大
tlo->AddConfig("MinRange", "0.0");//最小显示范围,0-无穷大
tlo->AddConfig("StyleSheet", styleSheet->GetConfig());//将样式配置添加至样式表
BaseObjectCOMLib::ILayerObjectPtr shpLayer = map->CreateLayer("FeatureModelLayer", tlo);//创建矢量图层,第一项参数为FeatureModelLayer
map->AddLayer(shpLayer);//添加矢量图层
shpLayer->Locate();//图层定位
return shpLayer;
}
C#调用
ILayerObject pointShpLayer;//点矢量图层
var gShpPointPath = " E:\\测试数据\\Vector\\point.shp";
//创建点矢量图层
private void createPointShpLayer_Click(object sender, EventArgs e)
{
if (pointShpLayer == null)
{
//1.创建点符号对象
ISymbolObject pSymbol = map.CreateSymbol("PointSymbol");//创建符号对象,PointSymbol代表点符号
pSymbol.AddConfig("Size", "5");//点大小,(0-10)
pSymbol.AddConfig("Color", "1.0,1.0,0.0,1.0");//颜色值(RGBA,各值取值范围0-1之间)
//2.创建样式对象
IStyle pStyle = map.CreateStyle("style");//创建样式
pStyle.SetName("point");//设置别名point
pStyle.AddSymbol("PointSymbol", pSymbol.GetConfig()); //将符号对象添加到样式,第一参数为符号类型
pStyle.AddFilterName("BuildGeometryTileFilter"); //添加构建器名称.几何构建器为:BuildGeometryTileFilter
//3.创建样式表对象
IStyleSheet styleSheet = map.CreateStyleSheet(); // 创建样式表
styleSheet.AddStyle(pStyle.GetConfig()); //将样式对象配置添加至样式表
//4.创建并添加图层对象
ILayerOptions tlo = map.CreateLayerOptions("shp");//创建图层配置对象,名称任意
tlo.AddConfig("LayerOptionsName", "FeatureModelLayerOptions");//图层配置对象名称, FeatureModelLayerOptions代表矢量数据配置
tlo.AddConfig("DataSourceTypeName", "fmgeomtile");//数据源类型,代表fmgeomtile插件
tlo.AddConfig("Driver", "ESRI Shapefile"); //ogr数据的解析驱动
tlo.AddConfig("FeatureSourceType", "ogr"); //要素数据源类型,本地数据为ogr
tlo.AddConfig("Url", gShpPointPath); //数据路径
tlo.AddConfig("TileSizeFactor", "1.0"); //瓦片大小的影响因子,建议是1.0
tlo.AddConfig("TileSize", "1000"); //瓦片大小,根据最大显示范围设置,一般为MaxRange的1/10左右
tlo.AddConfig("IsAutoTileSize", "false");//是否自动计算瓦片大小,默认为false
tlo.AddConfig("LiftUp", "33"); //图层抬升高度,正值为抬高,负值为降低
tlo.AddConfig("MaxRange", "50000.0"); // 最大显示范围,大于最小显示范围-无穷大
tlo.AddConfig("MinRange", "0.0"); // 最小显示范围,0-无穷大
tlo.AddConfig("IsHasTexture", "false");//是否有纹理,默认为false,该参数在进行分析时起效
tlo.AddConfig("StyleSheet", styleSheet.GetConfig()); //将样式表配置添加至图层配置对象
pointShpLayer = map.CreateLayer("FeatureModelLayer", tlo); //创建矢量图层,第一项参数为FeatureModelLayer
map.AddLayer(pointShpLayer); //添加图层
//pointShpLayer.Locate(); //矢量图层定位
}
}
//显隐点矢量图层
private void visiblePointShpLayer_Click(object sender, EventArgs e)
{
if (pointShpLayer != null)
{
pointShpLayer.SetVisible(bPointVisible = !bPointVisible);//显隐图层
}
}
//定位点矢量图层
private void locatePointShpLayer_Click(object sender, EventArgs e)
{
if (pointShpLayer != null)
{
pointShpLayer.Locate();//定位图层
}
}
//删除点矢量图层
private void removePointShpLayer_Click(object sender, EventArgs e)
{
if (pointShpLayer != null)
{
map.RemoveLayer(pointShpLayer);//移除图层
pointShpLayer = null;
bPointVisible = true;
}
}
2.线符号
线符号可配置的参数如下表所示:
配置项 | 配置说明 | 值类型 | 备注 |
---|---|---|---|
Width | 线宽度 | float | 矢量线的宽度。取值范围1-10之间。默认1.0 |
Color | 线颜色 | R,G,B,A | 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0" |
Stipple | 线类型 | short | 矢量线的类型。取值范围-32768-32767之间。-1-实线,其他-虚线。默认-1 |
对应的样式对象需要调用AddSymbol()添加线符号类型(LineSymbol)和AddFilterName()添加几何瓦片化构建器(BuildGeometryTileFilter)。
注: Stipple
线类型在绘制时,会以该值的二进制占位计算是否绘制,1绘制,0不绘制。因此设为-1时,整个16位都为1,将绘制直线,设为其他值时,将绘制各种类型的虚线。当该值大于32767时,会自动调整大小在该值范围内。
代码调用示例
Javascript调用
//********************************
// 线矢量加载
//********************************
var gShpLinePath = " E:\\测试数据\\Vector\\line.shp";
var lineshpLayer;
//创建线矢量图层
function createLineShpLayer(){
if(lineShpLayer == null){
//1.创建线符号对象
var lSymbol = map.CreateSymbol("LineSymbol"); // 创建符号对象,LineSymbol代表线符号
lSymbol.AddConfig("Stipple", "-1"); // 线条类型,-1 实线 1~65535 虚线
lSymbol.AddConfig("Width", "10"); // 线宽 0-10
lSymbol.AddConfig("Color", "0.82, 0.48, 0, 1.0"); // 颜色值(RGBA)0-1
//2.创建样式对象
var lStyle = map.CreateStyle("style"); // 创建样式
lStyle.SetName("line"); // 设置别名line
lStyle.AddSymbol("LineSymbol", lSymbol.GetConfig()); // 将符号对象添加到样式,第一参数为符号类型
lStyle.AddFilterName("BuildGeometryTileFilter"); // 添加构建器名称,几何瓦片化构建器为:BuildGeometryTileFilter
//3.创建样式表对象
var styleSheet = map.CreateStyleSheet(); // 创建样式表
styleSheet.AddStyle(lStyle.GetConfig()); // 将样式配置添加至样式表
//4.创建并添加图层对象
var tlo = map.CreateLayerOptions("shp");//创建图层配置对象,名称任意
tlo.AddConfig("LayerOptionsName", "FeatureModelLayerOptions");//图层配置对象名称, FeatureModelLayerOptions代表矢量数据配置
tlo.AddConfig("DataSourceTypeName", "fmgeomtile");//数据源类型,代表fmgeomtile插件
tlo.AddConfig("Driver", "ESRI Shapefile"); //ogr数据的解析驱动
tlo.AddConfig("FeatureSourceType", "ogr"); //要素数据源类型,本地数据为ogr
tlo.AddConfig("Url", gShpLinePath); //数据路径
tlo.AddConfig("TileSizeFactor", "1.0"); //瓦片大小的影响因子,建议是1.0
tlo.AddConfig("TileSize", "1000"); //瓦片大小,根据最大显示范围设置,一般为MaxRange的1/10左右
tlo.AddConfig("IsAutoTileSize", "false");//是否自动计算瓦片大小,默认为false
tlo.AddConfig("LiftUp", "33"); //图层抬升高度,正值为抬高,负值为降低
tlo.AddConfig("MaxRange", "50000.0"); // 最大显示范围,大于最小显示范围-无穷大
tlo.AddConfig("MinRange", "0.0"); // 最小显示范围,0-无穷大
tlo.AddConfig("StyleSheet", styleSheet.GetConfig()); //将样式表配置添加至图层配置对象
lineShpLayer = map.CreateLayer("FeatureModelLayer", tlo); //创建矢量图层,第一项参数为FeatureModelLayer
map.AddLayer(lineShpLayer); //添加图层
lineShpLayer.Locate(); //矢量图层定位
}else{
alert("请勿重复创建矢量图层!");
}
}
//显隐线矢量图层
function visibleLineShpLayer(){
if(lineShpLayer){
lineShpLayer.SetVisible(bLineVisible = !bLineVisible);//显隐图层
}else{
alert("无矢量图层,无法显隐!");
}
}
//定位线矢量图层
function locateLineShpLayer(){
if(lineShpLayer){
lineShpLayer.Locate();//定位图层
}else{
alert("无矢量图层,无法定位!");
}
}
//删除线矢量图层
function removeLineShpLayer(){
if(lineShpLayer){
map.RemoveLayer(lineShpLayer);//移除图层
lineShpLayer = null;
bLineVisible = true;
}else{
alert("无矢量图层,无需移除!");
}
}
C++调用
std::string gShpPointPath = " E:\\测试数据\\Vector\\linr.shp";
BaseObjectCOMLib::ILayerObjectPtr lineShpLayer;//线矢量图层
bool lineVisble = true;//线矢量显隐开关
//创建线矢量图层
void Cf0c3VectorLoadDlg::OnBnClickedcreatelineshplayer()
{
if(!lineShpLayer)
{
char temp_status[MAX_PATH];
GetPrivateProfileStringA("Path", "ShpLinePath", "", temp_status, MAX_PATH, mIniPath.c_str());
std::string ShpLinePath(temp_status);
lineShpLayer = createLineShpLayer(ShpLinePath);
}
}
//显隐线矢量图层
void Cf0c3VectorLoadDlg::OnBnClickedvisiblelineshplayer()
{
if(lineShpLayer)
{
lineShpLayer->SetVisible(lineVisble = !lineVisble);//显隐图层
}
}
//定位线矢量图层
void Cf0c3VectorLoadDlg::OnBnClickedlocatelineshplayer()
{
if(lineShpLayer)
{
lineShpLayer->Locate();//定位图层
}
}
//删除线矢量图层
void Cf0c3VectorLoadDlg::OnBnClickedremovelineshplayer()
{
if(lineShpLayer){
map->RemoveLayer(lineShpLayer);//移除图层
lineShpLayer = NULL;
lineVisble = TRUE;
}
}
//加载线矢量图层
BaseObjectCOMLib::ILayerObjectPtr Cf0c3VectorLoadDlg::createLineShpLayer(std::string Url)
{
//1.创建线符号
ConfigOptionsCOMLib::ISymbolObjectPtr lSymbol=map->CreateSymbol("LineSymbol");//创建符号对象,LineSymbol代表线符号
lSymbol->AddConfig("Stipple", "-1"); // 线条类型,-1 实线 1~65535 虚线
lSymbol->AddConfig("Width", "10"); // 线宽 0-10
lSymbol->AddConfig("Color", "0.82, 0.48, 0, 1.0"); // 颜色值(RGBA)0-1
//2.创建样式对象
ConfigOptionsCOMLib::IStylePtr lStyle = map->CreateStyle("style");//创建样式
lStyle->SetName("line"); // 设置别名line
lStyle->AddSymbol("LineSymbol", lSymbol->GetConfig()); // 将符号对象添加到样式,第一参数为符号类型
lStyle->AddFilterName("BuildGeometryTileFilter"); // 添加构建器名称,几何瓦片化构建器为:BuildGeometryTileFilter
//3创建样式表
ConfigOptionsCOMLib::IStyleSheetPtr styleSheet = map->CreateStyleSheet();//创建样式表
styleSheet->AddStyle(lStyle->GetConfig());//将样式配置添加至样式表
//4创建图层
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions("shp"); //创建图层配置对象,名称任意
tlo->AddConfig("LayerOptionsName", "FeatureModelLayerOptions");//图层配置对象名称, FeatureModelLayerOptions代表矢量数据配置
tlo->AddConfig("DataSourceTypeName", "fmgeomtile");//数据源类型,代表瓦片化加载插件
tlo->AddConfig("Driver", "ESRI Shapefile"); //ogr数据的解析驱动
tlo->AddConfig("FeatureSourceType", "ogr"); //要素数据源类型,本地数据为ogr
tlo->AddConfig("Url", Url.c_str());//数据路径
tlo->AddConfig("GeometryType", "Polygon"); ////几何类型。Point-点;Polyline-线;Polygon-面.此项配置不能少或字符串一定不能错误,否则保存文件不成功
tlo->AddConfig("TileSizeFactor", "1.0"); //瓦片大小的影响因子,建议是1.0
tlo->AddConfig("TileSize", "1000"); //瓦片大小,根据最大显示范围设置,一般为MaxRange的1/10左右
tlo->AddConfig("LiftUp", "33"); //图层抬升高度,正值为抬高,负值为降低
tlo->AddConfig("MaxRange", "10000.0"); // 最大显示范围,大于最小显示范围-无穷大
tlo->AddConfig("MinRange", "0.0"); // 最小显示范围,0-无穷大
tlo->AddConfig("StyleSheet", styleSheet->GetConfig());//将样式表配置添加至图层配置对象
BaseObjectCOMLib::ILayerObjectPtr shpLayer = map->CreateLayer("FeatureModelLayer", tlo);//创建矢量图层,第一项参数必须为FeatureModelLayer
map->AddLayer(shpLayer);//添加矢量图层
shpLayer->Locate();//图层定位
return shpLayer;
}
C#调用
string gShpLinePath = " E:\\测试数据\\Vector\\line.shp";
ILayerObject lineShpLayer;//线矢量图层
//创建线矢量图层
private void createLineShpLayer_Click(object sender, EventArgs e)
{
if (lineShpLayer == null)
{
//1.创建线符号对象
ISymbolObject lSymbol = map.CreateSymbol("LineSymbol"); // 创建符号对象,LineSymbol代表线符号
lSymbol.AddConfig("Stipple", "-1"); // 线条类型,-1 实线 1~65535 虚线
lSymbol.AddConfig("Width", "10"); // 线宽 0-10
lSymbol.AddConfig("Color", "0.82, 0.48, 0, 1.0"); // 颜色值(RGBA)0-1
//2.创建样式对象
IStyle lStyle = map.CreateStyle("style"); // 创建样式
lStyle.SetName("line"); // 设置别名line
lStyle.AddSymbol("LineSymbol", lSymbol.GetConfig()); // 将符号对象添加到样式,第一参数为符号类型
lStyle.AddFilterName("BuildGeometryTileFilter"); // 添加构建器名称,几何瓦片化构建器为:BuildGeometryTileFilter
//3.创建样式表对象
IStyleSheet styleSheet = map.CreateStyleSheet(); // 创建样式表
styleSheet.AddStyle(lStyle.GetConfig()); // 将样式配置添加至样式表
//4.创建并添加图层对象
ILayerOptions tlo = map.CreateLayerOptions("shp");//创建图层配置对象,名称任意
tlo.AddConfig("LayerOptionsName", "FeatureModelLayerOptions");//图层配置对象名称, FeatureModelLayerOptions代表矢量数据配置
tlo.AddConfig("DataSourceTypeName", "fmgeomtile");//数据源类型,代表瓦片化加载插件
tlo.AddConfig("Driver", "ESRI Shapefile"); //ogr数据的解析驱动
tlo.AddConfig("FeatureSourceType", "ogr"); //要素数据源类型,本地数据为ogr
tlo.AddConfig("Url", gShpLinePath); //数据路径
tlo.AddConfig("TileSizeFactor", "1.0"); //瓦片大小的影响因子,建议是1.0
tlo.AddConfig("TileSize", "1000"); //瓦片大小,根据最大显示范围设置,一般为MaxRange的1/10左右
tlo.AddConfig("LiftUp", "33"); //图层抬升高度,正值为抬高,负值为降低
tlo.AddConfig("MaxRange", "50000.0"); // 最大显示范围,大于最小显示范围-无穷大
tlo.AddConfig("MinRange", "0.0"); // 最小显示范围,0-无穷大
tlo.AddConfig("IsHasTexture", "false");//是否有纹理,默认为false,该参数在进行分析时起效
tlo.AddConfig("StyleSheet", styleSheet.GetConfig()); //将样式表配置添加至图层配置对象
lineShpLayer = map.CreateLayer("FeatureModelLayer", tlo); //创建矢量图层,第一项参数为FeatureModelLayer
map.AddLayer(lineShpLayer); //添加图层
lineShpLayer.Locate(); //矢量图层定位
}
}
//显隐线矢量图层
private void visibleLineShpLayer_Click(object sender, EventArgs e)
{
if (lineShpLayer != null)
{
lineShpLayer.SetVisible(bLineVisible = !bLineVisible);//显隐图层
}
}
//定位线矢量图层
private void locateLineShpLayer_Click(object sender, EventArgs e)
{
if (lineShpLayer != null)
{
lineShpLayer.Locate();//定位图层
}
}
//删除线矢量图层
private void removeLineShpLayer_Click(object sender, EventArgs e)
{
if (lineShpLayer != null)
{
map.RemoveLayer(lineShpLayer);//移除图层
lineShpLayer = null;
bLineVisible = true;
}
}
3.面符号
面符号可配置的参数如下表所示:
配置项 | 配置说明 | 值类型 | 备注 |
---|---|---|---|
Color | 面颜色 | R,G,B,A | 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0" |
对应的样式对象需要调用AddSymbol()添加面符号类型(PolygonSymbol)和AddFilterName()添加几何瓦片化构建器(BuildGeometryTileFilter)。
代码调用示例
Javascript调用
// 面矢量加载
var gShpPolygonPath = " E:\\测试数据\\Vector\\polygon.shp";
var polygonShpLayer = null;//面矢量图层
function createPolygonShpLayer(){
if(polygonShpLayer == null){
//1.1创建面符号对象
var pSymbol = map.CreateSymbol("PolygonSymbol"); // 创建符号对象,PolygonSymbol代表面符号
pSymbol.AddConfig("Color", "0.64, 0.01, 0.97, 0.6");// 颜色值(RGBA)0-1
//1.2创建线符号对象
var lSymbol = map.CreateSymbol("LineSymbol"); // 创建符号对象,LineSymbol代表线符号
lSymbol.AddConfig("Stipple", "-1"); // 线条类型,-1 实线 1~65535 虚线
lSymbol.AddConfig("Width", "2"); // 线宽 0-10
lSymbol.AddConfig("Color", "0.42, 0.65, 0.96, 1.0"); // 颜色值(RGBA)0-1
//2.创建样式对象
var pStyle = map.CreateStyle("style"); // 创建样式
pStyle.SetName("polygon"); // 设置别名polygon
pStyle.AddSymbol("PolygonSymbol", pSymbol.GetConfig()); // 将符号对象添加到样式,第一参数为符号类型
pStyle.AddSymbol("LineSymbol", lSymbol.GetConfig()); // 将符号对象添加到样式,第一参数为符号类型
pStyle.AddFilterName("BuildGeometryTileFilter"); // 添加构建器名称,几何瓦片化构建器为:BuildGeometryTileFilter
//3.创建样式表对象
var styleSheet = map.CreateStyleSheet(); // 创建样式表
styleSheet.AddStyle(pStyle.GetConfig()); // 将样式配置添加至样式表
//4.创建并添加图层对象
var tlo = map.CreateLayerOptions("shp");//创建图层配置对象,名称任意
tlo.AddConfig("LayerOptionsName", "FeatureModelLayerOptions");//图层配置对象名称, FeatureModelLayerOptions代表矢量数据配置
tlo.AddConfig("DataSourceTypeName", "fmgeomtile");//数据源类型,代表瓦片化加载插件
tlo.AddConfig("Driver", "ESRI Shapefile"); //ogr数据的解析驱动
tlo.AddConfig("FeatureSourceType", "ogr"); //要素数据源类型,本地数据为ogr
tlo.AddConfig("Url", gShpPolygonPath); //数据路径
tlo.AddConfig("TileSizeFactor", "1.0"); //瓦片大小的影响因子,建议是1.0
tlo.AddConfig("TileSize", "1000"); //瓦片大小,根据最大显示范围设置,一般为MaxRange的1/10左右
tlo.AddConfig("LiftUp", "0"); //图层抬升高度,正值为抬高,负值为降低
tlo.AddConfig("MaxRange", "50000.0"); // 最大显示范围,大于最小显示范围-无穷大
tlo.AddConfig("MinRange", "0.0"); // 最小显示范围,0-无穷大
tlo.AddConfig("StyleSheet", styleSheet.GetConfig()); //将样式表配置添加至图层配置对象
polygonShpLayer = map.CreateLayer("FeatureModelLayer", tlo); //创建矢量图层,第一项参数为FeatureModelLayer
map.AddLayer(polygonShpLayer); //添加图层
polygonShpLayer.Locate(); //矢量图层定位
}else{
alert("请勿重复创建矢量图层!");
}
}
//显隐面矢量图层
function visiblePolygonShpLayer(){
if(polygonShpLayer){
polygonShpLayer.SetVisible(bPolygonVisible = !bPolygonVisible);//显隐图层
}else{
alert("无矢量图层,无法显隐!");
}
}
//定位面矢量图层
function locatePolygonShpLayer(){
if(polygonShpLayer){
polygonShpLayer.Locate();//定位图层
}else{
alert("无矢量图层,无法定位!");
}
}
//删除面矢量图层
function removePolygonShpLayer(){
if(polygonShpLayer){
map.RemoveLayer(polygonShpLayer);//移除图层
polygonShpLayer = null;
bPolygonVisible = true;
}else{
alert("无矢量图层,无需移除!");
}
}
C++调用
std::string gShpPointPath = " E:\\测试数据\\Vector\\polygon.shp";
BaseObjectCOMLib::ILayerObjectPtr polygonShpLayer;//面矢量图层
bool polygonVisble = true;//面矢量显隐开关
//创建面矢量图层
void Cf0c3VectorLoadDlg::OnBnClickedcreatepolygonshplayer()
{
if(!polygonShpLayer)
{
char temp_status[MAX_PATH];
GetPrivateProfileStringA("Path", "ShpPolygonPath", "", temp_status, MAX_PATH, mIniPath.c_str());
std::string ShpPolygonPath(temp_status);
polygonShpLayer = createPolygonShpLayer(ShpPolygonPath);
}
}
//显隐面矢量图层
void Cf0c3VectorLoadDlg::OnBnClickedvisiblepolygonshplayer()
{
if(polygonShpLayer)
{
polygonShpLayer->SetVisible(polygonVisble = !polygonVisble);//显隐图层
}
}
//定位面矢量图层
void Cf0c3VectorLoadDlg::OnBnClickedlocatepolygonshplayer()
{
if(polygonShpLayer)
{
polygonShpLayer->Locate();//定位图层
}
}
//删除面矢量图层
void Cf0c3VectorLoadDlg::OnBnClickedremovepolygonshplayer()
{
if(polygonShpLayer){
map->RemoveLayer(polygonShpLayer);//移除图层
polygonShpLayer = NULL;
polygonVisble = TRUE;
}
}
//加载面矢量图层
BaseObjectCOMLib::ILayerObjectPtr Cf0c3VectorLoadDlg::createPolygonShpLayer(std::string Url)
{
//1.1创建面符号
ConfigOptionsCOMLib::ISymbolObjectPtr pSymbol=map->CreateSymbol("PolygonSymbol");//创建符号对象,PolygonSymbol代表面符号
pSymbol->AddConfig("Color", "0.64, 0.01, 0.97, 0.6");// 颜色值(RGBA)0-1
pSymbol->AddConfig("SurfaceStyleName", "Surface");
//1.2创建线符号对象
ConfigOptionsCOMLib::ISymbolObjectPtr lSymbol=map->CreateSymbol("LineSymbol");//创建符号对象,LineSymbol代表线符号
lSymbol->AddConfig("Stipple", "-1"); // 线条类型,-1 实线 1~65535 虚线
lSymbol->AddConfig("Width", "2"); // 线宽 0-10
lSymbol->AddConfig("Color", "0.42, 0.65, 0.96, 1.0"); // 颜色值(RGBA)0-1
//2.创建样式对象
ConfigOptionsCOMLib::IStylePtr pStyle = map->CreateStyle("style");//创建样式
pStyle->SetName("polygon"); // 设置别名polygon
pStyle->AddSymbol("PolygonSymbol", pSymbol->GetConfig()); // 将符号对象添加到样式,第一参数为符号类型
pStyle->AddSymbol("LineSymbol", lSymbol->GetConfig()); // 将符号对象添加到样式,第一参数为符号类型
pStyle->AddFilterName("BuildGeometryTileFilter"); // 添加构建器名称,几何瓦片化构建器为:BuildGeometryTileFilter
//3创建样式表
ConfigOptionsCOMLib::IStyleSheetPtr styleSheet = map->CreateStyleSheet();//创建样式表
styleSheet->AddStyle(pStyle->GetConfig());//将样式配置添加至样式表
//4创建图层
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions("shp"); //创建图层配置对象,名称任意
tlo->AddConfig("LayerOptionsName", "FeatureModelLayerOptions");//图层配置对象名称, FeatureModelLayerOptions代表矢量数据配置
tlo->AddConfig("DataSourceTypeName", "fmgeomtile");//数据源类型,代表瓦片化加载插件
tlo->AddConfig("Driver", "ESRI Shapefile"); //ogr数据的解析驱动
tlo->AddConfig("FeatureSourceType", "ogr"); //要素数据源类型,本地数据为ogr
tlo->AddConfig("Url", Url.c_str());//数据路径
tlo->AddConfig("GeometryType", "Polygon"); ////几何类型。Point-点;Polyline-线;Polygon-面.此项配置不能少或字符串一定不能错误,否则保存文件不成功
tlo->AddConfig("TileSizeFactor", "1.0"); //瓦片大小的影响因子,建议是1.0
tlo->AddConfig("TileSize", "1000"); //瓦片大小,根据最大显示范围设置,一般为MaxRange的1/10左右
tlo->AddConfig("LiftUp", "33"); //图层抬升高度,正值为抬高,负值为降低
tlo->AddConfig("MaxRange", "10000.0"); // 最大显示范围,大于最小显示范围-无穷大
tlo->AddConfig("MinRange", "0.0"); // 最小显示范围,0-无穷大
tlo->AddConfig("StyleSheet", styleSheet->GetConfig());//将样式表配置添加至图层配置对象
BaseObjectCOMLib::ILayerObjectPtr shpLayer = map->CreateLayer("FeatureModelLayer", tlo);//创建矢量图层,第一项参数必须为FeatureModelLayer
map->AddLayer(shpLayer);//添加矢量图层
shpLayer->Locate();//图层定位
return shpLayer;
}
C#调用
var gShpPolygonPath = " E:\\测试数据\\Vector\\polygon.shp";
ILayerObject polygonShpLayer;//面矢量图层
//创建面矢量图层
private void createPolygonShpLayer_Click(object sender, EventArgs e)
{
if (polygonShpLayer == null)
{
//1.1创建面符号对象
ISymbolObject pSymbol = map.CreateSymbol("PolygonSymbol"); // 创建符号对象,PolygonSymbol代表面符号
pSymbol.AddConfig("Color", "0.64, 0.01, 0.97, 0.6");// 颜色值(RGBA)0-1
pSymbol.AddConfig("SurfaceStyleName", "Surface"); //
//1.2创建线符号对象
ISymbolObject lSymbol = map.CreateSymbol("LineSymbol"); // 创建符号对象,LineSymbol代表线符号
lSymbol.AddConfig("Stipple", "-1"); // 线条类型,-1 实线 1~65535 虚线
lSymbol.AddConfig("Width", "2"); // 线宽 0-10
lSymbol.AddConfig("Color", "0.42, 0.65, 0.96, 1.0"); // 颜色值(RGBA)0-1
//2.创建样式对象
IStyle pStyle = map.CreateStyle("style"); // 创建样式
pStyle.SetName("polygon"); // 设置别名polygon
pStyle.AddSymbol("PolygonSymbol", pSymbol.GetConfig()); // 将符号对象添加到样式,第一参数为符号类型
pStyle.AddSymbol("LineSymbol", lSymbol.GetConfig()); // 将符号对象添加到样式,第一参数为符号类型
pStyle.AddFilterName("BuildGeometryTileFilter"); // 添加构建器名称,几何瓦片化构建器为:BuildGeometryTileFilter
//3.创建样式表对象
IStyleSheet styleSheet = map.CreateStyleSheet(); // 创建样式表
styleSheet.AddStyle(pStyle.GetConfig()); // 将样式配置添加至样式表
//4.创建并添加图层对象
ILayerOptions tlo = map.CreateLayerOptions("shp");//创建图层配置对象,名称任意
tlo.AddConfig("LayerOptionsName", "FeatureModelLayerOptions");//图层配置对象名称, FeatureModelLayerOptions代表矢量数据配置
tlo.AddConfig("DataSourceTypeName", "fmgeomtile");//数据源类型,代表瓦片化加载插件
tlo.AddConfig("Driver", "ESRI Shapefile"); //ogr数据的解析驱动
tlo.AddConfig("FeatureSourceType", "ogr"); //要素数据源类型,本地数据为ogr
tlo.AddConfig("Url", gShpPolygonPath); //数据路径
tlo.AddConfig("TileSizeFactor", "1.0"); //瓦片大小的影响因子,建议是1.0
tlo.AddConfig("TileSize", "1000"); //瓦片大小,根据最大显示范围设置,一般为MaxRange的1/10左右
tlo.AddConfig("LiftUp", "33"); //图层抬升高度,正值为抬高,负值为降低
tlo.AddConfig("MaxRange", "50000.0"); // 最大显示范围,大于最小显示范围-无穷大
tlo.AddConfig("MinRange", "0.0"); // 最小显示范围,0-无穷大
tlo.AddConfig("IsHasTexture", "false");//是否有纹理,默认为false,该参数在进行分析时起效
tlo.AddConfig("StyleSheet", styleSheet.GetConfig()); //将样式表配置添加至图层配置对象
polygonShpLayer = map.CreateLayer("FeatureModelLayer", tlo); //创建矢量图层,第一项参数为FeatureModelLayer
map.AddLayer(polygonShpLayer); //添加图层
polygonShpLayer.Locate(); //矢量图层定位
}
}
//显隐面矢量图层
private void visiblePolygonShpLayer_Click(object sender, EventArgs e)
{
if (polygonShpLayer != null)
{
polygonShpLayer.SetVisible(bPolygonVisible = !bPolygonVisible);//显隐图层
}
}
//定位面矢量图层
private void locatePolygonShpLayer_Click(object sender, EventArgs e)
{
if (polygonShpLayer != null)
{
polygonShpLayer.Locate();//定位图层
}
}
//删除面矢量图层
private void removePolygonShpLayer_Click(object sender, EventArgs e)
{
if (polygonShpLayer != null)
{
map.RemoveLayer(polygonShpLayer);//移除图层
polygonShpLayer = null;
bPolygonVisible = true;
}
}
4.文字符号
文字符号可配置的参数如下表所示:
配置项 | 配置说明 | 值类型 | 备注 |
---|---|---|---|
Font | 字体路径 | string | 文字字体的本地绝对路径 |
Content | 文字内容 | stringExpression | 显示文字的内容,可以是字符串,也可以是表达式 |
FillingColor | 文字颜色 | R,G,B,A | 颜色取值范围在0-1.0之间,默认 "1,1,1,1.0" |
Size | 字体大小 | short | 文字本身的大小,该值越大,文字显示越精细。默认16 |
CharacterSize | 文字显示大小 | float | 文字在场景中显示的大小。默认10 |
FieldPrecision | 字段精度 | int | 浮点型数据小数点后保留多少位。默认2 |
HorizonSpacingSize | 间隔距离 | float | 字符间隔距离。 默认0.0 |
AxisAlignment | 旋转模式 | int | 文字旋转模式。 默认6-自动旋转 |
CharacterMode | 文字变化模式 | int | 文字显示大小的变化模式。 0-保持文字自身大小,1-随相机远近变化, 2-随相机远近变化,但不超过文字本身大小上限值。默认1 |
AlignmentMode | 对齐方式 | int | 文字的对齐方式。取值范围是由0-8之间形成的列优先九宫格。 默认4 |
IsEmbolden | 是否加粗 | bool | 是否加粗文字。true-加粗;false-不加粗。默认false |
IsTransform | 是否斜体 | bool | 是否斜体文字。 true-斜体;false-正常。默认false |
IsUnderline | 是否加下划线 | bool | 是否给文字添加下划线。 true-加;false-不加。默认false |
IsHorizontal | 是否水平排列 | bool | 文字是否水平排列。 true-水平排列;false-垂直排列。默认true |
IsAddGroundLine | 是否添加接地线 | bool | 文字是否添加接地线。 true-添加;false-不添加。默认false |
LineColor | 接地线颜色 | R,G,B,A | 颜色取值范围在0-1.0之间,默认 "1,1,1,0.0" |
FeatureLiftUp | 要素抬高高度 | NumericExpression | 符号对象相当于要素的抬高高度。默认0.0 |
IsUseActiveScreen | 是否跟随激活屏变化 | bool | 是否跟随激活屏变化。默认true。建议:当矢量图层不做共享时设为false,共享时设为true。 |
IsBack | 是否添加背景 | bool | 文字是否添加背景。 true-添加;false-不添加。默认false |
BackColor | 背景颜色 | R,G,B,A | 颜色取值范围在0-1.0之间,默认 "0,0,0,0.0" |
ImageURL | 背景图片地址 | string | 背景图片地址,可以是本地绝对路径,也可以是网络路径 |
LibraryName | 资源库名称 | string | 背景图片资源库名称。 该值必须与资源库名称一致 |
BackdropMarginLeft | 背景左边距 | float | 背景左边距大小。 默认0.0 |
BackdropMarginRight | 背景右边距 | float | 背景右边距大小。 默认0.0 |
BackdropMarginUp | 背景上边距 | float | 背景上边距大小。 默认0.0 |
BackdropMarginDown | 背景下边距 | float | 背景下边距大小。 默认0.0 |
对应的样式对象需要调用AddSymbol()添加文字符号类型(TextSymbol)和AddFilterName()添加文字构建器(BuildTextFilter)。
在使用文字符号时,需要注意:
- 文字符号的背景是可选的,通过
IsBack
可控制是否添加背景。 - 选择添加背景后,可以通过设置
ImageURL
来控制是使用背景图还是背景颜色,优先使用背景图。设置背景图后,需要在样式表中添加资源符号和资源库对象。并且资源库对象名称必须与LibraryName
配置一致。 - 若
CharacterMode
=0时,文字保持自身大小,CharacterSize
的单位是米;若CharacterMode
!=0时,CharacterSize
的单位是像素,实际大小为CharacterSize
的2倍。
代码调用示例
Javascript调用
// 文字符号化加载
var gShpPointPath = " E:\\测试数据\\Vector\\point.shp";
var shpLayer = null;
//文字符号化
function loadTextSymbol(){
var imgUrl = "";//文字背景图片路径
var reslibName = "Library";
//1.创建点符号对象
var pointSymbol = map.CreateSymbol("PointSymbol");//创建符号对象,PointSymbol代表点符号
pointSymbol.AddConfig("Size", "5");//点大小((0-10))
pointSymbol.AddConfig("Color", "1.0,1.0,0.0,1.0");//颜色值(RGBA,各值取值范围0-1之间)
//1.2创建文字符号对象
var textSymbol = map.CreateSymbol("TextSymbol");//创建符号对象,Texsymbol代表文字符号
textSymbol.AddConfig("FillingColor", "0.82, 1, 0.0, 1.0");//文字颜色(RGBA)
textSymbol.AddConfig("Font", "C:\\WINDOWS\\Fonts\\msyh.ttf");//文字字体路径
textSymbol.AddConfig("Size", "20");//字体精度大小
textSymbol.AddConfig("CharacterSize", "8");//文字大小
textSymbol.AddConfig("FieldPrecision", "20");//字段精度
textSymbol.AddConfig("CharacterMode", "1");//字符大小变化模式,0:随对象变化显示,1:随相机远近变化,2:随相机远近变化,同时不超过上限值
textSymbol.AddConfig("AlignmentMode", "5");//设置文字位于要素的位置
textSymbol.AddConfig("AxisAlignment", "6");//设置文字旋转模式0-7,6:自动
textSymbol.AddConfig("RemoveDuplicateLabels", "false");//是否移除重复的标注
textSymbol.AddConfig("IsEmbolden", "false");//是否加粗
textSymbol.AddConfig("IsTransform", "false");//是否斜体
textSymbol.AddConfig("IsUnderline", "false");//是否加下划线
textSymbol.AddConfig("IsHorizontal", "true");//是否水平排列
textSymbol.AddConfig("HorizonSpacingSize", "1.0");//字符水平间隔距离
textSymbol.AddConfig("IsBack", "true");//是否有背景
textSymbol.AddConfig("BackColor", "1.0,0.0,0.0,0.5");//文字背景色
textSymbol.AddConfig("IsAddGroundLine", "1");//是否开启接地线
textSymbol.AddConfig("LineColor", "0.6,0.6,0.6,1.0");//接地线颜色
textSymbol.AddConfig("IsUseActiveScreen", "false"); //是否跟随激活屏变化。默认true。建议:当矢量图层不做共享时设为false,共享时设为true。
textSymbol.AddConfig("FeatureLiftUp", "2");//接地线抬升值(符号化对象相对于要素抬升)
textSymbol.AddConfig("Content", "[NAME]");//[]里代表矢量的某字段名称
//***********如果需要配置背景图片,则需要添加图片资源库*********/
if(imgUrl != ""){//http://192.168.1.50:8088/test/TextureGif.gif
textSymbol.AddConfig("ImageURL", imgUrl);//背景图片地址
textSymbol.AddConfig("LibraryName", reslibName);//设置资源库名称
textSymbol.AddConfig("BackdropMarginLeft", "10");//背景边框左边大小
textSymbol.AddConfig("BackdropMarginRight", "10");//背景边框右边大小
textSymbol.AddConfig("BackdropMarginUp", "10");//背景边框上边大小
textSymbol.AddConfig("BackdropMarginDown", "10");//背景边框下边大小
}
//2.创建样式对象
var style = map.CreateStyle("style");//创建样式
style.SetName("point");//设置别名point
style.AddSymbol("PointSymbol", pointSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
style.AddFilterName("BuildGeometryTileFilter");//添加构建器名称.几何瓦片化构建器:BuildGeometryTileFilter
style.AddSymbol("TextSymbol", textSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
style.AddFilterName("BuildTextFilter");//添加构建器名称.文字构建器:BuildTextFilter
//3.创建资源对象
var res = map.CreateResource("TextSymbol");//创建资源对象,文字资源为为:TextSymbol
res.AddConfig("Uri", imgUrl);//资源路径
//4.创建资源库对象
var reslib = map.CreateResourceLibrary(reslibName);//创建资源库对象,名称和文字符号配置项LibraryName的一致
reslib.AddResource(res);//将资源添加至资源库
//5.创建样式表对象
var styleSheet = map.CreateStyleSheet();//创建样式表
styleSheet.AddStyle(style.GetConfig());//将样式对象配置添加至样式表
styleSheet.AddResLib(reslib.GetConfig());//将资源库对象配置添加至样式表
//6.创建并添加图层对象
var tlo = map.CreateLayerOptions("ogrlayer");//创建图层配置对象,名称任意
tlo.AddConfig("LayerOptionsName", "FeatureModelLayerOptions");//图层配置对象名称, FeatureModelLayerOptions代表矢量数据配置
tlo.AddConfig("DataSourceTypeName", "fmgeomtile");//数据源类型,代表瓦片化加载插件
tlo.AddConfig("FeatureSourceType", "ogr");//要素数据源类型,本地数据为ogr
tlo.AddConfig("Driver", "ESRI Shapefile");//ogr数据的解析驱动
//tlo.AddConfig("BuildSpatialIndex", "true");//是否建立空间索引
tlo.AddConfig("IsLighted", "false");//是否开启默认灯光
tlo.AddConfig("Url", gShpPointPath);//数据路径
tlo.AddConfig("LiftUp","10" );//图层抬升高度,正值为抬高,负值为降低
tlo.AddConfig("MinRange", "0");//数据最小显示范围
tlo.AddConfig("MaxRange", "10000");//数据的最大显示范围,必须大于最小显示范围
tlo.AddConfig("TileSize", "1000");//瓦片大小,根据最大显示范围设置,一般为MaxRange的1/10左右
tlo.AddConfig("StyleSheet", styleSheet.GetConfig());//将样式表配置添加至图层配置对象
shpLayer = map.CreateLayer("FeatureModelLayer", tlo);//创建矢量图层,第一项参数为FeatureModelLayer
map.AddLayer(shpLayer);//添加图层
shpLayer.Locate();//图层定位
}
C++调用
BaseObjectCOMLib::ILayerObjectPtr shpLayer;//矢量图层对象
//加载文字符号化
void Cf0c3VectorSymbolDlg::loadTextSymbol()
{
std::string imgUrl = "";//文字背景图片路径
std::string reslibName = "Library";
//1.创建点符号对象
ConfigOptionsCOMLib::ISymbolObjectPtr pointSymbol=map->CreateSymbol("PointSymbol");//创建符号对象,PointSymbol代表点符号
pointSymbol->AddConfig("Size", "5");//点大小((0-10))
pointSymbol->AddConfig("Color", "1.0,1.0,0.0,1.0");//颜色值(RGBA,各值取值范围0-1之间)
//1.2创建文字符号对象
ConfigOptionsCOMLib::ISymbolObjectPtr textSymbol=map->CreateSymbol("TextSymbol");//创建符号对象,TextSymbol代表文字符号
textSymbol->AddConfig("FillingColor", "0.82, 1, 0.0, 1.0");//文字颜色(RGBA)
textSymbol->AddConfig("Font", "C:\\WINDOWS\\Fonts\\msyh.ttf");//文字字体路径
textSymbol->AddConfig("Size", "20");//字体精度大小
textSymbol->AddConfig("CharacterSize", "8");//文字大小
textSymbol->AddConfig("FieldPrecision", "20");//字段精度
textSymbol->AddConfig("CharacterMode", "1");//字符大小变化模式,0:随对象变化显示,1:随相机远近变化,2:随相机远近变化,同时不超过上限值
textSymbol->AddConfig("AlignmentMode", "5");//设置文字位于要素的位置
textSymbol->AddConfig("AxisAlignment", "6");//设置文字旋转模式0-7,6:自动
textSymbol->AddConfig("RemoveDuplicateLabels", "false");//是否移除重复的标注
textSymbol->AddConfig("IsEmbolden", "false");//是否加粗
textSymbol->AddConfig("IsTransform", "false");//是否斜体
textSymbol->AddConfig("IsUnderline", "false");//是否加下划线
textSymbol->AddConfig("IsHorizontal", "true");//是否水平排列
textSymbol->AddConfig("HorizonSpacingSize", "1.0");//字符水平间隔距离
textSymbol->AddConfig("IsBack", "true");//是否有背景
textSymbol->AddConfig("BackColor", "1.0,0.0,0.0,0.5");//文字背景色
textSymbol->AddConfig("IsAddGroundLine", "1");//是否开启接地线
textSymbol->AddConfig("LineColor", "0.6,0.6,0.6,1.0");//接地线颜色
textSymbol->AddConfig("IsUseActiveScreen", "false"); //是否跟随激活屏变化。默认true。建议:当矢量图层不做共享时设为false,共享时设为true。
textSymbol->AddConfig("FeatureLiftUp", "2");//接地线抬升值(符号化对象相对于要素抬升)
textSymbol->AddConfig("Content", "[NAME]");//[]里代表矢量的某字段名称
//***********如果需要配置背景图片,则需要添加图片资源库*********/
if(imgUrl != ""){//http://192.168.1.50:8088/test/TextureGif.gif
textSymbol->AddConfig("ImageURL", imgUrl.c_str());//背景图片地址
textSymbol->AddConfig("LibraryName", reslibName.c_str());//设置资源库名称
textSymbol->AddConfig("BackdropMarginLeft", "10");//背景边框左边大小
textSymbol->AddConfig("BackdropMarginRight", "10");//背景边框右边大小
textSymbol->AddConfig("BackdropMarginUp", "10");//背景边框上边大小
textSymbol->AddConfig("BackdropMarginDown", "10");//背景边框下边大小
}
//2.创建样式对象
ConfigOptionsCOMLib::IStylePtr style = map->CreateStyle("style");//创建样式
style->SetName("point"); // 设置别名point
style->AddSymbol("PointSymbol", pointSymbol->GetConfig());//将符号对象添加到样式,第一参数为符号类型
style->AddFilterName("BuildGeometryTileFilter");//添加构建器名称.几何瓦片化构建器:BuildGeometryTileFilter
style->AddSymbol("TextSymbol", textSymbol->GetConfig());//将符号对象添加到样式,第一参数为符号类型
style->AddFilterName("BuildTextFilter");//添加构建器名称.文字构建器:BuildTextFilter
//3.创建资源对象
ConfigOptionsCOMLib::IResourceObjectPtr res = map->CreateResource("TextSymbol");//创建资源对象,文字资源为为:TextSymbol
res->AddConfig("Uri", imgUrl.c_str());//资源路径
//4.创建资源库对象
BaseObjectCOMLib::IResourceLibraryPtr reslib = map->CreateResourceLibrary(reslibName.c_str());//创建资源库对象,名称和文字符号配置项LibraryName的一致
reslib->AddResource(res);//将资源添加至资源库
//5.创建样式表对象
ConfigOptionsCOMLib::IStyleSheetPtr styleSheet = map->CreateStyleSheet();//创建样式表
styleSheet->AddStyle(style->GetConfig());//将样式对象配置添加至样式表
styleSheet->AddResLib(reslib->GetConfig());//将资源库对象配置添加至样式表
//6.创建并添加图层对象
shpLayer = loadShpLayer(ShpPointPath, "15.3", styleSheet, false, "false");
}
//加载矢量图层
BaseObjectCOMLib::ILayerObjectPtr Cf0c3VectorSymbolDlg::loadShpLayer(std::string url,std::string liftUp, ConfigOptionsCOMLib::IStyleSheetPtr styleSheetStr, bool isLocate, std::string isLight)
{
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions("shp"); //创建图层配置对象,名称任意
tlo->AddConfig("LayerOptionsName", "FeatureModelLayerOptions");//图层配置对象名称, FeatureModelLayerOptions代表矢量数据配置
tlo->AddConfig("DataSourceTypeName", "fmgeomtile");//数据源类型,代表瓦片化加载插件
tlo->AddConfig("FeatureSourceType", "ogr");//要素数据源类型,本地数据为ogr
tlo->AddConfig("Driver", "ESRI Shapefile");//ogr数据的解析驱动
//tlo->AddConfig("BuildSpatialIndex", "true");//是否建立空间索引
tlo->AddConfig("IsLighted", isLight.c_str());
tlo->AddConfig("Url", url.c_str());//数据路径
tlo->AddConfig("LiftUp", liftUp.c_str());//图层抬升高度,正值为抬高,负值为降低
tlo->AddConfig("MinRange", "0");//数据最小显示范围
tlo->AddConfig("MaxRange", "100000");//数据的最大显示范围,必须大于最小显示范围
tlo->AddConfig("TileSize", "1000");//瓦片大小,根据最大显示范围设置,一般为MaxRange的1/10左右
tlo->AddConfig("StyleSheet", styleSheetStr->GetConfig());//将样式表配置添加至图层配置对象
BaseObjectCOMLib::ILayerObjectPtr ogrlayer = map->CreateLayer("FeatureModelLayer", tlo);//创建矢量图层,第一项参数为FeatureModelLayer
map->AddLayer(ogrlayer);//添加图层
if(isLocate){
ogrlayer->Locate();//图层定位
}
return ogrlayer;
}
C#调用
var gShpPointPath = " E:\\测试数据\\Vector\\point.shp";
ILayerObject shpLayer = null;
//文字符号化
private void loadTextSymbol()
{
string imgUrl = "";//文字背景图片路径
string reslibName = "Library";
//1.创建点符号对象
ISymbolObject pointSymbol = map.CreateSymbol("PointSymbol");//创建符号对象,PointSymbol代表点符号
pointSymbol.AddConfig("Size", "5");//点大小((0-10))
pointSymbol.AddConfig("Color", "1.0,1.0,0.0,1.0");//颜色值(RGBA,各值取值范围0-1之间)
//1.2创建文字符号对象
ISymbolObject textSymbol = map.CreateSymbol("TextSymbol");//创建符号对象,Texsymbol代表文字符号
textSymbol.AddConfig("FillingColor", "0.82, 1, 0.0, 1.0");//文字颜色(RGBA)
textSymbol.AddConfig("Font", "C:\\WINDOWS\\Fonts\\msyh.ttf");//文字字体路径
textSymbol.AddConfig("Size", "20");//字体精度大小
textSymbol.AddConfig("CharacterSize", "8");//文字大小
textSymbol.AddConfig("FieldPrecision", "20");//字段精度
textSymbol.AddConfig("CharacterMode", "1");//字符大小变化模式,0:随对象变化显示,1:随相机远近变化,2:随相机远近变化,同时不超过上限值
textSymbol.AddConfig("AlignmentMode", "5");//设置文字位于要素的位置
textSymbol.AddConfig("AxisAlignment", "6");//设置文字旋转模式0-7,6:自动
textSymbol.AddConfig("RemoveDuplicateLabels", "false");//是否移除重复的标注
textSymbol.AddConfig("IsEmbolden", "false");//是否加粗
textSymbol.AddConfig("IsTransform", "false");//是否斜体
textSymbol.AddConfig("IsUnderline", "false");//是否加下划线
textSymbol.AddConfig("IsHorizontal", "true");//是否水平排列
textSymbol.AddConfig("HorizonSpacingSize", "1.0");//字符水平间隔距离
textSymbol.AddConfig("IsBack", "true");//是否有背景
textSymbol.AddConfig("BackColor", "1.0,0.0,0.0,0.5");//文字背景色
textSymbol.AddConfig("IsAddGroundLine", "1");//是否开启接地线
textSymbol.AddConfig("LineColor", "0.6,0.6,0.6,1.0");//接地线颜色
textSymbol.AddConfig("IsUseActiveScreen", "false"); //是否跟随激活屏变化。默认true。建议:当矢量图层不做共享时设为false,共享时设为true。
textSymbol.AddConfig("FeatureLiftUp", "2");//接地线抬升值(符号化对象相对于要素抬升)
textSymbol.AddConfig("Content", "[NAME]");//[]里代表矢量的某字段名称
//***********如果需要配置背景图片,则需要添加图片资源库*********/
if (imgUrl != "")
{//http://192.168.1.50:8088/test/TextureGif.gif
textSymbol.AddConfig("ImageURL", imgUrl);//背景图片地址
textSymbol.AddConfig("LibraryName", reslibName);//设置资源库名称
textSymbol.AddConfig("BackdropMarginLeft", "10");//背景边框左边大小
textSymbol.AddConfig("BackdropMarginRight", "10");//背景边框右边大小
textSymbol.AddConfig("BackdropMarginUp", "10");//背景边框上边大小
textSymbol.AddConfig("BackdropMarginDown", "10");//背景边框下边大小
}
//2.创建样式对象
IStyle style = map.CreateStyle("style");//创建样式
style.SetName("point");//设置别名point
style.AddSymbol("PointSymbol", pointSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
style.AddFilterName("BuildGeometryTileFilter");//添加构建器名称.几何瓦片化构建器:BuildGeometryTileFilter
style.AddSymbol("TextSymbol", textSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
style.AddFilterName("BuildTextFilter");//添加构建器名称.文字构建器:BuildTextFilter
//3.创建资源对象
IResourceObject res = map.CreateResource("TextSymbol");//创建资源对象,文字资源为为:TextSymbol
res.AddConfig("Uri", imgUrl);//资源路径
//4.创建资源库对象
IResourceLibrary reslib = map.CreateResourceLibrary(reslibName);//创建资源库对象,名称和文字符号配置项LibraryName的一致
reslib.AddResource(res);//将资源添加至资源库
//5.创建样式表对象
IStyleSheet styleSheet = map.CreateStyleSheet();//创建样式表
styleSheet.AddStyle(style.GetConfig());//将样式对象配置添加至样式表
styleSheet.AddResLib(reslib.GetConfig());//将资源库对象配置添加至样式表
//6.创建并添加图层对象
var tlo = map.CreateLayerOptions("ogrlayer");//创建图层配置对象,名称任意
tlo.AddConfig("LayerOptionsName", "FeatureModelLayerOptions");//图层配置对象名称, FeatureModelLayerOptions代表矢量数据配置
tlo.AddConfig("DataSourceTypeName", "fmgeomtile");//数据源类型,代表瓦片化加载插件
tlo.AddConfig("FeatureSourceType", "ogr");//要素数据源类型,本地数据为ogr
tlo.AddConfig("Driver", "ESRI Shapefile");//ogr数据的解析驱动
//tlo.AddConfig("BuildSpatialIndex", "true");//是否建立空间索引
tlo.AddConfig("IsLighted", "false");//是否开启默认灯光
tlo.AddConfig("Url", gShpPointPath);//数据路径
tlo.AddConfig("LiftUp","10" );//图层抬升高度,正值为抬高,负值为降低
tlo.AddConfig("MinRange", "0");//数据最小显示范围
tlo.AddConfig("MaxRange", "10000");//数据的最大显示范围,必须大于最小显示范围
tlo.AddConfig("TileSize", "1000");//瓦片大小,根据最大显示范围设置,一般为MaxRange的1/10左右
tlo.AddConfig("StyleSheet", styleSheet.GetConfig());//将样式表配置添加至图层配置对象
shpLayer = map.CreateLayer("FeatureModelLayer", tlo);//创建矢量图层,第一项参数为FeatureModelLayer
map.AddLayer(shpLayer);//添加图层
shpLayer.Locate();//图层定位
}
5.图标符号
图标符号可配置的参数如下表所示:
配置项 | 配置说明 | 值类型 | 备注 |
---|---|---|---|
AxisAlignmentType | 旋转模式 | int | 图标旋转模式。0-自动旋转;1-固定位置。 默认0 |
CharacterMode | 图标变化模式 | int | 图标显示大小的变化模式。 0-保持文字自身大小,1-随相机远近变化, 2-随相机远近变化,但不超过图标本身大小上限值。 默认1 |
Align | 对齐方式 | int | 图标的对齐方式。取值范围是由0-8之间形成的列优先九宫格。 默认4 |
Scale | 大小变化比例 | double | 图标大小变化比例。只有当CharacterMode =2时起效。默认1.0 |
XScale | x方向缩放比例 | float | 图标在x方向上缩放比例。默认1.0-保持原比例大小 |
YScale | y方向缩放比例 | float | 图标在y方向上缩放比例。默认1.0-保持原比例大小 |
ZScale | z方向缩放比例 | float | 图标在z方向上缩放比例。默认1.0-保持原比例大小 |
IsAddGroundLine | 是否添加接地线 | bool | 文字是否添加接地线。 true-添加;false-不添加。默认false |
LineColor | 接地线颜色 | R,G,B,A | 颜色取值范围在0-1.0之间,默认 "1,1,1,0.0" |
FeatureLiftUp | 要素抬高高度 | NumericExpression | 符号对象相当于要素的抬高高度。默认0.0 |
IsUseActiveScreen | 是否跟随激活屏变化 | bool | 是否跟随激活屏变化。默认true。建议:当矢量图层不做共享时设为false,共享时设为true。 |
Url | 图标路径 | string | 图标路径,可以是本地绝对路径,也可以是网络路径 |
LibraryName | 资源库名称 | string | 背景图片资源名称。 该值必须与资源库名称一致 |
对应的样式对象需要调用AddSymbol()添加图标符号类型(IconSymbol)和AddFilterName()添加模型构建器(SubstituteModelFilter)。
在使用图标符号时,需要注意:
- 必须要添加资源和资源库。
- 图标的
Url
和资源对象的Uri
路径需保持一致。 - 图标的
LibraryName
和资源库对象的名称需保持一致。
代码调用示例
Javascript调用
// 图标符号加载
var gShpPointPath = " E:\\测试数据\\Vector\\point.shp";
var shpLayer = null;
function loadIconSymbol(){
var imgUrl = "E:\\测试数\\Other\\images\\search.png";//图片路径
var reslibName = "Library";
//1.创建点符号对象
var pointSymbol = map.CreateSymbol("PointSymbol");//创建符号对象,PointSymbol代表点符号
pointSymbol.AddConfig("Size", "5");//点大小,(0-10)
pointSymbol.AddConfig("Color", "1.0,1.0,0.0,1.0");//颜色值(RGBA,各值取值范围0-1之间)
//1.2.创建图片符号对象
var iconSymbol = map.CreateSymbol("IconSymbol");//创建符号对象,IconSymbol代表图标符号
iconSymbol.AddConfig("Align", "4");//设置图片相对位置。将图标按九宫格划分,然后放置到要素中心点位置处
iconSymbol.AddConfig("AxisAlignmentType", "0");//设置图片旋转模式。0-自动旋转,1-位置固定
iconSymbol.AddConfig("CharacterMode", "2");//图片大小变化模式,0:随对象变化显示,1:随相机远近变化,2:随相机远近变化,同时不超过上限值Scale
iconSymbol.AddConfig("Scale", "2");//图片在屏幕上大小变化上限值,当CharacterMode=2时起效
iconSymbol.AddConfig("XScale", "0.1");//图片x方向放大比例
iconSymbol.AddConfig("YScale", "0.1");//图片y方向放大比例
iconSymbol.AddConfig("ZScale", "0.1");//图片z方向放大比例
iconSymbol.AddConfig("IsAddGroundLine", "true");//是否开启接地线
iconSymbol.AddConfig("LineColor", "0,0,1,1");//接地线颜色
iconSymbol.AddConfig("IsUseActiveScreen", "false"); //是否跟随激活屏变化。默认true。建议:当矢量图层不做共享时设为false,共享时设为true。
iconSymbol.AddConfig("FeatureLiftUp", "0");//接地线抬升值(符号化对象相对于要素抬升)
iconSymbol.AddConfig("Url", imgUrl); //图标资源路径
iconSymbol.AddConfig("LibraryName", reslibName);//资源名称
//2.创建样式对象
var style = map.CreateStyle("style");//创建样式
style.SetName("point");//设置别名point
style.AddSymbol("PointSymbol", pointSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
style.AddFilterName("BuildGeometryTileFilter");//添加构建器名称.几何瓦片化构建器:BuildGeometryTileFilter
style.AddSymbol("IconSymbol", iconSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
style.AddFilterName("SubstituteModelFilter");//添加构建器名称.图片/模型构建器:SubstituteModelFilter(此为图标和模型符号化共有)
//3.创建资源对象
var res = map.CreateResource("IconSymbol");//创建资源,图标资源为IconSymbol
res.AddConfig("Uri", imgUrl);//资源路径
//4.创建资源库对象
var reslib = map.CreateResourceLibrary(reslibName);//创建资源库对象,名称和图标符号配置项LibraryName的一致
reslib.AddResource(res);//将资源添加至资源库
//5.创建样式表对象
var styleSheet = map.CreateStyleSheet();//创建样式表
styleSheet.AddStyle(style.GetConfig());//将样式对象配置添加至样式表
styleSheet.AddResLib(reslib.GetConfig());//将资源库添加至样式表
//6.创建并添加图层对象
var tlo = map.CreateLayerOptions("ogrlayer");//创建图层配置对象,名称任意
tlo.AddConfig("LayerOptionsName", "FeatureModelLayerOptions");//图层配置对象名称, FeatureModelLayerOptions代表矢量数据配置
tlo.AddConfig("DataSourceTypeName", "fmgeomtile");//数据源类型,代表瓦片化加载插件
tlo.AddConfig("FeatureSourceType", "ogr");//要素数据源类型,本地数据为ogr
tlo.AddConfig("Driver", "ESRI Shapefile");//ogr数据的解析驱动
tlo.AddConfig("IsLighted", "false");//是否开启默认灯光
tlo.AddConfig("Url", gShpPointPath);//数据路径
tlo.AddConfig("LiftUp","10" );//图层抬升高度,正值为抬高,负值为降低
tlo.AddConfig("MinRange", "0");//数据最小显示范围
tlo.AddConfig("MaxRange", "10000");//数据的最大显示范围,必须大于最小显示范围
tlo.AddConfig("TileSize", "1000");//瓦片大小,根据最大显示范围设置,一般为MaxRange的1/10左右
tlo.AddConfig("StyleSheet", styleSheet.GetConfig());//将样式表配置添加至图层配置对象
shpLayer = map.CreateLayer("FeatureModelLayer", tlo);//创建矢量图层,第一项参数为FeatureModelLayer
map.AddLayer(shpLayer);//添加图层
shpLayer.Locate();//图层定位
}
C++调用
BaseObjectCOMLib::ILayerObjectPtr shpLayer;//矢量图层对象
//加载图片符号化
void Cf0c3VectorSymbolDlg::loadIconSymbol()
{
std::string imgUrl = "E:\\data\\Other\\images\\TextureGif.gif";//文字背景图片路径
std::string reslibName = "Library";
//1.创建点符号对象
ConfigOptionsCOMLib::ISymbolObjectPtr pointSymbol=map->CreateSymbol("PointSymbol");//创建符号对象,PointSymbol代表点符号
pointSymbol->AddConfig("Size", "5");//点大小((0-10))
pointSymbol->AddConfig("Color", "1.0,1.0,0.0,1.0");//颜色值(RGBA,各值取值范围0-1之间)
//1.2.创建图片符号对象
ConfigOptionsCOMLib::ISymbolObjectPtr iconSymbol=map->CreateSymbol("IconSymbol");//创建符号对象,IconSymbol代表图标符号
iconSymbol->AddConfig("Align", "4");//设置图片相对位置。将图标按九宫格划分,然后放置到要素中心点位置处
iconSymbol->AddConfig("AxisAlignmentType", "0");//设置图片旋转模式。0-自动旋转,1-位置固定
iconSymbol->AddConfig("CharacterMode", "2");//图片大小变化模式,0:随对象变化显示,1:随相机远近变化,2:随相机远近变化,同时不超过上限值Scale
iconSymbol->AddConfig("Scale", "2");//图片在屏幕上大小变化上限值,当CharacterMode=2时起效
iconSymbol->AddConfig("XScale", "0.1");//图片x方向放大比例
iconSymbol->AddConfig("YScale", "0.1");//图片y方向放大比例
iconSymbol->AddConfig("ZScale", "0.1");//图片z方向放大比例
iconSymbol->AddConfig("IsAddGroundLine", "true");//是否开启接地线
iconSymbol->AddConfig("LineColor", "0,0,1,1");//接地线颜色
iconSymbol->AddConfig("IsUseActiveScreen", "false"); //是否跟随激活屏变化。默认true。建议:当矢量图层不做共享时设为false,共享时设为true。
iconSymbol->AddConfig("FeatureLiftUp", "0");//接地线抬升值(符号化对象相对于要素抬升)
iconSymbol->AddConfig("Url", imgUrl.c_str()); //图标资源路径
iconSymbol->AddConfig("LibraryName", reslibName.c_str());//资源名称
//2.创建样式对象
ConfigOptionsCOMLib::IStylePtr style = map->CreateStyle("style");//创建样式
style->SetName("point");//设置别名point
style->AddSymbol("PointSymbol", pointSymbol->GetConfig());//将符号对象添加到样式,第一参数为符号类型
style->AddFilterName("BuildGeometryTileFilter");//添加构建器名称.几何瓦片化构建器:BuildGeometryTileFilter
style->AddSymbol("IconSymbol", iconSymbol->GetConfig());//将符号对象添加到样式,第一参数为符号类型
style->AddFilterName("SubstituteModelFilter");//添加构建器名称.图片/模型构建器:SubstituteModelFilter(此为图标和模型符号化共有)
//3.创建资源对象
ConfigOptionsCOMLib::IResourceObjectPtr res = map->CreateResource("IconSymbol");//创建资源对象,图标资源为为:IconSymbol
res->AddConfig("Uri", imgUrl.c_str());//资源路径
//4.创建资源库对象
BaseObjectCOMLib::IResourceLibraryPtr reslib = map->CreateResourceLibrary(reslibName.c_str());//创建资源库对象,名称和文字符号配置项LibraryName的一致
reslib->AddResource(res);//将资源添加至资源库
//5.创建样式表对象
ConfigOptionsCOMLib::IStyleSheetPtr styleSheet = map->CreateStyleSheet();//创建样式表
styleSheet->AddStyle(style->GetConfig());//将样式对象配置添加至样式表
styleSheet->AddResLib(reslib->GetConfig());//将资源库对象配置添加至样式表
//6.创建并添加图层对象
shpLayer = loadShpLayer(ShpPointPath, "15.3", styleSheet, false, "false");
}
//加载矢量图层
BaseObjectCOMLib::ILayerObjectPtr Cf0c3VectorSymbolDlg::loadShpLayer(std::string url,std::string liftUp, ConfigOptionsCOMLib::IStyleSheetPtr styleSheetStr, bool isLocate, std::string isLight)
{
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions("shp"); //创建图层配置对象,名称任意
tlo->AddConfig("LayerOptionsName", "FeatureModelLayerOptions");//图层配置对象名称, FeatureModelLayerOptions代表矢量数据配置
tlo->AddConfig("DataSourceTypeName", "fmgeomtile");//数据源类型,代表瓦片化加载插件
tlo->AddConfig("FeatureSourceType", "ogr");//要素数据源类型,本地数据为ogr
tlo->AddConfig("Driver", "ESRI Shapefile");//ogr数据的解析驱动
//tlo->AddConfig("BuildSpatialIndex", "true");//是否建立空间索引
tlo->AddConfig("IsLighted", isLight.c_str());
tlo->AddConfig("Url", url.c_str());//数据路径
tlo->AddConfig("LiftUp", liftUp.c_str());//图层抬升高度,正值为抬高,负值为降低
tlo->AddConfig("MinRange", "0");//数据最小显示范围
tlo->AddConfig("MaxRange", "100000");//数据的最大显示范围,必须大于最小显示范围
tlo->AddConfig("TileSize", "1000");//瓦片大小,根据最大显示范围设置,一般为MaxRange的1/10左右
tlo->AddConfig("StyleSheet", styleSheetStr->GetConfig());//将样式表配置添加至图层配置对象
BaseObjectCOMLib::ILayerObjectPtr ogrlayer = map->CreateLayer("FeatureModelLayer", tlo);//创建矢量图层,第一项参数为FeatureModelLayer
map->AddLayer(ogrlayer);//添加图层
if(isLocate){
ogrlayer->Locate();//图层定位
}
return ogrlayer;
}
C#调用
string gShpPointPath = " E:\\测试数据\\Vector\\point.shp";
ILayerObject shpLayer = null;
//图片符号化
private void loadIconSymbol()
{
string imgUrl = "E:\\测试数\\Other\\images\\search.png";//图片路径
string reslibName = "Library";
//1.创建点符号对象
ISymbolObject pointSymbol = map.CreateSymbol("PointSymbol");//创建符号对象,PointSymbol代表点符号
pointSymbol.AddConfig("Size", "5");//点大小,(0-10)
pointSymbol.AddConfig("Color", "1.0,1.0,0.0,1.0");//颜色值(RGBA,各值取值范围0-1之间)
//1.2.创建图片符号对象
ISymbolObject iconSymbol = map.CreateSymbol("IconSymbol");//创建符号对象,IconSymbol代表图标符号
iconSymbol.AddConfig("Align", "4");//设置图片相对位置。将图标按九宫格划分,然后放置到要素中心点位置处
iconSymbol.AddConfig("AxisAlignmentType", "0");//设置图片旋转模式。0-自动旋转,1-位置固定
iconSymbol.AddConfig("CharacterMode", "2");//图片大小变化模式,0:随对象变化显示,1:随相机远近变化,2:随相机远近变化,同时不超过上限值Scale
iconSymbol.AddConfig("Scale", "2");//图片在屏幕上大小变化上限值,当CharacterMode=2时起效
iconSymbol.AddConfig("XScale", "0.1");//图片x方向放大比例
iconSymbol.AddConfig("YScale", "0.1");//图片y方向放大比例
iconSymbol.AddConfig("ZScale", "0.1");//图片z方向放大比例
iconSymbol.AddConfig("IsAddGroundLine", "true");//是否开启接地线
iconSymbol.AddConfig("LineColor", "0,0,1,1");//接地线颜色
iconSymbol.AddConfig("IsUseActiveScreen", "false"); //是否跟随激活屏变化。默认true。建议:当矢量图层不做共享时设为false,共享时设为true。
iconSymbol.AddConfig("FeatureLiftUp", "0");//接地线抬升值(符号化对象相对于要素抬升)
iconSymbol.AddConfig("Url", imgUrl); //图标资源路径
iconSymbol.AddConfig("LibraryName", reslibName);//资源名称
//2.创建样式对象
IStyle style = map.CreateStyle("style");//创建样式
style.SetName("point");//设置别名point
style.AddSymbol("PointSymbol", pointSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
style.AddFilterName("BuildGeometryTileFilter");//添加构建器名称.几何瓦片化构建器:BuildGeometryTileFilter
style.AddSymbol("IconSymbol", iconSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
style.AddFilterName("SubstituteModelFilter");//添加构建器名称.图片/模型构建器:SubstituteModelFilter(此为图标和模型符号化共有)
//3.创建资源对象
IResourceObject res = map.CreateResource("IconSymbol");//创建资源,图标资源为IconSymbol
res.AddConfig("Uri", imgUrl);//资源路径
//4.创建资源库对象
IResourceLibrary reslib = map.CreateResourceLibrary(reslibName);//创建资源库对象,名称和图标符号配置项LibraryName的一致
reslib.AddResource(res);//将资源添加至资源库
//5.创建样式表对象
IStyleSheet styleSheet = map.CreateStyleSheet();//创建样式表
styleSheet.AddStyle(style.GetConfig());//将样式对象配置添加至样式表
styleSheet.AddResLib(reslib.GetConfig());//将资源库添加至样式表
//6.创建并添加图层对象
var tlo = map.CreateLayerOptions("ogrlayer");//创建图层配置对象,名称任意
tlo.AddConfig("LayerOptionsName", "FeatureModelLayerOptions");//图层配置对象名称, FeatureModelLayerOptions代表矢量数据配置
tlo.AddConfig("DataSourceTypeName", "fmgeomtile");//数据源类型,代表瓦片化加载插件
tlo.AddConfig("FeatureSourceType", "ogr");//要素数据源类型,本地数据为ogr
tlo.AddConfig("Driver", "ESRI Shapefile");//ogr数据的解析驱动
//tlo.AddConfig("BuildSpatialIndex", "true");//是否建立空间索引
tlo.AddConfig("IsLighted", "false");//是否开启默认灯光
tlo.AddConfig("Url", gShpPointPath);//数据路径
tlo.AddConfig("LiftUp","10" );//图层抬升高度,正值为抬高,负值为降低
tlo.AddConfig("MinRange", "0");//数据最小显示范围
tlo.AddConfig("MaxRange", "10000");//数据的最大显示范围,必须大于最小显示范围
tlo.AddConfig("TileSize", "1000");//瓦片大小,根据最大显示范围设置,一般为MaxRange的1/10左右
tlo.AddConfig("StyleSheet", styleSheet.GetConfig());//将样式表配置添加至图层配置对象
shpLayer = map.CreateLayer("FeatureModelLayer", tlo);//创建矢量图层,第一项参数为FeatureModelLayer
map.AddLayer(shpLayer);//添加图层
shpLayer.Locate();//图层定位
}
6.模型符号
模型符号可配置的参数如下表所示:
配置项 | 配置说明 | 值类型 | 备注 |
---|---|---|---|
Roll | 俯仰角 | NumericExpression | 模型绕x轴的旋转弧度。 0度为水平方向,逆时针为负。 默认0.0 |
Pitch | 偏移角 | NumericExpression | 模型绕y轴的旋转弧度。 0度为正北方向,逆时针为正。 默认0.0 |
Heading | 翻滚角 | NumericExpression | 模型绕z轴的旋转弧度。 0度为水平方向,逆时针为正。 默认0.0 |
XScale | x方向缩放比例 | NumericExpression | 模型在x方向上缩放比例。默认1.0-保持原比例大小 |
YScale | y方向缩放比例 | NumericExpression | 模型在y方向上缩放比例。默认1.0-保持原比例大小 |
ZScale | z方向缩放比例 | NumericExpression | 模型在z方向上缩放比例。默认1.0-保持原比例大小 |
ModelOriginDir | 原始轴向 | x,y,z | 模型最初始旋转轴向。默认"0,0,1" 代表绕z轴旋转 |
IsLocalRotation | 是否局部旋转 | bool | 是否将模型进行局部旋转。 通过局部旋转可以保持模型原始朝向。 默认false |
IsAddGroundLine | 是否添加接地线 | bool | 文字是否添加接地线。 true-添加;false-不添加。默认false |
LineColor | 接地线颜色 | R,G,B,A | 颜色取值范围在0-1.0之间,默认 "1,1,1,0.0" |
FeatureLiftUp | 要素抬高高度 | NumericExpression | 符号对象相当于要素的抬高高度。默认0.0 |
Url | 模型路径 | string | 模型路径,可以是本地绝对路径,也可以是网络路径 |
LibraryName | 资源库名称 | string | 模型资源名称。 该值必须与资源库名称一致 |
对应的样式对象需要调用AddSymbol()添加模型符号类型(ModelSymbol)和AddFilterName()添加模型构建器(SubstituteModelFilter)。
在使用模型符号时,需要注意:
- 必须要添加资源和资源库。
- 模型的
Url
和资源对象的Uri
路径需保持一致。 - 模型的
LibraryName
和资源库对象的名称需保持一致。
代码调用示例
Javascript调用
//********************************
// 模型符号加载
//********************************
var gShpPointPath = " E:\\测试数据\\Vector\\point.shp";
var shpLayer = null;
function loadModelSymbol(){
var modelUrl = "E:\\测试数\\Other\\models\\n1.wrl";//模型路径
var reslibName = "Library";
//1.创建点符号对象
var pointSymbol = map.CreateSymbol("PointSymbol");//创建符号对象,PointSymbol代表点符号
pointSymbol.AddConfig("Size", "5");//点大小,(0-10)
pointSymbol.AddConfig("Color", "1.0,1.0,0.0,1.0");//颜色值(RGBA,各值取值范围0-1之间)
//1.2.创建模型符号对象
var modelSymbol = map.CreateSymbol("ModelSymbol");//创建符号对象,ModelSymbol代表模型符号
modelSymbol.AddConfig("Roll", "0");//俯仰角。绕X轴旋转(世界坐标系方向相同),0度为水平方向,逆时针为负,弧度表示
modelSymbol.AddConfig("Pitch", "0");//偏移角。绕Y轴旋转(世界坐标系方向相同),0度为正北方向,逆时针为正,弧度表示
modelSymbol.AddConfig("Heading", "0");//翻滚角。绕Z轴旋转(世界坐标系方向相同),0度为水平方向,逆时针为正,弧度表示
modelSymbol.AddConfig("XScale", "1");//模型x方向放大比例
modelSymbol.AddConfig("YScale", "1");//模型y方向放大比例
modelSymbol.AddConfig("ZScale", "1");//模型z方向放大比例
modelSymbol.AddConfig("ModelOriginDir", "0,0,1");//模型原始轴向
modelSymbol.AddConfig("IsAddGroundLine", "true");//是否开启接地线
modelSymbol.AddConfig("LineColor", "0,0,1,1");//接地线颜色
modelSymbol.AddConfig("FeatureLiftUp", "0");//接地线抬升值(符号化对象相对于要素抬升)
modelSymbol.AddConfig("IsLocalRotation", "true");//是否在局地进行旋转,以保持模型原始的朝向(默认为否)
modelSymbol.AddConfig("Url", modelUrl);//模型资源路径
modelSymbol.AddConfig("LibraryName", reslibName);//资源名称
//2.创建样式对象
var style = map.CreateStyle("style");//创建样式
style.SetName("point");//设置别名point
style.AddSymbol("PointSymbol", pointSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
style.AddFilterName("BuildGeometryTileFilter");//添加构建器名称.几何瓦片化构建器为:BuildGeometryTileFilter
style.AddSymbol("ModelSymbol", modelSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
style.AddFilterName("SubstituteModelFilter");//添加构建器名称.图片/模型构建器:SubstituteModelFilter(此为图标和模型符号化共有)
//3.创建资源对象
var res = map.CreateResource("ModelSymbol");//创建资源,模型资源为ModelSymbol
res.AddConfig("Uri", modelUrl);//资源路径
//4.创建资源库对象
var reslib = map.CreateResourceLibrary(reslibName);//创建资源库对象,名称和模型符号配置项LibraryName的一致
reslib.AddResource(res);//将资源添加至资源库
//5.创建样式表对象
var styleSheet = map.CreateStyleSheet();//创建样式表
styleSheet.AddStyle(style.GetConfig());//将样式对象配置添加至样式表
styleSheet.AddResLib(reslib.GetConfig());//将资源库对象配置添加至样式表
//6.创建并添加图层对象
var tlo = map.CreateLayerOptions("ogrlayer");//创建图层配置对象,名称任意
tlo.AddConfig("LayerOptionsName", "FeatureModelLayerOptions");//图层配置对象名称, FeatureModelLayerOptions代表矢量数据配置
tlo.AddConfig("DataSourceTypeName", "fmgeomtile");//数据源类型,代表瓦片化加载插件
tlo.AddConfig("FeatureSourceType", "ogr");//要素数据源类型,本地数据为ogr
tlo.AddConfig("Driver", "ESRI Shapefile");//ogr数据的解析驱动
tlo.AddConfig("IsLighted", "false");//是否开启默认灯光
tlo.AddConfig("Url", gShpPointPath);//数据路径
tlo.AddConfig("LiftUp","10" );//图层抬升高度,正值为抬高,负值为降低
tlo.AddConfig("MinRange", "0");//数据最小显示范围
tlo.AddConfig("MaxRange", "10000");//数据的最大显示范围,必须大于最小显示范围
tlo.AddConfig("TileSize", "1000");//瓦片大小,根据最大显示范围设置,一般为MaxRange的1/10左右
tlo.AddConfig("StyleSheet", styleSheet.GetConfig());//将样式表配置添加至图层配置对象
shpLayer = map.CreateLayer("FeatureModelLayer", tlo);//创建矢量图层,第一项参数为FeatureModelLayer
map.AddLayer(shpLayer);//添加图层
shpLayer.Locate();//图层定位
}
C++调用
BaseObjectCOMLib::ILayerObjectPtr shpLayer;//矢量图层对象
//加载模型符号化
void Cf0c3VectorSymbolDlg::loadModelSymbol()
{
std::string modelUrl = "..\\data\\Other\\model\\n1.wrl";//模型路径
std::string reslibName = "Library";
//1.创建点符号对象
ConfigOptionsCOMLib::ISymbolObjectPtr pointSymbol=map->CreateSymbol("PointSymbol");//创建符号对象,PointSymbol代表点符号
pointSymbol->AddConfig("Size", "5");//点大小((0-10))
pointSymbol->AddConfig("Color", "1.0,1.0,0.0,1.0");//颜色值(RGBA,各值取值范围0-1之间)
//1.2.创建模型符号对象
ConfigOptionsCOMLib::ISymbolObjectPtr modelSymbol = map->CreateSymbol("ModelSymbol");//创建符号对象,ModelSymbol代表模型符号
modelSymbol->AddConfig("Roll", "0");//俯仰角。绕X轴旋转(世界坐标系方向相同),0度为水平方向,逆时针为负,弧度表示
modelSymbol->AddConfig("Pitch", "0");//偏移角。绕Y轴旋转(世界坐标系方向相同),0度为正北方向,逆时针为正,弧度表示
modelSymbol->AddConfig("Heading", "0");//翻滚角。绕Z轴旋转(世界坐标系方向相同),0度为水平方向,逆时针为正,弧度表示
modelSymbol->AddConfig("XScale", "1");//模型x方向放大比例
modelSymbol->AddConfig("YScale", "1");//模型y方向放大比例
modelSymbol->AddConfig("ZScale", "1");//模型z方向放大比例
modelSymbol->AddConfig("ModelOriginDir", "0,0,1");//模型原始轴向
modelSymbol->AddConfig("IsAddGroundLine", "true");//是否开启接地线
modelSymbol->AddConfig("LineColor", "0,0,1,1");//接地线颜色
modelSymbol->AddConfig("FeatureLiftUp", "0");//接地线抬升值(符号化对象相对于要素抬升)
modelSymbol->AddConfig("IsLocalRotation", "true");//是否在局地进行旋转,以保持模型原始的朝向(默认为否)
modelSymbol->AddConfig("Url", modelUrl.c_str());//模型资源路径
modelSymbol->AddConfig("LibraryName", reslibName.c_str());//资源名称
//2.创建样式对象
ConfigOptionsCOMLib::IStylePtr style = map->CreateStyle("style");//创建样式
style->SetName("point");//设置别名point
style->AddSymbol("PointSymbol", pointSymbol->GetConfig());//将符号对象添加到样式,第一参数为符号类型
style->AddFilterName("BuildGeometryTileFilter");//添加构建器名称.几何瓦片化构建器:BuildGeometryTileFilter
style->AddSymbol("ModelSymbol", modelSymbol->GetConfig());//将符号对象添加到样式,第一参数为符号类型
style->AddFilterName("SubstituteModelFilter");//添加构建器名称.图片/模型构建器:SubstituteModelFilter(此为图标和模型符号化共有)
//3.创建资源对象
ConfigOptionsCOMLib::IResourceObjectPtr res = map->CreateResource("ModelSymbol");//创建资源对象,模型资源为为:ModelSymbol
res->AddConfig("Uri", modelUrl.c_str());//资源路径
//4.创建资源库对象
BaseObjectCOMLib::IResourceLibraryPtr reslib = map->CreateResourceLibrary(reslibName.c_str());//创建资源库对象,名称和文字符号配置项LibraryName的一致
reslib->AddResource(res);//将资源添加至资源库
//5.创建样式表对象
ConfigOptionsCOMLib::IStyleSheetPtr styleSheet = map->CreateStyleSheet();//创建样式表
styleSheet->AddStyle(style->GetConfig());//将样式对象配置添加至样式表
styleSheet->AddResLib(reslib->GetConfig());//将资源库对象配置添加至样式表
//6.创建并添加图层对象
shpLayer = loadShpLayer(ShpPointPath, "15.3", styleSheet, false, "false");
}
//加载矢量图层
BaseObjectCOMLib::ILayerObjectPtr Cf0c3VectorSymbolDlg::loadShpLayer(std::string url,std::string liftUp, ConfigOptionsCOMLib::IStyleSheetPtr styleSheetStr, bool isLocate, std::string isLight)
{
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions("shp"); //创建图层配置对象,名称任意
tlo->AddConfig("LayerOptionsName", "FeatureModelLayerOptions");//图层配置对象名称, FeatureModelLayerOptions代表矢量数据配置
tlo->AddConfig("DataSourceTypeName", "fmgeomtile");//数据源类型,代表瓦片化加载插件
tlo->AddConfig("FeatureSourceType", "ogr");//要素数据源类型,本地数据为ogr
tlo->AddConfig("Driver", "ESRI Shapefile");//ogr数据的解析驱动
//tlo->AddConfig("BuildSpatialIndex", "true");//是否建立空间索引
tlo->AddConfig("IsLighted", isLight.c_str());
tlo->AddConfig("Url", url.c_str());//数据路径
tlo->AddConfig("LiftUp", liftUp.c_str());//图层抬升高度,正值为抬高,负值为降低
tlo->AddConfig("MinRange", "0");//数据最小显示范围
tlo->AddConfig("MaxRange", "100000");//数据的最大显示范围,必须大于最小显示范围
tlo->AddConfig("TileSize", "1000");//瓦片大小,根据最大显示范围设置,一般为MaxRange的1/10左右
tlo->AddConfig("StyleSheet", styleSheetStr->GetConfig());//将样式表配置添加至图层配置对象
BaseObjectCOMLib::ILayerObjectPtr ogrlayer = map->CreateLayer("FeatureModelLayer", tlo);//创建矢量图层,第一项参数为FeatureModelLayer
map->AddLayer(ogrlayer);//添加图层
if(isLocate){
ogrlayer->Locate();//图层定位
}
return ogrlayer;
}
C#调用
string gShpPointPath = " E:\\测试数据\\Vector\\point.shp";
ILayerObject shpLayer = null;
//模型符号化
private void loadModelSymbol()
{
string modelUrl = "E:\\测试数\\Other\\models\\n1.wrl";//模型路径
sring reslibName = "Library";
//1.创建点符号对象
ISymbolObject pointSymbol = map.CreateSymbol("PointSymbol");//创建符号对象,PointSymbol代表点符号
pointSymbol.AddConfig("Size", "5");//点大小,(0-10)
pointSymbol.AddConfig("Color", "1.0,1.0,0.0,1.0");//颜色值(RGBA,各值取值范围0-1之间)
//1.2.创建模型符号对象
ISymbolObject modelSymbol = map.CreateSymbol("ModelSymbol");//创建符号对象,ModelSymbol代表模型符号
modelSymbol.AddConfig("Roll", "0");//俯仰角。绕X轴旋转(世界坐标系方向相同),0度为水平方向,逆时针为负,弧度表示
modelSymbol.AddConfig("Pitch", "0");//偏移角。绕Y轴旋转(世界坐标系方向相同),0度为正北方向,逆时针为正,弧度表示
modelSymbol.AddConfig("Heading", "0");//翻滚角。绕Z轴旋转(世界坐标系方向相同),0度为水平方向,逆时针为正,弧度表示
modelSymbol.AddConfig("XScale", "1");//模型x方向放大比例
modelSymbol.AddConfig("YScale", "1");//模型y方向放大比例
modelSymbol.AddConfig("ZScale", "1");//模型z方向放大比例
modelSymbol.AddConfig("ModelOriginDir", "0,0,1");//模型原始轴向
modelSymbol.AddConfig("IsAddGroundLine", "true");//是否开启接地线
modelSymbol.AddConfig("LineColor", "0,0,1,1");//接地线颜色
modelSymbol.AddConfig("FeatureLiftUp", "0");//接地线抬升值(符号化对象相对于要素抬升)
modelSymbol.AddConfig("IsLocalRotation", "true");//是否在局地进行旋转,以保持模型原始的朝向(默认为否)
modelSymbol.AddConfig("Url", modelUrl);//模型资源路径
modelSymbol.AddConfig("LibraryName", reslibName);//资源名称
//2.创建样式对象
IStyle style = map.CreateStyle("style");//创建样式
style.SetName("point");//设置别名point
style.AddSymbol("PointSymbol", pointSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
style.AddFilterName("BuildGeometryTileFilter");//添加构建器名称.几何瓦片化构建器为:BuildGeometryTileFilter
style.AddSymbol("ModelSymbol", modelSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
style.AddFilterName("SubstituteModelFilter");//添加构建器名称.图片/模型构建器:SubstituteModelFilter(此为图标和模型符号化共有)
//3.创建资源对象
IResourceObject res = map.CreateResource("ModelSymbol");//创建资源,模型资源为ModelSymbol
res.AddConfig("Uri", modelUrl);//资源路径
//4.创建资源库对象
IResourceLibrary reslib = map.CreateResourceLibrary(reslibName);//创建资源库对象,名称和模型符号配置项LibraryName的一致
reslib.AddResource(res);//将资源添加至资源库
//5.创建样式表对象
IStyleSheet styleSheet = map.CreateStyleSheet();//创建样式表
styleSheet.AddStyle(style.GetConfig());//将样式对象配置添加至样式表
styleSheet.AddResLib(reslib.GetConfig());//将资源库对象配置添加至样式表
//6.创建并添加图层对象
var tlo = map.CreateLayerOptions("ogrlayer");//创建图层配置对象,名称任意
tlo.AddConfig("LayerOptionsName", "FeatureModelLayerOptions");//图层配置对象名称, FeatureModelLayerOptions代表矢量数据配置
tlo.AddConfig("DataSourceTypeName", "fmgeomtile");//数据源类型,代表瓦片化加载插件
tlo.AddConfig("FeatureSourceType", "ogr");//要素数据源类型,本地数据为ogr
tlo.AddConfig("Driver", "ESRI Shapefile");//ogr数据的解析驱动
//tlo.AddConfig("BuildSpatialIndex", "true");//是否建立空间索引
tlo.AddConfig("IsLighted", "false");//是否开启默认灯光
tlo.AddConfig("Url", gShpPointPath);//数据路径
tlo.AddConfig("LiftUp","10" );//图层抬升高度,正值为抬高,负值为降低
tlo.AddConfig("MinRange", "0");//数据最小显示范围
tlo.AddConfig("MaxRange", "10000");//数据的最大显示范围,必须大于最小显示范围
tlo.AddConfig("TileSize", "1000");//瓦片大小,根据最大显示范围设置,一般为MaxRange的1/10左右
tlo.AddConfig("StyleSheet", styleSheet.GetConfig());//将样式表配置添加至图层配置对象
shpLayer = map.CreateLayer("FeatureModelLayer", tlo);//创建矢量图层,第一项参数为FeatureModelLayer
map.AddLayer(shpLayer);//添加图层
shpLayer.Locate();//图层定位
}
7.点挤出符号
点挤出符号可配置的参数如下表所示:
配置项 | 配置说明 | 值类型 | 备注 |
---|---|---|---|
ExtrudeType | 挤出类型 | NumericExpression | 点挤出形状类型。0-圆形;1-正方形。默认0 |
Radius | 半径 | NumericExpression | 点挤出形状的半径 |
DrawMode | 绘制模式 | NumericExpression | 挤出形状的绘制模式。0-正面;1-反面;2-双面。默认0 |
SplitPointNum | 外围顶点数量 | NumericExpression | 点挤出形状的外围顶点数量。一般至少需要3个点 |
SurfaceColor | 表面颜色 | R,G,B,A | 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0" |
SurfaceStyleName | 表面样式名 | string | 表面样式名,该配置在进行纹理符号化时配置 |
对应的样式对象需要调用AddSymbol()添加线符号类型(PointExtrusionSymbol)和AddFilterName()添加挤出几何体瓦片化构建器(ExtrudeGeometryTileFilter)。
在使用点挤出符号时,需要注意:
- 挤出形状是以要素顶点为中心点,以
Radius
为半径形成的正多边形(正方形是4个顶点的正多边形),可以通过SplitPointNum
控制正多边形的边数量。 - 当
SplitPointNum
值足够大时,正多边形就无限接近于圆。
代码调用示例
Javascript调用
//点挤出颜色符号化
function loadPointExtrusionColorSymbol(){
//1.创建点挤出颜色符号对象
var pointExtrusionSymbol = map.CreateSymbol("PointExtrusionSymbol");//创建符号对象,PointExtrusionSymbol代表点挤出符号
pointExtrusionSymbol.AddConfig("ExtrudeType", "0");//挤出类型,0-圆 1-方
pointExtrusionSymbol.AddConfig("Radius", "10");//半径,单位m
pointExtrusionSymbol.AddConfig("DrawMode", "2");//绘制模式,0-正面;1-反面;2-双面
pointExtrusionSymbol.AddConfig("SurfaceColor", "1,0,0,0.5");//显示颜色
pointExtrusionSymbol.AddConfig("SplitPointNum", "64");//圆外围顶点数量(至少3个点,越多越接近于圆)
pointExtrusionSymbol.AddConfig("SurfaceStyleName", "SurfaceStyle");//表面样式名
//2.创建样式对象
var style = map.CreateStyle("style");//创建样式
style.SetName("point");//设置别名point
style.AddSymbol("PointExtrusionSymbol", pointExtrusionSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
style.AddFilterName("ExtrudeGeometryTileFilter");//添加构建器名称.挤出几何体瓦片构建器为:ExtrudeGeometryTileFilter
//3.创建样式表对象
var styleSheet = map.CreateStyleSheet();//创建样式表
styleSheet.AddStyle(style.GetConfig());//将样式配置添加至样式表
//4.创建并添加图层对象
shpLayer = loadShpLayer(gShpPointPath, 15.3, styleSheet.GetConfig(), true, "true",true);
//5.定位
flyToDestPos(120.219160835, 30.2104997499, 14.7999554612, 2.529926051075526, -0.6947455157445968, 32.81765619515068, 3);
}
//点挤出纹理符号化
function loadPointExtrusionSkinSymbol(){
var texUrl = gIconFolderPath + "/TextureGif.gif";//纹理图片地址
//1.1创建纹理符号对象
var skinSymbol = map.CreateSymbol("SkinSymbol");//创建符号化类型
skinSymbol.AddConfig("SkinName", "Skin1");//符号化类型
skinSymbol.AddConfig("LibraryName", "reslib");//资源库名称
var skinRes = map.CreateResource("SkinSymbol");//创建资源
skinRes.AddConfig("SkinName", "Skin1");//纹理资源名称,该名称必须与纹理符号的名称匹配
skinRes.AddConfig("image_url", texUrl);
skinRes.AddConfig("image_width", "256");//纹理宽度
skinRes.AddConfig("image_height", "256");//纹理高度
skinRes.AddConfig("tiled", "true");//纹理贴图是否瓦片化显示
var reslib = map.CreateResourceLibrary("reslib");
reslib.AddResource(skinRes);
//1.2.创建点挤出符号对象
var pointExtrusionSymbol = map.CreateSymbol("PointExtrusionSymbol");//创建符号对象,PointExtrusionSymbol代表点挤出符号
pointExtrusionSymbol.AddConfig("ExtrudeType", "0");//挤出类型,0-圆 1-方
pointExtrusionSymbol.AddConfig("Radius", "10");//半径,单位m
pointExtrusionSymbol.AddConfig("DrawMode", "2");//绘制模式,0-正面;1-反面;2-双面
pointExtrusionSymbol.AddConfig("SurfaceColor", "1,0,0,0.5");//显示颜色
pointExtrusionSymbol.AddConfig("SplitPointNum", "64");//圆外围顶点数量(至少3个点,越多越接近于圆)
pointExtrusionSymbol.AddConfig("SurfaceStyleName", "skinStyle");//表面样式名
//2.1.创建点挤出样式对象
var style = map.CreateStyle("style");//创建样式
style.SetName("point");//设置别名point
style.AddSymbol("PointExtrusionSymbol", pointExtrusionSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
style.AddFilterName("ExtrudeGeometryTileFilter");//添加构建器名称.挤出几何体瓦片构建器为:ExtrudeGeometryTileFilter
//2.2.创建纹理样式
var skinStyle = map.CreateStyle("skinStyle");//创建样式
skinStyle.AddSymbol("SkinSymbol", skinSymbol.GetConfig());//添加管线纹理样式
skinStyle.AddFilterName("BuildGeometryFilter");//配置构建器
//3.创建样式表对象
var styleSheet = map.CreateStyleSheet();//创建样式表
styleSheet.AddStyle(style.GetConfig());//将样式配置添加至样式表
styleSheet.AddStyle(skinStyle.GetConfig());//将样式配置添加至样式表
styleSheet.AddResLib(reslib.GetConfig());
//4.创建并添加图层对象
shpLayer = loadShpLayer(gShpPointPath, 15.3, styleSheet.GetConfig(), true, "true",true);
//5.定位
flyToDestPos(120.219160835, 30.2104997499, 14.7999554612, 2.529926051075526, -0.6947455157445968, 32.81765619515068, 3);
}
C++调用
BaseObjectCOMLib::ILayerObjectPtr shpLayer;//矢量图层对象
//加载点挤出颜色符号化
void Cf0c3VectorSymbolDlg::loadPointExtrusionColorSymbol()
{
//1.创建点挤出符号对象
ConfigOptionsCOMLib::ISymbolObjectPtr pointExtrusionSymbol = map->CreateSymbol("PointExtrusionSymbol");//创建符号对象,PointExtrusionSymbol代表点挤出符号
pointExtrusionSymbol->AddConfig("ExtrudeType", "0");//挤出类型,0-圆 1-方
pointExtrusionSymbol->AddConfig("Radius", "10");//半径,单位m
pointExtrusionSymbol->AddConfig("DrawMode", "2");//绘制模式,0-正面;1-反面;2-双面
pointExtrusionSymbol->AddConfig("SurfaceColor", "1,0,0,0.5");//显示颜色
pointExtrusionSymbol->AddConfig("SplitPointNum", "64");//圆外围顶点数量(至少3个点,越多越接近于圆)
pointExtrusionSymbol->AddConfig("SurfaceStyleName", "SurfaceStyle");//表面样式名
//2.创建样式对象
ConfigOptionsCOMLib::IStylePtr style = map->CreateStyle("style");//创建样式
style->SetName("point");//设置别名point
style->AddSymbol("PointExtrusionSymbol", pointExtrusionSymbol->GetConfig());//将符号对象添加到样式
style->AddFilterName("ExtrudeGeometryTileFilter");//添加构建器名称.挤出几何体瓦片构建器为:ExtrudeGeometryTileFilter
//3.创建样式表对象
ConfigOptionsCOMLib::IStyleSheetPtr styleSheet = map->CreateStyleSheet();//创建样式表
styleSheet->AddStyle(style->GetConfig());//将样式配置添加至样式表
//4.创建并添加图层对象
shpLayer = loadShpLayer(ShpPointPath, "15.3", styleSheet, false, "false",true);
//5.定位
flyToDestPos(120.219160835, 30.2104997499, 14.7999554612, 2.529926051075526, -0.6947455157445968, 32.81765619515068, 3);
}
//加载点挤出纹理符号化
void Cf0c3VectorSymbolDlg::loadPointExtrusionSkinSymbol()
{
std::string texUrl = "..\\data\\Other\\images\\TextureGif.gif";//纹理图片地址
//1.1创建纹理符号对象
ConfigOptionsCOMLib::ISymbolObjectPtr skinSymbol = map->CreateSymbol("SkinSymbol");//创建符号化类型
skinSymbol->AddConfig("SkinName", "Skin1");//符号化类型
skinSymbol->AddConfig("LibraryName", "reslib");//资源库名称
ConfigOptionsCOMLib::IResourceObjectPtr skinRes = map->CreateResource("SkinSymbol");//创建资源
skinRes->AddConfig("SkinName", "Skin1");//纹理资源名称,该名称必须与纹理符号的名称匹配
skinRes->AddConfig("image_url", texUrl.c_str());
skinRes->AddConfig("image_width", "256");//纹理宽度
skinRes->AddConfig("image_height", "256");//纹理高度
skinRes->AddConfig("tiled", "true");//纹理贴图是否瓦片化显示
BaseObjectCOMLib::IResourceLibraryPtr reslib = map->CreateResourceLibrary("reslib");
reslib->AddResource(skinRes);
//1.2.创建点挤出符号对象
ConfigOptionsCOMLib::ISymbolObjectPtr pointExtrusionSymbol = map->CreateSymbol("PointExtrusionSymbol");//创建符号对象,PointExtrusionSymbol代表点挤出符号
pointExtrusionSymbol->AddConfig("ExtrudeType", "0");//挤出类型,0-圆 1-方
pointExtrusionSymbol->AddConfig("Radius", "10");//半径,单位m
pointExtrusionSymbol->AddConfig("DrawMode", "2");//绘制模式,0-正面;1-反面;2-双面
pointExtrusionSymbol->AddConfig("SurfaceColor", "1,0,0,0.5");//显示颜色
pointExtrusionSymbol->AddConfig("SplitPointNum", "64");//圆外围顶点数量(至少3个点,越多越接近于圆)
pointExtrusionSymbol->AddConfig("SurfaceStyleName", "skinStyle");//表面样式名
//2.1.创建点挤出样式对象
ConfigOptionsCOMLib::IStylePtr style = map->CreateStyle("style");//创建样式
style->SetName("point");//设置别名point
style->AddSymbol("PointExtrusionSymbol", pointExtrusionSymbol->GetConfig());//将符号对象添加到样式
style->AddFilterName("ExtrudeGeometryTileFilter");//添加构建器名称.挤出几何体瓦片构建器为:ExtrudeGeometryTileFilter
//2.2.创建纹理样式
ConfigOptionsCOMLib::IStylePtr skinStyle = map->CreateStyle("skinStyle");//创建样式
skinStyle->AddSymbol("SkinSymbol", skinSymbol->GetConfig());//添加管线纹理样式
skinStyle->AddFilterName("BuildGeometryTileFilter");//配置构建器
//3.创建样式表对象
ConfigOptionsCOMLib::IStyleSheetPtr styleSheet = map->CreateStyleSheet();//创建样式表
styleSheet->AddStyle(style->GetConfig());//将样式配置添加至样式表
styleSheet->AddStyle(skinStyle->GetConfig());//将样式配置添加至样式表
styleSheet->AddResLib(reslib->GetConfig());
//4.创建并添加图层对象
shpLayer = loadShpLayer(ShpPointPath, "15.3", styleSheet, false, "false",true);
//5.定位
flyToDestPos(120.219160835, 30.2104997499, 14.7999554612, 2.529926051075526, -0.6947455157445968, 32.81765619515068, 3);
}
//加载矢量图层
BaseObjectCOMLib::ILayerObjectPtr Cf0c3VectorSymbolDlg::loadShpLayer(std::string url,std::string liftUp, ConfigOptionsCOMLib::IStyleSheetPtr styleSheetStr, bool isLocate, std::string isLight)
{
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions("shp"); //创建图层配置对象,名称任意
tlo->AddConfig("LayerOptionsName", "FeatureModelLayerOptions");//图层配置对象名称, FeatureModelLayerOptions代表矢量数据配置
tlo->AddConfig("DataSourceTypeName", "fmgeomtile");//数据源类型,代表瓦片化加载插件
tlo->AddConfig("FeatureSourceType", "ogr");//要素数据源类型,本地数据为ogr
tlo->AddConfig("Driver", "ESRI Shapefile");//ogr数据的解析驱动
//tlo->AddConfig("BuildSpatialIndex", "true");//是否建立空间索引
tlo->AddConfig("IsLighted", isLight.c_str());
tlo->AddConfig("Url", url.c_str());//数据路径
tlo->AddConfig("LiftUp", liftUp.c_str());//图层抬升高度,正值为抬高,负值为降低
tlo->AddConfig("MinRange", "0");//数据最小显示范围
tlo->AddConfig("MaxRange", "100000");//数据的最大显示范围,必须大于最小显示范围
tlo->AddConfig("TileSize", "1000");//瓦片大小,根据最大显示范围设置,一般为MaxRange的1/10左右
tlo->AddConfig("StyleSheet", styleSheetStr->GetConfig());//将样式表配置添加至图层配置对象
BaseObjectCOMLib::ILayerObjectPtr ogrlayer = map->CreateLayer("FeatureModelLayer", tlo);//创建矢量图层,第一项参数为FeatureModelLayer
map->AddLayer(ogrlayer);//添加图层
if(isLocate){
ogrlayer->Locate();//图层定位
}
return ogrlayer;
}
C#调用
string gShpPointPath = " E:\\测试数据\\Vector\\point.shp";
ILayerObject shpLayer = null;
//点挤出颜色符号化
private void PointExtrusionColorSymbol()
{
//1.创建点挤出符号对象
ISymbolObject pointExtrusionSymbol = map.CreateSymbol("PointExtrusionSymbol");//创建符号对象,PointExtrusionSymbol代表点挤出符号
pointExtrusionSymbol.AddConfig("ExtrudeType", "0");//挤出类型,0-圆 1-方
pointExtrusionSymbol.AddConfig("Radius", "10");//半径,单位m
pointExtrusionSymbol.AddConfig("DrawMode", "2");//绘制模式,0-正面;1-反面;2-双面
pointExtrusionSymbol.AddConfig("SurfaceColor", "1,0,0,0.5");//显示颜色
pointExtrusionSymbol.AddConfig("SplitPointNum", "64");//圆外围顶点数量(至少3个点,越多越接近于圆)
pointExtrusionSymbol.AddConfig("SurfaceStyleName", "SurfaceStyle");//表面样式名
//2.创建样式对象
IStyle style = map.CreateStyle("style");//创建样式
style.SetName("point");//设置别名point
style.AddSymbol("PointExtrusionSymbol", pointExtrusionSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
style.AddFilterName("ExtrudeGeometryTileFilter");//添加构建器名称.挤出几何体瓦片构建器为:ExtrudeGeometryTileFilter
//3.创建样式表对象
IStyleSheet styleSheet = map.CreateStyleSheet();//创建样式表
styleSheet.AddStyle(style.GetConfig());//将样式配置添加至样式表
//4.创建并添加图层对象
shpLayer = loadShpLayer(ShpPointPath, "15.3", styleSheet, true, "false", true);
//5.定位
flyToDestPos(120.219160835, 30.2104997499, 14.7999554612, 2.529926051075526, -0.6947455157445968, 32.81765619515068, 3);
}
//点挤出纹理符号化
private void PointExtrusionSkinSymbol()
{
string texUrl = gIconFolderPath + "/TextureGif.gif";//纹理图片地址
//1.1创建纹理符号对象
ISymbolObject skinSymbol = map.CreateSymbol("SkinSymbol");//创建符号化类型
skinSymbol.AddConfig("SkinName", "Skin1");//符号化类型
skinSymbol.AddConfig("LibraryName", "reslib");//资源库名称
IResourceObject skinRes = map.CreateResource("SkinSymbol");//创建资源
skinRes.AddConfig("SkinName", "Skin1");//纹理资源名称,该名称必须与纹理符号的名称匹配
skinRes.AddConfig("image_url", texUrl);
skinRes.AddConfig("image_width", "256");//纹理宽度
skinRes.AddConfig("image_height", "256");//纹理高度
skinRes.AddConfig("tiled", "true");//纹理贴图是否瓦片化显示
IResourceLibrary reslib = map.CreateResourceLibrary("reslib");
reslib.AddResource(skinRes);
//1.2.创建点挤出符号对象
ISymbolObject pointExtrusionSymbol = map.CreateSymbol("PointExtrusionSymbol");//创建符号对象,PointExtrusionSymbol代表点挤出符号
pointExtrusionSymbol.AddConfig("ExtrudeType", "0");//挤出类型,0-圆 1-方
pointExtrusionSymbol.AddConfig("Radius", "10");//半径,单位m
pointExtrusionSymbol.AddConfig("DrawMode", "2");//绘制模式,0-正面;1-反面;2-双面
pointExtrusionSymbol.AddConfig("SurfaceColor", "1,0,0,0.5");//显示颜色
pointExtrusionSymbol.AddConfig("SplitPointNum", "64");//圆外围顶点数量(至少3个点,越多越接近于圆)
pointExtrusionSymbol.AddConfig("SurfaceStyleName", "skinStyle");//表面样式名
//2.1.创建点挤出样式对象
var style = map.CreateStyle("style");//创建样式
style.SetName("point");//设置别名point
style.AddSymbol("PointExtrusionSymbol", pointExtrusionSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
style.AddFilterName("ExtrudeGeometryTileFilter");//添加构建器名称.挤出几何体瓦片构建器为:ExtrudeGeometryTileFilter
//2.2.创建纹理样式
IStyle skinStyle = map.CreateStyle("skinStyle");//创建样式
skinStyle.AddSymbol("SkinSymbol", skinSymbol.GetConfig());//添加管线纹理样式
skinStyle.AddFilterName("BuildGeometryTileFilter");//配置构建器
//3.创建样式表对象
IStyleSheet styleSheet = map.CreateStyleSheet();//创建样式表
styleSheet.AddStyle(style.GetConfig());//将样式配置添加至样式表
styleSheet.AddStyle(skinStyle.GetConfig());//将样式配置添加至样式表
styleSheet.AddResLib(reslib.GetConfig());
//4.创建并添加图层对象
shpLayer = loadShpLayer(ShpPointPath, "15.3", styleSheet, true, "false", true);
//5.定位
flyToDestPos(120.219160835, 30.2104997499, 14.7999554612, 2.529926051075526, -0.6947455157445968, 32.81765619515068, 3);
}
//加载矢量图层
//参数:1-数据路径;2-图层抬高;3-样式表配置;4-是否定位
private ILayerObject loadShpLayer(string url, string liftUp, IStyleSheet styleSheetStr, bool isLocate, string isLight, bool isTile)
{
ILayerOptions tlo = map.CreateLayerOptions("ogrlayer");//创建图层配置对象,名称任意
tlo.AddConfig("LayerOptionsName", "FeatureModelLayerOptions");//图层配置对象名称, FeatureModelLayerOptions代表矢量数据配置
if (isTile)
{
tlo.AddConfig("DataSourceTypeName", "fmgeomtile");//数据源类型,代表瓦片化加载插件
}
else
{
tlo.AddConfig("DataSourceTypeName", "fmgeom");//数据源类型,代表fmgeom插件
}
tlo.AddConfig("FeatureSourceType", "ogr");//要素数据源类型,本地数据为ogr
tlo.AddConfig("Driver", "ESRI Shapefile");//ogr数据的解析驱动
//tlo.AddConfig("BuildSpatialIndex", "true");//是否建立空间索引
tlo.AddConfig("IsLighted", isLight);
tlo.AddConfig("Url", url);//数据路径
tlo.AddConfig("LiftUp", liftUp);//图层抬升高度,正值为抬高,负值为降低
tlo.AddConfig("MinRange", "0");//数据最小显示范围
tlo.AddConfig("MaxRange", "10000");//数据的最大显示范围,必须大于最小显示范围
tlo.AddConfig("TileSize", "1000");//瓦片大小,根据最大显示范围设置,一般为MaxRange的1/10左右
tlo.AddConfig("IsAutoTileSize", "false");//是否自动计算瓦片大小,默认为false
tlo.AddConfig("IsHasTexture", "false");//是否有纹理,默认为false,该参数在进行分析时起效
tlo.AddConfig("StyleSheet", styleSheetStr.GetConfig());//将样式配置添加至样式表
ILayerObject ogrlayer = map.CreateLayer("FeatureModelLayer", tlo);//创建矢量图层,第一项参数为FeatureModelLayer
map.AddLayer(ogrlayer);//添加图层
if (isLocate)
{
ogrlayer.Locate();//图层定位
}
return ogrlayer;
}
8.线挤出符号
线挤出符号可配置的参数如下表所示:
配置项 | 配置说明 | 值类型 | 备注 |
---|---|---|---|
Radius | 半径 | NumericExpression | 线挤出形状的半径。 单位为毫米。默认0.0 |
Angle | 旋转角度 | NumericExpression | 剖面多边形起始点与中心点连线和水平面形成的角度。默认0.0 |
SplitPointNum | 剖面顶点数 | NumericExpression | 剖面多边形的顶点数,一般要>1 |
TextureHeightScale | 纹理缩放系数 | double | 纹理y坐标的缩放稀疏。可控制纹理显示的稀疏程度。取值范围0-1.0之间。默认0.8 |
Casing | 是否使用套接样式 | bool | 在线的连接点处是否使用套接样式,默认true-使用 |
SurfaceStyle | 表面样式名称 | string | 线挤出形状表面使用样式名称 |
CasingStyle | 套接样式名称 | string | 线连接点处使用的套接管样式名称 |
对应的样式对象需要调用AddSymbol()添加线符号类型(LineExtrusionSymbol)和AddFilterName()添加挤出几何体瓦片化构建器(ExtrudeGeometryTileFilter)。
在使用线挤出符号时,需要注意:
- 线挤出时一般会形成管线,根据剖面多边形的顶点数(
SplitPointNum
),可以形成面(2)、三角管(3)、方管(4)、六角管(6)和圆管等,要挤出成圆管时,可调节SplitPointNum
的大小,让剖面无限接近于圆即可。 - 必须要设定表面样式,表面样式可以是面符号样式,也可以是纹理符号样式,并且样式名称必须与
SurfaceStyle
名称一致。 - 若设定了纹理符号样式,还需要添加纹理资源和纹理资源库。
代码调用示例
Javascript调用
//********************************
// 线挤出符号化(挤出面)
//********************************
var gShpLinePath= " E:\\测试数据\\Vector\\line.shp";
var shpLayer = null;
function loadLineExtrusionSymbol(){
//1.创建面符号对象
var polygonSymbol = map.CreateSymbol("PolygonSymbol");//创建符号对象,PolygonSymbol代表面符号
polygonSymbol.AddConfig("Color", "1, 0.2, 0.2, 1.0");//颜色值0-1(RGBA)
//1.2.创建表面样式对象
var lineStyle = map.CreateStyle("lineStyle");//样式对象名称
lineStyle.AddSymbol("PolygonSymbol", polygonSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
//1.3.创建线挤出符号对象
var lineExtrusionSymbol = map.CreateSymbol("LineExtrusionSymbol");//创建符号对象,LineExtrusionSymbol代表线挤出符号
lineExtrusionSymbol.AddConfig("Casing", "false");//是否使用套接样式。用于线连接点处
lineExtrusionSymbol.AddConfig("SplitPointNum", "8");//剖面多边形的顶点数,近似圆周circular(8 or 16),正方形rectangular(4),带有方向纹理(2);
lineExtrusionSymbol.AddConfig("Angle", 0);//剖面多边形的起点顶点的旋转角度(与局部x轴),radian
lineExtrusionSymbol.AddConfig("CurrentDirection", "true");//是否使用默认流向(从起点流向终点)
lineExtrusionSymbol.AddConfig("Radius", "1000");//管线半径,单位mm
lineExtrusionSymbol.AddConfig("TextureHeightScale", "0.3");//纹理坐标高度缩放系数,控制纹理在挤出面上的稀疏程度。默认0.8
lineExtrusionSymbol.AddConfig("SurfaceStyle", "lineStyle");//表面样式,第二参与表面样式对象名称要一致
//2.创建挤出样式对象
var extruStyle = map.CreateStyle("extruStyle");//创建样式
extruStyle.AddSymbol("LineExtrusionSymbol", lineExtrusionSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
extruStyle.AddFilterName("ExtrudeGeometryTileFilter");//添加构建器名称.挤出几何体瓦片构建器为:ExtrudeGeometryTileFilter
//3.创建样式表对象
var styleSheet = map.CreateStyleSheet();//创建样式表
styleSheet.AddStyle(lineStyle.GetConfig());//将样式配置添加至样式表
styleSheet.AddStyle(extruStyle.GetConfig());//将样式配置添加至样式表
//4.创建并添加图层对象
var tlo = map.CreateLayerOptions("ogrlayer");//创建图层配置对象,名称任意
tlo.AddConfig("LayerOptionsName", "FeatureModelLayerOptions");//图层配置对象名称, FeatureModelLayerOptions代表矢量数据配置
tlo.AddConfig("DataSourceTypeName", "fmgeomtile");//数据源类型,代表瓦片化加载插件
tlo.AddConfig("FeatureSourceType", "ogr");//要素数据源类型,本地数据为ogr
tlo.AddConfig("Driver", "ESRI Shapefile");//ogr数据的解析驱动
tlo.AddConfig("IsLighted", "false");//是否开启默认灯光
tlo.AddConfig("Url", gShpLinePath);//数据路径
tlo.AddConfig("LiftUp","10" );//图层抬升高度,正值为抬高,负值为降低
tlo.AddConfig("MinRange", "0");//数据最小显示范围
tlo.AddConfig("MaxRange", "10000");//数据的最大显示范围,必须大于最小显示范围
tlo.AddConfig("TileSize", "1000");//瓦片大小,根据最大显示范围设置,一般为MaxRange的1/10左右
tlo.AddConfig("IsAutoTileSize", "false");//是否自动计算瓦片大小,默认为false
tlo.AddConfig("StyleSheet", styleSheet.GetConfig());//将样式表配置添加至图层配置对象
shpLayer = map.CreateLayer("FeatureModelLayer", tlo);//创建矢量图层,第一项参数为FeatureModelLayer
map.AddLayer(shpLayer);//添加图层
shpLayer.Locate();//图层定位
}
//********************************
// 线挤出符号化(带纹理)
//********************************
function loadLineExtrusionSymbolWithTexture(){
var texUrl = "E:\\测试数\\Other\\images\\TextureGif.gif";//纹理图片地址
var reslibName = "Library";
//1.创建表面符号对象
var skinSymbol = map.CreateSymbol("SkinSymbol");//创建符号对象,SkinSymbol代表纹理符号
skinSymbol.AddConfig("SkinName", "SkinSymbol");//资源名称
skinSymbol.AddConfig("LibraryName", reslibName);//资源库名称
//1.2.创建线挤出符号对象
var lineExtrusionSymbol = map.CreateSymbol("LineExtrusionSymbol");//创建符号对象,LineExtrusionSymbol代表线挤出符号
lineExtrusionSymbol.AddConfig("Casing", "false");//是否使用套接样式。用于线连接点处
lineExtrusionSymbol.AddConfig("SplitPointNum", "2");//剖面多边形的顶点数,近似圆周circular(8 or 16),正方形rectangular(4),带有方向纹理(2);
lineExtrusionSymbol.AddConfig("Angle", 0);//剖面多边形的起点顶点的旋转角度(与局部x轴),radian
lineExtrusionSymbol.AddConfig("CurrentDirection", "true");//是否使用默认流向(从起点流向终点)
lineExtrusionSymbol.AddConfig("Radius", "1000");//管线半径,单位mm
lineExtrusionSymbol.AddConfig("TextureHeightScale", "0.3");//纹理坐标高度缩放系数,控制纹理在挤出面上的稀疏程度。默认0.8
lineExtrusionSymbol.AddConfig("SurfaceStyle", "skinStyle");//表面样式,第二参与表面样式对象名称要一致
//2.创建表面样式对象
var skinStyle = map.CreateStyle("skinStyle");//创建样式
skinStyle.AddSymbol("SkinSymbol", skinSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
//2.1创建挤出样式对象
var extruStyle = map.CreateStyle("extruStyle");//创建样式
extruStyle.AddSymbol("LineExtrusionSymbol", lineExtrusionSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
extruStyle.AddFilterName("ExtrudeGeometryTileFilter");//添加构建器名称.挤出几何体瓦片构建器为:ExtrudeGeometryTileFilter
//3.创建资源对象
var res = map.CreateResource("SkinSymbol");//创建资源对象,SkinSymbol代表纹理符号资源
res.AddConfig("SkinName", "SkinSymbol");//纹理资源名称,该名称必须与纹理符号的名称匹配
res.AddConfig("image_url", texUrl);//纹理资源路径
res.AddConfig("image_width", "256");//纹理宽度
res.AddConfig("image_height", "256");//纹理高度
res.AddConfig("tiled", "true");//纹理贴图是否瓦片化显示
//4.创建资源库对象
var reslib = map.CreateResourceLibrary(reslibName);//创建资源库,名称和纹理符号配置LibraryName设置的名称对应
reslib.AddResource(res);//将资源添加至资源库
//5.创建样式表对象
var styleSheet = map.CreateStyleSheet();//创建样式表
styleSheet.AddStyle(skinStyle.GetConfig());//将样式对象配置添加至样式表
styleSheet.AddStyle(extruStyle.GetConfig());//将样式对象配置添加至样式表
styleSheet.AddResLib(reslib.GetConfig());//将资源库对象配置添加至样式表
//6.创建并添加图层对象
var tlo = map.CreateLayerOptions("ogrlayer");//创建图层配置对象,名称任意
tlo.AddConfig("LayerOptionsName", "FeatureModelLayerOptions");//图层配置对象名称, FeatureModelLayerOptions代表矢量数据配置
tlo.AddConfig("DataSourceTypeName", "fmgeomtile");//数据源类型,代表瓦片化加载插件
tlo.AddConfig("FeatureSourceType", "ogr");//要素数据源类型,本地数据为ogr
tlo.AddConfig("Driver", "ESRI Shapefile");//ogr数据的解析驱动
tlo.AddConfig("IsLighted", "false");//是否开启默认灯光
tlo.AddConfig("Url", gShpLinePath);//数据路径
tlo.AddConfig("LiftUp","10" );//图层抬升高度,正值为抬高,负值为降低
tlo.AddConfig("MinRange", "0");//数据最小显示范围
tlo.AddConfig("MaxRange", "10000");//数据的最大显示范围,必须大于最小显示范围
tlo.AddConfig("TileSize", "1000");//瓦片大小,根据最大显示范围设置,一般为MaxRange的1/10左右
tlo.AddConfig("IsAutoTileSize", "false");//是否自动计算瓦片大小,默认为false
tlo.AddConfig("StyleSheet", styleSheet.GetConfig());//将样式表配置添加至图层配置对象
shpLayer = map.CreateLayer("FeatureModelLayer", tlo);//创建矢量图层,第一项参数为FeatureModelLayer
map.AddLayer(shpLayer);//添加图层
shpLayer.Locate();//图层定位
}
C++调用
BaseObjectCOMLib::ILayerObjectPtr shpLayer;//矢量图层对象
//加载线挤出符号化
void Cf0c3VectorSymbolDlg::loadLineExtrusionSymbol()
{
//1.创建面符号对象
ConfigOptionsCOMLib::ISymbolObjectPtr polygonSymbol = map->CreateSymbol("PolygonSymbol");//创建符号对象,PolygonSymbol代表面符号
polygonSymbol->AddConfig("Color", "1, 0.2, 0.2, 1.0");//颜色值0-1(RGBA)
//1.2.创建表面样式对象
ConfigOptionsCOMLib::IStylePtr lineStyle = map->CreateStyle("lineStyle");//样式对象名称
lineStyle->AddSymbol("PolygonSymbol", polygonSymbol->GetConfig());//将符号对象添加到样式,第一参数为符号类型
//1.3.创建线挤出符号对象
ConfigOptionsCOMLib::ISymbolObjectPtr lineExtrusionSymbol = map->CreateSymbol("LineExtrusionSymbol");//创建符号对象,LineExtrusionSymbol代表线挤出符号
lineExtrusionSymbol->AddConfig("Casing", "false");//是否使用套接样式。用于线连接点处
lineExtrusionSymbol->AddConfig("SplitPointNum", "8");//剖面多边形的顶点数,近似圆周circular(8 or 16),正方形rectangular(4),带有方向纹理(2);
lineExtrusionSymbol->AddConfig("Angle", "0");//剖面多边形的起点顶点的旋转角度(与局部x轴),radian
lineExtrusionSymbol->AddConfig("CurrentDirection", "true");//是否使用默认流向(从起点流向终点)
lineExtrusionSymbol->AddConfig("Radius", "1000");//管线半径,单位mm
lineExtrusionSymbol->AddConfig("TextureHeightScale", "0.3");//纹理坐标高度缩放系数,控制纹理在挤出面上的稀疏程度。默认0.8
lineExtrusionSymbol->AddConfig("SurfaceStyle", "lineStyle");//表面样式,第二参与表面样式对象名称要一致
//2.创建挤出样式对象
ConfigOptionsCOMLib::IStylePtr extruStyle = map->CreateStyle("extruStyle");//创建样式
extruStyle->AddSymbol("LineExtrusionSymbol", lineExtrusionSymbol->GetConfig());//将符号对象添加到样式,第一参数为符号类型
extruStyle->AddFilterName("ExtrudeGeometryTileFilter");//添加构建器名称.挤出几何体瓦片构建器为:ExtrudeGeometryTileFilter
//3.创建样式表对象
ConfigOptionsCOMLib::IStyleSheetPtr styleSheet = map->CreateStyleSheet();//创建样式表
styleSheet->AddStyle(lineStyle->GetConfig());//将样式配置添加至样式表
styleSheet->AddStyle(extruStyle->GetConfig());//将样式配置添加至样式表
//4.创建并添加图层对象
shpLayer = loadShpLayer(ShpLinePath, "15.3", styleSheet, true, "false");
}
//加载线挤出符号化(带纹理)
void Cf0c3VectorSymbolDlg::loadLineExtrusionSymbolWithTexture()
{
std::string texUrl = "..\\data\\Other\\images\\TextureGif.gif";//图片路径
std::string reslibName = "Library";
//1.创建表面符号对象
ConfigOptionsCOMLib::ISymbolObjectPtr skinSymbol = map->CreateSymbol("SkinSymbol");//创建符号对象,SkinSymbol代表纹理符号
skinSymbol->AddConfig("SkinName", "SkinSymbol");//资源名称
skinSymbol->AddConfig("LibraryName", reslibName.c_str());//资源库名称
//1.2.创建线挤出符号对象
ConfigOptionsCOMLib::ISymbolObjectPtr lineExtrusionSymbol = map->CreateSymbol("LineExtrusionSymbol");//创建符号对象,LineExtrusionSymbol代表线挤出符号
lineExtrusionSymbol->AddConfig("Casing", "false");//是否使用套接样式。用于线连接点处
lineExtrusionSymbol->AddConfig("SplitPointNum", "2");//剖面多边形的顶点数,近似圆周circular(8 or 16),正方形rectangular(4),带有方向纹理(2);
lineExtrusionSymbol->AddConfig("Angle", "0");//剖面多边形的起点顶点的旋转角度(与局部x轴),radian
lineExtrusionSymbol->AddConfig("CurrentDirection", "true");//是否使用默认流向(从起点流向终点)
lineExtrusionSymbol->AddConfig("Radius", "1000");//管线半径,单位mm
lineExtrusionSymbol->AddConfig("TextureHeightScale", "0.3");//纹理坐标高度缩放系数,控制纹理在挤出面上的稀疏程度。默认0.8
lineExtrusionSymbol->AddConfig("SurfaceStyle", "skinStyle");//表面样式,第二参与表面样式对象名称要一致
//2.创建表面样式对象
ConfigOptionsCOMLib::IStylePtr skinStyle = map->CreateStyle("skinStyle");//创建样式
skinStyle->AddSymbol("SkinSymbol", skinSymbol->GetConfig());//将符号对象添加到样式,第一参数为符号类型
//2.1创建挤出样式对象
ConfigOptionsCOMLib::IStylePtr extruStyle = map->CreateStyle("extruStyle");//创建样式
extruStyle->AddSymbol("LineExtrusionSymbol", lineExtrusionSymbol->GetConfig());//将符号对象添加到样式,第一参数为符号类型
extruStyle->AddFilterName("ExtrudeGeometryTileFilter");//添加构建器名称.挤出几何体瓦片构建器为:ExtrudeGeometryTileFilter
//3.创建资源对象
ConfigOptionsCOMLib::IResourceObjectPtr res = map->CreateResource("SkinSymbol");//创建资源对象,SkinSymbol代表纹理符号资源
res->AddConfig("SkinName", "SkinSymbol");//纹理资源名称,该名称必须与纹理符号的名称匹配
res->AddConfig("image_url", texUrl.c_str());//纹理资源路径
res->AddConfig("image_width", "256");//纹理宽度
res->AddConfig("image_height", "256");//纹理高度
res->AddConfig("tiled", "true");//纹理贴图是否瓦片化显示
//4.创建资源库对象
BaseObjectCOMLib::IResourceLibraryPtr reslib = map->CreateResourceLibrary(reslibName.c_str());//创建资源库,名称和纹理符号配置LibraryName设置的名称对应
reslib->AddResource(res);//将资源添加至资源库
//5.创建样式表对象
ConfigOptionsCOMLib::IStyleSheetPtr styleSheet = map->CreateStyleSheet();//创建样式表
styleSheet->AddStyle(skinStyle->GetConfig());//将样式对象配置添加至样式表
styleSheet->AddStyle(extruStyle->GetConfig());//将样式对象配置添加至样式表
styleSheet->AddResLib(reslib->GetConfig());//将资源库对象配置添加至样式表
//6.创建并添加图层对象
shpLayer = loadShpLayer(ShpLinePath, "15.3", styleSheet, true, "false");
}
//加载矢量图层
BaseObjectCOMLib::ILayerObjectPtr Cf0c3VectorSymbolDlg::loadShpLayer(std::string url,std::string liftUp, ConfigOptionsCOMLib::IStyleSheetPtr styleSheetStr, bool isLocate, std::string isLight)
{
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions("shp"); //创建图层配置对象,名称任意
tlo->AddConfig("LayerOptionsName", "FeatureModelLayerOptions");//图层配置对象名称, FeatureModelLayerOptions代表矢量数据配置
tlo->AddConfig("DataSourceTypeName", "fmgeomtile");//数据源类型,代表瓦片化加载插件
tlo->AddConfig("FeatureSourceType", "ogr");//要素数据源类型,本地数据为ogr
tlo->AddConfig("Driver", "ESRI Shapefile");//ogr数据的解析驱动
//tlo->AddConfig("BuildSpatialIndex", "true");//是否建立空间索引
tlo->AddConfig("IsLighted", isLight.c_str());
tlo->AddConfig("Url", url.c_str());//数据路径
tlo->AddConfig("LiftUp", liftUp.c_str());//图层抬升高度,正值为抬高,负值为降低
tlo->AddConfig("MinRange", "0");//数据最小显示范围
tlo->AddConfig("MaxRange", "100000");//数据的最大显示范围,必须大于最小显示范围
tlo->AddConfig("TileSize", "1000");//瓦片大小,根据最大显示范围设置,一般为MaxRange的1/10左右
tlo->AddConfig("StyleSheet", styleSheetStr->GetConfig());//将样式表配置添加至图层配置对象
BaseObjectCOMLib::ILayerObjectPtr ogrlayer = map->CreateLayer("FeatureModelLayer", tlo);//创建矢量图层,第一项参数为FeatureModelLayer
map->AddLayer(ogrlayer);//添加图层
if(isLocate){
ogrlayer->Locate();//图层定位
}
return ogrlayer;
}
C#调用
string gShpLinePath= " E:\\测试数据\\Vector\\line.shp";
ILayerObject shpLayer = null;
//线挤出符号化(挤出面)
private void loadLineExtrusionSymbol()
{
//1.创建面符号对象
ISymbolObject polygonSymbol = map.CreateSymbol("PolygonSymbol");//创建符号对象,PolygonSymbol代表面符号
polygonSymbol.AddConfig("Color", "1, 0.2, 0.2, 1.0");//颜色值0-1(RGBA)
//1.2.创建表面样式对象
IStyle lineStyle = map.CreateStyle("lineStyle");//样式对象名称
lineStyle.AddSymbol("PolygonSymbol", polygonSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
//1.3.创建线挤出符号对象
ISymbolObject lineExtrusionSymbol = map.CreateSymbol("LineExtrusionSymbol");//创建符号对象,LineExtrusionSymbol代表线挤出符号
lineExtrusionSymbol.AddConfig("Casing", "false");//是否使用套接样式。用于线连接点处
lineExtrusionSymbol.AddConfig("SplitPointNum", "8");//剖面多边形的顶点数,近似圆周circular(8 or 16),正方形rectangular(4),带有方向纹理(2);
lineExtrusionSymbol.AddConfig("Angle", "0");//剖面多边形的起点顶点的旋转角度(与局部x轴),radian
lineExtrusionSymbol.AddConfig("CurrentDirection", "true");//是否使用默认流向(从起点流向终点)
lineExtrusionSymbol.AddConfig("Radius", "1000");//管线半径,单位mm
lineExtrusionSymbol.AddConfig("TextureHeightScale", "0.3");//纹理坐标高度缩放系数,控制纹理在挤出面上的稀疏程度。默认0.8
lineExtrusionSymbol.AddConfig("SurfaceStyle", "lineStyle");//表面样式,第二参与表面样式对象名称要一致
//2.创建挤出样式对象
IStyle extruStyle = map.CreateStyle("extruStyle");//创建样式
extruStyle.AddSymbol("LineExtrusionSymbol", lineExtrusionSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
extruStyle.AddFilterName("ExtrudeGeometryTileFilter");//添加构建器名称.挤出几何体瓦片构建器为:ExtrudeGeometryTileFilter
//3.创建样式表对象
IStyleSheet styleSheet = map.CreateStyleSheet();//创建样式表
styleSheet.AddStyle(lineStyle.GetConfig());//将样式配置添加至样式表
styleSheet.AddStyle(extruStyle.GetConfig());//将样式配置添加至样式表
//4.创建并添加图层对象
var tlo = map.CreateLayerOptions("ogrlayer");//创建图层配置对象,名称任意
tlo.AddConfig("LayerOptionsName", "FeatureModelLayerOptions");//图层配置对象名称, FeatureModelLayerOptions代表矢量数据配置
tlo.AddConfig("DataSourceTypeName", "fmgeomtile");//数据源类型,代表瓦片化加载插件
tlo.AddConfig("FeatureSourceType", "ogr");//要素数据源类型,本地数据为ogr
tlo.AddConfig("Driver", "ESRI Shapefile");//ogr数据的解析驱动
tlo.AddConfig("IsLighted", "false");//是否开启默认灯光
tlo.AddConfig("Url", gShpLinePath);//数据路径
tlo.AddConfig("LiftUp","10" );//图层抬升高度,正值为抬高,负值为降低
tlo.AddConfig("MinRange", "0");//数据最小显示范围
tlo.AddConfig("MaxRange", "10000");//数据的最大显示范围,必须大于最小显示范围
tlo.AddConfig("TileSize", "1000");//瓦片大小,根据最大显示范围设置,一般为MaxRange的1/10左右
tlo.AddConfig("IsAutoTileSize", "false");//是否自动计算瓦片大小,默认为false
tlo.AddConfig("StyleSheet", styleSheet.GetConfig());//将样式表配置添加至图层配置对象
shpLayer = map.CreateLayer("FeatureModelLayer", tlo);//创建矢量图层,第一项参数为FeatureModelLayer
map.AddLayer(shpLayer);//添加图层
shpLayer.Locate();//图层定位
}
//线挤出符号化(带纹理)
private void loadLineExtrusionSymbolWithTexture()
{
string texUrl = "E:\\测试数\\Other\\images\\TextureGif.gif";//纹理图片地址
string reslibName = "Library";
//1.创建表面符号对象
ISymbolObject skinSymbol = map.CreateSymbol("SkinSymbol");//创建符号对象,SkinSymbol代表纹理符号
skinSymbol.AddConfig("SkinName", "SkinSymbol");//资源名称
skinSymbol.AddConfig("LibraryName", reslibName);//资源库名称
//1.2.创建线挤出符号对象
ISymbolObject lineExtrusionSymbol = map.CreateSymbol("LineExtrusionSymbol");//创建符号对象,LineExtrusionSymbol代表线挤出符号
lineExtrusionSymbol.AddConfig("Casing", "false");//是否使用套接样式。用于线连接点处
lineExtrusionSymbol.AddConfig("SplitPointNum", "2");//剖面多边形的顶点数,近似圆周circular(8 or 16),正方形rectangular(4),带有方向纹理(2);
lineExtrusionSymbol.AddConfig("Angle", "0");//剖面多边形的起点顶点的旋转角度(与局部x轴),radian
lineExtrusionSymbol.AddConfig("CurrentDirection", "true");//是否使用默认流向(从起点流向终点)
lineExtrusionSymbol.AddConfig("Radius", "1000");//管线半径,单位mm
lineExtrusionSymbol.AddConfig("TextureHeightScale", "0.3");//纹理坐标高度缩放系数,控制纹理在挤出面上的稀疏程度。默认0.8
lineExtrusionSymbol.AddConfig("SurfaceStyle", "skinStyle");//表面样式,第二参与表面样式对象名称要一致
//2.创建表面样式对象
IStyle skinStyle = map.CreateStyle("skinStyle");//创建样式
skinStyle.AddSymbol("SkinSymbol", skinSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
//2.1创建挤出样式对象
IStyle extruStyle = map.CreateStyle("extruStyle");//创建样式
extruStyle.AddSymbol("LineExtrusionSymbol", lineExtrusionSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
extruStyle.AddFilterName("ExtrudeGeometryTileFilter");//添加构建器名称.挤出几何体瓦片构建器为:ExtrudeGeometryTileFilter
//3.创建资源对象
IResourceObject res = map.CreateResource("SkinSymbol");//创建资源对象,SkinSymbol代表纹理符号资源
res.AddConfig("SkinName", "SkinSymbol");//纹理资源名称,该名称必须与纹理符号的名称匹配
res.AddConfig("image_url", texUrl);//纹理资源路径
res.AddConfig("image_width", "256");//纹理宽度
res.AddConfig("image_height", "256");//纹理高度
res.AddConfig("tiled", "true");//纹理贴图是否瓦片化显示
//4.创建资源库对象
IResourceLibrary reslib = map.CreateResourceLibrary(reslibName);//创建资源库,名称和纹理符号配置LibraryName设置的名称对应
reslib.AddResource(res);//将资源添加至资源库
//5.创建样式表对象
IStyleSheet styleSheet = map.CreateStyleSheet();//创建样式表
styleSheet.AddStyle(skinStyle.GetConfig());//将样式对象配置添加至样式表
styleSheet.AddStyle(extruStyle.GetConfig());//将样式对象配置添加至样式表
styleSheet.AddResLib(reslib.GetConfig());//将资源库对象配置添加至样式表
//6.创建并添加图层对象
var tlo = map.CreateLayerOptions("ogrlayer");//创建图层配置对象,名称任意
tlo.AddConfig("LayerOptionsName", "FeatureModelLayerOptions");//图层配置对象名称, FeatureModelLayerOptions代表矢量数据配置
tlo.AddConfig("DataSourceTypeName", "fmgeomtile");//数据源类型,代表瓦片化加载插件
tlo.AddConfig("FeatureSourceType", "ogr");//要素数据源类型,本地数据为ogr
tlo.AddConfig("Driver", "ESRI Shapefile");//ogr数据的解析驱动
tlo.AddConfig("IsLighted", "false");//是否开启默认灯光
tlo.AddConfig("Url", gShpLinePath);//数据路径
tlo.AddConfig("LiftUp","10" );//图层抬升高度,正值为抬高,负值为降低
tlo.AddConfig("MinRange", "0");//数据最小显示范围
tlo.AddConfig("MaxRange", "10000");//数据的最大显示范围,必须大于最小显示范围
tlo.AddConfig("TileSize", "1000");//瓦片大小,根据最大显示范围设置,一般为MaxRange的1/10左右
tlo.AddConfig("IsAutoTileSize", "false");//是否自动计算瓦片大小,默认为false
tlo.AddConfig("StyleSheet", styleSheet.GetConfig());//将样式表配置添加至图层配置对象
shpLayer = map.CreateLayer("FeatureModelLayer", tlo);//创建矢量图层,第一项参数为FeatureModelLayer
map.AddLayer(shpLayer);//添加图层
shpLayer.Locate();//图层定位
}
9.面挤出符号
面挤出符号可配置的参数如下表所示:
配置项 | 配置说明 | 值类型 | 备注 |
---|---|---|---|
HeightExpression | 挤出高度 | NumericExpression | 面挤出高度。默认0.0,单位m |
RoofStyleName | 顶面样式 | string | 拉伸体块顶面/屋顶样式名称 |
WallStyleName | 侧面样式 | string | 拉伸体块侧面/墙面样式名称 |
BuildingStyleName | 整体样式 | string | 拉伸体块整体样式名称 |
对应的样式对象需要调用AddSymbol()添加面符号类型(PolygonExtrusionSymbol)和AddFilterName()添加挤出几何体瓦片化构建器(ExtrudeGeometryTileFilter)。
在使用面挤出符号时,需要注意:
- 面挤出体块有两种类型可选择:单一类型和屋顶墙面类型。单一类型是整个体块使用一种颜色显示,此时需要添加
BuildingStyleName
配置;屋顶墙面类型是顶面和侧面分别配置显示,顶面通过RoofStyleName
配置、侧面通过WallStyleName
配置。 - 如果3种样式都配置,会优先使用
BuildingStyleName
,即单一类型挤出的方式。 - 设定了样式名称之后,对应的样式对象也必须添加到样式表中,并且样式名称与配置的名称一致。
- 单一类型对应的样式只能是面符号样式,并且可以在面符号样式中添加线符号,形成边框。
- 屋顶墙面类型对应的样式对象可以是面符号样式,也可以是纹理符号样式。
- 若设定了纹理符号样式,还需要添加纹理资源和纹理资源库。
代码调用示例
示例中展示了屋顶墙面纯色、屋顶墙面贴纹理和单一纯色3种类型的面挤出代码,
Javascript调用
//********************************
// 面挤出符号化(roof/wall),这种方式是将体块的侧面(墙面)和顶面(屋顶)分开处理的
//********************************
var gShpPolygonPath = " E:\\测试数据\\Vector\\polygon.shp";
var shpLayer = null;
function LoadExtruDiffPolygonShp(){
//1.创建墙壁面符号对象
var wallPolygonSymbol = map.CreateSymbol("PolygonSymbol");//创建符号对象,PolygonSymbol代表面符号
wallPolygonSymbol.AddConfig("Color", "0.98, 0.51, 0.27, 1");//颜色值(RGBA,各值取值范围0-1之间)
//2.创建墙壁面样式对象
var wallPolygonStyle = map.CreateStyle("wallPolygonStyle");//创建样式
wallPolygonStyle.AddSymbol("PolygonSymbol", wallPolygonSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
//3.创建屋顶面符号对象
var roofPolygonSymbol = map.CreateSymbol("PolygonSymbol");//创建符号对象,PolygonSymbol代表面符号
roofPolygonSymbol.AddConfig("Color", "0.86, 0.92, 0.33, 0.8");//颜色值(RGBA,各值取值范围0-1之间)
//4.创建屋顶面样式对象
var roofPolygonStyle = map.CreateStyle("roofPolygonStyle");//创建样式
roofPolygonStyle.AddSymbol("PolygonSymbol", roofPolygonSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
//5.创建面挤出符号对象
var polygonExtrusionSymbol = map.CreateSymbol("PolygonExtrusionSymbol");//创建符号对象,PolygonExtrusionSymbol代表面挤出符号
polygonExtrusionSymbol.AddConfig("HeightExpression", "[LS]");//挤出高度。[]代表以属性字段的值作为挤出高度,让不同要素有不同高度
polygonExtrusionSymbol.AddConfig("RoofStyleName", "roofPolygonStyle");//拉伸体块屋顶样式
polygonExtrusionSymbol.AddConfig("WallStyleName", "wallPolygonStyle");//拉伸体块墙体样式
//6.创建挤出样式对象
var extruStyle = map.CreateStyle("extruStyle");//创建样式
extruStyle.AddSymbol("PolygonExtrusionSymbol", polygonExtrusionSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
extruStyle.AddFilterName("ExtrudeGeometryTileFilter");//添加构建器名称.挤出几何体瓦片构建器为:ExtrudeGeometryTileFilter
//7.创建样式表对象
var styleSheet = map.CreateStyleSheet();//创建样式表
styleSheet.AddStyle(wallPolygonStyle.GetConfig());//将墙体样式配置添加至样式表
styleSheet.AddStyle(roofPolygonStyle.GetConfig());//将屋顶样式配置添加至样式表
styleSheet.AddStyle(extruStyle.GetConfig());//将挤出面样式配置添加至样式表
//8.创建并添加图层对象
var tlo = map.CreateLayerOptions("ogrlayer");//创建图层配置对象,名称任意
tlo.AddConfig("LayerOptionsName", "FeatureModelLayerOptions");//图层配置对象名称, FeatureModelLayerOptions代表矢量数据配置
tlo.AddConfig("DataSourceTypeName", "fmgeomtile");//数据源类型,代表瓦片化加载插件
tlo.AddConfig("FeatureSourceType", "ogr");//要素数据源类型,本地数据为ogr
tlo.AddConfig("Driver", "ESRI Shapefile");//ogr数据的解析驱动
tlo.AddConfig("IsLighted", "false");//是否开启默认灯光
tlo.AddConfig("Url", gShpPolygonPath);//数据路径
tlo.AddConfig("LiftUp","10" );//图层抬升高度,正值为抬高,负值为降低
tlo.AddConfig("MinRange", "0");//数据最小显示范围
tlo.AddConfig("MaxRange", "10000");//数据的最大显示范围,必须大于最小显示范围
tlo.AddConfig("TileSize", "1000");//瓦片大小,根据最大显示范围设置,一般为MaxRange的1/10左右
tlo.AddConfig("IsAutoTileSize", "false");//是否自动计算瓦片大小,默认为false
tlo.AddConfig("StyleSheet", styleSheet.GetConfig());//将样式表配置添加至图层配置对象
shpLayer = map.CreateLayer("FeatureModelLayer", tlo);//创建矢量图层,第一项参数为FeatureModelLayer
map.AddLayer(shpLayer);//添加图层
shpLayer.Locate();//图层定位
}
//********************************
// 面挤出纹理符号化(roof/wall),这种方式是将体块的侧面(墙面)和顶面(屋顶)分开处理的
//********************************
function LoadExtruDiffPolygonWithSkinShp(){
var texUrl = "E:\\测试数\\Other\\images\\TextureGif.gif";//纹理图片地址
var reslibName = "Library";
//1.创建表面符号对象
var skinSymbol = map.CreateSymbol("SkinSymbol");//创建符号对象,SkinSymbol代表纹理符号
skinSymbol.AddConfig("SkinName", "SkinSymbol");//资源名称
skinSymbol.AddConfig("LibraryName", reslibName);//资源库名称
//2.创建表面样式对象
var skinStyle = map.CreateStyle("skinStyle");//创建样式
skinStyle.AddSymbol("SkinSymbol", skinSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
//3.创建资源对象
var res = map.CreateResource("SkinSymbol");//创建资源对象,SkinSymbol代表纹理符号资源
res.AddConfig("SkinName", "SkinSymbol");//纹理资源名称,该名称必须与纹理符号的名称匹配
res.AddConfig("image_url", texUrl);//纹理资源路径
res.AddConfig("image_width", "256");//纹理宽度
res.AddConfig("image_height", "256");//纹理高度
res.AddConfig("tiled", "true");//纹理贴图是否瓦片化显示
//4.创建资源库对象
var reslib = map.CreateResourceLibrary(reslibName);//创建资源库,名称和纹理符号配置LibraryName设置的名称对应
reslib.AddResource(res);//将资源添加至资源库
//5.创建面挤出符号对象
var polygonExtrusionSymbol = map.CreateSymbol("PolygonExtrusionSymbol");//创建符号对象,PolygonExtrusionSymbol代表面挤出符号
polygonExtrusionSymbol.AddConfig("HeightExpression", "[LS]");//挤出高度。[]代表以属性字段的值作为挤出高度,让不同要素有不同高度
polygonExtrusionSymbol.AddConfig("RoofStyleName", "skinStyle");//拉伸体块屋顶样式
polygonExtrusionSymbol.AddConfig("WallStyleName", "skinStyle");//拉伸体块墙体样式
//6.创建挤出样式对象
var extruStyle = map.CreateStyle("extruStyle");//创建样式
extruStyle.AddSymbol("PolygonExtrusionSymbol", polygonExtrusionSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
extruStyle.AddFilterName("ExtrudeGeometryTileFilter");//添加构建器名称.挤出几何体瓦片构建器为:ExtrudeGeometryTileFilter
//7.创建样式表对象
var styleSheet = map.CreateStyleSheet();//创建样式表
styleSheet.AddStyle(skinStyle.GetConfig());//将墙体样式配置添加至样式表
styleSheet.AddStyle(extruStyle.GetConfig());//将挤出面样式配置添加至样式表
styleSheet.AddResLib(reslib.GetConfig());//将资源库对象配置添加至样式表
//8.创建并添加图层对象
var tlo = map.CreateLayerOptions("ogrlayer");//创建图层配置对象,名称任意
tlo.AddConfig("LayerOptionsName", "FeatureModelLayerOptions");//图层配置对象名称, FeatureModelLayerOptions代表矢量数据配置
tlo.AddConfig("DataSourceTypeName", "fmgeomtile");//数据源类型,代表瓦片化加载插件
tlo.AddConfig("FeatureSourceType", "ogr");//要素数据源类型,本地数据为ogr
tlo.AddConfig("Driver", "ESRI Shapefile");//ogr数据的解析驱动
tlo.AddConfig("IsLighted", "false");//是否开启默认灯光
tlo.AddConfig("Url", gShpPolygonPath);//数据路径
tlo.AddConfig("LiftUp","10" );//图层抬升高度,正值为抬高,负值为降低
tlo.AddConfig("MinRange", "0");//数据最小显示范围
tlo.AddConfig("MaxRange", "10000");//数据的最大显示范围,必须大于最小显示范围
tlo.AddConfig("TileSize", "1000");//瓦片大小,根据最大显示范围设置,一般为MaxRange的1/10左右
tlo.AddConfig("IsAutoTileSize", "false");//是否自动计算瓦片大小,默认为false
tlo.AddConfig("StyleSheet", styleSheet.GetConfig());//将样式表配置添加至图层配置对象
shpLayer = map.CreateLayer("FeatureModelLayer", tlo);//创建矢量图层,第一项参数为FeatureModelLayer
map.AddLayer(shpLayer);//添加图层
shpLayer.Locate();//图层定位
}
//********************************
// 面挤出符号化(单个)—该种模式将面要素单个进行挤出
//********************************
function LoadPolygonGeometryFilterShp(){
//1.创建面符号对象
var polygonSymbol = map.CreateSymbol("PolygonSymbol");//创建符号对象,PolygonSymbol代表面符号
polygonSymbol.AddConfig("Color", "0.13, 0.77, 0.93, 0.5");//颜色值(RGBA,各值取值范围0-1之间)
//1.2.创建线符号对象
var lineSymbol = map.CreateSymbol("LineSymbol");//创建符号对象,LineSymbol代表线符号
lineSymbol.AddConfig("Stipple", "-1");//线条类型,-1-实线,1-虚线
lineSymbol.AddConfig("Width", "10");//线宽(0-10)
lineSymbol.AddConfig("Color", "0.82, 0.48, 0, 1.0");//颜色值(RGBA,各值取值范围0-1之间)
//2.创建面样式对象
var polygonStyle = map.CreateStyle("polygonStyle");//创建样式
polygonStyle.AddSymbol("PolygonSymbol", polygonSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
polygonStyle.AddSymbol("LineSymbol", lineSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
//3.创建面挤出符号对象
var polygonExtrusionSymbol = map.CreateSymbol("PolygonExtrusionSymbol");//创建符号对象,PolygonExtrusionSymbol代表面挤出符号
polygonExtrusionSymbol.AddConfig("HeightExpression", "[LS]");//挤出高度。[]代表以属性字段的值作为挤出高度,让不同要素有不同高度
polygonExtrusionSymbol.AddConfig("BuildingStyleName", "polygonStyle");//挤出体块样式名称,第二参数必须与面样式对象名称一致
//5.创建挤出样式对象
var extruStyle = map.CreateStyle("extruStyle");//创建样式
extruStyle.AddSymbol("PolygonExtrusionSymbol", polygonExtrusionSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
extruStyle.AddFilterName("ExtrudeGeometryTileFilter");//添加构建器名称.挤出几何体瓦片构建器为:ExtrudeGeometryTileFilter
//6.创建样式表对象
var styleSheet = map.CreateStyleSheet();//创建样式表
styleSheet.AddStyle(polygonStyle.GetConfig());//将样式对象配置添加至样式表
styleSheet.AddStyle(extruStyle.GetConfig());//将样式对象配置添加至样式表
//7.创建并添加图层对象
var tlo = map.CreateLayerOptions("ogrlayer");//创建图层配置对象,名称任意
tlo.AddConfig("LayerOptionsName", "FeatureModelLayerOptions");//图层配置对象名称, FeatureModelLayerOptions代表矢量数据配置
tlo.AddConfig("DataSourceTypeName", "fmgeomtile");//数据源类型,代表瓦片化加载插件
tlo.AddConfig("FeatureSourceType", "ogr");//要素数据源类型,本地数据为ogr
tlo.AddConfig("Driver", "ESRI Shapefile");//ogr数据的解析驱动
tlo.AddConfig("IsLighted", "false");//是否开启默认灯光
tlo.AddConfig("Url", gShpPolygonPath);//数据路径
tlo.AddConfig("LiftUp","10" );//图层抬升高度,正值为抬高,负值为降低
tlo.AddConfig("MinRange", "0");//数据最小显示范围
tlo.AddConfig("MaxRange", "10000");//数据的最大显示范围,必须大于最小显示范围
tlo.AddConfig("TileSize", "1000");//瓦片大小,根据最大显示范围设置,一般为MaxRange的1/10左右
tlo.AddConfig("IsAutoTileSize", "false");//是否自动计算瓦片大小,默认为false
tlo.AddConfig("StyleSheet", styleSheet.GetConfig());//将样式表配置添加至图层配置对象
shpLayer = map.CreateLayer("FeatureModelLayer", tlo);//创建矢量图层,第一项参数为FeatureModelLayer
map.AddLayer(shpLayer);//添加图层
shpLayer.Locate();//图层定位
}
C++调用
BaseObjectCOMLib::ILayerObjectPtr shpLayer;//矢量图层对象
//加载面挤出符号化(roof/wall)
void Cf0c3VectorSymbolDlg::LoadExtruDiffPolygonShp()
{
//1.创建墙壁面符号对象
ConfigOptionsCOMLib::ISymbolObjectPtr wallPolygonSymbol = map->CreateSymbol("PolygonSymbol");//创建符号对象,PolygonSymbol代表面符号
wallPolygonSymbol->AddConfig("Color", "0.98, 0.51, 0.27, 1");//颜色值(RGBA,各值取值范围0-1之间)
//2.创建墙壁面样式对象
ConfigOptionsCOMLib::IStylePtr wallPolygonStyle = map->CreateStyle("wallPolygonStyle");//创建样式
wallPolygonStyle->AddSymbol("PolygonSymbol", wallPolygonSymbol->GetConfig());//将符号对象添加到样式,第一参数为符号类型
//3.创建屋顶面符号对象
ConfigOptionsCOMLib::ISymbolObjectPtr roofPolygonSymbol = map->CreateSymbol("PolygonSymbol");//创建符号对象,PolygonSymbol代表面符号
roofPolygonSymbol->AddConfig("Color", "0.86, 0.92, 0.33, 0.8");//颜色值(RGBA,各值取值范围0-1之间)
//4.创建屋顶面样式对象
ConfigOptionsCOMLib::IStylePtr roofPolygonStyle = map->CreateStyle("roofPolygonStyle");//创建样式
roofPolygonStyle->AddSymbol("PolygonSymbol", roofPolygonSymbol->GetConfig());//将符号对象添加到样式,第一参数为符号类型
//5.创建面挤出符号对象
ConfigOptionsCOMLib::ISymbolObjectPtr polygonExtrusionSymbol = map->CreateSymbol("PolygonExtrusionSymbol");//创建符号对象,PolygonExtrusionSymbol代表面挤出符号
polygonExtrusionSymbol->AddConfig("HeightExpression", "[LS]");//挤出高度。[]代表以属性字段的值作为挤出高度,让不同要素有不同高度
polygonExtrusionSymbol->AddConfig("RoofStyleName", "roofPolygonStyle");//拉伸体块屋顶样式
polygonExtrusionSymbol->AddConfig("WallStyleName", "wallPolygonStyle");//拉伸体块墙体样式
//6.创建挤出样式对象
ConfigOptionsCOMLib::IStylePtr extruStyle = map->CreateStyle("extruStyle");//创建样式
extruStyle->AddSymbol("PolygonExtrusionSymbol", polygonExtrusionSymbol->GetConfig());//将符号对象添加到样式,第一参数为符号类型
extruStyle->AddFilterName("ExtrudeGeometryTileFilter");//添加构建器名称.挤出几何体瓦片构建器为:ExtrudeGeometryTileFilter
//7.创建样式表对象
ConfigOptionsCOMLib::IStyleSheetPtr styleSheet = map->CreateStyleSheet();//创建样式表
styleSheet->AddStyle(wallPolygonStyle->GetConfig());//将墙体样式配置添加至样式表
styleSheet->AddStyle(roofPolygonStyle->GetConfig());//将屋顶样式配置添加至样式表
styleSheet->AddStyle(extruStyle->GetConfig());//将挤出面样式配置添加至样式表
//8.创建并添加图层对象
shpLayer = loadShpLayer(ShpPolygonPath, "15.3", styleSheet, true, "true");
}
//面挤出纹理符号化(roof/wall)
void Cf0c3VectorSymbolDlg::LoadExtruDiffPolygonWithSkinShp()
{
std::string texUrl = "..\\data\\Other\\images\\TextureGif.gif";//图片路径
std::string reslibName = "Library";
//1.创建表面符号对象
ConfigOptionsCOMLib::ISymbolObjectPtr skinSymbol = map->CreateSymbol("SkinSymbol");//创建符号对象,SkinSymbol代表纹理符号
skinSymbol->AddConfig("SkinName", "SkinSymbol");//资源名称
skinSymbol->AddConfig("LibraryName", reslibName.c_str());//资源库名称
//2.创建表面样式对象
ConfigOptionsCOMLib::IStylePtr skinStyle = map->CreateStyle("skinStyle");//创建样式
skinStyle->AddSymbol("SkinSymbol", skinSymbol->GetConfig());//将符号对象添加到样式,第一参数为符号类型
//3.创建资源对象
ConfigOptionsCOMLib::IResourceObjectPtr res = map->CreateResource("SkinSymbol");//创建资源对象,SkinSymbol代表纹理符号资源
res->AddConfig("SkinName", "SkinSymbol");//纹理资源名称,该名称必须与纹理符号的名称匹配
res->AddConfig("image_url", texUrl.c_str());//纹理资源路径
res->AddConfig("image_width", "256");//纹理宽度
res->AddConfig("image_height", "256");//纹理高度
res->AddConfig("tiled", "true");//纹理贴图是否瓦片化显示
//4.创建资源库对象
BaseObjectCOMLib::IResourceLibraryPtr reslib = map->CreateResourceLibrary(reslibName.c_str());//创建资源库,名称和纹理符号配置LibraryName设置的名称对应
reslib->AddResource(res);//将资源添加至资源库
//5.创建面挤出符号对象
ConfigOptionsCOMLib::ISymbolObjectPtr polygonExtrusionSymbol = map->CreateSymbol("PolygonExtrusionSymbol");//创建符号对象,PolygonExtrusionSymbol代表面挤出符号
polygonExtrusionSymbol->AddConfig("HeightExpression", "[LS]");//挤出高度。[]代表以属性字段的值作为挤出高度,让不同要素有不同高度
polygonExtrusionSymbol->AddConfig("RoofStyleName", "skinStyle");//拉伸体块屋顶样式
polygonExtrusionSymbol->AddConfig("WallStyleName", "skinStyle");//拉伸体块墙体样式
//6.创建挤出样式对象
ConfigOptionsCOMLib::IStylePtr extruStyle = map->CreateStyle("extruStyle");//创建样式
extruStyle->AddSymbol("PolygonExtrusionSymbol", polygonExtrusionSymbol->GetConfig());//将符号对象添加到样式,第一参数为符号类型
extruStyle->AddFilterName("ExtrudeGeometryTileFilter");//添加构建器名称.挤出几何体瓦片构建器为:ExtrudeGeometryTileFilter
//7.创建样式表对象
ConfigOptionsCOMLib::IStyleSheetPtr styleSheet = map->CreateStyleSheet();//创建样式表
styleSheet->AddStyle(skinStyle->GetConfig());//将墙体样式配置添加至样式表
styleSheet->AddStyle(extruStyle->GetConfig());//将挤出面样式配置添加至样式表
styleSheet->AddResLib(reslib->GetConfig());//将资源库对象配置添加至样式表
//8.创建并添加图层对象
shpLayer = loadShpLayer(ShpPolygonPath, "15.3", styleSheet, true, "true");
}
//面挤出符号化(单个)
void Cf0c3VectorSymbolDlg::LoadPolygonGeometryFilterShp()
{
//1.创建面符号对象
ConfigOptionsCOMLib::ISymbolObjectPtr polygonSymbol = map->CreateSymbol("PolygonSymbol");//创建符号对象,PolygonSymbol代表面符号
polygonSymbol->AddConfig("Color", "0.13, 0.77, 0.93, 0.5");//颜色值(RGBA,各值取值范围0-1之间)
//1.2.创建线符号对象
ConfigOptionsCOMLib::ISymbolObjectPtr lineSymbol = map->CreateSymbol("LineSymbol");//创建符号对象,LineSymbol代表线符号
lineSymbol->AddConfig("Stipple", "-1");//线条类型,-1-实线,1-虚线
lineSymbol->AddConfig("Width", "10");//线宽(0-10)
lineSymbol->AddConfig("Color", "0.82, 0.48, 0, 1.0");//颜色值(RGBA,各值取值范围0-1之间)
//2.创建面样式对象
ConfigOptionsCOMLib::IStylePtr polygonStyle = map->CreateStyle("polygonStyle");//创建样式
polygonStyle->AddSymbol("PolygonSymbol", polygonSymbol->GetConfig());//将符号对象添加到样式,第一参数为符号类型
polygonStyle->AddSymbol("LineSymbol", lineSymbol->GetConfig());//将符号对象添加到样式,第一参数为符号类型
//3.创建面挤出符号对象
ConfigOptionsCOMLib::ISymbolObjectPtr polygonExtrusionSymbol = map->CreateSymbol("PolygonExtrusionSymbol");//创建符号对象,PolygonExtrusionSymbol代表面挤出符号
polygonExtrusionSymbol->AddConfig("HeightExpression", "[LS]");//挤出高度。[]代表以属性字段的值作为挤出高度,让不同要素有不同高度
polygonExtrusionSymbol->AddConfig("BuildingStyleName", "polygonStyle");//挤出体块样式名称,第二参数必须与面样式对象名称一致
//5.创建挤出样式对象
ConfigOptionsCOMLib::IStylePtr extruStyle = map->CreateStyle("extruStyle");//创建样式
extruStyle->AddSymbol("PolygonExtrusionSymbol", polygonExtrusionSymbol->GetConfig());//将符号对象添加到样式,第一参数为符号类型
extruStyle->AddFilterName("ExtrudeGeometryTileFilter");//添加构建器名称.挤出几何体瓦片构建器为:ExtrudeGeometryTileFilter
//6.创建样式表对象
ConfigOptionsCOMLib::IStyleSheetPtr styleSheet = map->CreateStyleSheet();//创建样式表
styleSheet->AddStyle(polygonStyle->GetConfig());//将样式对象配置添加至样式表
styleSheet->AddStyle(extruStyle->GetConfig());//将样式对象配置添加至样式表
//7.创建并添加图层对象
shpLayer = loadShpLayer(ShpPolygonPath, "15.3", styleSheet, true, "true");
}
//加载矢量图层
BaseObjectCOMLib::ILayerObjectPtr Cf0c3VectorSymbolDlg::loadShpLayer(std::string url,std::string liftUp, ConfigOptionsCOMLib::IStyleSheetPtr styleSheetStr, bool isLocate, std::string isLight)
{
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions("shp"); //创建图层配置对象,名称任意
tlo->AddConfig("LayerOptionsName", "FeatureModelLayerOptions");//图层配置对象名称, FeatureModelLayerOptions代表矢量数据配置
tlo->AddConfig("DataSourceTypeName", "fmgeomtile");//数据源类型,代表瓦片化加载插件
tlo->AddConfig("FeatureSourceType", "ogr");//要素数据源类型,本地数据为ogr
tlo->AddConfig("Driver", "ESRI Shapefile");//ogr数据的解析驱动
//tlo->AddConfig("BuildSpatialIndex", "true");//是否建立空间索引
tlo->AddConfig("IsLighted", isLight.c_str());
tlo->AddConfig("Url", url.c_str());//数据路径
tlo->AddConfig("LiftUp", liftUp.c_str());//图层抬升高度,正值为抬高,负值为降低
tlo->AddConfig("MinRange", "0");//数据最小显示范围
tlo->AddConfig("MaxRange", "100000");//数据的最大显示范围,必须大于最小显示范围
tlo->AddConfig("TileSize", "1000");//瓦片大小,根据最大显示范围设置,一般为MaxRange的1/10左右
tlo->AddConfig("StyleSheet", styleSheetStr->GetConfig());//将样式表配置添加至图层配置对象
BaseObjectCOMLib::ILayerObjectPtr ogrlayer = map->CreateLayer("FeatureModelLayer", tlo);//创建矢量图层,第一项参数为FeatureModelLayer
map->AddLayer(ogrlayer);//添加图层
if(isLocate){
ogrlayer->Locate();//图层定位
}
return ogrlayer;
}
C#调用
string gShpPolygonPath = " E:\\测试数据\\Vector\\polygon.shp";
ILayerObject shpLayer = null;
//********************************
// 面挤出符号化(roof/wall),这种方式是将体块的侧面(墙面)和顶面(屋顶)分开处理的
//********************************
private void LoadExtruDiffPolygonShp()
{
//1.创建墙壁面符号对象
ISymbolObject wallPolygonSymbol = map.CreateSymbol("PolygonSymbol");//创建符号对象,PolygonSymbol代表面符号
wallPolygonSymbol.AddConfig("Color", "0.98, 0.51, 0.27, 1");//颜色值(RGBA,各值取值范围0-1之间)
//2.创建墙壁面样式对象
IStyle wallPolygonStyle = map.CreateStyle("wallPolygonStyle");//创建样式
wallPolygonStyle.AddSymbol("PolygonSymbol", wallPolygonSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
//3.创建屋顶面符号对象
ISymbolObject roofPolygonSymbol = map.CreateSymbol("PolygonSymbol");//创建符号对象,PolygonSymbol代表面符号
roofPolygonSymbol.AddConfig("Color", "0.86, 0.92, 0.33, 0.8");//颜色值(RGBA,各值取值范围0-1之间)
//4.创建屋顶面样式对象
IStyle roofPolygonStyle = map.CreateStyle("roofPolygonStyle");//创建样式
roofPolygonStyle.AddSymbol("PolygonSymbol", roofPolygonSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
//5.创建面挤出符号对象
ISymbolObject polygonExtrusionSymbol = map.CreateSymbol("PolygonExtrusionSymbol");//创建符号对象,PolygonExtrusionSymbol代表面挤出符号
polygonExtrusionSymbol.AddConfig("HeightExpression", "[LS]");//挤出高度。[]代表以属性字段的值作为挤出高度,让不同要素有不同高度
polygonExtrusionSymbol.AddConfig("RoofStyleName", "roofPolygonStyle");//拉伸体块屋顶样式
polygonExtrusionSymbol.AddConfig("WallStyleName", "wallPolygonStyle");//拉伸体块墙体样式
//6.创建挤出样式对象
IStyle extruStyle = map.CreateStyle("extruStyle");//创建样式
extruStyle.AddSymbol("PolygonExtrusionSymbol", polygonExtrusionSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
extruStyle.AddFilterName("ExtrudeGeometryTileFilter");//添加构建器名称.挤出几何体瓦片构建器为:ExtrudeGeometryTileFilter
//7.创建样式表对象
IStyleSheet styleSheet = map.CreateStyleSheet();//创建样式表
styleSheet.AddStyle(wallPolygonStyle.GetConfig());//将墙体样式配置添加至样式表
styleSheet.AddStyle(roofPolygonStyle.GetConfig());//将屋顶样式配置添加至样式表
styleSheet.AddStyle(extruStyle.GetConfig());//将挤出面样式配置添加至样式表
//8.创建并添加图层对象
var tlo = map.CreateLayerOptions("ogrlayer");//创建图层配置对象,名称任意
tlo.AddConfig("LayerOptionsName", "FeatureModelLayerOptions");//图层配置对象名称, FeatureModelLayerOptions代表矢量数据配置
tlo.AddConfig("DataSourceTypeName", "fmgeomtile");//数据源类型,代表瓦片化加载插件
tlo.AddConfig("FeatureSourceType", "ogr");//要素数据源类型,本地数据为ogr
tlo.AddConfig("Driver", "ESRI Shapefile");//ogr数据的解析驱动
tlo.AddConfig("IsLighted", "false");//是否开启默认灯光
tlo.AddConfig("Url", gShpPolygonPath);//数据路径
tlo.AddConfig("LiftUp","10" );//图层抬升高度,正值为抬高,负值为降低
tlo.AddConfig("MinRange", "0");//数据最小显示范围
tlo.AddConfig("MaxRange", "10000");//数据的最大显示范围,必须大于最小显示范围
tlo.AddConfig("TileSize", "1000");//瓦片大小,根据最大显示范围设置,一般为MaxRange的1/10左右
tlo.AddConfig("IsAutoTileSize", "false");//是否自动计算瓦片大小,默认为false
tlo.AddConfig("StyleSheet", styleSheet.GetConfig());//将样式表配置添加至图层配置对象
shpLayer = map.CreateLayer("FeatureModelLayer", tlo);//创建矢量图层,第一项参数为FeatureModelLayer
map.AddLayer(shpLayer);//添加图层
shpLayer.Locate();//图层定位
}
//********************************
// 面挤出纹理符号化(roof/wall),这种方式是将体块的侧面(墙面)和顶面(屋顶)分开处理的
//********************************
private void LoadExtruDiffPolygonWithSkinShp()
{
string texUrl = "E:\\测试数\\Other\\images\\TextureGif.gif";//纹理图片地址
string reslibName = "Library";
//1.创建表面符号对象
ISymbolObject skinSymbol = map.CreateSymbol("SkinSymbol");//创建符号对象,SkinSymbol代表纹理符号
skinSymbol.AddConfig("SkinName", "SkinSymbol");//资源名称
skinSymbol.AddConfig("LibraryName", reslibName);//资源库名称
//2.创建表面样式对象
IStyle skinStyle = map.CreateStyle("skinStyle");//创建样式
skinStyle.AddSymbol("SkinSymbol", skinSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
//3.创建资源对象
IResourceObject res = map.CreateResource("SkinSymbol");//创建资源对象,SkinSymbol代表纹理符号资源
res.AddConfig("SkinName", "SkinSymbol");//纹理资源名称,该名称必须与纹理符号的名称匹配
res.AddConfig("image_url", texUrl);//纹理资源路径
res.AddConfig("image_width", "256");//纹理宽度
res.AddConfig("image_height", "256");//纹理高度
res.AddConfig("tiled", "true");//纹理贴图是否瓦片化显示
//4.创建资源库对象
IResourceLibrary reslib = map.CreateResourceLibrary(reslibName);//创建资源库,名称和纹理符号配置LibraryName设置的名称对应
reslib.AddResource(res);//将资源添加至资源库
//5.创建面挤出符号对象
ISymbolObject polygonExtrusionSymbol = map.CreateSymbol("PolygonExtrusionSymbol");//创建符号对象,PolygonExtrusionSymbol代表面挤出符号
polygonExtrusionSymbol.AddConfig("HeightExpression", "[LS]");//挤出高度。[]代表以属性字段的值作为挤出高度,让不同要素有不同高度
polygonExtrusionSymbol.AddConfig("RoofStyleName", "skinStyle");//拉伸体块屋顶样式
polygonExtrusionSymbol.AddConfig("WallStyleName", "skinStyle");//拉伸体块墙体样式
//6.创建挤出样式对象
IStyle extruStyle = map.CreateStyle("extruStyle");//创建样式
extruStyle.AddSymbol("PolygonExtrusionSymbol", polygonExtrusionSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
extruStyle.AddFilterName("ExtrudeGeometryTileFilter");//添加构建器名称.挤出几何体瓦片构建器为:ExtrudeGeometryTileFilter
//7.创建样式表对象
IStyleSheet styleSheet = map.CreateStyleSheet();//创建样式表
styleSheet.AddStyle(skinStyle.GetConfig());//将墙体样式配置添加至样式表
styleSheet.AddStyle(extruStyle.GetConfig());//将挤出面样式配置添加至样式表
styleSheet.AddResLib(reslib.GetConfig());//将资源库对象配置添加至样式表
//8.创建并添加图层对象
var tlo = map.CreateLayerOptions("ogrlayer");//创建图层配置对象,名称任意
tlo.AddConfig("LayerOptionsName", "FeatureModelLayerOptions");//图层配置对象名称, FeatureModelLayerOptions代表矢量数据配置
tlo.AddConfig("DataSourceTypeName", "fmgeomtile");//数据源类型,代表瓦片化加载插件
tlo.AddConfig("FeatureSourceType", "ogr");//要素数据源类型,本地数据为ogr
tlo.AddConfig("Driver", "ESRI Shapefile");//ogr数据的解析驱动
tlo.AddConfig("IsLighted", "false");//是否开启默认灯光
tlo.AddConfig("Url", gShpPolygonPath);//数据路径
tlo.AddConfig("LiftUp","10" );//图层抬升高度,正值为抬高,负值为降低
tlo.AddConfig("MinRange", "0");//数据最小显示范围
tlo.AddConfig("MaxRange", "10000");//数据的最大显示范围,必须大于最小显示范围
tlo.AddConfig("TileSize", "1000");//瓦片大小,根据最大显示范围设置,一般为MaxRange的1/10左右
tlo.AddConfig("IsAutoTileSize", "false");//是否自动计算瓦片大小,默认为false
tlo.AddConfig("StyleSheet", styleSheet.GetConfig());//将样式表配置添加至图层配置对象
shpLayer = map.CreateLayer("FeatureModelLayer", tlo);//创建矢量图层,第一项参数为FeatureModelLayer
map.AddLayer(shpLayer);//添加图层
shpLayer.Locate();//图层定位
}
//********************************
// 面挤出符号化(单个)—该种模式将面要素单个进行挤出
//********************************
private void LoadPolygonGeometryFilterShp()
{
//1.创建面符号对象
ISymbolObject polygonSymbol = map.CreateSymbol("PolygonSymbol");//创建符号对象,PolygonSymbol代表面符号
polygonSymbol.AddConfig("Color", "0.13, 0.77, 0.93, 0.5");//颜色值(RGBA,各值取值范围0-1之间)
//1.2.创建线符号对象
ISymbolObject lineSymbol = map.CreateSymbol("LineSymbol");//创建符号对象,LineSymbol代表线符号
lineSymbol.AddConfig("Stipple", "-1");//线条类型,-1-实线,1-虚线
lineSymbol.AddConfig("Width", "10");//线宽(0-10)
lineSymbol.AddConfig("Color", "0.82, 0.48, 0, 1.0");//颜色值(RGBA,各值取值范围0-1之间)
//2.创建面样式对象
IStyle polygonStyle = map.CreateStyle("polygonStyle");//创建样式
polygonStyle.AddSymbol("PolygonSymbol", polygonSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
polygonStyle.AddSymbol("LineSymbol", lineSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
//3.创建面挤出符号对象
ISymbolObject polygonExtrusionSymbol = map.CreateSymbol("PolygonExtrusionSymbol");//创建符号对象,PolygonExtrusionSymbol代表面挤出符号
polygonExtrusionSymbol.AddConfig("HeightExpression", "[LS]");//挤出高度。[]代表以属性字段的值作为挤出高度,让不同要素有不同高度
polygonExtrusionSymbol.AddConfig("BuildingStyleName", "polygonStyle");//挤出体块样式名称,第二参数必须与面样式对象名称一致
//5.创建挤出样式对象
IStyle extruStyle = map.CreateStyle("extruStyle");//创建样式
extruStyle.AddSymbol("PolygonExtrusionSymbol", polygonExtrusionSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
extruStyle.AddFilterName("ExtrudeGeometryTileFilter");//添加构建器名称.挤出几何体瓦片构建器为:ExtrudeGeometryTileFilter
//6.创建样式表对象
IStyleSheet styleSheet = map.CreateStyleSheet();//创建样式表
styleSheet.AddStyle(polygonStyle.GetConfig());//将样式对象配置添加至样式表
styleSheet.AddStyle(extruStyle.GetConfig());//将样式对象配置添加至样式表
//7.创建并添加图层对象
var tlo = map.CreateLayerOptions("ogrlayer");//创建图层配置对象,名称任意
tlo.AddConfig("LayerOptionsName", "FeatureModelLayerOptions");//图层配置对象名称, FeatureModelLayerOptions代表矢量数据配置
tlo.AddConfig("DataSourceTypeName", "fmgeomtile");//数据源类型,代表瓦片化加载插件
tlo.AddConfig("FeatureSourceType", "ogr");//要素数据源类型,本地数据为ogr
tlo.AddConfig("Driver", "ESRI Shapefile");//ogr数据的解析驱动
tlo.AddConfig("IsLighted", "false");//是否开启默认灯光
tlo.AddConfig("Url", gShpPolygonPath);//数据路径
tlo.AddConfig("LiftUp","10" );//图层抬升高度,正值为抬高,负值为降低
tlo.AddConfig("MinRange", "0");//数据最小显示范围
tlo.AddConfig("MaxRange", "10000");//数据的最大显示范围,必须大于最小显示范围
tlo.AddConfig("TileSize", "1000");//瓦片大小,根据最大显示范围设置,一般为MaxRange的1/10左右
tlo.AddConfig("IsAutoTileSize", "false");//是否自动计算瓦片大小,默认为false
tlo.AddConfig("StyleSheet", styleSheet.GetConfig());//将样式表配置添加至图层配置对象
shpLayer = map.CreateLayer("FeatureModelLayer", tlo);//创建矢量图层,第一项参数为FeatureModelLayer
map.AddLayer(shpLayer);//添加图层
shpLayer.Locate();//图层定位
}
10.缓冲区符号
缓冲区符号可配置的参数如下表所示:
配置项 | 配置说明 | 值类型 | 备注 |
---|---|---|---|
DrawMode | 绘制模式 | NumericExpression | 缓冲区图形的绘制模式。0-正面绘制;1-反面绘制;2-双面绘制。默认0 |
BufferDistance | 缓冲区宽度 | NumericExpression | 围绕关键点向外缓冲宽度。默认0.0 |
BufferColor | 缓冲区颜色 | R,G,B,A | 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0" |
BufferCapStyle | 末端类型 | NumericExpression | 线缓冲区末端形状。1-三角形;2-圆形;3-矩形。默认2 |
IsSingleSide | 是否单侧绘制 | bool | 线缓冲区是否只绘制一个侧面。true-单侧;false-两侧。 默认false |
IsLeftSide | 是否左侧绘制 | bool | 线缓冲区是否向左侧绘制。当IsSingleSide =true时才生效。 true-左侧;false-右侧。 默认false |
对应的样式对象需要调用AddSymbol()添加缓冲区符号类型(BufferSymbol)和AddFilterName()添加缓冲区构建器(BufferFilter)。
在使用缓冲区符号时,需要注意:
- 生成缓冲区时会根据数据本身类型生成点、线、面缓冲区。
- 当生成线缓冲区时,
BufferCapStyle
、IsSingleSide
、IsLeftSide
配置才会生效。
代码调用示例
Javascript调用
//********************************
// 缓冲符号化
//********************************
var gShpLinePath= " E:\\测试数据\\Vector\\line.shp";
var shpLayer = null;
function loadBufferSymbol(){
//此例拿线矢量做例子,点、面类型用法一致
//1.创建缓冲符号对象
var bufferSymbol = map.CreateSymbol("BufferSymbol");//创建符号对象,BufferSymbol代表缓冲区符号
bufferSymbol.AddConfig("DrawMode", "1");//缓冲区图形绘制模式,0_正面绘制;1_反面绘制;2_双面绘制。
bufferSymbol.AddConfig("BufferDistance", "10");//缓冲区半径
bufferSymbol.AddConfig("BufferColor", "1.0,0.0,0.0,1.0");//缓冲区颜色
bufferSymbol.AddConfig("BufferCapStyle", "2");//缓冲区末端形状。1:三角形;2:圆形;3:矩形,只对线缓冲区有效
bufferSymbol.AddConfig("IsSingleSide", "false");//缓冲区是否单侧绘制,只对线缓冲区有效
bufferSymbol.AddConfig("IsLeftSide", "false");//缓冲区是否左侧绘制,只对线缓冲区有效
bufferSymbol.AddConfig("BufferJoinStyle", "1");//线缓冲区转角类型,1:圆角,2:斜角,3:平角,只对线缓冲区有效
bufferSymbol.AddConfig("BufferAngle", "0");//缓冲区角度,只对线缓冲区有效
//2.创建样式对象
var lineStyle = map.CreateStyle("BufferStyle");
lineStyle.AddSymbol("BufferSymbol", bufferSymbol.GetConfig());//将符号配置添加到该样式,第一参必须为PolygonSymbol字符串
lineStyle.AddFilterName("BufferFilter");//添加构建器名称.缓冲区构建器为:BufferFilter
//3.创建样式表对象
var styleSheet = map.CreateStyleSheet();//创建样式表
styleSheet.AddStyle(lineStyle.GetConfig());//将样式对象配置添加至样式表
//4.创建并添加图层对象
var tlo = map.CreateLayerOptions("ogrlayer");//创建图层配置对象,名称任意
tlo.AddConfig("LayerOptionsName", "FeatureModelLayerOptions");//图层配置对象名称, FeatureModelLayerOptions代表矢量数据配置
tlo.AddConfig("DataSourceTypeName", "fmgeomtile");//数据源类型,代表瓦片化加载插件
tlo.AddConfig("FeatureSourceType", "ogr");//要素数据源类型,本地数据为ogr
tlo.AddConfig("Driver", "ESRI Shapefile");//ogr数据的解析驱动
tlo.AddConfig("Url", gShpLinePath);//数据路径
tlo.AddConfig("LiftUp", "0");//图层抬升高度,正值为抬高,负值为降低
tlo.AddConfig("MinRange", "0");//数据最小显示范围
tlo.AddConfig("MaxRange", "100000");//数据的最大显示范围,必须大于最小显示范围
tlo.AddConfig("TileSize", "500");//瓦片大小,根据最大显示范围设置,一般为MaxRange的1/10左右
tlo.AddConfig("StyleSheet", styleSheet.GetConfig());//将样式表配置添加至图层配置对象
shpLayer = map.CreateLayer("FeatureModelLayer", tlo);//创建矢量图层,第一项参数为FeatureModelLayer
map.AddLayer(shpLayer);//添加图层
shpLayer.Locate();//图层定位
}
C++调用
BaseObjectCOMLib::ILayerObjectPtr shpLayer;//矢量图层对象
void Cf0c3VectorSymbolDlg::loadBufferSymbol()
{
//此例拿线矢量做例子,点、面类型用法一致
//1.创建缓冲符号对象
ConfigOptionsCOMLib::ISymbolObjectPtr bufferSymbol = map->CreateSymbol("BufferSymbol");//创建符号对象,BufferSymbol代表缓冲区符号
bufferSymbol->AddConfig("DrawableType", drawType.c_str());//矢量数据类型,0-点;1-线;2-面
bufferSymbol->AddConfig("DrawMode", "0");//缓冲区图形绘制模式,0_正面绘制;1_反面绘制;2_双面绘制。
bufferSymbol->AddConfig("BufferDistance", "10");//缓冲区半径
bufferSymbol->AddConfig("BufferColor", "1.0,0.0,0.0,1.0");//缓冲区颜色
bufferSymbol->AddConfig("BufferCapStyle", "2");//缓冲区末端形状。1:三角形;2:圆形;3:矩形,只对线缓冲区有效
bufferSymbol->AddConfig("IsSingleSide", "false");//缓冲区是否单侧绘制,只对线缓冲区有效
bufferSymbol->AddConfig("IsLeftSide", "false");//缓冲区是否左侧绘制,只对线缓冲区有效
//2.创建样式对象
ConfigOptionsCOMLib::IStylePtr lineStyle = map->CreateStyle("lineStyle");
lineStyle->AddSymbol("BufferSymbol", bufferSymbol->GetConfig());//将符号配置添加到该样式,第一参必须为PolygonSymbol字符串
lineStyle->AddFilterName("BufferFilter");//添加构建器名称.缓冲区构建器为:BufferFilter
//3.创建样式表对象
ConfigOptionsCOMLib::IStyleSheetPtr styleSheet = map->CreateStyleSheet();//创建样式表
styleSheet->AddStyle(lineStyle->GetConfig());//将样式对象配置添加至样式表
//4.创建并添加图层对象
shpLayer = loadShpLayer(ShpLinePath, "15.6", styleSheet, true, "true");
}
//加载矢量图层
BaseObjectCOMLib::ILayerObjectPtr Cf0c3VectorSymbolDlg::loadShpLayer(std::string url,std::string liftUp, ConfigOptionsCOMLib::IStyleSheetPtr styleSheetStr, bool isLocate, std::string isLight)
{
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions("shp"); //创建图层配置对象,名称任意
tlo->AddConfig("LayerOptionsName", "FeatureModelLayerOptions");//图层配置对象名称, FeatureModelLayerOptions代表矢量数据配置
tlo->AddConfig("DataSourceTypeName", "fmgeomtile");//数据源类型,代表瓦片化加载插件
tlo->AddConfig("FeatureSourceType", "ogr");//要素数据源类型,本地数据为ogr
tlo->AddConfig("Driver", "ESRI Shapefile");//ogr数据的解析驱动
//tlo->AddConfig("BuildSpatialIndex", "true");//是否建立空间索引
tlo->AddConfig("IsLighted", isLight.c_str());
tlo->AddConfig("Url", url.c_str());//数据路径
tlo->AddConfig("LiftUp", liftUp.c_str());//图层抬升高度,正值为抬高,负值为降低
tlo->AddConfig("MinRange", "0");//数据最小显示范围
tlo->AddConfig("MaxRange", "100000");//数据的最大显示范围,必须大于最小显示范围
tlo->AddConfig("TileSize", "1000");//瓦片大小,根据最大显示范围设置,一般为MaxRange的1/10左右
tlo->AddConfig("StyleSheet", styleSheetStr->GetConfig());//将样式表配置添加至图层配置对象
BaseObjectCOMLib::ILayerObjectPtr ogrlayer = map->CreateLayer("FeatureModelLayer", tlo);//创建矢量图层,第一项参数为FeatureModelLayer
map->AddLayer(ogrlayer);//添加图层
if(isLocate){
ogrlayer->Locate();//图层定位
}
return ogrlayer;
}
C#调用
string gShpLinePath= " E:\\测试数据\\Vector\\line.shp";
ILayerObject shpLayer = null;
//缓冲符号化
private void loadBufferSymbol()
{
//此例拿线矢量做例子,点、面类型用法一致
//1.创建缓冲符号对象
string drawType = "1";
ISymbolObject bufferSymbol = map.CreateSymbol("BufferSymbol");//创建符号对象,BufferSymbol代表缓冲区符号
bufferSymbol.AddConfig("DrawMode", "0");//缓冲区图形绘制模式,0_正面绘制;1_反面绘制;2_双面绘制。
bufferSymbol.AddConfig("BufferDistance", "10");//缓冲区半径
bufferSymbol.AddConfig("BufferColor", "1.0,0.0,0.0,1.0");//缓冲区颜色
bufferSymbol.AddConfig("BufferCapStyle", "2");//缓冲区末端形状。1:三角形;2:圆形;3:矩形,只对线缓冲区有效
bufferSymbol.AddConfig("IsSingleSide", "false");//缓冲区是否单侧绘制,只对线缓冲区有效
bufferSymbol.AddConfig("IsLeftSide", "false");//缓冲区是否左侧绘制,只对线缓冲区有效
//2.创建样式对象
IStyle lineStyle = map.CreateStyle("BufferStyle");
lineStyle.AddSymbol("BufferSymbol", bufferSymbol.GetConfig());//将符号配置添加到该样式,第一参必须为PolygonSymbol字符串
lineStyle.AddFilterName("BufferFilter");//添加构建器名称.缓冲区构建器为:BufferFilter
//3.创建样式表对象
IStyleSheet styleSheet = map.CreateStyleSheet();//创建样式表
styleSheet.AddStyle(lineStyle.GetConfig());//将样式对象配置添加至样式表
//4.创建并添加图层对象
var tlo = map.CreateLayerOptions("ogrlayer");//创建图层配置对象,名称任意
tlo.AddConfig("LayerOptionsName", "FeatureModelLayerOptions");//图层配置对象名称, FeatureModelLayerOptions代表矢量数据配置
tlo.AddConfig("DataSourceTypeName", "fmgeomtile");//数据源类型,代表瓦片化加载插件
tlo.AddConfig("FeatureSourceType", "ogr");//要素数据源类型,本地数据为ogr
tlo.AddConfig("Driver", "ESRI Shapefile");//ogr数据的解析驱动
tlo.AddConfig("Url", gShpLinePath);//数据路径
tlo.AddConfig("LiftUp", "0");//图层抬升高度,正值为抬高,负值为降低
tlo.AddConfig("MinRange", "0");//数据最小显示范围
tlo.AddConfig("MaxRange", "100000");//数据的最大显示范围,必须大于最小显示范围
tlo.AddConfig("TileSize", "500");//瓦片大小,根据最大显示范围设置,一般为MaxRange的1/10左右
tlo.AddConfig("StyleSheet", styleSheet.GetConfig());//将样式表配置添加至图层配置对象
shpLayer = map.CreateLayer("FeatureModelLayer", tlo);//创建矢量图层,第一项参数为FeatureModelLayer
map.AddLayer(shpLayer);//添加图层
shpLayer.Locate();//图层定位
}
11.贴地符号
贴地符号可配置的参数如下表所示:
配置项 | 配置说明 | 值类型 | 备注 |
---|---|---|---|
Clamping | 贴地方式 | string | 设置贴地方式。CLAMP_NONE-不贴地; CLAMP_TO_TERRAIN-仅贴地形。 默认CLAMP_NONE |
Technique | 贴地类型 | string | 使用的贴地类型。TECHNIQUE_MAP-修改要素几何z值; TECHNIQUE_DRAPE-纹理映射贴地。 默认TECHNIQUE_MAP |
Binding | 绑定类型 | string | 顶点绑定类型。BINDING_VERTEX-逐顶点修改; BINDING_CENTROID-以中心点为基准修改。 默认BINDING_VERTEX |
对应的样式对象需要调用AddSymbol()添加缓冲区符号类型(AltitudeSymbol)。
在使用缓冲区符号时,需要注意:
- 贴地符号是不能单独存在的,需要和其他符号配合使用。创建好对象之后加到其他符号所在的样式对象中即可。
- 一般TECHNIQUE_MAP用于点数据贴地,TECHNIQUE_DRAPE用于线和面类型数据贴地。
Binding
配置仅在Technique
为TECHNIQUE_MAP时才起效。它会计算并修改要素每个顶点的几何Z值,BINDING_VERTEX时会计算并修改每个顶点所在位置的地形高程值;BINDING_CENTROID时只需要计算要素中心点所在位置的地形高程值,然后再修改各个顶点的高程值为计算的结果值。因此当要素中包含多个顶点时,BINDING_CENTROID会快于BINDING_VERTEX。
代码调用示例
本示例是面符号化时使用贴地的代码,其他类型符号化+贴地的使用与此类似。
Javascript调用
// 矢量贴地
var gShpPolygonPath = " E:\\测试数据\\Vector\\polygon.shp";
var shpLayer = null;
function loadAltitudeSymbol(){
//1.创建面符号对象
var polygonSymbol = map.CreateSymbol("PolygonSymbol");//创建符号对象,PolygonSymbol代表面符号
polygonSymbol.AddConfig("Color", "0.64, 0.01, 0.97, 0.6");//颜色值(RGBA,各值取值范围0-1之间)
//1.2.创建贴地符号对象
var altitudeSymbol = map.CreateSymbol("AltitudeSymbol");//创建矢量贴地配置项
altitudeSymbol.AddConfig("Clamping", "CLAMP_TO_TERRAIN");//CLAMP_NONE:不贴地; CLAMP_TO_TERRAIN:仅贴地形;
altitudeSymbol.AddConfig("Technique", "TECHNIQUE_DRAPE");//TECHNIQUE_MAP:修改要素几何z值; TECHNIQUE_DRAPE:纹理映射贴地;
altitudeSymbol.AddConfig("Binding", "BINDING_CENTROID");//仅用于TechniqueMode为TECHNIQUE_MAP时 BINDING_VERTEX:逐顶点修改几何; BINDING_CENTROID:将所有几何顶点置为几何中心的位置
//2.创建样式对象
var polygonStyle = map.CreateStyle("Polygon");//创建名称为Polygon的样式,名称任意
polygonStyle.SetName("Polygon");//// 设置别名polygon
polygonStyle.AddSymbol("PolygonSymbol", polygonSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
polygonStyle.AddSymbol("AltitudeSymbol", altitudeSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
polygonStyle.AddFilterName("BuildGeometryTileFilter");//添加构建器名称.几何瓦片化构建器:BuildGeometryTileFilter
//3.创建样式表对象
var styleSheet = map.CreateStyleSheet();//创建样式表
styleSheet.AddStyle(polygonStyle.GetConfig());//将样式配置添加至样式表
//4.创建并添加图层对象
var tlo = map.CreateLayerOptions("ogrlayer");//创建图层配置对象,名称任意
tlo.AddConfig("LayerOptionsName", "FeatureModelLayerOptions");//图层配置对象名称, FeatureModelLayerOptions代表矢量数据配置
tlo.AddConfig("DataSourceTypeName", "fmgeomtile");//数据源类型,代表瓦片化加载插件
tlo.AddConfig("FeatureSourceType", "ogr");//要素数据源类型,本地数据为ogr
tlo.AddConfig("Driver", "ESRI Shapefile");//ogr数据的解析驱动
tlo.AddConfig("Url", gShpPolygonPath);//数据路径
tlo.AddConfig("LiftUp", "0");//图层抬升高度,正值为抬高,负值为降低
tlo.AddConfig("MinRange", "0");//数据最小显示范围
tlo.AddConfig("MaxRange", "100000");//数据的最大显示范围,必须大于最小显示范围
tlo.AddConfig("TileSize", "500");//瓦片大小,根据最大显示范围设置,一般为MaxRange的1/10左右
tlo.AddConfig("StyleSheet", styleSheet.GetConfig());//将样式表配置添加至图层配置对象
shpLayer = map.CreateLayer("FeatureModelLayer", tlo);//创建矢量图层,第一项参数为FeatureModelLayer
map.AddLayer(shpLayer);//添加图层
shpLayer.Locate();//图层定位
}
C++调用
BaseObjectCOMLib::ILayerObjectPtr shpLayer;//矢量图层对象
//矢量贴地
void Cf0c3VectorSymbolDlg::loadAltitudeSymbol()
{
//1.创建面符号对象
ConfigOptionsCOMLib::ISymbolObjectPtr polygonSymbol = map->CreateSymbol("PolygonSymbol");//创建符号对象,PolygonSymbol代表面符号
polygonSymbol->AddConfig("Color", "1.0, 0.0, 0, 1.0");//颜色值(RGBA,各值取值范围0-1之间)
//1.2.创建贴地符号对象
ConfigOptionsCOMLib::ISymbolObjectPtr altitudeSymbol = map->CreateSymbol("AltitudeSymbol");//创建矢量贴地配置项
altitudeSymbol->AddConfig("Clamping", "CLAMP_TO_TERRAIN");//CLAMP_NONE:不贴地; CLAMP_TO_TERRAIN:仅贴地形;
altitudeSymbol->AddConfig("Technique", "TECHNIQUE_DRAPE");//TECHNIQUE_MAP:修改要素几何z值; TECHNIQUE_DRAPE:纹理映射贴地;
altitudeSymbol->AddConfig("Binding", "BINDING_CENTROID");//仅用于TechniqueMode为TECHNIQUE_MAP时 BINDING_VERTEX:逐顶点修改几何; BINDING_CENTROID:将所有几何顶点置为几何中心的位置
//2.创建样式对象
ConfigOptionsCOMLib::IStylePtr polygonStyle = map->CreateStyle("polygonStyle");//创建名称为Polygon的样式,名称任意
polygonStyle->SetName("polygonStyle");//// 设置别名polygon
polygonStyle->AddSymbol("PolygonSymbol", polygonSymbol->GetConfig());//将符号对象添加到样式,第一参数为符号类型
polygonStyle->AddSymbol("AltitudeSymbol", altitudeSymbol->GetConfig());//将符号对象添加到样式,第一参数为符号类型
polygonStyle->AddFilterName("BuildGeometryTileFilter");//添加构建器名称.几何瓦片化构建器:BuildGeometryTileFilter
//3.创建样式表对象
ConfigOptionsCOMLib::IStyleSheetPtr styleSheet = map->CreateStyleSheet();//创建样式表
styleSheet->AddStyle(polygonStyle->GetConfig());//将样式配置添加至样式表
//4.创建并添加图层对象
shpLayer = loadShpLayer(ShpPolygonPath, "0", styleSheet, true, "true");
}
//加载矢量图层
BaseObjectCOMLib::ILayerObjectPtr Cf0c3VectorSymbolDlg::loadShpLayer(std::string url,std::string liftUp, ConfigOptionsCOMLib::IStyleSheetPtr styleSheetStr, bool isLocate, std::string isLight)
{
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions("shp"); //创建图层配置对象,名称任意
tlo->AddConfig("LayerOptionsName", "FeatureModelLayerOptions");//图层配置对象名称, FeatureModelLayerOptions代表矢量数据配置
tlo->AddConfig("DataSourceTypeName", "fmgeomtile");//数据源类型,代表瓦片化加载插件
tlo->AddConfig("FeatureSourceType", "ogr");//要素数据源类型,本地数据为ogr
tlo->AddConfig("Driver", "ESRI Shapefile");//ogr数据的解析驱动
//tlo->AddConfig("BuildSpatialIndex", "true");//是否建立空间索引
tlo->AddConfig("IsLighted", isLight.c_str());
tlo->AddConfig("Url", url.c_str());//数据路径
tlo->AddConfig("LiftUp", liftUp.c_str());//图层抬升高度,正值为抬高,负值为降低
tlo->AddConfig("MinRange", "0");//数据最小显示范围
tlo->AddConfig("MaxRange", "100000");//数据的最大显示范围,必须大于最小显示范围
tlo->AddConfig("TileSize", "1000");//瓦片大小,根据最大显示范围设置,一般为MaxRange的1/10左右
tlo->AddConfig("StyleSheet", styleSheetStr->GetConfig());//将样式表配置添加至图层配置对象
BaseObjectCOMLib::ILayerObjectPtr ogrlayer = map->CreateLayer("FeatureModelLayer", tlo);//创建矢量图层,第一项参数为FeatureModelLayer
map->AddLayer(ogrlayer);//添加图层
if(isLocate){
ogrlayer->Locate();//图层定位
}
return ogrlayer;
}
C#调用
string gShpPolygonPath = " E:\\测试数据\\Vector\\polygon.shp";
ILayerObject shpLayer = null;
//矢量贴地
private void loadAltitudeSymbol()
{
//1.创建面符号对象
ISymbolObject polygonSymbol = map.CreateSymbol("PolygonSymbol");//创建符号对象,PolygonSymbol代表面符号
polygonSymbol.AddConfig("Color", "1.0, 0.0, 0, 1.0");//颜色值(RGBA,各值取值范围0-1之间)
//1.2.创建贴地符号对象
ISymbolObject altitudeSymbol = map.CreateSymbol("AltitudeSymbol");//创建矢量贴地配置项
altitudeSymbol.AddConfig("Clamping", "CLAMP_TO_TERRAIN");//CLAMP_NONE:不贴地; CLAMP_TO_TERRAIN:仅贴地形;
altitudeSymbol.AddConfig("Technique", "TECHNIQUE_DRAPE");//TECHNIQUE_MAP:修改要素几何z值; TECHNIQUE_DRAPE:纹理映射贴地;
altitudeSymbol.AddConfig("Binding", "BINDING_CENTROID");//仅用于TechniqueMode为TECHNIQUE_MAP时 BINDING_VERTEX:逐顶点修改几何; BINDING_CENTROID:将所有几何顶点置为几何中心的位置
//2.创建样式对象
IStyle polygonStyle = map.CreateStyle("polygonStyle");//创建名称为Polygon的样式,名称任意
polygonStyle.SetName("polygonStyle");//// 设置别名polygon
polygonStyle.AddSymbol("PolygonSymbol", polygonSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
polygonStyle.AddSymbol("AltitudeSymbol", altitudeSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
polygonStyle.AddFilterName("BuildGeometryTileFilter");//添加构建器名称.几何瓦片化构建器:BuildGeometryTileFilter
//3.创建样式表对象
IStyleSheet styleSheet = map.CreateStyleSheet();//创建样式表
styleSheet.AddStyle(polygonStyle.GetConfig());//将样式配置添加至样式表
//4.创建并添加图层对象
var tlo = map.CreateLayerOptions("ogrlayer");//创建图层配置对象,名称任意
tlo.AddConfig("LayerOptionsName", "FeatureModelLayerOptions");//图层配置对象名称, FeatureModelLayerOptions代表矢量数据配置
tlo.AddConfig("DataSourceTypeName", "fmgeomtile");//数据源类型,代表瓦片化加载插件
tlo.AddConfig("FeatureSourceType", "ogr");//要素数据源类型,本地数据为ogr
tlo.AddConfig("Driver", "ESRI Shapefile");//ogr数据的解析驱动
tlo.AddConfig("Url", gShpPolygonPath);//数据路径
tlo.AddConfig("LiftUp", "0");//图层抬升高度,正值为抬高,负值为降低
tlo.AddConfig("MinRange", "0");//数据最小显示范围
tlo.AddConfig("MaxRange", "100000");//数据的最大显示范围,必须大于最小显示范围
tlo.AddConfig("TileSize", "500");//瓦片大小,根据最大显示范围设置,一般为MaxRange的1/10左右
tlo.AddConfig("StyleSheet", styleSheet.GetConfig());//将样式表配置添加至图层配置对象
shpLayer = map.CreateLayer("FeatureModelLayer", tlo);//创建矢量图层,第一项参数为FeatureModelLayer
map.AddLayer(shpLayer);//添加图层
shpLayer.Locate();//图层定位
}
12.纹理符号
纹理符号可配置的参数如下表所示:
配置项 | 配置说明 | 值类型 | 备注 |
---|---|---|---|
SkinName | 符号名称 | string | 纹理符号名称 |
LibraryName | 资源库名称 | string | 背景图片资源名称。 该值必须与资源库名称一致 |
对应的样式对象需要调用AddSymbol()添加纹理符号类型(SkinSymbol)。
在使用纹理符号时,需要注意:
- 纹理符号是不能单独存在的,在进行线挤出和面挤出时可以使用纹理符号,具体可参考线挤出符号 和面挤出符号。
- 纹理符号需要和纹理资源同时使用,并且
SkinName
的值必须与纹理符号名称一致,LibraryName
的值必须与纹理资源库对象名称一致。
纹理资源可配置的参数如下表所示:
配置项 | 配置说明 | 值类型 | 备注 |
---|---|---|---|
SkinName | 资源名称 | string | 纹理资源名称,该名称必须与纹理符号的名称匹配 |
image_url | 图片地址 | string | 纹理图片地址。可以是本地绝对路径,也可以是网络路径 |
image_width | 图片宽度 | string | 纹理图片宽度。按实际宽度填写 |
image_width | 图片宽度 | string | 纹理图片宽度。按实际宽度填写 |
tiled | 是否瓦片化显示 | bool | 控制纹理贴图在Y轴上是否重复模式贴图。默认false |
13.符号化专题配置
专题配置是指在进行矢量符号化时通过样式表的样式选择器指定使用的样式进行符号化的操作。在进行专题配置时,需要根据属性值绑定相应的样式对象,并且样式对象的名称需要与样式选择器的名称保持一致。
一般在进行专题配置时,需要经过以下几个步骤:
- 确定专题字段的值列表与相应的符号配置。可以建立二维数组存储每个值对应的符号配置。
- 创建符号。
- 创建样式。 样式的名称需保证与矢量数据中的专题字段值列表中某个值一致。
- 添加样式。 将样式添加到样式表中。
- 添加样式选择器。 调用样式表的AddStyleSelector()接口添加样式选择器名称,该名称需与样式表的名称保持一致。
- 循环执行2-5过程。根据专题字段中的值列表,循环添加每个值对应的样式到样式表中。
- 设置专题字段值。 调用样式表的SetStrExpression()接口设置矢量数据中需要进行专题配置的字段,字段用
[]
括起来,在进行专题配置时会自动读取该字段的值。 - 添加图层。
代码调用示例
本例列出了面符号化专题配置和面挤出符号化专题配置的代码。
Javascript调用
//result用于专题配色
var result = new Array(new Array("A", "120,15,15,70"),
new Array("B", "15,120,15,70"),
new Array("C", "55,15,15,70"),
new Array("D", "100,115,15,70"));
//********************************
// 2d专题符号化
//********************************
var gShpPolygonPath = " E:\\测试数据\\Vector\\polygon.shp";
var shpLayer = null;
function loadTheme2D(){
//1.创建样式表对象
var styleSheet = map.CreateStyleSheet();//创建样式表
for(var i = 0; i < result.length; ++i){
var colorArray = result[i][1].split(",");
var colorStr = colorArray[0] / 255.0 + ", " + colorArray[1] / 255.0 + ", " + colorArray[2] / 255.0 + "," + 1;//获取不同值的颜色
//2.创建面符号对象
var polygonSymbol = map.CreateSymbol("PolygonSymbol");//创建符号对象,PolygonSymbol代表面符号
polygonSymbol.AddConfig("Color", colorStr);//颜色值(RGBA,各值取值范围0-1之间)
//2.2创建线符号对象
var lineSymbol = map.CreateSymbol("LineSymbol");//创建符号对象,LineSymbol代表线符号
lineSymbol.AddConfig("Stipple", "-1");//线条类型,-1-实线,1-虚线
lineSymbol.AddConfig("Width", "3");//线宽(0-10)
lineSymbol.AddConfig("Color", "0.82, 0.48, 0, 1.0");//颜色值(RGBA,各值取值范围0-1之间)
//3.创建样式对象
var tmpStyle = map.CreateStyle(result[i][0]);//创建名样式,名称与关键值匹配
tmpStyle.AddSymbol("PolygonSymbol", polygonSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
tmpStyle.AddSymbol("LineSymbol", lineSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
tmpStyle.AddFilterName("BuildGeometryTileFilter");//添加构建器名称.几何瓦片化构建器:BuildGeometryTileFilter
//4.将样式对象配置添加至样式表
styleSheet.AddStyle(tmpStyle.GetConfig());//将挤出面样式配置添加至样式表
styleSheet.AddStyleSelector(result[i][0]);//添加样式选择器,其名称与样式对象名称一致,且专题配置的字段必须有此项
}
styleSheet.SetStrExpression("[TYPE]");//专题配置的字段,以此字段中不同的值创建样式,也就是result[i][0]的值就是此字段中不同的值
//5.创建并添加图层对象
var tlo = map.CreateLayerOptions("ogrlayer");//创建图层配置对象,名称任意
tlo.AddConfig("LayerOptionsName", "FeatureModelLayerOptions");//图层配置对象名称, FeatureModelLayerOptions代表矢量数据配置
tlo.AddConfig("DataSourceTypeName", "fmgeomtile");//数据源类型,代表瓦片化加载插件
tlo.AddConfig("FeatureSourceType", "ogr");//要素数据源类型,本地数据为ogr
tlo.AddConfig("Driver", "ESRI Shapefile");//ogr数据的解析驱动
tlo.AddConfig("IsLighted", "false");//是否开启默认灯光
tlo.AddConfig("Url", gShpPolygonPath);//数据路径
tlo.AddConfig("LiftUp","10" );//图层抬升高度,正值为抬高,负值为降低
tlo.AddConfig("MinRange", "0");//数据最小显示范围
tlo.AddConfig("MaxRange", "10000");//数据的最大显示范围,必须大于最小显示范围
tlo.AddConfig("TileSize", "1000");//瓦片大小,根据最大显示范围设置,一般为MaxRange的1/10左右
tlo.AddConfig("IsAutoTileSize", "false");//是否自动计算瓦片大小,默认为false
tlo.AddConfig("StyleSheet", styleSheet.GetConfig());//将样式表配置添加至图层配置对象
shpLayer = map.CreateLayer("FeatureModelLayer", tlo);//创建矢量图层,第一项参数为FeatureModelLayer
map.AddLayer(shpLayer);//添加图层
shpLayer.Locate();//图层定位
}
//********************************
// 3d专题符号化
//********************************
var shpLayer2 = null;
function loadTheme3D(){
//1.创建样式表对象
var styleSheet = map.CreateStyleSheet();//创建样式表
for(var i = 0; i < result.length; ++i){
var colorArray = result[i][1].split(",");
var colorStr = colorArray[0] / 255.0 + ", " + colorArray[1] / 255.0 + ", " + colorArray[2] / 255.0 + "," + "0.8";//获取不同值的颜色
//2.创建面符号对象
var polygonSymbol = map.CreateSymbol("PolygonSymbol");//创建符号对象,PolygonSymbol代表面符号
polygonSymbol.AddConfig("Color", colorStr);//颜色值(RGBA,各值取值范围0-1之间)
//2.2.创建线符号对象
var lineSymbol = map.CreateSymbol("LineSymbol");//创建符号对象,LineSymbol代表线符号
lineSymbol.AddConfig("Stipple", "-1");//线条类型,-1-实线,1-虚线
lineSymbol.AddConfig("Width", "10");//线宽(0-10)
lineSymbol.AddConfig("Color", "0.82, 0.48, 0, 1.0");//颜色值(RGBA,各值取值范围0-1之间)
//3.创建面样式对象
var polygonStyle = map.CreateStyle("polygonStyle" + result[i][0]);//创建样式
polygonStyle.AddSymbol("PolygonSymbol", polygonSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
polygonStyle.AddSymbol("LineSymbol", lineSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
//4.创建面挤出符号对象
var polygonExtrusionSymbol = map.CreateSymbol("PolygonExtrusionSymbol");//创建符号对象,PolygonExtrusionSymbol代表面挤出符号
polygonExtrusionSymbol.AddConfig("HeightExpression", "[LS]");//挤出高度。[]代表以属性字段的值作为挤出高度,让不同要素有不同高度
polygonExtrusionSymbol.AddConfig("BuildingStyleName", "polygonStyle" + result[i][0]);//挤出体块样式名称,第二参数必须与面样式对象名称一致
//5.创建挤出样式对象
var extruStyle = map.CreateStyle(result[i][0]);//创建样式
extruStyle.AddSymbol("PolygonExtrusionSymbol", polygonExtrusionSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
extruStyle.AddFilterName("ExtrudeGeometryTileFilter");//添加构建器名称.挤出几何体瓦片构建器为:ExtrudeGeometryTileFilter
//6.添加样式配置至样式表对象
styleSheet.AddStyle(polygonStyle.GetConfig());//将挤出面样式配置添加至样式表
styleSheet.AddStyle(extruStyle.GetConfig());//将屋顶样式配置添加至样式表
styleSheet.AddStyleSelector(result[i][0]);//添加样式选择器,其名称必须与创建名称为result[i][0]的样式的名称一致,专题配置必须有此项
}
styleSheet.SetStrExpression("[TYPE]");//专题配置的字段,以此字段中不同的值创建样式,也就是result[i][0]的值就是此字段中不同的值
//7.创建并添加图层对象
var tlo = map.CreateLayerOptions("ogrlayer");//创建图层配置对象,名称任意
tlo.AddConfig("LayerOptionsName", "FeatureModelLayerOptions");//图层配置对象名称, FeatureModelLayerOptions代表矢量数据配置
tlo.AddConfig("DataSourceTypeName", "fmgeomtile");//数据源类型,代表瓦片化加载插件
tlo.AddConfig("FeatureSourceType", "ogr");//要素数据源类型,本地数据为ogr
tlo.AddConfig("Driver", "ESRI Shapefile");//ogr数据的解析驱动
tlo.AddConfig("IsLighted", "false");//是否开启默认灯光
tlo.AddConfig("Url", gShpPolygonPath);//数据路径
tlo.AddConfig("LiftUp","10" );//图层抬升高度,正值为抬高,负值为降低
tlo.AddConfig("MinRange", "0");//数据最小显示范围
tlo.AddConfig("MaxRange", "10000");//数据的最大显示范围,必须大于最小显示范围
tlo.AddConfig("TileSize", "1000");//瓦片大小,根据最大显示范围设置,一般为MaxRange的1/10左右
tlo.AddConfig("IsAutoTileSize", "false");//是否自动计算瓦片大小,默认为false
tlo.AddConfig("StyleSheet", styleSheet.GetConfig());//将样式表配置添加至图层配置对象
shpLayer2 = map.CreateLayer("FeatureModelLayer", tlo);//创建矢量图层,第一项参数为FeatureModelLayer
map.AddLayer(shpLayer2);//添加图层
shpLayer2.Locate();//图层定位
}
C++调用
// 封装专题图配置颜色信息
std::map<std::string, std::string> result;
result.insert(std::make_pair("A", "120,15,15,70"));
result.insert(std::make_pair("B", "15,120,15,70"));
result.insert(std::make_pair("C", "55,15,15,70"));
result.insert(std::make_pair("D", "100,115,15,70"));
////2d专题符号化
void Cf0c3VectorSymbolDlg::loadTheme2D()
{
//1.创建样式表对象
ConfigOptionsCOMLib::IStyleSheetPtr styleSheet = map->CreateStyleSheet();//创建样式表
for(std::map<std::string, std::string>::iterator i = result.begin(); i != result.end() ; ++i){
/////获取不同值的颜色////
std::string color = i->second;
std::string sColor;
for (int j = 0; j < 4 ; j++)
{
std::string tmp = color.substr(0, color.find(','));
color = color.substr(color.find(',') + 1, color.size());
int nColor = atoi(tmp.c_str());
char buffer[20];
sprintf_s(buffer, "%f,", nColor / 255.0);
sColor += std::string(buffer);
}
sColor = sColor.substr(0, sColor.size() - 1);
//2.创建面符号对象
ConfigOptionsCOMLib::ISymbolObjectPtr polygonSymbol = map->CreateSymbol("PolygonSymbol");//创建符号对象,PolygonSymbol代表面符号
polygonSymbol->AddConfig("Color", sColor.c_str());//颜色值(RGBA,各值取值范围0-1之间)
//2.2创建线符号对象
ConfigOptionsCOMLib::ISymbolObjectPtr lineSymbol = map->CreateSymbol("LineSymbol");//创建符号对象,LineSymbol代表线符号
lineSymbol->AddConfig("Stipple", "-1");//线条类型,-1-实线,1-虚线
lineSymbol->AddConfig("Width", "3");//线宽(0-10)
lineSymbol->AddConfig("Color", "0.82, 0.48, 0, 1.0");//颜色值(RGBA,各值取值范围0-1之间)
//3.创建样式对象
ConfigOptionsCOMLib::IStylePtr tmpStyle = map->CreateStyle( _com_util::ConvertStringToBSTR((std::string("RoofStyle") + (i->first)).c_str()));//创建名样式,名称与关键值匹配
tmpStyle->AddSymbol("PolygonSymbol", polygonSymbol->GetConfig());//将符号对象添加到样式,第一参数为符号类型
tmpStyle->AddSymbol("LineSymbol", lineSymbol->GetConfig());//将符号对象添加到样式,第一参数为符号类型
tmpStyle->AddFilterName("BuildGeometryTileFilter");//添加构建器名称.几何瓦片化构建器:BuildGeometryTileFilter
//4.将样式对象配置添加至样式表
styleSheet->AddStyle(tmpStyle->GetConfig());//将挤出面样式配置添加至样式表
styleSheet->AddStyleSelector(i->first.c_str());//添加样式选择器,其名称与样式对象名称一致,且专题配置的字段必须有此项
}
styleSheet->SetStrExpression("[TYPE]");//专题配置的字段,以此字段中不同的值创建样式,也就是result[i][0]的值就是此字段中不同的值
//6.创建并添加图层对象
shpLayer = loadShpLayer(ShpPolygonPath, "15.3", styleSheet, true, "true");
}
//3d专题符号化
void Cf0c3VectorSymbolDlg::loadTheme3D()
{
//1.创建样式表对象
ConfigOptionsCOMLib::IStyleSheetPtr styleSheet = map->CreateStyleSheet();//创建样式表
for(std::map<std::string, std::string>::iterator i = result.begin(); i != result.end() ; ++i){
/////获取不同值的颜色////
std::string color = i->second;
std::string sColor;
for (int j = 0; j < 4 ; j++)
{
std::string tmp = color.substr(0, color.find(','));
color = color.substr(color.find(',') + 1, color.size());
int nColor = atoi(tmp.c_str());
char buffer[20];
sprintf_s(buffer, "%f,", nColor / 255.0);
sColor += std::string(buffer);
}
sColor = sColor.substr(0, sColor.size() - 1);
//1.创建面符号对象
ConfigOptionsCOMLib::ISymbolObjectPtr polygonSymbol = map->CreateSymbol("PolygonSymbol");//创建符号对象,PolygonSymbol代表面符号
polygonSymbol->AddConfig("Color", sColor.c_str());//颜色值(RGBA,各值取值范围0-1之间)
//1.2.创建线符号对象
ConfigOptionsCOMLib::ISymbolObjectPtr lineSymbol = map->CreateSymbol("LineSymbol");//创建符号对象,LineSymbol代表线符号
lineSymbol->AddConfig("Stipple", "-1");//线条类型,-1-实线,1-虚线
lineSymbol->AddConfig("Width", "10");//线宽(0-10)
lineSymbol->AddConfig("Color", "0.82, 0.48, 0, 1.0");//颜色值(RGBA,各值取值范围0-1之间)
//2.创建面样式对象
ConfigOptionsCOMLib::IStylePtr polygonStyle = map->CreateStyle("polygonStyle");//创建样式
polygonStyle->AddSymbol("PolygonSymbol", polygonSymbol->GetConfig());//将符号对象添加到样式,第一参数为符号类型
polygonStyle->AddSymbol("LineSymbol", lineSymbol->GetConfig());//将符号对象添加到样式,第一参数为符号类型
//3.创建面挤出符号对象
ConfigOptionsCOMLib::ISymbolObjectPtr polygonExtrusionSymbol = map->CreateSymbol("PolygonExtrusionSymbol");//创建符号对象,PolygonExtrusionSymbol代表面挤出符号
polygonExtrusionSymbol->AddConfig("HeightExpression", "[LS]");//挤出高度。[]代表以属性字段的值作为挤出高度,让不同要素有不同高度
polygonExtrusionSymbol->AddConfig("BuildingStyleName", "polygonStyle");//挤出体块样式名称,第二参数必须与面样式对象名称一致
//4.创建挤出样式对象
ConfigOptionsCOMLib::IStylePtr extruStyle = map->CreateStyle(_com_util::ConvertStringToBSTR((std::string("RoofStyle") + (i->first)).c_str()));//创建样式
extruStyle->AddSymbol("PolygonExtrusionSymbol", polygonExtrusionSymbol->GetConfig());//将符号对象添加到样式,第一参数为符号类型
extruStyle->AddFilterName("ExtrudeGeometryTileFilter");//添加构建器名称.挤出几何体瓦片构建器为:ExtrudeGeometryTileFilter
//5.添加样式配置至样式表对象
styleSheet->AddStyle(polygonStyle->GetConfig());//将挤出面样式配置添加至样式表
styleSheet->AddStyle(extruStyle->GetConfig());//将屋顶样式配置添加至样式表
styleSheet->AddStyleSelector(_com_util::ConvertStringToBSTR((std::string("RoofStyle") + (i->first)).c_str()));//添加样式选择器,其名称必须与创建名称为result[i][0]的样式的名称一致,专题配置必须有此项
}
styleSheet->SetStrExpression("[TYPE]");//专题配置的字段,以此字段中不同的值创建样式,也就是result[i][0]的值就是此字段中不同的值
//6.创建并添加图层对象
shpLayer = loadShpLayer(ShpPolygonPath, "15.3", styleSheet, true, "true");
}
//加载矢量图层
BaseObjectCOMLib::ILayerObjectPtr Cf0c3VectorSymbolDlg::loadShpLayer(std::string url,std::string liftUp, ConfigOptionsCOMLib::IStyleSheetPtr styleSheetStr, bool isLocate, std::string isLight)
{
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = (ConfigOptionsCOMLib::ILayerOptionsPtr)map->CreateLayerOptions("shp"); //创建图层配置对象,名称任意
tlo->AddConfig("LayerOptionsName", "FeatureModelLayerOptions");//图层配置对象名称, FeatureModelLayerOptions代表矢量数据配置
tlo->AddConfig("DataSourceTypeName", "fmgeomtile");//数据源类型,代表瓦片化加载插件
tlo->AddConfig("FeatureSourceType", "ogr");//要素数据源类型,本地数据为ogr
tlo->AddConfig("Driver", "ESRI Shapefile");//ogr数据的解析驱动
//tlo->AddConfig("BuildSpatialIndex", "true");//是否建立空间索引
tlo->AddConfig("IsLighted", isLight.c_str());
tlo->AddConfig("Url", url.c_str());//数据路径
tlo->AddConfig("LiftUp", liftUp.c_str());//图层抬升高度,正值为抬高,负值为降低
tlo->AddConfig("MinRange", "0");//数据最小显示范围
tlo->AddConfig("MaxRange", "100000");//数据的最大显示范围,必须大于最小显示范围
tlo->AddConfig("TileSize", "1000");//瓦片大小,根据最大显示范围设置,一般为MaxRange的1/10左右
tlo->AddConfig("StyleSheet", styleSheetStr->GetConfig());//将样式表配置添加至图层配置对象
BaseObjectCOMLib::ILayerObjectPtr ogrlayer = map->CreateLayer("FeatureModelLayer", tlo);//创建矢量图层,第一项参数为FeatureModelLayer
map->AddLayer(ogrlayer);//添加图层
if(isLocate){
ogrlayer->Locate();//图层定位
}
return ogrlayer;
}
C#调用
string gShpPolygonPath = " E:\\测试数据\\Vector\\polygon.shp";
ILayerObject shpLayer = null;
string[,] result = new string[,] { { "A", "120,15,15,70" },
{ "B", "15,120,15,70" },
{ "C", "55,15,15,70" },
{ "D", "100,115,15,70" } };
//2d专题符号化
private void loadTheme2D()
{
//1.创建样式表对象
IStyleSheet styleSheet = map.CreateStyleSheet();//创建样式表
for (var i = 0; i < result.Length/2; ++i)
{
string[] colorArray = result[i,1].Split(',');
string colorStr = System.Convert.ToDouble(colorArray[0]) / 255.0 + ", " + System.Convert.ToDouble(colorArray[1]) / 255.0 + ", " + System.Convert.ToDouble(colorArray[2]) / 255.0 + "," + 1;//获取不同值的颜色
//2.创建面符号对象
ISymbolObject polygonSymbol = map.CreateSymbol("PolygonSymbol");//创建符号对象,PolygonSymbol代表面符号
polygonSymbol.AddConfig("Color", colorStr);//颜色值(RGBA,各值取值范围0-1之间)
//2.2创建线符号对象
ISymbolObject lineSymbol = map.CreateSymbol("LineSymbol");//创建符号对象,LineSymbol代表线符号
lineSymbol.AddConfig("Stipple", "-1");//线条类型,-1-实线,1-虚线
lineSymbol.AddConfig("Width", "3");//线宽(0-10)
lineSymbol.AddConfig("Color", "0.82, 0.48, 0, 1.0");//颜色值(RGBA,各值取值范围0-1之间)
//3.创建样式对象
IStyle tmpStyle = map.CreateStyle(result[i, 0]);//创建名样式,名称与关键值匹配
tmpStyle.AddSymbol("PolygonSymbol", polygonSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
tmpStyle.AddSymbol("LineSymbol", lineSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
tmpStyle.AddFilterName("BuildGeometryTileFilter");//添加构建器名称.几何瓦片化构建器:BuildGeometryTileFilter
//4.将样式对象配置添加至样式表
styleSheet.AddStyle(tmpStyle.GetConfig());//将挤出面样式配置添加至样式表
styleSheet.AddStyleSelector(result[i, 0]);//添加样式选择器,其名称与样式对象名称一致,且专题配置的字段必须有此项
}
styleSheet.SetStrExpression("[TYPE]");//专题配置的字段,以此字段中不同的值创建样式,也就是result[i][0]的值就是此字段中不同的值
//5.创建并添加图层对象
var tlo = map.CreateLayerOptions("ogrlayer");//创建图层配置对象,名称任意
tlo.AddConfig("LayerOptionsName", "FeatureModelLayerOptions");//图层配置对象名称, FeatureModelLayerOptions代表矢量数据配置
tlo.AddConfig("DataSourceTypeName", "fmgeomtile");//数据源类型,代表瓦片化加载插件
tlo.AddConfig("FeatureSourceType", "ogr");//要素数据源类型,本地数据为ogr
tlo.AddConfig("Driver", "ESRI Shapefile");//ogr数据的解析驱动
tlo.AddConfig("IsLighted", "false");//是否开启默认灯光
tlo.AddConfig("Url", gShpPolygonPath);//数据路径
tlo.AddConfig("LiftUp","10" );//图层抬升高度,正值为抬高,负值为降低
tlo.AddConfig("MinRange", "0");//数据最小显示范围
tlo.AddConfig("MaxRange", "10000");//数据的最大显示范围,必须大于最小显示范围
tlo.AddConfig("TileSize", "1000");//瓦片大小,根据最大显示范围设置,一般为MaxRange的1/10左右
tlo.AddConfig("IsAutoTileSize", "false");//是否自动计算瓦片大小,默认为false
tlo.AddConfig("StyleSheet", styleSheet.GetConfig());//将样式表配置添加至图层配置对象
shpLayer = map.CreateLayer("FeatureModelLayer", tlo);//创建矢量图层,第一项参数为FeatureModelLayer
map.AddLayer(shpLayer);//添加图层
shpLayer.Locate();//图层定位
}
ILayerObject shpLayer2 = null;
//3d专题符号化
private void loadTheme3D()
{
//1.创建样式表对象
IStyleSheet styleSheet = map.CreateStyleSheet();//创建样式表
for (var i = 0; i < result.Length/2; ++i)
{
string[] colorArray = result[i, 1].Split(',');
string colorStr = System.Convert.ToDouble(colorArray[0]) / 255.0 + ", " + System.Convert.ToDouble(colorArray[1]) / 255.0 + ", " + System.Convert.ToDouble(colorArray[2]) / 255.0 + "," + 1;//获取不同值的颜色
//2.创建面符号对象
ISymbolObject polygonSymbol = map.CreateSymbol("PolygonSymbol");//创建符号对象,PolygonSymbol代表面符号
polygonSymbol.AddConfig("Color", colorStr);//颜色值(RGBA,各值取值范围0-1之间)
//2.2.创建线符号对象
ISymbolObject lineSymbol = map.CreateSymbol("LineSymbol");//创建符号对象,LineSymbol代表线符号
lineSymbol.AddConfig("Stipple", "-1");//线条类型,-1-实线,1-虚线
lineSymbol.AddConfig("Width", "10");//线宽(0-10)
lineSymbol.AddConfig("Color", "0.82, 0.48, 0, 1.0");//颜色值(RGBA,各值取值范围0-1之间)
//3.创建面样式对象
IStyle polygonStyle = map.CreateStyle("polygonStyle" + result[i, 0]);//创建样式
polygonStyle.AddSymbol("PolygonSymbol", polygonSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
polygonStyle.AddSymbol("LineSymbol", lineSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
//4.创建面挤出符号对象
ISymbolObject polygonExtrusionSymbol = map.CreateSymbol("PolygonExtrusionSymbol");//创建符号对象,PolygonExtrusionSymbol代表面挤出符号
polygonExtrusionSymbol.AddConfig("HeightExpression", "[LS]");//挤出高度。[]代表以属性字段的值作为挤出高度,让不同要素有不同高度
polygonExtrusionSymbol.AddConfig("BuildingStyleName", "polygonStyle" + result[i,0]);//挤出体块样式名称,第二参数必须与面样式对象名称一致
//5.创建挤出样式对象
IStyle extruStyle = map.CreateStyle(result[i, 0]);//创建样式
extruStyle.AddSymbol("PolygonExtrusionSymbol", polygonExtrusionSymbol.GetConfig());//将符号对象添加到样式,第一参数为符号类型
extruStyle.AddFilterName("ExtrudeGeometryTileFilter");//添加构建器名称.挤出几何体瓦片构建器为:ExtrudeGeometryTileFilter
//6.添加样式配置至样式表对象
styleSheet.AddStyle(polygonStyle.GetConfig());//将挤出面样式配置添加至样式表
styleSheet.AddStyle(extruStyle.GetConfig());//将屋顶样式配置添加至样式表
styleSheet.AddStyleSelector(result[i,0]);//添加样式选择器,其名称必须与创建名称为result[i][0]的样式的名称一致,专题配置必须有此项
}
styleSheet.SetStrExpression("[TYPE]");//专题配置的字段,以此字段中不同的值创建样式,也就是result[i][0]的值就是此字段中不同的值
//7.创建并添加图层对象
var tlo = map.CreateLayerOptions("ogrlayer");//创建图层配置对象,名称任意
tlo.AddConfig("LayerOptionsName", "FeatureModelLayerOptions");//图层配置对象名称, FeatureModelLayerOptions代表矢量数据配置
tlo.AddConfig("DataSourceTypeName", "fmgeomtile");//数据源类型,代表瓦片化加载插件
tlo.AddConfig("FeatureSourceType", "ogr");//要素数据源类型,本地数据为ogr
tlo.AddConfig("Driver", "ESRI Shapefile");//ogr数据的解析驱动
tlo.AddConfig("IsLighted", "false");//是否开启默认灯光
tlo.AddConfig("Url", gShpPolygonPath);//数据路径
tlo.AddConfig("LiftUp","10" );//图层抬升高度,正值为抬高,负值为降低
tlo.AddConfig("MinRange", "0");//数据最小显示范围
tlo.AddConfig("MaxRange", "10000");//数据的最大显示范围,必须大于最小显示范围
tlo.AddConfig("TileSize", "1000");//瓦片大小,根据最大显示范围设置,一般为MaxRange的1/10左右
tlo.AddConfig("IsAutoTileSize", "false");//是否自动计算瓦片大小,默认为false
tlo.AddConfig("StyleSheet", styleSheet.GetConfig());//将样式表配置添加至图层配置对象
shpLayer2 = map.CreateLayer("FeatureModelLayer", tlo);//创建矢量图层,第一项参数为FeatureModelLayer
map.AddLayer(shpLayer2);//添加图层
shpLayer2.Locate();//图层定位
}