AE 如何获取server上地图图层的要素信息
新人,有没有老哥来教一下的。最近已知搞不出来,,我想获取到server上的地图图层的要素信息,现在的情况就是通过IMapServerRESTLayer连接server或者通过IMapServerLayer连接都是可以获取到图层的,图层能显示在mapcontrol里面但是不能获取到图层的要素信息。我在想是我获取的方式不对还是我哪一步有问题才获取不到的。。上传的图时server上地图服务的图层功能
private IMapServer mapserver;
/// <summary>
/// 地图服务
/// </summary>
public IMapServer MpServer
{
get
{
return this.mapserver;
}
}
#region<<获取ArcGisServer地图服务标识,连接服务器
/// <summary>
/// 获取ArcGisServer地图服务标识,连接服务器
/// </summary>
/// <param name="pHostOrUrl"></param>服务器主机URL
/// <param name="pServiceName"></param>服务名称
/// <param name="pIsLAN"></param>主机是否是在局域网或者是互联网
/// <returns></returns>
private IAGSServerObjectName GetMapServer(string pHostOrUrl, string pServiceName, bool pIsLAN)
{
//设置连接属性
IPropertySet pPropertySet = new PropertySet();
if (pIsLAN)
pPropertySet.SetProperty("machine", pHostOrUrl);
else
pPropertySet.SetProperty("url", pHostOrUrl);
//打开连接
IAGSServerConnectionFactory pFactory = new AGSServerConnectionFactory();
//创建服务器连接工作空间
IAGSServerConnection pConnection = pFactory.Open(pPropertySet, 0);
//打开获取服务器
IAGSEnumServerObjectName pServerObjectNames = pConnection.ServerObjectNames;
//获取服务器上所有服务的标识属性,即服务标识集合
pServerObjectNames.Reset();
//使指针指向服务开头
IAGSServerObjectName ServerObjectName = pServerObjectNames.Next();
//获取服务标识
while (ServerObjectName != null)
{
if ((ServerObjectName.Name.ToLower() == pServiceName.ToLower()) &&
(ServerObjectName.Type == "MapServer"))
{//判断获取所需服务
break;
}
ServerObjectName = pServerObjectNames.Next();
}
//返回对象
return ServerObjectName;//返回服务标识
}
#endregion
public void GetServerLyr()
{
string serverUrl = "http://192.168.0.161:6080/arcg ... 3B%3B
string mapservername = "ZhangPu/ZPBackDev";
bool isLan = false;
ILayer lyr = null;
//获得服务对象名称
IAGSServerObjectName pServerObjectName = GetMapServer(serverUrl, mapservername, isLan);//获取地图
IName pName = (IName)pServerObjectName;
//访问地图服务
IAGSServerObject pServerObject = (IAGSServerObject)pName.Open();
IMapServer pMapServer = (IMapServer)pServerObject;
mapserver = pMapServer;//获取地图服务对象
IMapServerLayer pMapServerLayer = new MapServerLayer() as IMapServerLayer;
//连接地图服务
pMapServerLayer.ServerConnect(pServerObjectName, pMapServer.DefaultMapName);
//添加数据图层
lyr = pMapServerLayer as ILayer;
List<IFeatureLayer> layers = new List<IFeatureLayer>();
func(lyr, layers);
void func(ILayer layer1, List<IFeatureLayer> lsFeatureLayer)
{
//MessageBox.Show(layer.GetType().ToString());
if (layer1 is IFeatureLayer)
lsFeatureLayer.Add(layer1 as IFeatureLayer);
else if(layer1 is ICompositeLayer)
{
ICompositeLayer cl = layer1 as ICompositeLayer;
for(int i=0;i<cl.Count;i++)
{
var l = cl.Layer[i];
func(l, lsFeatureLayer);
}
}
}
}
IMapServerRESTLayer mapServerRESTLayer = new MapServerRESTLayerClass();
mapServerRESTLayer.Connect("http://192.168.0.161:6080/arcg ... 6quot;);
这是两种获取方式获取的server上的地图服务,但是都获取不到地图要素信息
private IMapServer mapserver;
/// <summary>
/// 地图服务
/// </summary>
public IMapServer MpServer
{
get
{
return this.mapserver;
}
}
#region<<获取ArcGisServer地图服务标识,连接服务器
/// <summary>
/// 获取ArcGisServer地图服务标识,连接服务器
/// </summary>
/// <param name="pHostOrUrl"></param>服务器主机URL
/// <param name="pServiceName"></param>服务名称
/// <param name="pIsLAN"></param>主机是否是在局域网或者是互联网
/// <returns></returns>
private IAGSServerObjectName GetMapServer(string pHostOrUrl, string pServiceName, bool pIsLAN)
{
//设置连接属性
IPropertySet pPropertySet = new PropertySet();
if (pIsLAN)
pPropertySet.SetProperty("machine", pHostOrUrl);
else
pPropertySet.SetProperty("url", pHostOrUrl);
//打开连接
IAGSServerConnectionFactory pFactory = new AGSServerConnectionFactory();
//创建服务器连接工作空间
IAGSServerConnection pConnection = pFactory.Open(pPropertySet, 0);
//打开获取服务器
IAGSEnumServerObjectName pServerObjectNames = pConnection.ServerObjectNames;
//获取服务器上所有服务的标识属性,即服务标识集合
pServerObjectNames.Reset();
//使指针指向服务开头
IAGSServerObjectName ServerObjectName = pServerObjectNames.Next();
//获取服务标识
while (ServerObjectName != null)
{
if ((ServerObjectName.Name.ToLower() == pServiceName.ToLower()) &&
(ServerObjectName.Type == "MapServer"))
{//判断获取所需服务
break;
}
ServerObjectName = pServerObjectNames.Next();
}
//返回对象
return ServerObjectName;//返回服务标识
}
#endregion
public void GetServerLyr()
{
string serverUrl = "http://192.168.0.161:6080/arcg ... 3B%3B
string mapservername = "ZhangPu/ZPBackDev";
bool isLan = false;
ILayer lyr = null;
//获得服务对象名称
IAGSServerObjectName pServerObjectName = GetMapServer(serverUrl, mapservername, isLan);//获取地图
IName pName = (IName)pServerObjectName;
//访问地图服务
IAGSServerObject pServerObject = (IAGSServerObject)pName.Open();
IMapServer pMapServer = (IMapServer)pServerObject;
mapserver = pMapServer;//获取地图服务对象
IMapServerLayer pMapServerLayer = new MapServerLayer() as IMapServerLayer;
//连接地图服务
pMapServerLayer.ServerConnect(pServerObjectName, pMapServer.DefaultMapName);
//添加数据图层
lyr = pMapServerLayer as ILayer;
List<IFeatureLayer> layers = new List<IFeatureLayer>();
func(lyr, layers);
void func(ILayer layer1, List<IFeatureLayer> lsFeatureLayer)
{
//MessageBox.Show(layer.GetType().ToString());
if (layer1 is IFeatureLayer)
lsFeatureLayer.Add(layer1 as IFeatureLayer);
else if(layer1 is ICompositeLayer)
{
ICompositeLayer cl = layer1 as ICompositeLayer;
for(int i=0;i<cl.Count;i++)
{
var l = cl.Layer[i];
func(l, lsFeatureLayer);
}
}
}
}
IMapServerRESTLayer mapServerRESTLayer = new MapServerRESTLayerClass();
mapServerRESTLayer.Connect("http://192.168.0.161:6080/arcg ... 6quot;);
这是两种获取方式获取的server上的地图服务,但是都获取不到地图要素信息
2 个回复
feisishui
赞同来自:
张晓旭
赞同来自:
public DataTable ServerGetTable()
{
IAGSServerObjectName3 pSOName = null;
IAGSServerObjectName3 psoname = null;
IAGSServerConnection con = null;// new AGSServerConnection();
IAGSServerConnectionFactory2 confactory = new AGSServerConnectionFactory() as IAGSServerConnectionFactory2;
IPropertySet propertyset = new PropertySet();
propertyset.SetProperty("url", "http://*******/arcgis/rest/services");
con = confactory.Open(propertyset, 0);
IAGSEnumServerObjectName enumSOName = con.ServerObjectNames;
pSOName = (IAGSServerObjectName3)enumSOName.Next();
while (pSOName != null)
{
if ((pSOName.Type == "MapServer") && (pSOName.Name == "**"))
{
psoname = pSOName;
break;
}
pSOName = (IAGSServerObjectName3)enumSOName.Next();
}
IName pName = psoname as IName;
IMapServer mapserver = pName.Open() as IMapServer;
string name = mapserver.DefaultMapName;
DataTable pDatatable = new DataTable();
IQueryFilter pQueryFilter = new QueryFilterClass();
pQueryFilter.WhereClause = "WATREGID like '%" + textBox1.Text.ToString().Trim() + "%'";
IRecordSet recordSet = mapserver.QueryFeatureData(mapserver.DefaultMapName, 10, pQueryFilter);
ITable table = recordSet.Table;
if (table == null) { return null; }
return ConvertITable(table);
}
//将ITable转换为Table
public DataTable ConvertITable(ITable table)
{
DataTable ExpertInfo;
ExpertInfo = new DataTable("ExpertInfo");
try
{
IQueryFilter que = new QueryFilterClass();
ICursor pCursor = table.Search(que, true);
IRow pRow = pCursor.NextRow();
if (pRow != null)
{
for (int i = 0; i < pRow.Fields.FieldCount; i++)
{
ExpertInfo.Columns.Add(pRow.Fields.get_Field(i).Name);
}
while (pRow != null)
{
DataRow pDataRow = ExpertInfo.NewRow();
for (int j = 0; j < pCursor.Fields.FieldCount; j++)
pDataRow[j] = pRow.get_Value(j);
ExpertInfo.Rows.Add(pDataRow);
pRow = pCursor.NextRow();
}
}
}
catch (System.Exception ex)
{
MessageBox.Show(ex.Message);
}
return ExpertInfo;
}
要回复问题请先登录或注册
发起人
相关问题
问题状态