Exemplo n.º 1
0
        public static string GetGeomFieldName(MapServerInfo mapinfo, int layerID)
        {
            MapLayerInfo[] mapLayerInfos = mapinfo.MapLayerInfos;
            string         empty         = string.Empty;

            MapLayerInfo[] array = mapLayerInfos;
            for (int i = 0; i < array.Length; i++)
            {
                MapLayerInfo mapLayerInfo = array[i];
                if (layerID == mapLayerInfo.LayerID)
                {
                    Field[] fieldArray = mapLayerInfo.Fields.FieldArray;
                    Field[] array2     = fieldArray;
                    for (int j = 0; j < array2.Length; j++)
                    {
                        Field field = array2[j];
                        if (field.Type == esriFieldType.esriFieldTypeGeometry)
                        {
                            empty = field.Name;
                            break;
                        }
                    }
                }
            }
            return(empty);
        }
Exemplo n.º 2
0
        public AGSThemeRasterClass(IDataset dataset, MapLayerInfo layerInfo)
        {
            _dataset = dataset;

            _name = layerInfo.Name;
            _id   = layerInfo.LayerID.ToString();
        }
Exemplo n.º 3
0
        private MapImage GetMapImage(esriImageReturnType returnType)
        {
            MapDescription mapDescription = ((AgsDataFrame)DataFrame).MapServerInfo.NewMapDescription(Extent);

            mapDescription.SetAllLayersNotVisible();

            for (int i = 0; i < _layerList.Count; ++i)
            {
                AgsLayer layer = _layerList[i];
                string   query = _queryList[i];

                MapLayerInfo mapLayerInfo = layer.MapLayerInfo;

                while (mapLayerInfo != null)
                {
                    LayerDescription layerDescription = mapDescription.LayerDescriptions.First(ld => ld.LayerID == mapLayerInfo.LayerID);
                    layerDescription.Visible = true;

                    if (!String.IsNullOrEmpty(query))
                    {
                        layerDescription.DefinitionExpression = query;
                    }

                    mapLayerInfo = mapLayerInfo.Parent;
                    query        = null;
                }
            }

            ImageDescription imageDescription = new ImageDescription();

            imageDescription.ImageDisplay = new ImageDisplay(Convert.ToInt32(Width * Resolution), Convert.ToInt32(Height * Resolution), DataFrame.Dpi * Resolution);
            imageDescription.ImageType    = new ImageType(returnType);

            switch (ImageType)
            {
            case CommonImageType.Png:
                imageDescription.ImageType.ImageFormat = esriImageFormat.esriImagePNG32;

                if (TransparentBackground)
                {
                    mapDescription.TransparentColor = mapDescription.BackgroundSymbol.Color;
                }
                break;

            default:
                imageDescription.ImageType.ImageFormat = esriImageFormat.esriImageJPG;
                break;
            }

            return(_service.MapServer.ExportMapImage(mapDescription, imageDescription));
        }
Exemplo n.º 4
0
 public static string GetOIDFieldName(MapServerInfo mapinfo, int layerID)
 {
     MapLayerInfo[] mapLayerInfos = mapinfo.MapLayerInfos;
     MapLayerInfo[] array         = mapLayerInfos;
     for (int i = 0; i < array.Length; i++)
     {
         MapLayerInfo mapLayerInfo = array[i];
         if (layerID == mapLayerInfo.LayerID)
         {
             return(mapLayerInfo.IDField);
         }
     }
     return(string.Empty);
 }
Exemplo n.º 5
0
        private void CalcParentLayerIds(MapLayerInfo[] mapLayerInfos, int layerId)
        {
            MapLayerInfo layer = MapLayerInfoById(mapLayerInfos, layerId);

            if (layer == null || layer.ParentLayerID < 0)
            {
                return;
            }

            List <int> parentIds = new List <int>();

            while (layer != null)
            {
                parentIds.Add(layer.ParentLayerID);
                layer = MapLayerInfoById(mapLayerInfos, layer.ParentLayerID);
            }
            _parentIds[layerId] = parentIds;
        }
Exemplo n.º 6
0
        public AgsLayer(AgsDataFrame dataFrame, MapLayerInfo mapLayerInfo, MapServerLegendInfo mapServerLegendInfo, bool defaultVisible)
        {
            _service             = dataFrame.Service as AgsMapService;
            _mapLayerInfo        = mapLayerInfo;
            _mapServerLegendInfo = mapServerLegendInfo;

            DataFrame      = dataFrame;
            DefaultVisible = defaultVisible;
            ID             = mapLayerInfo.LayerID.ToString();
            Name           = mapLayerInfo.Name;

            double toPixels = 1.0 / (12 * dataFrame.Dpi);

            if (dataFrame.MapServerInfo.Units == esriUnits.esriMeters)
            {
                toPixels *= MetersPerFoot;
            }

            if (mapLayerInfo.MaxScale > 0)
            {
                MinimumPixelSize = mapLayerInfo.MaxScale * toPixels;
            }

            if (mapLayerInfo.MinScale > 0)
            {
                MaximumPixelSize = mapLayerInfo.MinScale * toPixels;
            }

            if (mapLayerInfo.IsFeatureLayer && mapLayerInfo.LayerType != "Annotation Layer" && mapLayerInfo.LayerType != "Raster Catalog Layer")
            {
                Selectable = mapLayerInfo.CanSelect;
                Fields     = new List <CommonField>();

                foreach (Field proxyField in mapLayerInfo.Fields.FieldArray)
                {
                    AgsField field = new AgsField(proxyField);
                    Fields.Add(field);

                    if (field.Type == CommonFieldType.ID)
                    {
                        FeatureIDField = field;
                    }
                    else if (field.Type == CommonFieldType.Geometry)
                    {
                        GeometryField = field;

                        switch (proxyField.GeometryDef.GeometryType)
                        {
                        case esriGeometryType.esriGeometryPoint: FeatureType = OgcGeometryType.Point; break;

                        case esriGeometryType.esriGeometryMultipoint: FeatureType = OgcGeometryType.MultiPoint; break;

                        case esriGeometryType.esriGeometryPolyline: FeatureType = OgcGeometryType.MultiLineString; break;

                        case esriGeometryType.esriGeometryPolygon: FeatureType = OgcGeometryType.MultiPolygon; break;
                        }
                    }
                }

                Legend = new AgsLegend(mapServerLegendInfo);
            }
            else
            {
                switch (mapLayerInfo.LayerType)
                {
                case "Raster Catalog Layer":
                case "Raster Layer":
                    Type = CommonLayerType.Image;
                    break;

                case "Annotation Layer": Type = CommonLayerType.Annotation; break;

                case "Group Layer": Type = CommonLayerType.Group; break;
                }
            }
        }
Exemplo n.º 7
0
 public AGSThemeClass(IDataset dataset, MapLayerInfo layerInfo)
 {
     _dataset   = dataset;
     _layerInfo = layerInfo;
 }
Exemplo n.º 8
0
        public AGSThemeFeatureClass(AGSDataset dataset, MapLayerInfo layerInfo, geometryType geomType)
        {
            if (dataset is IFeatureDataset)
            {
                _envelope = ((IFeatureDataset)dataset).Envelope;
                _sRef     = ((IFeatureDataset)dataset).SpatialReference;
            }
            _dataset = dataset;

            _name     = layerInfo.Name;
            _id       = layerInfo.LayerID.ToString();
            _geomType = geomType;

            #region Fields
            foreach (Proxy.Field fieldInfo in layerInfo.Fields.FieldArray)
            {
                gView.Framework.Data.Field field = new gView.Framework.Data.Field(fieldInfo.Name);
                switch (fieldInfo.Type)
                {
                case esriFieldType.esriFieldTypeBlob:
                    field.type = FieldType.binary;
                    break;

                case esriFieldType.esriFieldTypeDate:
                    field.type = FieldType.Date;
                    break;

                case esriFieldType.esriFieldTypeDouble:
                    field.type = FieldType.Double;
                    break;

                case esriFieldType.esriFieldTypeGeometry:
                    _shapeFieldName = field.name;
                    field.type      = FieldType.Shape;
                    break;

                case esriFieldType.esriFieldTypeGlobalID:
                    field.type = FieldType.unknown;
                    break;

                case esriFieldType.esriFieldTypeGUID:
                    field.type = FieldType.guid;
                    break;

                case esriFieldType.esriFieldTypeInteger:
                    field.type = FieldType.integer;
                    break;

                case esriFieldType.esriFieldTypeOID:
                    _idFieldName = field.name;
                    field.type   = FieldType.ID;
                    break;

                case esriFieldType.esriFieldTypeRaster:
                    field.type = FieldType.binary;
                    break;

                case esriFieldType.esriFieldTypeSingle:
                    field.type = FieldType.Float;
                    break;

                case esriFieldType.esriFieldTypeSmallInteger:
                    field.type = FieldType.smallinteger;
                    break;

                case esriFieldType.esriFieldTypeString:
                case esriFieldType.esriFieldTypeXML:
                    field.type = FieldType.String;
                    break;
                }
                _fields.Add(field);
            }
            #endregion
        }
Exemplo n.º 9
0
        public bool Open(gView.MapServer.IServiceRequestContext context)
        {
            if (_class == null)
            {
                _class = new AGSClass(this);
            }

            #region Parameters
            string server  = ConfigTextStream.ExtractValue(ConnectionString, "server");
            string service = ConfigTextStream.ExtractValue(ConnectionString, "service");
            string user    = ConfigTextStream.ExtractValue(ConnectionString, "user");
            string pwd     = ConfigTextStream.ExtractValue(ConnectionString, "pwd");

            if ((user == "#" || user == "$") &&
                context != null && context.ServiceRequest != null && context.ServiceRequest.Identity != null)
            {
                string roles = String.Empty;
                if (user == "#" && context.ServiceRequest.Identity.UserRoles != null)
                {
                    foreach (string role in context.ServiceRequest.Identity.UserRoles)
                    {
                        if (String.IsNullOrEmpty(role))
                        {
                            continue;
                        }
                        roles += "|" + role;
                    }
                }
                user = context.ServiceRequest.Identity.UserName + roles;
                pwd  = context.ServiceRequest.Identity.HashedPassword;
            }
            #endregion

            try
            {
                _proxy = ProxySettings.Proxy(server);

                _themes.Clear();
                _parentIds.Clear();

                _mapServer       = new gView.Interoperability.AGS.Proxy.MapServer(service);
                _mapServer.Proxy = gView.Framework.Web.ProxySettings.Proxy(service);
                MapServerInfo msi = _mapServer.GetServerInfo(_mapServer.GetDefaultMapName());
                _mapDescription = msi.DefaultMapDescription;

                MapLayerInfo[] mapLayerInfos = msi.MapLayerInfos;
                foreach (MapLayerInfo layerInfo in mapLayerInfos)
                {
                    if (layerInfo.Extent is EnvelopeN)
                    {
                        EnvelopeN env = (EnvelopeN)layerInfo.Extent;
                        if (_envelope == null)
                        {
                            _envelope = new gView.Framework.Geometry.Envelope(env.XMin, env.YMin, env.XMax, env.YMax);
                        }
                        else
                        {
                            _envelope.Union(new gView.Framework.Geometry.Envelope(env.XMin, env.YMin, env.XMax, env.YMax));
                        }
                    }

                    CalcParentLayerIds(mapLayerInfos, layerInfo.LayerID);
                    IClass           themeClass = null;
                    IWebServiceTheme theme      = null;
                    LayerDescription ld         = LayerDescriptionById(layerInfo.LayerID);
                    if (ld == null)
                    {
                        continue;
                    }

                    if (layerInfo.LayerType == "Feature Layer")
                    {
                        #region Geometry Type (Point, Line, Polygon)
                        geometryType geomType = geometryType.Unknown;
                        if (layerInfo.Fields != null)
                        {
                            foreach (Proxy.Field fieldInfo in layerInfo.Fields.FieldArray)
                            {
                                if (fieldInfo.Type == esriFieldType.esriFieldTypeGeometry &&
                                    fieldInfo.GeometryDef != null)
                                {
                                    switch (fieldInfo.GeometryDef.GeometryType)
                                    {
                                    case esriGeometryType.esriGeometryMultipoint:
                                    case esriGeometryType.esriGeometryPoint:
                                        geomType = geometryType.Point;
                                        break;

                                    case esriGeometryType.esriGeometryPolyline:
                                        geomType = geometryType.Polyline;
                                        break;

                                    case esriGeometryType.esriGeometryPolygon:
                                        geomType = geometryType.Polygon;
                                        break;

                                    case esriGeometryType.esriGeometryMultiPatch:
                                        break;
                                    }
                                }
                            }
                        }
                        #endregion

                        themeClass = new AGSThemeFeatureClass(this, layerInfo, geomType);
                        theme      = LayerFactory.Create(themeClass, _class as IWebServiceClass) as IWebServiceTheme;
                        if (theme == null)
                        {
                            continue;
                        }
                    }
                    else if (layerInfo.LayerType == "Raster Layer" ||
                             layerInfo.LayerType == "Raster Catalog Layer")
                    {
                        themeClass = new AGSThemeRasterClass(this, layerInfo);
                        theme      = LayerFactory.Create(themeClass, _class as IWebServiceClass) as IWebServiceTheme;
                        if (theme == null)
                        {
                            continue;
                        }
                    }
                    else
                    {
                        MapLayerInfo parentLayer = MapLayerInfoById(mapLayerInfos, layerInfo.ParentLayerID);
                        if (parentLayer != null && parentLayer.LayerType == "Annotation Layer")
                        {
                            themeClass = new AGSThemeFeatureClass(this, layerInfo, geometryType.Polygon);
                            theme      = LayerFactory.Create(themeClass, _class as IWebServiceClass) as IWebServiceTheme;
                            if (theme == null)
                            {
                                continue;
                            }
                        }
                    }
                    if (theme != null)
                    {
                        theme.MinimumScale = layerInfo.MaxScale;
                        theme.MaximumScale = layerInfo.MinScale;
                        theme.Visible      = ld.Visible;
                        _themes.Add(theme);
                    }
                }

                _state = DatasetState.opened;
                return(true);
            }
            catch (Exception ex)
            {
                _state  = DatasetState.unknown;
                _errMsg = ex.Message;
                return(false);
            }
        }