2.6.8 坐标高亮
坐标高亮
坐标高亮操作是指将坐标位置的数据高亮显示的操作。支持对模型数据的坐标高亮和矢量数据的坐标高亮。
由于模型数据和矢量数据的结构不同,因此模型数据和矢量数据坐标高亮是分为两个更新操作来实现的。两者之间效果是一致的,只是实现方式所有不同。
坐标高亮主要包括添加(创建)、更新和删除3种操作。
下图是坐标高亮效果:
模型坐标高亮参数说明
模型坐标高亮可配置的参数如下表所示:
配置项 | 配置说明 | 值类型 | 备注 |
---|---|---|---|
OptionsTypeName | 操作配置项类名 | string | ModelOptions代表模型更新 |
Operation | 操作类型 | string | 更新操作的类型。Create代表创建模型高亮操作 |
LonCoord | 经度坐标 | double | 相交位置的经度坐标 |
LatCoord | 纬度坐标 | double | 相交位置的纬度坐标 |
HCoord | 高程坐标 | double | 相交位置的高程坐标 |
PickColor | 高亮颜色 | R,G,B,A | 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0",A的取值必须大于0.2 |
LayersID | 作用图层ID | int列表 | 传-1则默认对所有图层起效,若为多个图层,可使用xx,xx,xx 此种格式。图层Id可以通过图层对象的GetLayerId()方法获取 |
矢量坐标高亮参数说明
矢量坐标高亮可配置的参数如下表所示:
配置项 | 配置说明 | 值类型 | 备注 |
---|---|---|---|
OptionsTypeName | 操作配置项类名 | string | FeatureIntersectOption代表矢量求交更新 |
Operation | 操作类型 | string | 更新操作的类型。 GetFeature代表获取要素操作 |
Lon | 经度坐标 | double | 相交位置的经度坐标 |
Lat | 纬度坐标 | double | 相交位置的纬度坐标 |
Height | 高程坐标 | double | 相交位置的高程坐标 |
FaultTolerant | 是否启用容差 | int | 相交时是否开启容错处理。0-不启用; 1-启用 |
FaultTolerantValue | 容差大小 | float | 相交时的容错值大小。默认:0.0 |
LightState | 是否高亮 | bool | 默认值false,设为true,则Color 配置的颜色起效 |
PickColor | 高亮颜色 | R,G,B,A | 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0",A的取值必须大于0.2 |
LayersID | 作用图层ID | int列表 | 传-1则默认对所有图层起效,若为多个图层,可使用xx,xx,xx 此种格式。图层Id可以通过图层对象的GetLayerId()方法获取 |
代码调用示例
Javascript调用
function callBackFun(str, id)
{
var result =shpoperationPtr.GetOperationResult();
if(result.GetConfigValueByKey("Result")=="true")//是否成功相交到矢量
{
var FeatureID = result.GetConfigValueByKey("FeatureID");//获得要素id
var FeatureSchema = result.GetConfigValueByKey("FeatureSchema");//获取要素属性表头
var attTable = FeatureSchema.split(";");
var resultValue = "";
for(var i = 0; i < attTable.length-1; i++){
var value = result.GetConfigValueByKey(attTable[i]);//获取要素属性
resultValue += attTable[i] + "=" + value+";";
}
alert("FeatureID="+FeatureID);
alert(resultValue);
}
}
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
pSymbol.AddConfig("SurfaceStyleName", "Surface"); //
//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("BuildGeometryFilter");//添加构建器名称,几何构建器为:BuildGeometryFilter
//3.创建样式表对象
var styleSheet = map.CreateStyleSheet();//创建样式表
styleSheet.AddStyle(pStyle.GetConfig());//将样式配置添加至样式表
//4.创建并添加图层对象
var tlo = map.CreateLayerOptions("shp");//创建图层配置对象,名称任意
tlo.AddConfig("LayerOptionsName", "FeatureModelLayerOptions");//图层配置对象名称, FeatureModelLayerOptions代表矢量数据配置
tlo.AddConfig("DataSourceTypeName", "fmgeom");//数据源类型,代表fmgeom插件
tlo.AddConfig("Driver", "ESRI Shapefile");//ogr数据的解析驱动
tlo.AddConfig("FeatureSourceType", "ogr");//要素数据源类型,本地数据为ogr
tlo.AddConfig("Url", gSingleShpPath); //数据路径
tlo.AddConfig("TileSizeFactor", "1.0");//瓦片大小的影响因子,建议是1.0
tlo.AddConfig("TileSize", "1000");//瓦片大小,根据最大显示范围设置,一般为MaxRange的1/10左右
tlo.AddConfig("LiftUp", "20");//图层抬升高度,正值为抬高,负值为降低
tlo.AddConfig("MaxRange", "5000.0");//最大显示范围,大于最小显示范围-无穷大
tlo.AddConfig("MinRange", "0.0");//最小显示范围,0-无穷大
tlo.AddConfig("StyleSheet", styleSheet.GetConfig());//将样式配置添加至样式表
polygonShpLayer = map.CreateLayer("FeatureModelLayer", tlo);//创建矢量图层,第一项参数为FeatureModelLayer
map.AddLayer(polygonShpLayer);//添加图层
}else{
alert("请勿重复创建矢量图层!");
}
}
//创建矢量坐标高亮
var shpoperationPtr;
function CreateFeaturePickOperation(){
//这里因为不知道矢量要素具体位置,需要通过点击屏幕返回坐标位置
var tlo = map.CreateOperationOptions("");//创建配置类型,操作类型的配置
tlo.AddConfig("OptionsTypeName", "FeatureIntersectOption");//更新类型,FeatureIntersectOption代表矢量相交
tlo.AddConfig("Operation", "GetFeature");//操作类型 GetFeature:获取要素; DelFeature:删除要素;
tlo.AddConfig("Lon", "120.219504701");//经度
tlo.AddConfig("Lat", "30.211235867");//纬度
tlo.AddConfig("Height", "47.999973869");//高度
tlo.AddConfig("FaultTolerant", "true");//是否启用容差模式
tlo.AddConfig("FaultTolerantValue", "1");//容差大小
tlo.AddConfig("LightState", "true");//是否高亮
tlo.AddConfig("PickColor", "1.0,0,0,1.0");//高亮颜色
tlo.AddConfig("LayersID", polygonShpLayer.GetLayerID());//图层id,支持多图层,中间以逗号分隔。如: "1,2,3"
shpoperationPtr = map.CreateOperation("FeatureIntersectOperation", tlo);//根据配置创建更新操作
map.AddOperation(shpoperationPtr);//加入操作
shpoperationPtr.AddObserver();//添加监听
}
//更新矢量坐标高亮
function UpdateFeaturePickOperation(){
//这里因为不知道矢量要素具体位置,需要通过点击屏幕返回坐标位置
var tlo = map.CreateOperationOptions("");//创建配置类型,操作类型的配置
tlo.AddConfig("OptionsTypeName", "FeatureIntersectOption");//更新类型,FeatureIntersectOption代表矢量相交
tlo.AddConfig("Operation", "GetFeature");//操作类型 GetFeature:获取要素; DelFeature:删除要素;
tlo.AddConfig("Lon", "120.219504701");//经度
tlo.AddConfig("Lat", "30.211235867");//纬度
tlo.AddConfig("Height", "57.999973869");//高度
tlo.AddConfig("PickColor", "0.0,0.5,1.0,0.6");//高亮颜色
shpoperationPtr.UpdateOperationOptions(tlo);//根据配置创建模型调整操作
}
//删除矢量坐标拾取操作
function RemoveFeaturePickOperation() {
if (shpoperationPtr) {
map.RemoveOperation(shpoperationPtr);//移除更新操作
shpoperationPtr = null;
}
}
//创建模型坐标高亮
var modelOperationPtr;
function CreateModelUpdateOperation(){//创建更新操作
var tlo = map.CreateOperationOptions("ModelOptions");//创建配置类型,操作类型的配置
tlo.AddConfig("OptionsTypeName", "ModelOptions");//更新类型,ModelOptions代表模型更新操作
tlo.AddConfig("LayersID", "-1");//添加需要拾取相交的图层id,以分号分隔
tlo.AddConfig("Operation", "Create");//创建节点关系
tlo.AddConfig("PickColor", "1,0,0,0.3");//设置高亮颜色
tlo.AddConfig("LonCoord", "120.219649158");//经度坐标
tlo.AddConfig("LatCoord","30.2116098154");//纬度坐标
tlo.AddConfig("HCoord", "60.9999621967");//高度坐标
modelOperationPtr = map.CreateOperation("ModelOperation", tlo);//根据配置创建模型调整操作,第一个参数为模型操作的类名
map.AddOperation(modelOperationPtr);//加入操作并执行
modelOperationPtr.AddObserver();
}
//更新模型坐标高亮
function UpdateModelOperation() {//更新操作
var tlo = map.CreateOperationOptions("ModelOperation");//创建配置类型,操作类型的配置
tlo.AddConfig("OptionsTypeName", "ModelOptions");//更新类型,ModelOptions代表模型更新操作
tlo.AddConfig("PickColor", "1,1,0,0.3");//设置高亮颜色
modelOperationPtr.UpdateOperationOptions(tlo);//根据配置创建模型调整操作
}
//移除模型坐标高亮
function RemoveModelOperation() { //移除操作
if (modelOperationPtr) {
map.RemoveOperation(modelOperationPtr);//移除模型坐标高亮
modelOperationPtr = null;
}
}
C++调用
BaseObjectCOMLib::ILayerObjectPtr polygonShpLayer;//面矢量图层
BaseObjectCOMLib::IOperationObjectPtr shpoperationPtr;//矢量坐更新对象
BaseObjectCOMLib::IOperationObjectPtr modelOperationPtr;//模型更新对象
//创建面矢量图层
void Cf5c7CoordinateHighlightDlg::OnBnClickedcreatepolygonshplayer()
{
if(polygonShpLayer)
{
return;
}
char temp_status[MAX_PATH];
GetPrivateProfileStringA("Path", "SingleShpPath", "", temp_status, MAX_PATH, mIniPath.c_str());
std::string SingleShpPath(temp_status);
//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("BuildGeometryFilter");//添加构建器名称,几何构建器为:BuildGeometryFilter
//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", "fmgeom");//数据源类型,代表fmgeom插件
tlo->AddConfig("Driver", "ESRI Shapefile");//ogr数据的解析驱动
tlo->AddConfig("FeatureSourceType", "ogr");//要素数据源类型,本地数据为ogr
tlo->AddConfig("Url", SingleShpPath.c_str());//数据路径
tlo->AddConfig("Fields", "ID:Int:100:0,Name:String:100:0,Height:Double:100:3,Width:Float:100:3");//创建矢量的属性字段,属性名:属性类型:类型长度:小数点后几位
tlo->AddConfig("GeometryType", "Polygon");//几何类型。Point-点;Polyline-线;Polygon-面.此项配置不能少或字符串一定不能错误,否则保存文件不成功
tlo->AddConfig("TileSizeFactor", "1.0");//瓦片大小的影响因子,建议是1.0
tlo->AddConfig("TileSize", "1000");//瓦片大小,根据最大显示范围设置,一般为MaxRange的1/10左右
tlo->AddConfig("LiftUp", "20");//图层抬升高度,正值为抬高,负值为降低
tlo->AddConfig("MaxRange", "10000.0");//最大显示范围,大于最小显示范围-无穷大
tlo->AddConfig("MinRange", "0.0");//最小显示范围,0-无穷大
tlo->AddConfig("StyleSheet", styleSheet->GetConfig());//将样式配置添加至样式表
polygonShpLayer = map->CreateLayer("FeatureModelLayer", tlo);//创建矢量图层,第一项参数为FeatureModelLayer
map->AddLayer(polygonShpLayer);//添加矢量图层
}
//创建矢量坐标高亮
void Cf5c7CoordinateHighlightDlg::OnBnClickedCreatefeaturepickoperation()
{
std::stringstream stream;
stream << polygonShpLayer->GetLayerID();
ConfigOptionsCOMLib::IOperationOptionPtr tlo = map->CreateOperationOptions("");//创建配置类型,操作类型的配置
tlo->AddConfig("OptionsTypeName", "FeatureIntersectOption");//添加矢量相交配置项
tlo->AddConfig("Operation", "GetFeature");//操作类型 GetFeature:获取要素; DelFeature:删除要素;
tlo->AddConfig("Lon", "120.219504701");//经度
tlo->AddConfig("Lat", "30.211235867");//纬度
tlo->AddConfig("Height", "47.999973869");//高度
tlo->AddConfig("FaultTolerant", "1");//是否启用容差模式
tlo->AddConfig("FaultTolerantValue", "1");//容差大小
tlo->AddConfig("LightState", "1");//是否高亮
tlo->AddConfig("PickColor", "1.0,0,0,1.0");//高亮颜色
tlo->AddConfig("LayersID", stream.str().c_str());//图层id,支持多图层,中间以逗号分隔。如: "1,2,3"
shpoperationPtr = map->CreateOperation("FeatureIntersectOperation", tlo);//根据配置创建更新操作
map->AddOperation(shpoperationPtr);//加入操作
shpoperationPtr->AddObserver();//添加监听
}
//更新矢量坐标高亮
void Cf5c7CoordinateHighlightDlg::OnBnClickedUpdatefeaturepickoperation()
{
ConfigOptionsCOMLib::IOperationOptionPtr tlo = map->CreateOperationOptions("");//创建配置类型,操作类型的配置
tlo->AddConfig("OptionsTypeName", "FeatureIntersectOption");//添加矢量相交配置项
tlo->AddConfig("Operation", "GetFeature");//操作类型 GetFeature:获取要素; DelFeature:删除要素;
tlo->AddConfig("Lon", "120.219504701");//经度
tlo->AddConfig("Lat", "30.211235867");//纬度
tlo->AddConfig("Height", "57.999973869");//高度
tlo->AddConfig("PickColor", "0.0,0.5,1.0,0.6");//高亮颜色
shpoperationPtr->UpdateOperationOptions(tlo);//根据配置更新操作
}
//删除矢量坐标高亮
void Cf5c7CoordinateHighlightDlg::OnBnClickedRemovefeaturepickoperation()
{
if (!shpoperationPtr)
{
return;
}
map->RemoveOperation(shpoperationPtr);//移除更新操作
shpoperationPtr = NULL;
}
//创建模型坐标高亮
void Cf5c7CoordinateHighlightDlg::OnBnClickedCreatemodelupdateoperation()
{
ConfigOptionsCOMLib::IOperationOptionPtr tlo = map->CreateOperationOptions("");//创建配置类型,操作类型的配置
tlo->AddConfig("OptionsTypeName", "ModelOptions");
tlo->AddConfig("LayersID", "-1"); //添加需要拾取相交的图层id,以分号分隔
tlo->AddConfig("Operation", "Create"); //创建节点关系
tlo->AddConfig("PickColor", "1,0,0,0.3"); //设置高亮颜色
tlo->AddConfig("LonCoord", "120.219649158"); //经度坐标
tlo->AddConfig("LatCoord","30.2116098154"); //纬度坐标
tlo->AddConfig("HCoord", "60.9999621967"); //高度坐标
modelOperationPtr = map->CreateOperation("ModelOperation", tlo);//根据配置创建模型调整操作,第一个参数为模型操作的类名
map->AddOperation(modelOperationPtr); //加入操作并执行
modelOperationPtr->AddObserver();
}
//更新模型坐标高亮
void Cf5c7CoordinateHighlightDlg::OnBnClickedUpdatemodeloperation()
{
ConfigOptionsCOMLib::IOperationOptionPtr tlo = map->CreateOperationOptions("");//创建配置类型,操作类型的配置
tlo->AddConfig("OptionsTypeName", "ModelOptions");//第二个参数为配置类名
tlo->AddConfig("PickColor", "1,1,0,0.3");//设置高亮颜色
modelOperationPtr->UpdateOperationOptions(tlo);//根据配置创建模型调整操作
}
//移除模型坐标高亮
void Cf5c7CoordinateHighlightDlg::OnBnClickedRemovemodeloperation()
{
if (!modelOperationPtr)
{
return;
}
map->RemoveOperation(modelOperationPtr);//移除模型坐标高亮
modelOperationPtr = NULL;
}
BEGIN_EVENTSINK_MAP(Cf5c7CoordinateHighlightDlg, CDialogEx)
ON_EVENT(Cf5c7CoordinateHighlightDlg, IDC_VPSDKCTRL1, 16, Cf5c7CoordinateHighlightDlg::FireOnOperationNotifyVpsdkctrl1, VTS_I4 VTS_I4)
END_EVENTSINK_MAP()
void Cf5c7CoordinateHighlightDlg::FireOnOperationNotifyVpsdkctrl1(long type, long result)
{
ConfigOptionsCOMLib::IOperationOptionPtr operationResult =shpoperationPtr->GetOperationResult();
CString mResult = operationResult->GetConfigValueByKey("Result");
if(mResult == "true")//是否成功相交到矢量
{
CString FeatureID = operationResult->GetConfigValueByKey("FeatureID");//获得要素id
CString FeatureSchema = operationResult->GetConfigValueByKey("FeatureSchema");//获取要素属性表头
CString attTable;
CString resultValue;
int pos = FeatureSchema.Find(L";");
attTable = FeatureSchema.Left(pos);
while(attTable.GetLength() > 0)
{
CString value = operationResult->GetConfigValueByKey(attTable.GetString());//获取要素属性字段对应属性值
resultValue += attTable + L"=" + value+ L";";
FeatureSchema = FeatureSchema.Mid(pos+1);
pos = FeatureSchema.Find(L";");
attTable = FeatureSchema.Left(pos);
}
MessageBox(L"FeatureID: " + FeatureID);
MessageBox(L"FeatureAttribute: " + resultValue);
}
}
C#调用
string gShpPolygonPath ="E:\data\LocalData\Vector\polygon.shp";
ILayerObject polygonShpLayer = null;//面矢量图层
private void createPolygonShpLayer_Click(object sender, EventArgs e)
{
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
pSymbol.AddConfig("SurfaceStyleName", "Surface"); //
//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("BuildGeometryFilter");//添加构建器名称,几何构建器为:BuildGeometryFilter
//3.创建样式表对象
var styleSheet = map.CreateStyleSheet();//创建样式表
styleSheet.AddStyle(pStyle.GetConfig());//将样式配置添加至样式表
//4.创建并添加图层对象
var tlo = map.CreateLayerOptions("shp");//创建图层配置对象,名称任意
tlo.AddConfig("LayerOptionsName", "FeatureModelLayerOptions");//图层配置对象名称, FeatureModelLayerOptions代表矢量数据配置
tlo.AddConfig("DataSourceTypeName", "fmgeom");//数据源类型,代表fmgeom插件
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", "47");//图层抬升高度,正值为抬高,负值为降低
tlo.AddConfig("MaxRange", "5000.0");//最大显示范围,大于最小显示范围-无穷大
tlo.AddConfig("MinRange", "0.0");//最小显示范围,0-无穷大
tlo.AddConfig("StyleSheet", styleSheet.GetConfig());//将样式配置添加至样式表
polygonShpLayer = map.CreateLayer("FeatureModelLayer", tlo);//创建矢量图层,第一项参数为FeatureModelLayer
map.AddLayer(polygonShpLayer);//添加图层
}
else
{
MessageBox.Show("请勿重复创建矢量图层!");
}
}
//创建矢量坐标高亮
IOperationObject shpoperationPtr;
private void CreateFeaturePickOperation_Click(object sender, EventArgs e)
{
//这里因为不知道矢量要素具体位置,需要通过点击屏幕返回坐标位置
IOperationOption tlo = map.CreateOperationOptions("");//创建配置类型,操作类型的配置
tlo.AddConfig("OptionsTypeName", "FeatureIntersectOption");//添加矢量相交配置项
tlo.AddConfig("Operation", "GetFeature");//操作类型 GetFeature:获取要素; DelFeature:删除要素;
tlo.AddConfig("Lon", "120.219504701");//经度
tlo.AddConfig("Lat", "30.211235867");//纬度
tlo.AddConfig("Height", "47.999973869");//高度
tlo.AddConfig("FaultTolerant", "1");//是否启用容差模式
tlo.AddConfig("FaultTolerantValue", "1");//容差大小
tlo.AddConfig("LightState", "true");//是否高亮
tlo.AddConfig("PickColor", "1.0,0,0,1.0");//高亮颜色
tlo.AddConfig("LayersID", polygonShpLayer.GetLayerID().ToString());//图层id,支持多图层,中间以逗号分隔。如: "1,2,3"
shpoperationPtr = map.CreateOperation("FeatureIntersectOperation", tlo);//根据配置创建更新操作
map.AddOperation(shpoperationPtr);//加入操作
shpoperationPtr.AddObserver();//添加监听
}
//更新矢量坐标高亮
private void UpdateFeaturePickOperation_Click(object sender, EventArgs e)
{
//这里因为不知道矢量要素具体位置,需要通过点击屏幕返回坐标位置
IOperationOption tlo = map.CreateOperationOptions("");//创建配置类型,操作类型的配置
tlo.AddConfig("OptionsTypeName", "FeatureIntersectOption");//添加矢量相交配置项
tlo.AddConfig("Operation", "GetFeature");//操作类型 GetFeature:获取要素; DelFeature:删除要素;
tlo.AddConfig("Lon", "120.219504701");//经度
tlo.AddConfig("Lat", "30.211235867");//纬度
tlo.AddConfig("Height", "57.999973869");//高度
tlo.AddConfig("PickColor", "0.0,0.5,1.0,0.6");//高亮颜色
shpoperationPtr.UpdateOperationOptions(tlo);//根据配置创建模型调整操作
}
//删除矢量坐标拾取操作
private void RemoveFeaturePickOperation_Click(object sender, EventArgs e)
{
if (shpoperationPtr != null)
{
map.RemoveOperation(shpoperationPtr);//移除更新操作
shpoperationPtr = null;
}
}
//创建模型坐标高亮
IOperationObject modelOperationPtr;
private void CreateModelUpdateOperation_Click(object sender, EventArgs e)
{
IOperationOption tlo = map.CreateOperationOptions("ModelOptions");//创建配置类型,操作类型的配置
tlo.AddConfig("OptionsTypeName", "ModelOptions");
tlo.AddConfig("LayersID", "-1");//添加需要拾取相交的图层id,以分号分隔
tlo.AddConfig("Operation", "Create");//创建节点关系
tlo.AddConfig("PickColor", "1,0,0,0.3");//设置高亮颜色
tlo.AddConfig("LonCoord", "120.219649158");//经度坐标
tlo.AddConfig("LatCoord", "30.2116098154");//纬度坐标
tlo.AddConfig("HCoord", "60.9999621967");//高度坐标
modelOperationPtr = map.CreateOperation("ModelOperation", tlo);//根据配置创建模型调整操作,第一个参数为模型操作的类名
map.AddOperation(modelOperationPtr);//加入操作并执行
modelOperationPtr.AddObserver();
}
//更新模型坐标高亮
private void UpdateModelOperation_Click(object sender, EventArgs e)
{
IOperationOption tlo = map.CreateOperationOptions("ModelOperation");//创建配置类型,操作类型的配置
tlo.AddConfig("OptionsTypeName", "ModelOptions");//第二个参数为配置类名
tlo.AddConfig("PickColor", "1,1,0,0.3");//设置高亮颜色
modelOperationPtr.UpdateOperationOptions(tlo);//根据配置创建模型调整操作
}
//移除模型坐标高亮
private void RemoveModelOperation_Click(object sender, EventArgs e)
{
if (modelOperationPtr!=null)
{
map.RemoveOperation(modelOperationPtr);//移除模型坐标高亮
modelOperationPtr = null;
}
}
private void axVPSDKCtrl1_FireOnOperationNotify(object sender, AxSDKCtrlLib._IVPSDKCtrlEvents_FireOnOperationNotifyEvent e)
{
IOperationOption result = shpoperationPtr.GetOperationResult();
if (result.GetConfigValueByKey("Result") == "true")//是否成功相交到矢量
{
string FeatureID = result.GetConfigValueByKey("FeatureID");//获得要素id
string FeatureSchema = result.GetConfigValueByKey("FeatureSchema");//获取要素属性表头
string[] attTable = FeatureSchema.Split(';');
string resultValue = "";
for (var i = 0; i < attTable.Length - 1; i++)
{
var value = result.GetConfigValueByKey(attTable[i]);//获取要素属性
resultValue += attTable[i] + "=" + value + ";";
}
MessageBox.Show("FeatureID=" + FeatureID);
MessageBox.Show(resultValue);
}
}