Pregunta

Me gustaría agregar un ILayer creado a partir de un servicio de mapas de ArcGIS Server a un IMap con ArcObjects, pero no veo cómo hacerlo.

Obtengo un IMapServer3 con el siguiente código, donde mapName= el servicio de mapas:

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

Parece que puedo obtener un ILayer de un IMapServerGroupLayer, pero parece que IMapServerGroupLayer está buscando un tipo de conexión diferente al que estoy usando.

Si tiene un ejemplo de cómo obtener un ILayer de un servicio de mapas, agradecemos su ayuda.

¿Fue útil?

Solución

Esto es lo que funcionó ...

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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top