Esempio n. 1
0
        public void Request(IServiceRequestContext context)
        {
            if (context == null || context.ServiceRequest == null)
            {
                return;
            }

            if (_mapServer == null)
            {
                return;
            }

            MiscParameterDescriptor parameters = new MiscParameterDescriptor();

            if (!parameters.ParseParameters(context.ServiceRequest.Request.Split('&')))
            {
                _mapServer.Log("Invalid Parameters", loggingMethod.error, context.ServiceRequest.Request);
                return;
            }

            using (IServiceMap map = context.ServiceMap) // _mapServer[context];
            {
                if (map == null)
                {
                    _mapServer.Log("Invalid Map", loggingMethod.error, context.ServiceRequest.Request);
                    return;
                }

                QueryFilter filter = parameters.BBOX != null ? new SpatialFilter() : new QueryFilter();
                filter.SubFields = "*";
                if (parameters.BBOX != null)
                {
                    ((SpatialFilter)filter).Geometry = parameters.BBOX;
                }
                ISpatialReference sRef = SpatialReference.FromID("epsg:4326");
                filter.FeatureSpatialReference = sRef;
                if (filter is SpatialFilter)
                {
                    ((SpatialFilter)filter).FilterSpatialReference = sRef;
                }

                // Get Layers
                List <ILayer> queryLayers = new List <ILayer>();
                foreach (string l in parameters.LAYERS)
                {
                    if (l == String.Empty || l[0] != 'c')
                    {
                        continue;
                    }

                    MapServerHelper.Layers layers = MapServerHelper.FindMapLayers(map, _useTOC, l.Substring(1, l.Length - 1));
                    if (layers == null)
                    {
                        continue;
                    }

                    foreach (ILayer layer in layers)
                    {
                        queryLayers.Add(layer);
                    }
                }

                StringBuilder sb = new StringBuilder();
                foreach (ILayer layer in queryLayers)
                {
                    if (layer is IFeatureLayer && ((IFeatureLayer)layer).FeatureClass != null)
                    {
                        using (IFeatureCursor cursor = ((IFeatureLayer)layer).FeatureClass.Search(filter) as IFeatureCursor)
                        {
                            Stream stream = gView.Framework.OGC.KML.KML.ToKml(cursor, 1000);
                            stream.Position = 0;
                            byte[] bytes = new byte[(int)stream.Length];
                            stream.Read(bytes, 0, bytes.Length);
                            sb.Append(Encoding.UTF8.GetString(bytes));
                        }
                    }
                }

                context.ServiceRequest.Response = sb.ToString();
            }
        }
Esempio n. 2
0
        public void Request(IServiceRequestContext context)
        {
            if (context == null || context.ServiceRequest == null)
            {
                return;
            }

            if (_mapServer == null)
            {
                return;
            }

            MiscParameterDescriptor parameters = new MiscParameterDescriptor();

            if (!parameters.ParseParameters(context.ServiceRequest.Request.Split('&')))
            {
                _mapServer.Log("Invalid Parameters", loggingMethod.error, context.ServiceRequest.Request);
                return;
            }

            using (IServiceMap map = context.ServiceMap) // _mapServer[context];
            {
                if (map == null)
                {
                    _mapServer.Log("Invalid Map", loggingMethod.error, context.ServiceRequest.Request);
                    return;
                }

                QueryFilter filter = parameters.BBOX != null ? new SpatialFilter() : new QueryFilter();
                filter.SubFields = "*";
                if (parameters.BBOX != null)
                {
                    ((SpatialFilter)filter).Geometry = parameters.BBOX;
                }
                if (!String.IsNullOrEmpty(parameters.SRS))
                {
                    ISpatialReference sRef = SpatialReference.FromID(parameters.SRS);
                    filter.FeatureSpatialReference = sRef;
                    if (filter is SpatialFilter)
                    {
                        ((SpatialFilter)filter).FilterSpatialReference = sRef;
                    }
                }
                // Get Layers
                List <ILayer> queryLayers = new List <ILayer>();
                foreach (string l in parameters.LAYERS)
                {
                    if (l == String.Empty || l[0] != 'c')
                    {
                        continue;
                    }

                    MapServerHelper.Layers layers = MapServerHelper.FindMapLayers(map, _useTOC, l.Substring(1, l.Length - 1));
                    if (layers == null)
                    {
                        continue;
                    }

                    foreach (ILayer layer in layers)
                    {
                        queryLayers.Add(layer);
                    }
                }

                StringBuilder sb = new StringBuilder();
                sb.Append("{'type':'FeatureCollection','features':[");
                foreach (ILayer layer in queryLayers)
                {
                    if (layer is IFeatureLayer && ((IFeatureLayer)layer).FeatureClass != null)
                    {
                        using (IFeatureCursor cursor = ((IFeatureLayer)layer).FeatureClass.Search(filter) as IFeatureCursor)
                        {
                            string json = gView.Framework.OGC.GeoJson.GeoJson.ToGeoJsonFeatures(cursor, parameters.MaxFeatures);
                            sb.Append(json);
                        }
                    }
                }
                sb.Append("]}");

                context.ServiceRequest.Response = sb.ToString();
            }
        }