Hello,
I want to use the ILasSurface.InterpolateRaster method to get a DSM raster from the LasDataset but it only works if I pass in a RasterDataset that was created with LONG pixel type - what I really want is DOUBLE or FLOAT. However, the method throws a "Value does not fall within the expected range" argument exception if I pass it a RasterDataset that is DOUBLE or FLOAT. Is it even possible to get this result? Why would it be locked to LONG type?
public IRasterDataset3 LasDatasetToDSM(ILasDataset lasDataset, IGeometry envelope)
{
esriSurfaceInterpolationType interpolationType = esriSurfaceInterpolationType.esriNaturalNeighborInterpolation
ILasSurface lasSurface = lasDataset.CreateDynamicSurface();
ILasFilter lasFilter = (ILasFilter)new LasFilter();
lasFilter.AreaOfInterest = envelope;
ILongArray @returns = new LongArray();
@returns.Add(1);
lasFilter.Returns = @returns;
IRasterDataset rd = CreateTempRasterDataset(envelope.Envelope, LTK.Properties.Settings.Default.Cellsize, rstPixelType.PT_FLOAT);
try
{
System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start();
lasSurface.InterpolateRaster(null, lasFilter, rd, -1, esriTinPointSelectionMethod.esriTinPointSelectionZmax, interpolationType, 1.0);
sw.Stop();
Logger.Log("DSM Created in " + sw.Elapsed.ToString());
return rd;
}
catch (Exception e)
{
Logger.Log(e.Message + " " + e.StackTrace, LogLevel.Error);
}
return null;
}