如何从影像服务上按指定Polygon下载与其相交的Raster?

如何从影像服务上按指定Polygon下载与其相交的Raster?
已邀请:

朱新颖

赞同来自:

【解决办法】:
1,首先发布Image Service时有个Download功能处需要打钩,否则无法下载。 
2,imageServer3.Download(fidSet, clipGeometry, TIFF); 第二个参数处设置为ClipGeometry的话,在执行到url = imageServer3.GetFile(isDownloadResult);处会报错(错误为“The download file doesn''t exist.”),设置为null,则可以正常下载。因为之前做过空间查询了,已经将查询到的栅格ID存入IFIDSet中,所以只是想获取与ClipGeometry相交的影像可以将其设置为null。


IImageServer imageServer = null; 

//Set connection propertyset. sample URL: http://host:port/arcgis/services. 
IPropertySet propertySet = new PropertySetClass(); 
propertySet.SetProperty(url, https://zhuxinying.esrichina.c ... rvices); 

//Open an AGS connection. 
Type factoryType = Type.GetTypeFromProgID( 
esriGISClient.AGSServerConnectionFactory); 
IAGSServerConnectionFactory agsFactory = (IAGSServerConnectionFactory) 
Activator.CreateInstance(factoryType); 
IAGSServerConnection agsConnection = agsFactory.Open(propertySet, 0); 

//Get the image server. 
IAGSEnumServerObjectName agsServerObjectNames = agsConnection.ServerObjectNames; 
agsServerObjectNames.Reset(); 
IAGSServerObjectName agsServerObjectName = agsServerObjectNames.Next(); 
while (agsServerObjectName != null) 

if ((agsServerObjectName.Name.ToLower() == MosaicImageService.ToLower()) && 
(agsServerObjectName.Type == ImageServer)) 

IName pName = (IName)agsServerObjectName; 
IAGSServerObject agsServerObject = (IAGSServerObject)pName.Open(); 
imageServer = (IImageServer)agsServerObject; 
break; 

agsServerObjectName = agsServerObjectNames.Next(); 

IImageServer3 imageServer3 = (IImageServer3)imageServer; 

//Query the image service using the clip geometry. 
ISpatialFilter spatFilter = new ImageQueryFilterClass(); 
spatFilter.Geometry = clipGeometry; 
spatFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelEnvelopeIntersects; 
IFIDSet fidSet = imageServer3.GetCatalogItemIDs((IQueryFilter)spatFilter); 

//Define the Web client. 
System.Net.WebClient webClient = new System.Net.WebClient(); 

//Clip and download rasters to TIFF images. The format can be TIFF, NITF, or Imagine image file format. 
IImageServerDownloadResults isDownloadResults = imageServer3.Download(fidSet, 
null, TIFF); 
IImageServerDownloadResult isDownloadResult; 
string url, fileName; 
for (int i = 0; i < isDownloadResults.Count; i++) 

isDownloadResult = isDownloadResults.get_Element(i); 
url = imageServer3.GetFile(isDownloadResult); 
fileName = d:\\temp\\ + url.Substring(url.LastIndexOf(/) + 1); 
webClient.DownloadFile(url, fileName); 

要回复问题请先登录注册