Engine中如何渲染LiDAR数据(.las)?

Engine中如何渲染LAS数据?
已邀请:

刘峥 - ArcGIS多面手

赞同来自:

【解决办法】:
按属性(强度Intensity)渲染参考代码:
 
string lasdfile = @E:testlas.lasd;
ILasDataset lasdataset = new LasDatasetClass();
lasdataset.Init(lasdfile);
ILasFile lasfile = lasdataset.get_File(0);
ILasDatasetLayer laslayer = new LasDatasetLayerClass();
laslayer.Dataset = lasdataset;
laslayer.Name = test.las;
ILasStatistics lasstat = lasfile.GetStatistics();

ISimpleStatistics simstat = lasstat.GetAttributeStatistics(esriLasAttributeType.esriLasIntensity);
int min = (Int32)simstat.Minimum;
int max = (Int32)simstat.Maximum;

IRgbColor fromColor = new RgbColorClass();
fromColor.Red = 0;
fromColor.Green = 0;
fromColor.Blue = 0;
IColor toColor = new RgbColorClass();
fromColor.Red = 255;
fromColor.Green = 255;
fromColor.Blue = 255;

IAlgorithmicColorRamp colorRamp = new AlgorithmicColorRampClass();
colorRamp.Size = max;
colorRamp.FromColor = fromColor;
colorRamp.ToColor = toColor;
bool createColorRamp;
colorRamp.CreateRamp(out createColorRamp);

IEnumColors pEnumColors = colorRamp.Colors;
pEnumColors.Reset();

ILasAttributeRenderer lasattri = new LasUniqueValueRendererClass();
lasattri.Attribute = esriLasAttributeType.esriLasIntensity;

ITinUniqueValueRenderer tinuvren = lasattri as ITinUniqueValueRenderer;
for (int i = 0; i < max; i++)
{
IColor SymColor = pEnumColors.Next();
IMarkerSymbol MarkSym = new SimpleMarkerSymbolClass();
MarkSym.Color = SymColor;
tinuvren.AddValue(i.ToString(), i.ToString(), MarkSym as ISymbol);
tinuvren.AddValue(i.ToString(), i.ToString(), MarkSym as ISymbol);
}

laslayer.ClearRenderers();
laslayer.AddRenderer((ITinRenderer)lasattri);

ILegendInfo LegenInfo = laslayer as ILegendInfo;
for (int k = 0; k < LegenInfo.LegendGroupCount; k++)
{
ILegendGroup legenGrp = LegenInfo.get_LegendGroup(k);
legenGrp.Heading = ;
legenGrp.Visible = false;
ILegendClass legenCls = legenGrp.get_Class(0);
}

axSceneControl1.Scene.AddLayer(laslayer, false);
axSceneControl1.SceneGraph.RefreshViewers();


按高程LAS point elevation渲染参考代码:
 
string lasdfile = @E:testlas.lasd;
ILasDataset lasdataset = new LasDatasetClass();
lasdataset.Init(lasdfile);
ILasFile lasfile = lasdataset.get_File(0);
ILasDatasetLayer laslayer = new LasDatasetLayerClass();
laslayer.Dataset = lasdataset;
laslayer.Name = test.las;

IRgbColor fromColor = new RgbColorClass();
fromColor.Red = 0;
fromColor.Green = 0;
fromColor.Blue = 0;
IColor toColor = new RgbColorClass();
fromColor.Red = 255;
fromColor.Green = 255;
fromColor.Blue = 255;

int BreakCount = 9;
IAlgorithmicColorRamp colorRamp = new AlgorithmicColorRampClass();
colorRamp.Size = BreakCount;
colorRamp.FromColor = toColor;
colorRamp.ToColor = fromColor;
bool createColorRamp;
colorRamp.CreateRamp(out createColorRamp);

IEnumColors pEnumColors = colorRamp.Colors;
pEnumColors.Reset();

ITinColorRampRenderer TinColRamRend = new LasPointElevationRendererClass();
IDatasetRenderer DatasetRen = TinColRamRend as IDatasetRenderer;
DatasetRen.Dataset = lasdataset as IDataset;
TinColRamRend.BreakCount = BreakCount;
for (int i = 0; i < BreakCount; i++)
{
IColor SymColor = pEnumColors.Next();
IMarkerSymbol MarkSym = new SimpleMarkerSymbolClass();
MarkSym.Color = SymColor;
TinColRamRend.set_Symbol(i, MarkSym as ISymbol);
}

laslayer.ClearRenderers();
laslayer.AddRenderer((ITinRenderer)TinColRamRend);
axSceneControl1.Scene.AddLayer((ILayer)laslayer);

一叶知秋

赞同来自:

请问,加过滤器怎么加呢,我new一个新的,add上code,给lasattri赋上后没有效果,应该怎么做的

要回复问题请先登录注册