2.2.14 日照分析


日照分析

日照分析是在三维场景中进行日照模拟,呈现阴影效果的分析功能。在分析时,需要划定分析范围以及指定分析时间段,然后可以模拟整个时间段内日照产生的阴影效果,也可以计算分析范围内某个点位的日照时长。

注意:可创建空的分析图层,也可创建预设的分析图层,如需创建预设分析图层,则IsLoad ,IsActive ,Points 三个参数需要同时配置

下图是日照分析效果:

  

参数说明

日照分析可配置的参数如下表所示:

配置项 配置说明 值类型 备注
LayerOptionsName 图层配置对象名称 string 分析图层需配置为:AnalysisLayerOptions
DataSourceTypeName 数据源类型 string as_sunlight代表日照分析
PointColor 点颜色 R,G,B,A 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0"
PointSize 点大小 float 点大小取值范围在1-10之间
SunLightLineColor 线颜色 R,G,B,A 颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0"
Year int 年。用于确定太阳方位
Month int 月。用于确定太阳方位
Day int 日。用于确定太阳方位
StartHour 起始时 int 日照开始播放时间。小时
StartMinute 起始分 int 日照开始播放时间。分钟
EndHour 结束时 int 日照结束播放时间。小时
EndMinute 结束分 int 日照结束播放时间。分钟
PlayerState 日照播放状态 string 日照播放状态,PLAYER_PLAY-播放;PLAYER_PAUSE-暂停;PLAYER_STOP-停止。默认为PLAYER_PLAY
AddedMinute 播放速度 float 日照播放速度。单位(分钟/帧),默认1分钟/帧
IsPointSunshine 是否进行单点日照分析 bool 是否进行单点日照分析。默认为false
Point 单点坐标 x,y,z 单点日照分析坐标。需传入经度,纬度,高程坐标。
IsLoad 是否初始化加载点 bool 是否初始化加载点。默认为false
IsActive 是否激活分析 bool 默认为true,表示是否可操作场景进行绘制
Points 坐标点集 x,y,z列表 需传入经度,纬度,高程坐标集,中间用;分隔,并以;结尾
IsWorld 是否世界坐标点 bool 传入的坐标是否是世界坐标。true-世界坐标,false-经纬度坐标。默认为true

获取结果说明

日照分析可以通过图层对象的GetLayerResult() 方法获取结果。获取的结果值对象参数如下表所示:

配置项 配置说明 值类型 备注
DataSourceTypeName 数据源类型 string as_sunlight代表日照分析
ClickPoints 点击点坐标 x,y,z列表 鼠标点击场景形成的关键点的经度,纬度,高程坐标列表,中间用;分隔,并以;结尾
PickState 是否求交到模型 bool 日照范围内是否能求交到模型
CurrentTime 当前时间 double 日照分析正在播放时间。单位:分钟
StartSunTime 开始日照时间 double 单点接收日照开始时间。单位:分钟
EndSunTime 结束日照时间 double 单点接收日照结束时间。单位:分钟
LengthOfSunshine 单点日照时长 double 单点接收日照总时长。单位:分钟

代码调用示例

Javascript调用

var isGetPerspective = false;
var layermap = new Array();
var addState =false;
var responseStr;
var addFeature;
//图层回调实现函数
function callBackFun(layerid, type){
    var info = new Array();
    info = layerid.split("|");//idinfo通过|进行分隔
    var mapviewid = info[0].substr(10, info[0].length - 10);//MapviewId:
    var layerid = info[1].substr(8, info[1].length - 8);//LayerId:
    var layer = layermap[layerid];
    var opt = layer.GetLayerResult();
    var bCurrentTime = document.getElementById("CurrentTime");
    var bStartSunTime = document.getElementById("StartSunTime");
    var bEndSunTime = document.getElementById("EndSunTime");
    var bLengthOfSunshine = document.getElementById("LengthOfSunshine");
    if(opt.GetConfigValueByKey("DataSourceTypeName") == "as_sunlight")
    {
        var CurrentTime = opt.GetConfigValueByKey("CurrentTime");//当前时间
        var StartSunTime = opt.GetConfigValueByKey("StartSunTime");//单点开始日照时间
        var EndSunTime = opt.GetConfigValueByKey("EndSunTime");//单点结束日照时间
        var LengthOfSunshine = opt.GetConfigValueByKey("LengthOfSunshine");//单点日照时长
        bCurrentTime.value = MinuteToHour(CurrentTime);
        bStartSunTime.value = MinuteToHour(StartSunTime);
        bEndSunTime.value = MinuteToHour(EndSunTime);
        if(LengthOfSunshine !="")
        {
            bLengthOfSunshine.value = LengthOfSunshine+"分钟";
        }
    }
}

//鼠标左键抬起回调实现函数
function FireOnLButtonUp(posX, posY)
{
    if(addState)
    {
        var transformate = map.CreateTransformation();
        var pos = transformate.ScreenPosToWorldPos(posX, posY);//将屏幕坐标点转换成经纬度坐标
        addFeature.AddPoint(pos.GetX(), pos.GetY(), pos.GetZ());//向编辑图层添加坐标点信息
        responseStr = pos.GetX() + "," + pos.GetY() + "," + pos.GetZ() + ";";
        AddFeature();//添加要素
        CreateLengthOfSunshine();//创建单点日照分析
    }
}

//*************************************************************************
//日照分析图层控制
//*************************************************************************        
var sunLightLayer;
//创建日照分析
function CreateSunLightLayer() {
    var tlo = map.CreateLayerOptions("SunLight");//创建分析图层配置,给配置起个名称
    tlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//创建配置类型, AnalysisLayerOptions代表分析图层数据配置
    tlo.AddConfig("DataSourceTypeName", "as_sunlight");//数据源类型,as_sunlight代表日照分析
    tlo.AddConfig("PointColor", "1,0,0,1.0");//点颜色(RGBA),默认红色
    tlo.AddConfig("PointSize", "5");//点的大小,默认5
    tlo.AddConfig("SunLightLineColor", "0,1,0,1.0" );//线颜色(RGBA)

    tlo.AddConfig("Year", "2019");//年,用于确定太阳方位
    tlo.AddConfig("Month", "1");//月,用于确定太阳方位
    tlo.AddConfig("Day", "1");//日,用于确定太阳方位
    tlo.AddConfig("StartHour", "10");//开始播放的时间,小时
    tlo.AddConfig("StartMinute", "30");//开始播放的时间,分钟
    tlo.AddConfig("EndHour", "19");//结束播放的时间,小时
    tlo.AddConfig("EndMinute", "30");//结束播放的时间,分钟
    tlo.AddConfig("PlayerState", "PLAYER_PAUSE" );//日照播放状态,PLAYER_PLAY-播放,PLAYER_PAUSE-暂停,PLAYER_STOP-停止,默认为PLAYER_PLAY
    sunLightLayer = map.CreateLayer("AnalysisLayer", tlo);//创建分析图层
    map.AddLayer(sunLightLayer);//添加图层
    layermap[sunLightLayer.GetLayerID()] = sunLightLayer;
    sunLightLayer.AddObserver();
}

//更新日照分析
function UpdateSunLightLayer() {
    var tlo = map.CreateLayerOptions("SunLight ");//创建分析图层配置,给配置起个名称
    tlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//创建配置类型, AnalysisLayerOptions代表分析图层数据配置
    tlo.AddConfig("DataSourceTypeName", "as_sunlight");//数据源类型,as_sunlight代表日照分析
    tlo.AddConfig("Year", "2019");//年,用于确定太阳方位
    tlo.AddConfig("Month", "8");//月,用于确定太阳方位
    tlo.AddConfig("Day", "15");//日,用于确定太阳方位
    tlo.AddConfig("StartHour", "10");//开始播放的时间,小时
    tlo.AddConfig("StartMinute", "30");//开始播放的时间,分钟
    sunLightLayer.UpdateLayerOptions(tlo);//更新分析图层
}

//获取日照分析结果
function GetSunLightLayer() {
    var opt = sunLightLayer.GetLayerResult();//获取图层结果
    //判断当前图层数据源类型
    if(opt.GetConfigValueByKey("DataSourceTypeName") == "as_sunlight")
    {
        var PickState = opt.GetConfigValueByKey("PickState");//获取是否相交到模型
        alert("PickState:" + PickState);
        var ClickPoints = opt.GetConfigValueByKey("ClickPoints");//获取点击坐标
        alert("ClickPoints:" + ClickPoints);
    }
}

//删除日照分析
function RemoveSunLightLayer() {
    map.RemoveLayer(sunLightLayer);//删除日照分析
    sunLightLayer = null;
    if(shpLayer != null)
    {
        map.RemoveLayer(shpLayer);//删除点矢量图层
        shpLayer = null;
    }
}

//*************************************************************************
//单点日照分析
//*************************************************************************    
var pointMeasure = null;
//创建点矢量
function createPointMeasure(){
    if(shpLayer != null)
    {
        map.RemoveLayer(shpLayer);//删除点矢量图层
        shpLayer = null;
    }
    if(sunLightLayer != null){
        //创建点矢量图层
        createPointShpLayer();
        //创建要素
        CreateFeature();
    }else{
        alert("请先创建日照分析图层");
    }
}
//创建单点日照分析
function CreateLengthOfSunshine()
{
    if(sunLightLayer != null)
    {
        var tlo = map.CreateLayerOptions("SunLight");//创建分析图层配置,给配置起个名称
        tlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//创建配置类型, AnalysisLayerOptions代表分析图层数据配置
        tlo.AddConfig("DataSourceTypeName", "as_sunlight");//数据源类型,as_sunlight代表日照分析
        tlo.AddConfig("IsPointSunshine", "true");//是否进行单点日照分析
        tlo.AddConfig("Point", responseStr);//进行单点日照分析的经纬度坐标
        tlo.AddConfig("IsWorld", "false");//传入的是否是世界坐标,true为世界坐标,false为经纬度坐标
        sunLightLayer.UpdateLayerOptions(tlo);//更新分析图层
    }
    else
    {
        alert("请先创建日照分析图层");
    }
}

//创建点矢量图层
var polygoneditLayer = null;
var shpLayer = null;//矢量图层
function createPointShpLayer(){
    if(shpLayer == 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("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", "E://testPoint.shp");//数据路径
        tlo.AddConfig("Fields", "ID:Int:100:0");//创建矢量的属性字段,属性名:属性类型:类型长度:小数点后几位
        tlo.AddConfig("UpdateMode", "0");//属性编辑更新模式。0-非立即模式(只对未加载要素起效),1-符号化识别模式(如果影响符号化则使用立即模式,否则非立即模式),2-立即模式(重新刷新图层)
        tlo.AddConfig("GeometryType", "Point");//几何类型。Point-点;Polyline-线;Polygon-面.此项配置不能少或字符串一定不能错误,否则保存文件不成功
        tlo.AddConfig("TileSizeFactor", "1.0");//瓦片大小的影响因子,建议是1.0
        tlo.AddConfig("TileSize", "1000");//瓦片大小,根据最大显示范围设置,一般为MaxRange的1/10左右
        tlo.AddConfig("LiftUp", "0");//图层抬升高度,正值为抬高,负值为降低
        tlo.AddConfig("MaxRange", "10000.0");//最大显示范围,大于最小显示范围-无穷大
        tlo.AddConfig("MinRange", "0.0");//最小显示范围,0-无穷大
        tlo.AddConfig("StyleSheet", styleSheet.GetConfig());//将样式配置添加至样式表
        shpLayer = map.CreateLayer("FeatureModelLayer", tlo);//创建矢量图层,第一项参数为FeatureModelLayer
        map.AddLayer(shpLayer);//添加图层
        var id = shpLayer.GetLayerID();//获取图层id
        polygoneditLayer = map.GetFeatureModelLayer(id);//获取矢量图层
    }else{
        alert("请勿重复创建矢量图层!");
    }
}

//创建要素
function CreateFeature()
{
    addFeature = map.CreateFeature();//创建要素对象
    addFeature.SetGeometryType(1);//设置要素几何类型(1-点; 2-线; 3-环; 4-面; 5-多结构)
    addFeature.SetComponentType(1);//创建子几何类型(当GeometryType为5时生效)
    addState = true;//通过设置该状态,可以在鼠标左键事件中将顶点信息加入要素中
}

//添加要素
function AddFeature()
{
    featureId = polygoneditLayer.GetMaxFeatureID() + 1;//获取矢量图层要素最大ID
    addFeature.SetFeatureId(featureId);//设置FeatureID
    polygoneditLayer.AddFeature(addFeature);//添加到矢量图层
    addState = false;
}

//*************************************************************************
//播放控制
//*************************************************************************    
//慢速播放
function SlowPlay(){//加速,PlayAsKeyPoint必须为false
    if(sunLightLayer){
        var tlo = map.CreateLayerOptions("SunLight");//创建图层配置对象
        tlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称,as_sunlight代表日照分析
        tlo.AddConfig("DataSourceTypeName", "as_sunlight");//数据源类型,as_sunlight代表日照分析
        tlo.AddConfig("AddedMinute", "1.0");//播放速度
        sunLightLayer.UpdateLayerOptions(tlo);//更新分析图层    
    }else{
        alert("图层为空,无法加速!");
    }
}
//中速播放
function SlowDown(){//减速,PlayAsKeyPoint必须为false
    if(sunLightLayer){
        var tlo = map.CreateLayerOptions("SunLight");//创建图层配置对象
        tlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称,as_sunlight代表日照分析
        tlo.AddConfig("DataSourceTypeName", "as_sunlight");//数据源类型,as_sunlight代表日照分析
        tlo.AddConfig("AddedMinute", "2.0");//播放速度
        sunLightLayer.UpdateLayerOptions(tlo);//更新分析图层    
    }else{
        alert("图层为空,无法减速!");
    }
}
//快速播放
function FastPlay(){
    if(sunLightLayer){
        var tlo = map.CreateLayerOptions("SunLight");//创建图层配置对象
        tlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称,as_sunlight代表日照分析
        tlo.AddConfig("DataSourceTypeName", "as_sunlight");//数据源类型,as_sunlight代表日照分析
        tlo.AddConfig("AddedMinute", "3.0");//播放速度
        sunLightLayer.UpdateLayerOptions(tlo);//更新分析图层    
    }else{
        alert("图层为空,无法恢复速度!");
    }
}


//播放
function Play() {
    var tlo = map.CreateLayerOptions("SunLight");
    tlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");
    tlo.AddConfig("DataSourceTypeName", "as_sunlight");//数据源类型,as_sunlight代表日照分析
    tlo.AddConfig("PlayerState", "PLAYER_PLAY");//播放类型,表示播放
    sunLightLayer.UpdateLayerOptions(tlo);
}

//暂停
function Pause() {
    var tlo = map.CreateLayerOptions("SunLight");
    tlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");
    tlo.AddConfig("DataSourceTypeName", "as_sunlight");//数据源类型,as_sunlight代表日照分析
    tlo.AddConfig("PlayerState", "PLAYER_PAUSE");//播放类型,表示暂停
    sunLightLayer.UpdateLayerOptions(tlo);
}

//停止
function Stop() {
    var tlo = map.CreateLayerOptions("SunLight");
    tlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");
    tlo.AddConfig("DataSourceTypeName", "as_sunlight");//数据源类型,as_sunlight代表日照分析
    tlo.AddConfig("PlayerState", "PLAYER_STOP");//播放类型,表示停止
    sunLightLayer.UpdateLayerOptions(tlo);
}

//将分钟转换为小时
function MinuteToHour(bMinute)
{
    if(bMinute !="0"&&bMinute!=""&&bMinute!=null)
    {
        var h = Math.floor(bMinute/60);
        var m = bMinute - (h*60);
        return h+":"+m;
    }
    else
    {
        return "";
    }
}

C++调用

BaseObjectCOMLib::ILayerObjectPtr sunLightLayer;//日照分析图层对象
BaseObjectCOMLib::ILayerObjectPtr shpLayer;//点矢量图层
BaseObjectCOMLib::IFeatureModelLayerPtr polygoneditLayer;//要素模型图层对象
bool addState;//要素创建开关.
ConfigOptionsCOMLib::IFeaturePtr addFeature;//要素对象
long featureId;//要素ID

//创建日照分析
void CsunlightDlg::OnBnClickedCreatesunlightlayer()
{
    ConfigOptionsCOMLib::ILayerOptionsPtr tlo = map->CreateLayerOptions("SunLight");//创建分析图层配置,给配置起个名称
    tlo->AddConfig("LayerOptionsName", "AnalysisLayerOptions");//创建配置类型, AnalysisLayerOptions代表分析图层数据配置
    tlo->AddConfig("DataSourceTypeName", "as_sunlight");//数据源类型,as_sunlight代表日照分析
    tlo->AddConfig("PointColor", "1,0,0,1.0");//点颜色(RGBA),默认红色
    tlo->AddConfig("PointSize", "5");//点的大小,默认5
    tlo->AddConfig("SunLightLineColor", "0,1,0,1.0" );//线颜色(RGBA)

    tlo->AddConfig("Year", "2019");//年,用于确定太阳方位
    tlo->AddConfig("Month", "1");//月,用于确定太阳方位
    tlo->AddConfig("Day", "1");//日,用于确定太阳方位
    tlo->AddConfig("StartHour", "10");//开始播放的时间,小时
    tlo->AddConfig("StartMinute", "30");//开始播放的时间,分钟
    tlo->AddConfig("EndHour", "19");//结束播放的时间,小时
    tlo->AddConfig("EndMinute", "30");//结束播放的时间,分钟
    tlo->AddConfig("PlayerState", "PLAYER_PAUSE" );//日照播放状态,PLAYER_PLAY-播放,PLAYER_PAUSE-暂停,PLAYER_STOP-停止,默认为PLAYER_PLAY
    sunLightLayer = map->CreateLayer("AnalysisLayer", tlo);//创建分析图层
    map->AddLayer(sunLightLayer);//添加图层
    sunLightLayer->AddObserver();
}


void CsunlightDlg::OnBnClickedUpdatesunlightlayer()
{
    ConfigOptionsCOMLib::ILayerOptionsPtr tlo = map->CreateLayerOptions("SunLight ");//创建分析图层配置,给配置起个名称
    tlo->AddConfig("LayerOptionsName", "AnalysisLayerOptions");//创建配置类型, AnalysisLayerOptions代表分析图层数据配置
    tlo->AddConfig("DataSourceTypeName", "as_sunlight");//数据源类型,as_sunlight代表日照分析
    tlo->AddConfig("Year", "2019");//年,用于确定太阳方位
    tlo->AddConfig("Month", "8");//月,用于确定太阳方位
    tlo->AddConfig("Day", "15");//日,用于确定太阳方位
    tlo->AddConfig("StartHour", "10");//开始播放的时间,小时
    tlo->AddConfig("StartMinute", "30");//开始播放的时间,分钟
    sunLightLayer->UpdateLayerOptions(tlo);//更新分析图层
}

//获取日照分析结果
void CsunlightDlg::OnBnClickedGetsunlightlayer()
{
    ConfigOptionsCOMLib::ILayerOptionsPtr opt = sunLightLayer->GetLayerResult();//获取图层结果
    //判断当前图层数据源类型
    std::string DataSourceTypeName = opt->GetConfigValueByKey("DataSourceTypeName");//获得数据源类型
    if(DataSourceTypeName == "as_sunlight")
    {
        CString PickState = opt->GetConfigValueByKey("PickState");//获取是否相交到模型
        MessageBox(L"PickState:" + PickState);
        CString ClickPoints = opt->GetConfigValueByKey("ClickPoints");//获取点击坐标
        MessageBox(L"ClickPoints:" + ClickPoints);
    }
}

//删除日照分析
void CsunlightDlg::OnBnClickedRemovesunlightlayer()
{
    map->RemoveLayer(sunLightLayer);//删除日照分析
    sunLightLayer = NULL;
    if(shpLayer != NULL)
    {
        map->RemoveLayer(shpLayer);//删除点矢量图层
        shpLayer = NULL;
    }
}

//*************************************************************************
//单点日照分析
//*************************************************************************    
//创建点矢量
void CsunlightDlg::OnBnClickedcreatepointmeasure()
{
    if(shpLayer != NULL)
    {
        map->RemoveLayer(shpLayer);//删除点矢量图层
        shpLayer = NULL;
    }
    if(sunLightLayer != NULL){
        //创建点矢量图层
        createPointShpLayer();
        //创建要素
        CreateFeature();
    }else{
        MessageBox(L"请先创建日照分析图层");
    }
}

//创建单点日照分析
void CsunlightDlg::CreateLengthOfSunshine()
{
    if(sunLightLayer != NULL)
    {
        ConfigOptionsCOMLib::ILayerOptionsPtr tlo = map->CreateLayerOptions("SunLight");//创建分析图层配置,给配置起个名称
        tlo->AddConfig("LayerOptionsName", "AnalysisLayerOptions");//创建配置类型, AnalysisLayerOptions代表分析图层数据配置
        tlo->AddConfig("DataSourceTypeName", "as_sunlight");//数据源类型,as_sunlight代表日照分析
        tlo->AddConfig("IsPointSunshine", "true");//是否进行单点日照分析
        tlo->AddConfig("Point", responseStr.c_str());//进行单点日照分析的经纬度坐标
        tlo->AddConfig("IsWorld", "false");//传入的是否是世界坐标,true为世界坐标,false为经纬度坐标
        sunLightLayer->UpdateLayerOptions(tlo);//更新分析图层
    }
    else
    {
        MessageBox(L"请先创建日照分析图层");
    }
}
//创建点矢量图层
void CsunlightDlg::createPointShpLayer(){
    if(shpLayer == NULL){
        //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("BuildGeometryFilter");//添加构建器名称.几何构建器为:BuildGeometryFilter
        //3.创建样式表对象
        ConfigOptionsCOMLib::IStyleSheetPtr styleSheet = map->CreateStyleSheet();//创建样式表
        styleSheet->AddStyle(pStyle->GetConfig());//将样式对象配置添加至样式表
        //4.创建并添加图层对象
        ConfigOptionsCOMLib::ILayerOptionsPtr 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", "E://testPoint.shp");//数据路径
        tlo->AddConfig("Fields", "ID:Int:100:0");//创建矢量的属性字段,属性名:属性类型:类型长度:小数点后几位
        tlo->AddConfig("UpdateMode", "0");//属性编辑更新模式。0-非立即模式(只对未加载要素起效),1-符号化识别模式(如果影响符号化则使用立即模式,否则非立即模式),2-立即模式(重新刷新图层)
        tlo->AddConfig("GeometryType", "Point");//几何类型。Point-点;Polyline-线;Polygon-面.此项配置不能少或字符串一定不能错误,否则保存文件不成功
        tlo->AddConfig("TileSizeFactor", "1.0");//瓦片大小的影响因子,建议是1.0
        tlo->AddConfig("TileSize", "1000");//瓦片大小,根据最大显示范围设置,一般为MaxRange的1/10左右
        tlo->AddConfig("LiftUp", "0");//图层抬升高度,正值为抬高,负值为降低
        tlo->AddConfig("MaxRange", "10000.0");//最大显示范围,大于最小显示范围-无穷大
        tlo->AddConfig("MinRange", "0.0");//最小显示范围,0-无穷大
        tlo->AddConfig("StyleSheet", styleSheet->GetConfig());//将样式配置添加至样式表
        shpLayer = map->CreateLayer("FeatureModelLayer", tlo);//创建矢量图层,第一项参数为FeatureModelLayer
        map->AddLayer(shpLayer);//添加图层
        long id = shpLayer->GetLayerID();//获取图层id
        polygoneditLayer = map->GetFeatureModelLayer(id);//获取矢量图层
    }else{
        MessageBox(L"请勿重复创建矢量图层!");
    }
}

//创建要素
void CsunlightDlg::CreateFeature()
{
    addFeature = map->CreateFeature();//创建要素对象
    addFeature->SetGeometryType(1);//设置要素几何类型(1-点; 2-线; 3-环; 4-面; 5-多结构)
    addFeature->SetComponentType(1);//创建子几何类型(当GeometryType为5时生效)
    addState = true;//通过设置该状态,可以在鼠标左键事件中将顶点信息加入要素中
}

//添加要素
void CsunlightDlg::AddFeature()
{
    featureId = polygoneditLayer->GetMaxFeatureID() + 1;//获取矢量图层要素最大ID
    addFeature->SetFeatureId(featureId);//设置FeatureID
    polygoneditLayer->AddFeature(addFeature);//添加到矢量图层
    addState = false;
}

//*************************************************************************
//播放控制
//*************************************************************************    
//慢速播放
void CsunlightDlg::OnBnClickedSlowplay()
{
    if(sunLightLayer){
        ConfigOptionsCOMLib::ILayerOptionsPtr tlo = map->CreateLayerOptions("SunLight");//创建图层配置对象
        tlo->AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称,as_sunlight代表日照分析
        tlo->AddConfig("DataSourceTypeName", "as_sunlight");//数据源类型,as_sunlight代表日照分析
        tlo->AddConfig("AddedMinute", "1.0");//播放速度
        sunLightLayer->UpdateLayerOptions(tlo);//更新分析图层    
    }else{
        MessageBox(L"图层为空,无法加速!");
    }
}

//中速播放
void CsunlightDlg::OnBnClickedSlowdown()
{
    if(sunLightLayer){
        ConfigOptionsCOMLib::ILayerOptionsPtr tlo = map->CreateLayerOptions("SunLight");//创建图层配置对象
        tlo->AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称,as_sunlight代表日照分析
        tlo->AddConfig("DataSourceTypeName", "as_sunlight");//数据源类型,as_sunlight代表日照分析
        tlo->AddConfig("AddedMinute", "2.0");//播放速度
        sunLightLayer->UpdateLayerOptions(tlo);//更新分析图层    
    }else{
        MessageBox(L"图层为空,无法加速!");
    }
}

//快速播放
void CsunlightDlg::OnBnClickedFastplay()
{
    if(sunLightLayer){
        ConfigOptionsCOMLib::ILayerOptionsPtr tlo = map->CreateLayerOptions("SunLight");//创建图层配置对象
        tlo->AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称,as_sunlight代表日照分析
        tlo->AddConfig("DataSourceTypeName", "as_sunlight");//数据源类型,as_sunlight代表日照分析
        tlo->AddConfig("AddedMinute", "3.0");//播放速度
        sunLightLayer->UpdateLayerOptions(tlo);//更新分析图层    
    }else{
        MessageBox(L"图层为空,无法加速!");
    }
}

//播放
void CsunlightDlg::OnBnClickedPlay()
{
    ConfigOptionsCOMLib::ILayerOptionsPtr tlo = map->CreateLayerOptions("SunLight");
    tlo->AddConfig("LayerOptionsName", "AnalysisLayerOptions");
    tlo->AddConfig("DataSourceTypeName", "as_sunlight");//数据源类型,as_sunlight代表日照分析
    tlo->AddConfig("PlayerState", "PLAYER_PLAY");//播放类型,表示播放
    sunLightLayer->UpdateLayerOptions(tlo);
}

//暂停
void CsunlightDlg::OnBnClickedPause()
{
    ConfigOptionsCOMLib::ILayerOptionsPtr tlo = map->CreateLayerOptions("SunLight");
    tlo->AddConfig("LayerOptionsName", "AnalysisLayerOptions");
    tlo->AddConfig("DataSourceTypeName", "as_sunlight");//数据源类型,as_sunlight代表日照分析
    tlo->AddConfig("PlayerState", "PLAYER_PAUSE");//播放类型,表示暂停
    sunLightLayer->UpdateLayerOptions(tlo);
}

//停止
void CsunlightDlg::OnBnClickedStop()
{
    ConfigOptionsCOMLib::ILayerOptionsPtr tlo = map->CreateLayerOptions("SunLight");
    tlo->AddConfig("LayerOptionsName", "AnalysisLayerOptions");
    tlo->AddConfig("DataSourceTypeName", "as_sunlight");//数据源类型,as_sunlight代表日照分析
    tlo->AddConfig("PlayerState", "PLAYER_STOP");//播放类型,表示停止
    sunLightLayer->UpdateLayerOptions(tlo);
}

std::string CsunlightDlg::DoubleToString(DOUBLE num)
{
    std::stringstream streamStd;
    streamStd << num;
    return streamStd.str();
}

//将分钟转换为小时
CString CsunlightDlg::MinuteToHour(CString bMinute)
{
    CString hString,mString;
    if(bMinute !="0"&&bMinute!="")
    {
        int h = floor(_ttof(bMinute)/60);
        int m = _ttof(bMinute) - (h*60);
        hString.Format(_T("%d"),h);
        mString.Format(_T("%.2d"),m);
        return hString+":"+mString;
    }
    else
    {
        return NULL;
    }
}
BEGIN_EVENTSINK_MAP(CsunlightDlg, CDialogEx)
    ON_EVENT(CsunlightDlg, IDC_VPSDKCTRL1, 2, CsunlightDlg::FireOnLButtonUpVpsdkctrl1, VTS_I2 VTS_I2)
    ON_EVENT(CsunlightDlg, IDC_VPSDKCTRL1, 14, CsunlightDlg::FireOnLayerNotifyVpsdkctrl1, VTS_BSTR VTS_I4)
END_EVENTSINK_MAP()

void CsunlightDlg::FireOnLButtonUpVpsdkctrl1(short xPos, short yPos)
{
    if(addState)
    {
        CoordinateSystemCOMLib::ITransformatePtr transformate = map->CreateTransformation();
        BaseObjectCOMLib::IPositionPtr pos = transformate->ScreenPosToWorldPos(xPos, yPos);//将屏幕坐标点转换成经纬度坐标
        addFeature->AddPoint(pos->GetX(), pos->GetY(), pos->GetZ());//向编辑图层添加坐标点信息
        responseStr = DoubleToString(pos->GetX()) + "," + DoubleToString(pos->GetY()) + "," + DoubleToString(pos->GetZ()) + ";";
        AddFeature();//添加要素
        CreateLengthOfSunshine();//创建单点日照分析
    }
}


void CsunlightDlg::FireOnLayerNotifyVpsdkctrl1(LPCTSTR idInfo, long layerType)
{
    ConfigOptionsCOMLib::ILayerOptionsPtr opt = sunLightLayer->GetLayerResult();
    //判断当前图层数据源类型
    std::string DataSourceTypeName = opt->GetConfigValueByKey("DataSourceTypeName");//获得数据源类型
    if(DataSourceTypeName == "as_sunlight")
    {
        CString CurrentTime = opt->GetConfigValueByKey("CurrentTime");//当前时间
        CString StartSunTime = opt->GetConfigValueByKey("StartSunTime");//单点开始日照时间
        CString EndSunTime = opt->GetConfigValueByKey("EndSunTime");//单点结束日照时间
        CString LengthOfSunshine = opt->GetConfigValueByKey("LengthOfSunshine");//单点日照时长
        bCurrentTime.SetWindowText(MinuteToHour(CurrentTime));
        bStartSunTime.SetWindowText(MinuteToHour(StartSunTime));
        bEndSunTime.SetWindowText(MinuteToHour(EndSunTime));
        bLengthOfSunshine.SetWindowText(LengthOfSunshine+"分钟");
    }
}

C#调用

//*************************************************************************
//日照分析图层控制
//*************************************************************************        
ILayerObject sunLightLayer;
//创建日照分析
private void CreateSunLightLayer_Click(object sender, EventArgs e)
{
    ILayerOptions tlo = map.CreateLayerOptions("SunLight");//创建分析图层配置,给配置起个名称
    tlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//创建配置类型, AnalysisLayerOptions代表分析图层数据配置
    tlo.AddConfig("DataSourceTypeName", "as_sunlight");//数据源类型,as_sunlight代表日照分析
    tlo.AddConfig("PointColor", "1,0,0,1.0");//点颜色(RGBA),默认红色
    tlo.AddConfig("PointSize", "5");//点的大小,默认5
    tlo.AddConfig("SunLightLineColor", "0,1,0,1.0");//线颜色(RGBA)

    tlo.AddConfig("Year", "2019");//年,用于确定太阳方位
    tlo.AddConfig("Month", "1");//月,用于确定太阳方位
    tlo.AddConfig("Day", "1");//日,用于确定太阳方位
    tlo.AddConfig("StartHour", "10");//开始播放的时间,小时
    tlo.AddConfig("StartMinute", "30");//开始播放的时间,分钟
    tlo.AddConfig("EndHour", "19");//结束播放的时间,小时
    tlo.AddConfig("EndMinute", "30");//结束播放的时间,分钟
    tlo.AddConfig("PlayerState", "PLAYER_PAUSE");//日照播放状态,PLAYER_PLAY-播放,PLAYER_PAUSE-暂停,PLAYER_STOP-停止,默认为PLAYER_PLAY
    sunLightLayer = map.CreateLayer("AnalysisLayer", tlo);//创建分析图层
    map.AddLayer(sunLightLayer);//添加图层
    sunLightLayer.AddObserver();
}
//更新日照分析
private void UpdateSunLightLayer_Click(object sender, EventArgs e)
{
    ILayerOptions tlo = map.CreateLayerOptions("SunLight ");//创建分析图层配置,给配置起个名称
    tlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//创建配置类型, AnalysisLayerOptions代表分析图层数据配置
    tlo.AddConfig("DataSourceTypeName", "as_sunlight");//数据源类型,as_sunlight代表日照分析
    tlo.AddConfig("Year", "2019");//年,用于确定太阳方位
    tlo.AddConfig("Month", "8");//月,用于确定太阳方位
    tlo.AddConfig("Day", "15");//日,用于确定太阳方位
    tlo.AddConfig("StartHour", "10");//开始播放的时间,小时
    tlo.AddConfig("StartMinute", "30");//开始播放的时间,分钟
    sunLightLayer.UpdateLayerOptions(tlo);//更新分析图层
}
//获取日照分析结果
private void GetSunLightLayer_Click(object sender, EventArgs e)
{
    ILayerOptions opt = sunLightLayer.GetLayerResult();//获取图层结果
    //判断当前图层数据源类型
    if (opt.GetConfigValueByKey("DataSourceTypeName") == "as_sunlight")
    {
        string PickState = opt.GetConfigValueByKey("PickState");//获取是否相交到模型
        MessageBox.Show("PickState:" + PickState);
        string ClickPoints = opt.GetConfigValueByKey("ClickPoints");//获取点击坐标
        MessageBox.Show("ClickPoints:" + ClickPoints);
    }
}
//删除日照分析
private void RemoveSunLightLayer_Click(object sender, EventArgs e)
{
    map.RemoveLayer(sunLightLayer);//删除日照分析
    sunLightLayer = null;
    if (shpLayer != null)
    {
        map.RemoveLayer(shpLayer);//删除点矢量图层
        shpLayer = null;
    }
}

ILayerObject shpLayer = null;//矢量图层
//创建点矢量
private void createPointMeasure_Click(object sender, EventArgs e)
{
    if (shpLayer != null)
    {
        map.RemoveLayer(shpLayer);//删除点矢量图层
        shpLayer = null;
    }
    if (sunLightLayer != null)
    {
        //创建点矢量图层
        createPointShpLayer();
        //创建要素
        CreateFeature();
    }
    else
    {
        MessageBox.Show("请先创建日照分析图层");
    }
}

//创建单点日照分析
private void CreateLengthOfSunshine()
{
    if (sunLightLayer != null)
    {
        ILayerOptions tlo = map.CreateLayerOptions("SunLight");//创建分析图层配置,给配置起个名称
        tlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//创建配置类型, AnalysisLayerOptions代表分析图层数据配置
        tlo.AddConfig("DataSourceTypeName", "as_sunlight");//数据源类型,as_sunlight代表日照分析
        tlo.AddConfig("IsPointSunshine", "true");//是否进行单点日照分析
        tlo.AddConfig("Point", responseStr);//进行单点日照分析的经纬度坐标
        tlo.AddConfig("IsWorld", "false");//传入的是否是世界坐标,true为世界坐标,false为经纬度坐标
        sunLightLayer.UpdateLayerOptions(tlo);//更新分析图层
    }
    else
    {
        MessageBox.Show("请先创建日照分析图层");
    }
}

//创建点矢量图层
IFeatureModelLayer polygoneditLayer = null;
private void createPointShpLayer()
{
    if (shpLayer == 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("BuildGeometryFilter");//添加构建器名称.几何构建器为:BuildGeometryFilter
        //3.创建样式表对象
        var styleSheet = map.CreateStyleSheet();//创建样式表
        styleSheet.AddStyle(pStyle.GetConfig());//将样式对象配置添加至样式表
        //4.创建并添加图层对象
        ILayerOptions 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", "E://testPoint.shp");//数据路径
        tlo.AddConfig("Fields", "ID:Int:100:0");//创建矢量的属性字段,属性名:属性类型:类型长度:小数点后几位
        tlo.AddConfig("UpdateMode", "0");//属性编辑更新模式。0-非立即模式(只对未加载要素起效),1-符号化识别模式(如果影响符号化则使用立即模式,否则非立即模式),2-立即模式(重新刷新图层)
        tlo.AddConfig("GeometryType", "Point");//几何类型。Point-点;Polyline-线;Polygon-面.此项配置不能少或字符串一定不能错误,否则保存文件不成功
        tlo.AddConfig("TileSizeFactor", "1.0");//瓦片大小的影响因子,建议是1.0
        tlo.AddConfig("TileSize", "1000");//瓦片大小,根据最大显示范围设置,一般为MaxRange的1/10左右
        tlo.AddConfig("LiftUp", "0");//图层抬升高度,正值为抬高,负值为降低
        tlo.AddConfig("MaxRange", "10000.0");//最大显示范围,大于最小显示范围-无穷大
        tlo.AddConfig("MinRange", "0.0");//最小显示范围,0-无穷大
        tlo.AddConfig("StyleSheet", styleSheet.GetConfig());//将样式配置添加至样式表
        shpLayer = map.CreateLayer("FeatureModelLayer", tlo);//创建矢量图层,第一项参数为FeatureModelLayer
        map.AddLayer(shpLayer);//添加图层
        var id = shpLayer.GetLayerID();//获取图层id
        polygoneditLayer = map.GetFeatureModelLayer(id);//获取矢量图层
    }
    else
    {
        MessageBox.Show("请勿重复创建矢量图层!");
    }
}

//创建要素
int featureId;
private void CreateFeature()
{
    addFeature = map.CreateFeature();//创建要素对象
    addFeature.SetGeometryType(1);//设置要素几何类型(1-点; 2-线; 3-环; 4-面; 5-多结构)
    addFeature.SetComponentType(1);//创建子几何类型(当GeometryType为5时生效)
    addState = true;//通过设置该状态,可以在鼠标左键事件中将顶点信息加入要素中
}

//添加要素
private void AddFeature()
{
    featureId = polygoneditLayer.GetMaxFeatureID() + 1;//获取矢量图层要素最大ID
    addFeature.SetFeatureId(featureId);//设置FeatureID
    polygoneditLayer.AddFeature(addFeature);//添加到矢量图层
    addState = false;
}
//播放
private void Play_Click(object sender, EventArgs e)
{
    ILayerOptions tlo = map.CreateLayerOptions("SunLight");
    tlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");
    tlo.AddConfig("DataSourceTypeName", "as_sunlight");//数据源类型,as_sunlight代表日照分析
    tlo.AddConfig("PlayerState", "PLAYER_PLAY");//播放类型,表示播放
    sunLightLayer.UpdateLayerOptions(tlo);
}
//暂停
private void Pause_Click(object sender, EventArgs e)
{
    ILayerOptions tlo = map.CreateLayerOptions("SunLight");
    tlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");
    tlo.AddConfig("DataSourceTypeName", "as_sunlight");//数据源类型,as_sunlight代表日照分析
    tlo.AddConfig("PlayerState", "PLAYER_PAUSE");//播放类型,表示暂停
    sunLightLayer.UpdateLayerOptions(tlo);
}
//停止
private void Stop_Click(object sender, EventArgs e)
{
    ILayerOptions tlo = map.CreateLayerOptions("SunLight");
    tlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");
    tlo.AddConfig("DataSourceTypeName", "as_sunlight");//数据源类型,as_sunlight代表日照分析
    tlo.AddConfig("PlayerState", "PLAYER_STOP");//播放类型,表示停止
    sunLightLayer.UpdateLayerOptions(tlo);
}
//慢速播放
private void SlowPlay_Click(object sender, EventArgs e)
{
    if (sunLightLayer!=null)
    {
        ILayerOptions tlo = map.CreateLayerOptions("SunLight");//创建图层配置对象
        tlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称,as_sunlight代表日照分析
        tlo.AddConfig("DataSourceTypeName", "as_sunlight");//数据源类型,as_sunlight代表日照分析
        tlo.AddConfig("AddedMinute", "1.0");//播放速度
        sunLightLayer.UpdateLayerOptions(tlo);//更新分析图层    
    }
    else
    {
        MessageBox.Show("图层为空,无法加速!");
    }
}
//中速播放
private void SlowDown_Click(object sender, EventArgs e)
{
    if (sunLightLayer != null)
    {
        ILayerOptions tlo = map.CreateLayerOptions("SunLight");//创建图层配置对象
        tlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称,as_sunlight代表日照分析
        tlo.AddConfig("DataSourceTypeName", "as_sunlight");//数据源类型,as_sunlight代表日照分析
        tlo.AddConfig("AddedMinute", "2.0");//播放速度
        sunLightLayer.UpdateLayerOptions(tlo);//更新分析图层    
    }
    else
    {
        MessageBox.Show("图层为空,无法减速!");
    }
}
//快速播放
private void FastPlay_Click(object sender, EventArgs e)
{
    if (sunLightLayer != null)
    {
        ILayerOptions tlo = map.CreateLayerOptions("SunLight");//创建图层配置对象
        tlo.AddConfig("LayerOptionsName", "AnalysisLayerOptions");//图层配置对象名称,as_sunlight代表日照分析
        tlo.AddConfig("DataSourceTypeName", "as_sunlight");//数据源类型,as_sunlight代表日照分析
        tlo.AddConfig("AddedMinute", "3.0");//播放速度
        sunLightLayer.UpdateLayerOptions(tlo);//更新分析图层    
    }
    else
    {
        MessageBox.Show("图层为空,无法恢复速度!");
    }
}

//将分钟转换为小时
private string MinuteToHour(string bMinute)
{
    if (bMinute != "0" && bMinute != "" && bMinute != null)
    {
        var h = Math.Floor(double.Parse(bMinute) / 60);
        var m = double.Parse(bMinute) - (h * 60);
        return h+":"+m;
    }
    else
    {
        return "";
    }
}

private void axVPSDKCtrl1_FireOnLayerNotify(object sender, AxSDKCtrlLib._IVPSDKCtrlEvents_FireOnLayerNotifyEvent e)
{
    ILayerOptions opt = sunLightLayer.GetLayerResult();
    if (opt.GetConfigValueByKey("DataSourceTypeName") == "as_sunlight")
    {
        string mCurrentTime = opt.GetConfigValueByKey("CurrentTime");//当前时间
        string mStartSunTime = opt.GetConfigValueByKey("StartSunTime");//单点开始日照时间
        string mEndSunTime = opt.GetConfigValueByKey("EndSunTime");//单点结束日照时间
        string mLengthOfSunshine = opt.GetConfigValueByKey("LengthOfSunshine");//单点日照时长
        CurrentTime.Text = MinuteToHour(mCurrentTime);
        StartSunTime.Text = MinuteToHour(mStartSunTime);
        EndSunTime.Text = MinuteToHour(mEndSunTime);
        if (mLengthOfSunshine != "")
        {
            LengthOfSunshine.Text = mLengthOfSunshine + "分钟";
        }
    }
}

private void axVPSDKCtrl1_FireOnLButtonUp(object sender, AxSDKCtrlLib._IVPSDKCtrlEvents_FireOnLButtonUpEvent e)
{
    if (addState)
    {
        var transformate = map.CreateTransformation();
        var pos = transformate.ScreenPosToWorldPos(e.xPos, e.yPos);//将屏幕坐标点转换成经纬度坐标
        addFeature.AddPoint(pos.GetX(), pos.GetY(), pos.GetZ());//向编辑图层添加坐标点信息
        responseStr = pos.GetX() + "," + pos.GetY() + "," + pos.GetZ() + ";";
        AddFeature();//添加要素
        CreateLengthOfSunshine();//创建单点日照分析
    }
}

results matching ""

    No results matching ""