arcengine 中tin文件怎么转换成raster
发起人
相关问题
- 有谁知道哪里可以免费获取各省市地图数据呢,包括详细的shape文件数据
- 两个栅格文件分辨率一致,但像元位置不一致,如何处理?
- ArcEngine 复制镶嵌数据集
- shape文件中的点符号如何去除,只保留标注
- 利用现有的瓦片生成tpk文件
- 把shp多个文件整到一起的一个专门的软件,不是ARCGIS是其他的,
- 使用ArcGIS Server解析DEM等格式文件
- FAQ: ArcGIS 坐标系统文件
- 有多个mxd文件 每个mxd都包含数据驱动页面 如何批量导出图片?
- 请问一个高手比较简单的问题,如何将BaseCommand类中的默认的小兔子图标换成自己自定义的图标那?
- 想问问add-in中如何获取arcmap已添加的Shape文件存放路径?
问题状态
- 最新活动: 2019-03-12 08:32
- 浏览: 2369
- 关注: 2 人
1 个回复
evergreenxq
赞同来自:
public IRasterDataset tin2raster(string tempBathyTIN, string geoPath, string gridName)
{
string tinFolder = System.IO.Path.GetDirectoryName(tempBathyTIN);
string tinName = System.IO.Path.GetFileName(tempBathyTIN);
IRasterDataset rasterDataset = new RasterDatasetClass();
try
{
string rasterPath = System.IO.Path.GetDirectoryName(geoPath);
IWorkspaceFactory TinWF = new TinWorkspaceFactory();
ITinWorkspace TinWK = TinWF.OpenFromFile(tinFolder, 0) as ITinWorkspace;
ITinAdvanced2 tinAd = TinWK.OpenTin(tinName) as ITinAdvanced2;
IEnvelope extent = tinAd.Extent;
IPoint origin = extent.LowerLeft;
origin.X = origin.X - (5 * 0.5);
origin.Y = origin.Y - (5 * 0.5);
int nCol = (int)Math.Round(extent.Width / 5) + 1;
int nRow = (int)Math.Round(extent.Height / 5) + 1;
ISpatialReference2 spatialRef = (ISpatialReference2)extent.SpatialReference;
IWorkspaceFactory rasterWF = new RasterWorkspaceFactoryClass();
IRasterWorkspace2 workSpace = (IRasterWorkspace2)rasterWF.OpenFromFile(rasterPath, 0);
rasterDataset = workSpace.CreateRasterDataset(gridName, "IMAGINE Image", origin, nCol, nRow, 5, 5, 1, ESRI.ArcGIS.Geodatabase.rstPixelType.PT_FLOAT, spatialRef, true);
IRasterBandCollection bandColl = (IRasterBandCollection)rasterDataset;
IRasterBand rasterBand = bandColl.Item(0);
IRawPixels rawPixels = (IRawPixels)rasterBand;
IPnt blockSize = new DblPntClass();
blockSize.X = nCol;
blockSize.Y = nRow;
IPixelBlock3 pixelBlock = (IPixelBlock3)rawPixels.CreatePixelBlock(blockSize);
ITinSurface tinSurface = (ITinSurface)tinAd;
IRasterProps rasterProps = (IRasterProps)rawPixels;
object nodataFloat;
//long nodataInt;
object val = pixelBlock.get_PixelDataByRef(0);
double cellsize = 5;
origin.X = origin.X + (5 * 0.5);
origin.Y = origin.Y + (5 * nRow) - (5 * 0.5);
nodataFloat = Convert.ToSingle(rasterProps.NoDataValue.ToString());
tinSurface.QueryPixelBlock(origin.X, origin.Y, cellsize, cellsize, esriRasterizationType.esriElevationAsRaster, nodataFloat, val);
IPnt offset = new DblPntClass();
offset.X = 0;
offset.Y = 0;
rawPixels.Write(offset, pixelBlock as IPixelBlock);
}
catch (Exception ex)
{
}
return rasterDataset;
}
要回复问题请先登录或注册