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);
    }
}

results matching ""

    No results matching ""