Beispiel #1
0
        /// <summary>
        /// Feature Class from id of layer
        /// </summary>
        /// <param name="routelayerID">id route layer</param>
        /// <returns>feature class</returns>
        private IFeatureClass GetRouteFeatureClass(int routelayerID)
        {
            IMapServer3          mapServer  = this.GetMapServer();
            IMapServerDataAccess dataAccess = (IMapServerDataAccess)mapServer;

            return((IFeatureClass)dataAccess.GetDataSource(mapServer.DefaultMapName, routelayerID));
        }
        /// <summary>
        /// Geodataset from id of layer
        /// </summary>
        /// <param name="layerID">unique id layer</param>
        /// <returns>object Geodataset</returns>
        private IGeoDataset GetGeodataset(int layerID)
        {
            IMapServer3          mapServer  = this.GetMapServer();
            IMapServerDataAccess dataAccess = (IMapServerDataAccess)mapServer;

            return((IGeoDataset)dataAccess.GetDataSource(mapServer.DefaultMapName, layerID));
        }
Beispiel #3
0
        public void Init(IServerObjectHelper pSOH)
        {
            serverObjectHelper  = pSOH;
            mapService          = (MapServer)serverObjectHelper.ServerObject;
            mapServerDataAccess = (IMapServerDataAccess)serverObjectHelper.ServerObject;

            // Check if this service contains a Utility Network layer
            unLayerInfo = soeUtil.GetUNLayerInfo(mapService);
            if (unLayerInfo != null)
            {
                // Get the Utility Network dataset
                IFeatureClass fc = (IFeatureClass)mapServerDataAccess.GetDataSource(mapService.DefaultMapName, unLayerInfo.SubLayers.Element[0]);

                // Get UN dataset
                IFeatureDataset fd        = fc.FeatureDataset;
                IDataset        ds        = (IDataset)fd;
                IEnumDataset    enumSubDS = ds.Subsets;
                IDataset        subDS     = enumSubDS.Next();
                while (subDS != null)
                {
                    if (subDS.Type == esriDatasetType.esriDTUtilityNetwork)
                    {
                        unDataset = subDS;
                        break;
                    }
                    subDS = enumSubDS.Next();
                }

                logger.LogMessage(ServerLogger.msgType.infoStandard, soe_name + ".init()", 200, "UN dataset found: " + unDataset.Name);
            }
        }
        /// <summary>
        /// Metodo che restituisce una Feature Class dato un Server Object e il Url del Service Layer
        /// </summary>
        /// <param name="serverObjectHelper">Server Object</param>
        /// <param name="URLServiceLayer">URL Service Layer</param>
        /// <returns></returns>
        internal static IFeatureClass RicavaFCDaURLServiceLayer(IServerObjectHelper serverObjectHelper, string URLServiceLayer)
        {
            IFeatureClass fc;

            try
            {
                // Ricavo il numero posizionale del Service Layer
                int numPosizionale = Convert.ToInt32(System.IO.Path.GetFileName(URLServiceLayer));

                IMapServer4 mapServer      = (IMapServer4)serverObjectHelper.ServerObject;
                string      nomeMapService = mapServer.DefaultMapName;

                // Use IMapServerDataAccess to get the data
                IMapServerDataAccess dataAccess = (IMapServerDataAccess)mapServer;

                // Accedo alla Feature Class sorgente
                fc = (IFeatureClass)dataAccess.GetDataSource(nomeMapService, numPosizionale);
            }
            catch (System.Exception)
            {
                throw;
            }

            return(fc);
        }
Beispiel #5
0
 public void Shutdown()
 {
     serverLog.LogMessage(ServerLogger.msgType.infoStandard, this.soeName + ".init()", 200, "Shutting down " + this.soeName + " SOE.");
     this.soHelper            = null;
     this.serverLog           = null;
     this.mapServerDataAccess = null;
     this.layerInfos          = null;
 }
 public void Shutdown() 
 {
     serverLog.LogMessage(ServerLogger.msgType.infoStandard, this.soeName + ".init()", 200, "Shutting down " + this.soeName + " SOE.");
     this.soHelper = null;
     this.serverLog = null;
     this.mapServerDataAccess = null;
     this.layerInfos = null;
 }
        /**
         * This method returns the utility network dataset.
         */
        public IDataset GetUNDataset(IServerObject serverObject, string versionName = null)
        {
            IMapServer           mapService          = (MapServer)serverObject;
            IMapServerDataAccess mapServerDataAccess = (IMapServerDataAccess)serverObject;

            // Get feature class from any layer
            IFeatureClass fc = (IFeatureClass)mapServerDataAccess.GetDataSource(mapService.DefaultMapName, 0);

            // Get the container feature dataset
            IFeatureDataset fd = fc.FeatureDataset;

            // Open feature dataset in specified version
            if (!String.IsNullOrEmpty(versionName))
            {
                IWorkspace           workspace          = fd.Workspace;
                IVersionedWorkspace4 versionedWorkspace = (IVersionedWorkspace4)workspace;
                IVersion4            childVersion       = (IVersion4)versionedWorkspace.FindVersion(versionName);
                IFeatureWorkspace    childFWS           = (IFeatureWorkspace)childVersion;
                fd = childFWS.OpenFeatureDataset(fd.Name);
            }

            // Loop through contained datasets to find the UN one
            IDataset     ds        = (IDataset)fd;
            IEnumDataset enumSubDS = ds.Subsets;
            IDataset     subDS     = enumSubDS.Next();

            while (subDS != null)
            {
                if (subDS.Type == esriDatasetType.esriDTUtilityNetwork)
                {
                    return(subDS);
                }
                subDS = enumSubDS.Next();
            }

            return(null);

            // Alternative approach is to use the dataset extension

            /*
             * // Get extension container
             * IFeatureDatasetExtensionContainer fdce = (IFeatureDatasetExtensionContainer)fd;
             *
             * // Find UN dataset by type
             * IFeatureDatasetExtension unFDSExt = fdce.FindExtension(esriDatasetType.esriDTUtilityNetwork);
             * IDatasetContainer2 unDSContainer = (IDatasetContainer2)unFDSExt;
             *
             * IEnumDatasetName dsNames = unDSContainer.DatasetNames[esriDatasetType.esriDTUtilityNetwork];
             *
             * IDatasetName dsName = dsNames.Next();
             * if (dsName != null)
             * {
             *  unDataset = unDSContainer.DatasetByName[esriDatasetType.esriDTUtilityNetwork, dsName.Name];
             * }
             */
        }
        public void Init(IServerObjectHelper pSOH)
        {
            this.soHelper = pSOH;
            this.serverLog = new ServerLogger();
            this.mapServerDataAccess = (IMapServerDataAccess)this.soHelper.ServerObject;
            IMapServer3 ms = (IMapServer3)this.mapServerDataAccess;
            IMapServerInfo mapServerInfo = ms.GetServerInfo(ms.DefaultMapName);
            this.layerInfos = mapServerInfo.MapLayerInfos;

            serverLog.LogMessage(ServerLogger.msgType.infoStandard, this.soeName + ".init()", 200, "Initialized " + this.soeName + " SOE.");
        }
Beispiel #9
0
 public NetUNTracingRESTSOE()
 {
     soe_name            = this.GetType().Name;
     logger              = new ServerLogger();
     reqHandler          = new SoeRestImpl(soe_name, CreateRestSchema()) as IRESTRequestHandler;
     soeUtil             = new SOEUtil();
     mapService          = null;
     unLayerInfo         = null;
     mapServerDataAccess = null;
     unDataset           = null;
 }
Beispiel #10
0
        public void Init(IServerObjectHelper pSOH)
        {
            this.soHelper            = pSOH;
            this.serverLog           = new ServerLogger();
            this.mapServerDataAccess = (IMapServerDataAccess)this.soHelper.ServerObject;
            IMapServer     ms            = (IMapServer)this.mapServerDataAccess;
            IMapServerInfo mapServerInfo = ms.GetServerInfo(ms.DefaultMapName);

            this.layerInfos = mapServerInfo.MapLayerInfos;

            serverLog.LogMessage(ServerLogger.msgType.infoStandard, this.soeName + ".init()", 200, "Initialized " + this.soeName + " SOE.");
        }
        private bool loadGeometricNetworkFromServer(IServerObjectHelper serverObjectHelper, ServerLogger logger)
        {
            bool result = false;

            if (null != serverObjectHelper)
            {
                try
                {
                    IMapServer3          mapServer  = (IMapServer3)serverObjectHelper.ServerObject;
                    IMapServerDataAccess da         = (IMapServerDataAccess)mapServer;
                    IMapLayerInfos       layerInfos = mapServer.GetServerInfo(mapServer.DefaultMapName).MapLayerInfos;
                    IFeatureDataset      ftrDataset = null;
                    for (int i = 0; i < layerInfos.Count; i++)
                    {
                        IMapLayerInfo lyrInfo = layerInfos.get_Element(i);
                        if (lyrInfo.IsFeatureLayer)
                        {
                            IFeatureClass ftrClass = (IFeatureClass)da.GetDataSource(mapServer.DefaultMapName, lyrInfo.ID);
                            if (null == ftrDataset && ftrClass.FeatureDataset.Name == this.networkName)
                            {
                                ftrDataset = ftrClass.FeatureDataset;
                            }
                            if (esriFeatureType.esriFTSimpleEdge == ftrClass.FeatureType)
                            {
                                this.addEdgeFeatureClass(ftrClass);
                            }
                            else if (esriFeatureType.esriFTSimpleJunction == ftrClass.FeatureType)
                            {
                                this.addJunctionFeatureClass(ftrClass);
                            }
                        }
                    }
                    if (this.edgeCount > 0 && this.junctionCount > 0 && null != ftrDataset)
                    {
                        INetworkCollection networkCollection = ftrDataset as INetworkCollection;
                        if (networkCollection != null && networkCollection.GeometricNetworkCount > 0)
                        {
                            this.geometricNetwork = networkCollection.GeometricNetwork[0];
                            result = true;
                        }
                    }
                }
                catch (Exception e)
                {
                    if (null != logger)
                    {
                        logger.LogMessage(ServerLogger.msgType.error, typeof(NetworkHelper).Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name, GLC.AO.AOUtilities.ErrorCode, e.Message);
                    }
                }
            }
            return(result);
        }
Beispiel #12
0
        /// <summary>
        ///     code to execute when command is run.
        /// </summary>
        /// <exception cref="System.NullReferenceException">Map service was not found.</exception>
        public Collection <FeatureClassIndexMap> Execute()
        {
            var mapServer = _serverObjectHelper.ServerObject as IMapServer3;

            if (mapServer == null)
            {
#if !DEBUG
                _logger.LogMessage(ServerLogger.msgType.error, "CreateLayerMapCommand.Execute", MessageCode, "Map service not found.");
#endif
                throw new NullReferenceException("Map service was not found.");
            }

            _dataAccess = (IMapServerDataAccess)mapServer;

            if (_dataAccess == null)
            {
#if !DEBUG
                _logger.LogMessage(ServerLogger.msgType.error, "CreateLayerMapCommand.Execute", MessageCode, "Problem accessing IMapServerDataAccess object.");
#endif
                throw new NullReferenceException("Problem accessing IMapServerDataAccess object.");
            }

            var result = new Collection <FeatureClassIndexMap>();

            _defaultMapName = mapServer.DefaultMapName;
#if !DEBUG
            _logger.LogMessage(ServerLogger.msgType.infoStandard, "CreateLayerMapCommand.Execute", MessageCode,
                               string.Format("default map name: {0}", _defaultMapName));
#endif
            var layerInfos = mapServer.GetServerInfo(_defaultMapName).MapLayerInfos;

            var count = layerInfos.Count;

            for (var i = 0; i < count; i++)
            {
                var layerInfo = layerInfos.Element[i];
#if !DEBUG
                _logger.LogMessage(ServerLogger.msgType.infoStandard, "CreateLayerMapCommand.Execute", MessageCode,
                                   string.Format("layerInfo name: {0}", layerInfo.Name));
#endif
                if (layerInfo.IsComposite)
                {
                    continue;
                }

                result.Add(new FeatureClassIndexMap(i, layerInfo.Name, GetFeatureClassFromMap(i)));
            }

            new UpdateLayerMapWithFieldIndexMapCommand(result).Execute();

            return(result);
        }
        /// <summary>
        ///     code to execute when command is run.
        /// </summary>
        /// <exception cref="System.NullReferenceException">Map service was not found.</exception>
        public Collection<FeatureClassIndexMap> Execute()
        {
            var mapServer = _serverObjectHelper.ServerObject as IMapServer3;

            if (mapServer == null)
            {
            #if !DEBUG
                _logger.LogMessage(ServerLogger.msgType.error, "CreateLayerMapCommand.Execute", MessageCode, "Map service not found.");
            #endif
                throw new NullReferenceException("Map service was not found.");
            }

            _dataAccess = (IMapServerDataAccess)mapServer;

            if (_dataAccess == null)
            {
            #if !DEBUG
                _logger.LogMessage(ServerLogger.msgType.error, "CreateLayerMapCommand.Execute", MessageCode, "Problem accessing IMapServerDataAccess object.");
            #endif
                throw new NullReferenceException("Problem accessing IMapServerDataAccess object.");
            }

            var result = new Collection<FeatureClassIndexMap>();

            _defaultMapName = mapServer.DefaultMapName;
            #if !DEBUG
            _logger.LogMessage(ServerLogger.msgType.infoStandard, "CreateLayerMapCommand.Execute", MessageCode, string.Format("default map name: {0}", _defaultMapName));
            #endif
            var layerInfos = mapServer.GetServerInfo(_defaultMapName).MapLayerInfos;

            var count = layerInfos.Count;

            for (var i = 0; i < count; i++)
            {
                var layerInfo = layerInfos.Element[i];
            #if !DEBUG
                _logger.LogMessage(ServerLogger.msgType.infoStandard, "CreateLayerMapCommand.Execute", MessageCode, string.Format("layerInfo name: {0}", layerInfo.Name));
            #endif
                if (layerInfo.IsComposite)
                {
                    continue;
                }

                result.Add(new FeatureClassIndexMap(i, layerInfo.Name, GetFeatureClassFromMap(i)));
            }

            new UpdateLayerMapWithFieldIndexMapCommand(result).Execute();

            return result;
        }
        public void Init(IServerObjectHelper pSOH)
        {
            serverObjectHelper = pSOH;

            mapServerDataAccess = (IMapServerDataAccess)pSOH.ServerObject;
            IMapServer3 ms = (IMapServer3)pSOH.ServerObject;

            this.mapServerInfo = ms.GetServerInfo(ms.DefaultMapName);
            this.layerInfos    = mapServerInfo.MapLayerInfos;

            if (layerId < 0)
            {
                layerId = 0;
            }
        }
        public void Init(IServerObjectHelper pSOH)
        {
            IMapServer           mapServer           = pSOH.ServerObject as IMapServer;
            IMapServerDataAccess mapServerDataAccess = mapServer as IMapServerDataAccess;
            IMapServerInfo       mapServerInfo       = mapServer.GetServerInfo(mapServer.DefaultMapName);
            IMapLayerInfos       layerInfos          = mapServerInfo.MapLayerInfos;
            IMapLayerInfo        ndLayerInfo         = null;

            // Get the network dataset layer from current service
            for (var i = 0; i < layerInfos.Count; i++)
            {
                IMapLayerInfo layerInfo = layerInfos.Element[i];
                if (layerInfo.Type.Equals("Network Dataset Layer", StringComparison.InvariantCultureIgnoreCase))
                {
                    ndLayerInfo = layerInfo;
                    break;
                }
            }

            // Get the network dataset
            if (ndLayerInfo != null)
            {
                var dt = mapServerDataAccess.GetDataSource(mapServer.DefaultMapName, ndLayerInfo.ID);
                // Cast the dataset to required network dataset interface
                networkDataset = dt as INetworkDataset;
            }

            if (networkDataset != null)
            {
                // Open the streets feature class
                IDataset          dataSet    = networkDataset as IDataset;
                IFeatureWorkspace fWorkspace = dataSet.Workspace as IFeatureWorkspace;
                streetFC = fWorkspace.OpenFeatureClass(streetsName);

                // Get the Streets source ID
                INetworkSource streetNetworkSource = networkDataset.SourceByName[streetsName];
                streetsSourceID = streetNetworkSource.ID;

                // Get the TraveTime attribute ID
                INetworkAttribute travelTimeAttribute = networkDataset.AttributeByName[costAttributeName];
                travelTimeAttributeID = travelTimeAttribute.ID;
            }
        }
        private void RicavaInfoFc()
        {
            try
            {
                IMapServer4 mapServer      = (IMapServer4)serverObjectHelper.ServerObject;
                string      nomeMapService = mapServer.DefaultMapName;

                // Use IMapServerDataAccess to get the data
                IMapServerDataAccess dataAccess = (IMapServerDataAccess)mapServer;
                // Get access to the source feature class.
                fcClienti = (IFeatureClass)dataAccess.GetDataSource(nomeMapService, 0);
                fcFiliari = (IFeatureClass)dataAccess.GetDataSource(nomeMapService, 1);

                logger.LogMessage(ServerLogger.msgType.infoDetailed, "Fc", 8000, "SOE Geomarketing GiancaGIS: FC ricavati");
            }
            catch (Exception errore)
            {
                logger.LogMessage(ServerLogger.msgType.error, "Construct", 8000, $@"SOE GeoMarketing GiancaGIS: {errore.Message}");
            }
        }
        public IDataset GetUNDataset2(IServerObject serverObject, string versionName = null)
        {
            IDataset             unDataset           = null;
            IMapServer           mapService          = (MapServer)serverObject;
            IMapServerDataAccess mapServerDataAccess = (IMapServerDataAccess)serverObject;

            // Get feature class from any layer
            IFeatureClass fc = (IFeatureClass)mapServerDataAccess.GetDataSource(mapService.DefaultMapName, 0);

            // Get the container feature dataset
            IFeatureDataset fd = fc.FeatureDataset;

            // Open feature dataset in specified version
            if (!String.IsNullOrEmpty(versionName))
            {
                IWorkspace           workspace          = fd.Workspace;
                IVersionedWorkspace4 versionedWorkspace = (IVersionedWorkspace4)workspace;
                IVersion4            childVersion       = (IVersion4)versionedWorkspace.FindVersion(versionName);
                IFeatureWorkspace    childFWS           = (IFeatureWorkspace)childVersion;
                fd = childFWS.OpenFeatureDataset(fd.Name);
            }

            // Get extension container
            IFeatureDatasetExtensionContainer fdce = (IFeatureDatasetExtensionContainer)fd;

            // Find UN dataset by type
            IFeatureDatasetExtension unFDSExt      = fdce.FindExtension(esriDatasetType.esriDTUtilityNetwork);
            IDatasetContainer2       unDSContainer = (IDatasetContainer2)unFDSExt;

            IEnumDatasetName dsNames = unDSContainer.DatasetNames[esriDatasetType.esriDTUtilityNetwork];

            IDatasetName dsName = dsNames.Next();

            if (dsName != null)
            {
                unDataset = unDSContainer.DatasetByName[esriDatasetType.esriDTUtilityNetwork, dsName.Name];
            }

            return(unDataset);
        }
        private IFeatureClass GetEditAreaFeatureClass(IServerObject serverObject)
        {
            try
            {
                // Get GDB workspace
                IMapServer           mapService          = (MapServer)serverObject;
                IMapServerDataAccess mapServerDataAccess = (IMapServerDataAccess)serverObject;
                IDataset             ds        = (IDataset)mapServerDataAccess.GetDataSource(mapService.DefaultMapName, 0);
                IWorkspace           workspace = ds.Workspace;

                // Open edit areas feature class in default workspace
                IVersionedWorkspace4 versionedWorkspace = (IVersionedWorkspace4)workspace;
                IVersion4            defaultVersion     = (IVersion4)versionedWorkspace.DefaultVersion;
                IFeatureWorkspace    defaultFWS         = (IFeatureWorkspace)defaultVersion;
                return(defaultFWS.OpenFeatureClass(_editAreasFCName));
            }
            catch (Exception e)
            {
                _serverLog.LogMessage(ServerLogger.msgType.infoStandard, _soiName + ".GetEditAreaFeatureClass()",
                                      200, "Error while retrieving edit areas feature class: " + e.ToString());
            }
            return(null);
        }
Beispiel #19
0
        private string  UseAOToCreateUpdateFeatures(string sql)
        {
            string retString = "in get UseAOToCreateUpdateFeatures >";

            try
            {
                //get map server
                IMapServer3 mapServer = (IMapServer3)serverObjectHelper.ServerObject;

                IMapServerDataAccess dataAccess = (IMapServerDataAccess)mapServer;

                IFeatureClass fc = dataAccess.GetDataSource(mapServer.DefaultMapName, 0) as IFeatureClass;
                retString += ">Attempting to get wse";
                IWorkspace ws = (fc as IDataset).Workspace;
                //string sql = @"exec dbo.apLITSaveChanges @curGeoLocID = 5, @NewGeoLocId = 2, @address = '222W.Pine', @windowsLogin = '******', @city = 'wern', @zipCode = '12345', @Latitude = 1, @longitude = 2, @facilityname = 'asdf', @appID = 'asdf', @serverName = 'asdf', @status = 'r'";
                ws.ExecuteSQL(sql);
                return("ok");
            }
            catch (Exception ex)
            {
                return("ERROR " + ex.ToString());
            }
        }
Beispiel #20
0
        public void Init(IServerObjectHelper pSOH)
        {
            _soHelper  = pSOH;
            _serverLog = new ServerLogger();

            // set the name of the point layer in the mapservice
            string mapLayerToFind = "points";

            //System.Diagnostics.Debugger.Launch();
            //Access the map service and its layer infos
            ESRI.ArcGIS.Carto.IMapServer3 mapServer = (ESRI.ArcGIS.Carto.IMapServer3)_soHelper.ServerObject;
            string         mapName    = mapServer.DefaultMapName;
            IMapLayerInfos layerInfos = mapServer.GetServerInfo(mapName).MapLayerInfos;
            IMapLayerInfo  layerInfo;

            // Find the index of the layer of interest
            int c          = layerInfos.Count;
            int layerIndex = 0;

            for (int i = 0; i < c; i++)
            {
                layerInfo = layerInfos.get_Element(i);
                if (layerInfo.Name == mapLayerToFind)
                {
                    layerIndex = i;
                    break;
                }
            }

            // Access the source feature class of the layer data source (to request it on map export :-))
            IMapServerDataAccess dataAccess = (IMapServerDataAccess)mapServer;

            myPointsClass = (IFeatureClass)dataAccess.GetDataSource(mapName, layerIndex);

            _serverLog.LogMessage(ServerLogger.msgType.infoStandard, _soiName + ".init()", 200, "Initialized " + _soiName + " SOI.");
        }
Beispiel #21
0
        public void Construct(IPropertySet props)
        {
            configProps = props;
            // Read the properties.

            if (props.GetProperty("FieldName") != null)
            {
                m_mapFieldToQuery = props.GetProperty("FieldName") as string;
            }
            else
            {
                throw new ArgumentNullException();
            }
            if (props.GetProperty("LayerName") != null)
            {
                m_mapLayerNameToQuery = props.GetProperty("LayerName") as string;
            }
            else
            {
                throw new ArgumentNullException();
            }
            try
            {
                // Get the feature layer to be queried.
                // Since the layer is a property of the SOE, this only has to be done once.
                IMapServer3    mapServer = (IMapServer3)serverObjectHelper.ServerObject;
                string         mapName   = mapServer.DefaultMapName;
                IMapLayerInfo  layerInfo;
                IMapLayerInfos layerInfos = mapServer.GetServerInfo(mapName).MapLayerInfos;
                // Find the index position of the map layer to query.
                int c          = layerInfos.Count;
                int layerIndex = 0;
                for (int i = 0; i < c; i++)
                {
                    layerInfo = layerInfos.get_Element(i);
                    if (layerInfo.Name == m_mapLayerNameToQuery)
                    {
                        layerIndex = i;
                        break;
                    }
                }
                // Use IMapServerDataAccess to get the data
                IMapServerDataAccess dataAccess = (IMapServerDataAccess)mapServer;
                // Get access to the source feature class.
                m_fcToQuery = (IFeatureClass)dataAccess.GetDataSource(mapName, layerIndex);
                if (m_fcToQuery == null)
                {
                    logger.LogMessage(ServerLogger.msgType.error, "Construct", 8000, "SOE custom error: Layer name not found.");
                    return;
                }
                // Make sure the layer contains the field specified by the SOE's configuration.
                if (m_fcToQuery.FindField(m_mapFieldToQuery) == -1)
                {
                    logger.LogMessage(ServerLogger.msgType.error, "Construct", 8000, "SOE custom error: Field not found in layer.");
                }
            }
            catch
            {
                logger.LogMessage(ServerLogger.msgType.error, "Construct", 8000, "SOE custom error: Could not get the feature layer.");
            }
        }
Beispiel #22
0
        /// <summary>
        /// Retrieves a list of connection properties from the layers of a <see cref="IMapServer"/>.
        /// </summary>
        /// <param name="mapServer">A map server.</param>
        /// <param name="propertyNames">The names of the keys in each dictionary of the output object.</param>
        /// <returns>
        /// A list of <see cref="KeyValuePair&lt;TKey,KValue&gt;"/> objects.
        /// Each <see cref="KeyValuePair&lt;TKey,KValue&gt;.Key"/> corresponds to a data source name.
        /// Each value is a <see cref="Dictionary&lt;TKey,TValue&gt;"/> of connection properties.
        /// </returns>
        public static List <ConnectionProperties> GetConnectionProperties(this IMapServer mapServer /*, out List<string> propertyNames*/)
        {
            IMapLayerInfos       mapLayerInfos = null;
            IMapLayerInfo        mapLayerInfo  = null;
            IMapServerDataAccess mapServerDA   = null;
            IMapServerInfo       mapServerInfo = null;;
            ////propertyNames = new List<string>();
            IDataset     dataset = null;
            IPropertySet connectionPropertySet = null;
            object       namesObj, valuesObj;

            string[] names;
            object[] values;

            var output = new List <ConnectionProperties>();

            try
            {
                mapServerDA = (IMapServerDataAccess)mapServer;
                // Get the server info for the default map. (This application will assume that there is only a single map: the default.)
                string mapName = mapServer.DefaultMapName;
                mapServerInfo = mapServer.GetServerInfo(mapName);
                // Loop through all of the layers in the map service...
                mapLayerInfos = mapServerInfo.MapLayerInfos;

                ConnectionProperties connectionProperties;

                for (int i = 0, l = mapLayerInfos.Count; i < l; i++)
                {
                    mapLayerInfo = mapLayerInfos.get_Element(i);
                    if (mapLayerInfo.IsComposite)
                    {
                        continue;
                    }

                    connectionProperties = new ConnectionProperties(mapLayerInfo.Name);
                    try
                    {
                        dataset = mapServerDA.GetDataSource(mapName, i) as IDataset;
                    }
                    catch (NotImplementedException ex)
                    {
                        connectionProperties["error"] = ex.Message;
                        output.Add(connectionProperties);
                        continue;
                    }

                    if (dataset != null)
                    {
                        connectionPropertySet = dataset.Workspace.ConnectionProperties;
                        connectionPropertySet.GetAllProperties(out namesObj, out valuesObj);
                        names  = namesObj as string[];
                        values = valuesObj as object[];

                        string name;
                        for (int j = 0; j < names.Length; j++)
                        {
                            name = names[j];
                            connectionProperties[name] = values[j];
                        }
                        output.Add(connectionProperties);
                    }
                }
            }
            finally
            {
                foreach (var item in new object[] { mapLayerInfos, mapLayerInfo, mapServerDA, mapServerInfo, dataset, connectionPropertySet })
                {
                    if (item != null)
                    {
                        Marshal.ReleaseComObject(item);
                    }
                }
            }

            return(output);
        }
        public void Init(IServerObjectHelper pSOH)
        {
            serverObjectHelper = pSOH;

            mapServerDataAccess = (IMapServerDataAccess)pSOH.ServerObject;
            IMapServer3 ms = (IMapServer3)pSOH.ServerObject;
            this.mapServerInfo = ms.GetServerInfo(ms.DefaultMapName);
            this.layerInfos = mapServerInfo.MapLayerInfos;

            if (layerId < 0)
                layerId = 0;
        }