Pergunta

Gostaria de adicionar um ILayer criado a partir de um serviço ArcGIS Server Map a um IMap com ArcObjects, mas não vejo como fazer isso.

Estou recebendo um IMapServer3 com o seguinte código, onde mapName = o serviço de mapa:

serverContext = som.CreateServerContext(mapName, "MapServer");
IServerObject serverObject = serverContext.ServerObject;
IMapServer3 mapServer = (IMapServer3)serverObject;

Parece que posso obter um ILayer de um IMapServerGroupLayer, mas parece que o IMapServerGroupLayer está procurando um tipo de conexão diferente do que estou usando.

Se você tiver um exemplo de obtenção de um ILayer de um serviço de mapas, agradecemos sua ajuda.

Foi útil?

Solução

Foi isso que funcionou...

private static void GetLayerFromMapServerLayer()
{

IAGSServerConnectionName servConnName = new AGSServerConnectionNameClass();
IPropertySet props = new PropertySetClass();
props.SetProperty("machine", "server");
servConnName.ConnectionProperties = props;



IAGSServerConnectionFactory pAGSServerConnectionFactory = new AGSServerConnectionFactoryClass();
IAGSServerConnection pAGSConnection = pAGSServerConnectionFactory.Open(props, 0);



IAGSEnumServerObjectName pEnumSOName = pAGSConnection.ServerObjectNames;

IAGSServerObjectName pSOName = pEnumSOName.Next();

while (pSOName != null)
{
if (pSOName.Name == "Base_Map")
break;
pSOName = pEnumSOName.Next();
}

IName pName = (IName)pSOName;
IMapServer mapServer = (IMapServer)pName.Open();

IMapServerLayer msLyr = new MapServerLayerClass();
msLyr.ServerConnect(pSOName, mapServer.DefaultMapName);

IMapServerGroupLayer group = (IMapServerGroupLayer)msLyr;

ILayer msLayer = (ILayer)msLyr;

//return msLayer;
MapDocument mapDoc = new MapDocumentClass();
mapDoc.Open(@"F:\~mkoneya~2011_82_13_58_30.mxd");
IMap myMap = mapDoc.get_Map(0);
myMap.AddLayer(msLayer);
mapDoc.Save();
} 
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top