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; }
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; } }
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(); }
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); } }
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; }
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; } }