新浪博客

值提取至点

2016-10-28 10:45阅读:
在AE开发的过程中,经常会用到某点要素的高程值,那么如何使一个Feature要素从Dem数据中获取到对应点的高程值呢?这里提到三种方法。
一、GP工具(SpatialAnalystTools.ExtractValuesToPoints())​
执行GP之后,查询输出点图层的“RASTERVALU”就可以获取高程值啦。但是呢,众所周知​,使用GP的最大的缺点就是慢。所以,不太建议使用这种方式。
二、​ExtractValuesToPoints()方法
IExtractionOp2 extract = new RasterExtractionOp() as IExtractionOp2;
RasterWorkspaceFactory workspaceFactory = new RasterWorkspaceFactory();
IWorkspace workspace =workspaceFactory.OpenFromFile(System.IO.Path.GetDirectoryName(demPath),0);
IRasterWorkspace rasterWork = (IRasterWorkspace)workspace;
IRasterDataset rasterDataset = rasterWork.OpenRasterDataset(Sys
tem.IO.Path.GetFileName(demPath));
IGeoDataset geoDataset = extract.ExtractValuesToPoints((IGeoDataset)pntFeatureLayer, (IGeoDataset)rasterDataset, false, false);
pPointFeatureLayer.FeatureClass = geoDataset as IFeatureClass;
这种方法比起GP其运行时长可缩短10倍以上,但前提就是需要确保同一路径下的​rasterDataset未被占用,关于占用问题,请参考:http://blog.sina.cn/dpool/blog/s/blog_973fb78b0102wsl7.html?vt=4
三、GetPixelValue​()
int col = 0, row = 0;
IRaster2 raster2 = demLayer.Raster as IRaster2;
raster2.MapToPixel(point.X, point.Y, out col, out row);
object height = raster2.GetPixelValue(0, col, row);
这种方式呢,目前属于最得我心的了。首先,它可以直接对Point要素进行提取,无需生成点图层(毕竟多生成一个文件就多占一份内存,且影响运行速度);其次,直接使用Dem的Raster提取,不会出现占用的情况。缺点呢,只能查询单个点数据的高程值,对于大量的点数据,需要循环使用,但也是比GP快很多的。


我的更多文章

下载客户端阅读体验更佳

APP专享