您的位置:首页 > 其它

arcgis server 获取SDE中栅格数据的栅格值

2009-12-31 10:09 393 查看
arcgis server 获取SDE中栅格数据的栅格值的源码如下:

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using ESRI.ArcGIS.Server.WebControls;
using ESRI.ArcGIS.Server;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.ADF.Web.Display.Symbol;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.DataSourcesRaster;
using System.IO;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Geometry;
public partial class FieldStrength_GetPixelValue : System.Web.UI.Page
{
string HostName = "zhangye";
string MapServerUserName = "ArcGISSOM";
string MapserverPass = "123456";
private static string connectionString = "server=172.39.8.215;uid=sa;pwd=sa;database=gis_data";
protected void Page_Load(object sender, EventArgs e)
{
double x = 300;
double y = 200;
string MapID = "SDE_20091228_17043";
if (Request.QueryString["X"] == null || Request.QueryString["Y"] == null
|| Request.QueryString["MapID"] == null || Request.QueryString["X"] == ""
|| Request.QueryString["Y"] == "" || Request.QueryString["MapID"] == "")
{
Response.Write("获取失败,参数不正确");
return;
}
else
{
x =Convert.ToDouble(Request.QueryString["X"]);
y =Convert.ToDouble(Request.QueryString["Y"]);
MapID = Request.QueryString["MapID"];
string LayerName = GetRasterName(MapID);
if (LayerName != "")
{
Response.Write(GetPiexlValue(x, y, LayerName));
return;
}
}
}

private string GetRasterName(string MapGUID)
{
DataSet pDs = SqlHelper.ExecuteDataset(connectionString, CommandType.Text, "select * from LayerInfo where MapID='"+MapGUID+"' order by LayerType DESC ");
DataTable dt = pDs.Tables[0];
DataRow dr = dt.Rows[0];
return dr["LayerStoreName"].ToString();
}

private string GetPiexlValue(double x, double y,string layerID)
{
IRasterDataset pDataset = GetRasterRasterDataset(layerID);
return AERasterReaderByPixel(x, y, pDataset).ToString();
}
private IServerContext CreateServerContext(string ServerName, string UserName, string PassWord)
{
ESRI.ArcGIS.ADF.Identity identity = new ESRI.ArcGIS.ADF.Identity(UserName, PassWord, "");
ESRI.ArcGIS.ADF.Connection.AGS.AGSServerConnection agsConnection = new ESRI.ArcGIS.ADF.Connection.AGS.AGSServerConnection(ServerName, identity);
agsConnection.Connect();
if (agsConnection.IsConnected)
{
try
{
IServerObjectManager som = agsConnection.ServerObjectManager;
IServerContext pServerContext = som.CreateServerContext("zys", "MapServer");
return pServerContext;
}
catch (Exception e)
{
return null;
}
}
return null; ;
}

#region ServerContext CreateObject函数
private object CreateObject(string ObjectCLSID)
{
IServerContext pServerContext = CreateServerContext(HostName, MapServerUserName, MapserverPass);
if (pServerContext == null) return null;
try
{
return pServerContext.CreateObject(ObjectCLSID);
}
catch
{
return null;
}
finally
{
pServerContext.ReleaseContext();
}
}
#endregion

public string AERasterReaderByPixel(double X, double Y, IRasterDataset pRasterDataset)
{
try
{
IRasterLayer rasterLayer = CreateObject("esriCarto.RasterLayer") as IRasterLayer;
rasterLayer.CreateFromDataset(pRasterDataset);
IRaster raster = rasterLayer.Raster;
IRasterProps pRasterProps = (IRasterProps)raster;
int CellCol = 0;
int CellRow = 0;
CellCol =(int)((X - pRasterProps.Extent.LowerLeft.X) / pRasterProps.MeanCellSize().X);
CellRow =(int)((pRasterProps.Extent.UpperLeft.Y-Y) / pRasterProps.MeanCellSize().Y);
IPnt pntSize = CreateObject("esriDataSourcesRaster.DblPnt") as IPnt;
pntSize.SetCoords(1, 1);
IPnt pnt = CreateObject("esriDataSourcesRaster.DblPnt") as IPnt;
pnt.SetCoords(CellCol, CellRow);
IPixelBlock3 pixelBlock = raster.CreatePixelBlock(pntSize) as IPixelBlock3;
raster.Read(pnt, (IPixelBlock)pixelBlock);
return pixelBlock.GetVal(0,0,0).ToString();
}
catch (Exception ex)
{
return null;
}
}
#region SDE连接以及数据获取

string SDEServer = "gisserver";
string Instance = "5151";
string DataBase = "gis_data";
string SDEUser = "sde";
string PassWord = "sde";
private IPropertySet GetProPerty()
{
IPropertySet propertySet = (IPropertySet)CreateObject("esriSystem.PropertySet");
propertySet.SetProperty("SERVER", SDEServer);
propertySet.SetProperty("INSTANCE", Instance);
propertySet.SetProperty("DATABASE", DataBase);
propertySet.SetProperty("USER", SDEUser);
propertySet.SetProperty("PASSWORD", PassWord);
propertySet.SetProperty("VERSION", "sde.DEFAULT");
return propertySet;
}
private IWorkspace OpenSDEWorkSpace(IPropertySet pPropSet)
{
IWorkspace pWorkSpace = null;
IWorkspaceFactory pSdeFact = (IWorkspaceFactory)CreateObject("esriDataSourcesGDB.SdeWorkspaceFactory");
try
{
pWorkSpace = pSdeFact.Open(pPropSet, 0);
}
catch (Exception e)
{

}
return pWorkSpace;
}

private IRasterWorkspaceEx OpenSdeRasterWsp()
{
try
{
IPropertySet pProPerty = GetProPerty();
IRasterWorkspaceEx pRasterWsp = OpenSDEWorkSpace(pProPerty) as IRasterWorkspaceEx;
return pRasterWsp;
}
catch (Exception e)
{
return null;
}
}

private IFeatureWorkspace OpenSdeFeatureWsp()
{
try
{
IPropertySet pProPerty = GetProPerty();
IFeatureWorkspace pRasterWsp = OpenSDEWorkSpace(pProPerty) as IFeatureWorkspace;
return pRasterWsp;
}
catch (Exception e)
{
return null;
}
}

private IRasterDataset GetRasterRasterDataset(string RasterName)
{
IRasterWorkspaceEx pRasterWspEx = OpenSdeRasterWsp();
if (pRasterWspEx == null) return null;
IRasterDataset pRasterDataset = pRasterWspEx.OpenRasterDataset(RasterName);
return pRasterDataset;
}

private IFeatureClass GetFeatureClass(string FeatureName)
{
IFeatureWorkspace pFeatureWspEx = OpenSdeFeatureWsp();
if (pFeatureWspEx == null) return null;
IFeatureClass pFeatureClass = pFeatureWspEx.OpenFeatureClass(FeatureName);
return pFeatureClass;
}
#endregion
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: