示例#1
0
        public static OGCEnvelope Parse(XElement element)
        {
            //<BoundingBox CRS="CRS:84" minx="-111.4" miny="43.868" maxx="-109.4" maxy="45.4"/>
            OGCEnvelope env = new OGCEnvelope()
            {
                maxX = double.Parse(element.Attribute(XName.Get("maxx")).Value),
                minX = double.Parse(element.Attribute(XName.Get("minx")).Value),
                maxY = double.Parse(element.Attribute(XName.Get("maxy")).Value),
                minY = double.Parse(element.Attribute(XName.Get("miny")).Value)
            };

            if (element.Attributes(XName.Get("CRS")).Count() > 0)
            {
                env.CoordinateSystem = element.Attribute(XName.Get("CRS")).Value;
            }
            else if (element.Attributes(XName.Get("SRS")).Count() > 0)
            {
                env.CoordinateSystem = element.Attribute(XName.Get("SRS")).Value;
            }

            return env;
        }
示例#2
0
        public override bool Identify(int xpoint, int ypoint, double latitude, double longitude, GISEnvelope envelope, GISLayerInfo featureLayer)
        {
            // http://maps.google.com/maps/api/geocode/xml?latlng=40.714224,-73.961452&sensor=true

            try
            {
                if (featureLayer == null) return false;

                envelope = new OGCEnvelope(envelope);
                //string layerString = featureLayer.Id;

                string requestUrl = GetUrl(OGC_OPERATION.GetFeatureInfo, OGC_SERVICE_TYPE.WMS, Server.ActiveService as OGCService, new List<OGCLayer>() { featureLayer as OGCLayer }, envelope as OGCEnvelope, _imageWidth, _imageHeight, xpoint, ypoint);
                GISFeatureResponse response = new GISFeatureResponse();
                response._envelope = BuildEnvelope(longitude, latitude, envelope, Server.MaxZoom * .9);
                response._layers = new List<GISLayerInfo>() { featureLayer };
                response.HasError = false;
                response.LastRequest = requestUrl;

                webClient.GetRequest(requestUrl, ProcessQueryResponse, response);
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }
示例#3
0
        private string GetUrl(OGC_OPERATION operation, OGC_SERVICE_TYPE type, OGCService service, IEnumerable<OGCLayer> layers, OGCEnvelope envelope, int width, int height, int x = 0, int y = 0)
        {
            StringBuilder requestUrl = new StringBuilder();

            requestUrl.AppendFormat("http://{0}/{1}?", Server.Host, Server.ServletPath);

            string stylename = string.Empty;

            switch (operation)
            {
                case OGC_OPERATION.GetCapabilities:
                    requestUrl.AppendFormat("request=GetCapabilities&version={0}&service={1}", Server.Version, type);
                    break;
                case OGC_OPERATION.GetMap:
                    requestUrl.AppendFormat(OGC_URL, service._getMapUrl, operation, type, Server.Version);

                    if (layers.Any() && layers.First().Style != null && layers.First().Style.Count > 0)
                    {
                        var style = from xx in layers where xx.Style != null && xx.Style.Count > 0 select xx.Style.First();
                        stylename = style.First().Name;
                    }

                    var fixedLayer = from qq in layers where qq.FixedHeight > 0 select qq;

                    if (fixedLayer.Count() > 0)
                    {
                        if (fixedLayer.First().Style != null && fixedLayer.First().Style.Count > 0)
                        {
                            stylename = fixedLayer.First().Style.First().Name;
                        }

                        requestUrl.AppendFormat(OGC_MAP, fixedLayer.First().FixedWidth, fixedLayer.First().FixedHeight, fixedLayer.First().Id, envelope, stylename);
                    }
                    else
                    {
                        string currentlayerId = BuildLayerString(layers, ref stylename);

                        requestUrl.AppendFormat(OGC_MAP, _imageWidth, height, currentlayerId, envelope, stylename, service.Format);
                    }
                    break;
                case OGC_OPERATION.GetFeatureInfo:
                    string layerString = BuildLayerString(layers, ref stylename);
                    requestUrl.AppendFormat(OGC_URL, service._getMapUrl, operation, type, Server.Version);
                    requestUrl.AppendFormat(OGC_FEATURE_INFO, Server.Version, envelope, layerString, type, _imageWidth, _imageHeight, x, y);
                    break;
                case OGC_OPERATION.GetFeature:
                    string layerString2 = BuildLayerString(layers, ref stylename);
                    requestUrl.AppendFormat(OGC_URL, service._getFeatureUrl, operation, type, "1.0.0");
                    requestUrl.AppendFormat(OGC_FEATURE, layerString2, envelope);
                    break;
                case OGC_OPERATION.GetLegendGraphic:
                    if (layers.First().Style != null && layers.First().Style.Count > 0)
                    {
                        var url = from xx in layers.First().Style where !string.IsNullOrEmpty(xx.LegendURL) select xx;

                        if (url.Count() > 0) return url.First().LegendURL;
                    }

                    string legendlayerId = BuildLayerString(layers, ref stylename);
                    requestUrl.AppendFormat(OGC_URL, service._getMapUrl, operation, type, Server.Version);
                    requestUrl.AppendFormat(LEGEND_URL, Server.Version, legendlayerId, service.Format);
                    break;
            }

            if (!string.IsNullOrEmpty(Server.Map))
            {
                requestUrl.AppendFormat("&map={0}", Server.Map);
            }

            return requestUrl.ToString();
        }
示例#4
0
        public override void ExecuteSearch(string searchTerm, SEARCH_TYPE searchType, GISEnvelope searchArea, GISLayerInfo featureLayer)
        {
            if (searchType == SEARCH_TYPE.Geocode)
            {
                // http://{0}/{1}?SERVICE={2}&VERSION={3}&REQUEST=GetFeatureInfo&LAYERS={4}&QUERY_LAYERS={4}&STYLES=&BBOX={5}&FEATURE_COUNT=10&HEIGHT={6}&WIDTH={7}&FORMAT=image%2Fpng&INFO_FORMAT=text%2Fxml&SRS={8}&X={9}&Y={10}
                OGCEnvelope envelope = new OGCEnvelope(searchArea);

                string requestUrl = string.Format(FEATURE_INFO_URL, Server.Host, Server.ServletPath, OGC_SERVICE_TYPE.WMS, Server.Version, (featureLayer as OGCLayer).Id, (envelope as OGCEnvelope).ToBBoxString(), _imageHeight, _imageWidth, searchArea.CoordinateSystem, _imageWidth / 2, _imageHeight / 2);
                GISFeatureResponse response = new GISFeatureResponse();
                response._envelope = searchArea;
                response._layers = new List<GISLayerInfo>() { featureLayer };
                response.HasError = false;
                response.LastRequest = requestUrl;

                webClient.GetRequest(requestUrl, ProcessQueryResponse, response);
            }
            else
            {
                List<GISLayerInfo> layers = new List<GISLayerInfo>();
                GetQueryLayers(Server.ActiveService, ref layers);

                string queryLayers = string.Empty;

                foreach (GISLayerInfo layer in layers)
                {
                    queryLayers += layer.Id;
                }

                string requestUrl = GetUrl(OGC_OPERATION.GetFeatureInfo, OGC_SERVICE_TYPE.WMS, Server.ActiveService as OGCService, queryLayers.Cast<OGCLayer>(), new OGCEnvelope(searchArea), _imageWidth, _imageHeight);
                //http://<hostname>/<deploy_name>/com.esri.wms.Esrimap?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetFeatureInfo&SRS=EPSG:4326&BBOX=-117,38,-90,49&WIDTH=600&HEIGHT=400&QUERY_LAYERS=States&X=200&Y=150&

                GISFeatureResponse response = new GISFeatureResponse() { SearchTerm = searchTerm };
                response._envelope = new GISEnvelope();
                response._layers = new List<GISLayerInfo>() { new OGCLayer("Search", "Search") };
                response.HasError = false;
                response.LastRequest = requestUrl;

                webClient.GetRequest(requestUrl, ProcessSearchResponse, response);
            }
        }
示例#5
0
        public override bool GetMap(GISService activeService, List<GISLayerInfo> mapLayers, GISEnvelope mapEnvelope, double zoomLevel, string requestString)
        {
            OGCImageResponse response = new OGCImageResponse();

            try
            {
                response.Envelope = mapEnvelope;
                response.Layers = mapLayers;
                OGCEnvelope ogcEnvelope = new OGCEnvelope(mapEnvelope);

                //string currentlayerId = mapLayers[0]._id;
                //string styleId = (mapLayers[0] as OGCLayer).Style;

                //for (int i = 1; i < mapLayers.Count; i++)
                //{
                //    currentlayerId = string.Format("{0},{1}", currentlayerId, mapLayers[i]._id);
                //}

                //for (int i = 1; i < mapLayers.Count; i++)
                //{
                //    if (!string.IsNullOrEmpty((mapLayers[i] as OGCLayer).Style))
                //    {
                //        styleId = string.Format("{0},{1}", styleId, (mapLayers[i] as OGCLayer).Style);
                //    }
                //}

                response.LastRequest = requestString;

                response.LastResponse = "Complete";
                response._mapImageUrl = requestString;
                response.ZoomLevel = zoomLevel;
                Server.RaiseMapResponse(response);
                return true;
            }
            catch (System.Exception ex)
            {
                Server.RaiseErrorResponse(new GISResponse() { LastResponse = ex.Message, ErrorMessage = ex.Message, HasError = true, LastRequest = requestString, _envelope = response.Envelope, _layers = mapLayers });
            }

            return false;
        }
示例#6
0
        public override bool GetMap(GISService activeService, GISEnvelope mapEnvelope, List<GISLayerInfo> mapLayers)
        {
            if (mapEnvelope == null) SelectEnvelope(activeService);

            OGCEnvelope ogcEnvelope = new OGCEnvelope(mapEnvelope);

            if (activeService.HasLayers || GetServiceDetails(activeService).Result)
            {
                if (mapLayers.Count == 0)
                {
                    mapLayers.Add(activeService.BaseLayers[0]);
                }

                //string currentlayerId = mapLayers[0]._id;
                //string styleId = (mapLayers[0] as OGCLayer).Style;
                GISEnvelope maxEnvelope = activeService._baseExtent;
                if (mapLayers.Count > 0) maxEnvelope = mapLayers[0]._baseExtent;

                //for (int i = 1; i < mapLayers.Count; i++)
                //{
                //    currentlayerId = string.Format("{0},{1}", currentlayerId, mapLayers[i]._id);
                //    if (mapLayers[i]._baseExtent != null) maxEnvelope = mapLayers[i]._baseExtent;
                //}

                //for (int i = 1; i < mapLayers.Count; i++)
                //{
                //    styleId = string.Format("{0},{1}", styleId, (mapLayers[i] as OGCLayer).Style);
                //}

                string mapUrl = GetUrl(OGC_OPERATION.GetMap, OGC_SERVICE_TYPE.WMS, activeService as OGCService, mapLayers.Cast<OGCLayer>(), ogcEnvelope, _imageWidth, _imageHeight);
                return GetMap(activeService, mapLayers, mapEnvelope, SetZoomLevel(mapEnvelope, maxEnvelope), mapUrl);
            }
            else
            {
                Server.RaiseErrorResponse(new GISResponse() { Envelope = mapEnvelope, ErrorMessage = "Service details could not be found for this service.", Layers = mapLayers, HasError = true });
                return false;
            }
        }