async public Task <bool> Open(gView.MapServer.IServiceRequestContext context) { string url = String.Empty; try { _isOpened = true; bool ret = true; if (_wfsDataset != null) { ret = _wfsDataset.Open(); } if (_class != null) { string param = "REQUEST=GetCapabilities&VERSION=1.1.1&SERVICE=WMS"; url = Append2Url(_connection, param); string response = WebFunctions.HttpSendRequest(url, "GET", null, ConfigTextStream.ExtractValue(_connectionString, "usr"), ConfigTextStream.ExtractValue(_connectionString, "pwd")); response = RemoveDOCTYPE(response); _class.Init(response, _wfsDataset); } _state = (ret) ? DatasetState.opened : DatasetState.unknown; return(ret); } catch (Exception ex) { await WMSClass.ErrorLogAsync(context, "GetCapabilities", url, ex); _class = null; _wfsDataset = null; return(false); } }
async public Task <bool> MapRequest(gView.Framework.Carto.IDisplay display) { if (_srs == null) { return(false); } if (!_dataset.IsOpened) { if (!await _dataset.Open()) { return(false); } } List <IWebServiceTheme> themes = Themes; if (themes == null) { return(false); } #region Check for visible Layers bool visFound = false; foreach (IWebServiceTheme theme in themes) { if (!theme.Visible) { continue; } if (theme.MinimumScale > 1 && theme.MinimumScale > display.mapScale) { continue; } if (theme.MaximumScale > 1 && theme.MaximumScale < display.mapScale) { continue; } visFound = true; break; } if (!visFound) { if (_image != null) { _image.Dispose(); _image = null; } return(true); } #endregion Check for visible Layers int iWidth = display.iWidth; int iHeight = display.iHeight; if (BeforeMapRequest != null) { ISpatialReference sRef = this.SpatialReference; BeforeMapRequest(this, display, ref sRef, ref iWidth, ref iHeight); if (sRef != null && sRef.Name.ToLower() != this.SRSCode.ToLower()) { this.SRSCode = sRef.Name; } } IEnvelope displayEnv = display.Envelope; if (display.SpatialReference != null && !display.SpatialReference.Equals(this.SpatialReference)) { displayEnv = GeometricTransformerFactory.Transform2D(displayEnv, display.SpatialReference, this.SpatialReference).Envelope; iHeight = (int)((displayEnv.Height / displayEnv.Width) * iWidth); } StyledLayerDescriptorWriter sldWriter = null; StringBuilder request = new StringBuilder("VERSION=1.1.1&REQUEST=GetMap"); StringBuilder layers = new StringBuilder(), styles = new StringBuilder(); foreach (IWebServiceTheme theme in themes) { if (!theme.Visible || theme.Locked || (!(theme.Class is WMSThemeClass) && !(theme.Class is WFSFeatureClass))) { continue; } if (layers.Length > 0) { layers.Append(","); styles.Append(","); } layers.Append(theme.Class.Name); if (theme.Class is IWMSStyle) { styles.Append(((IWMSStyle)theme.Class).Style); } if (theme.FeatureRenderer != null && _userDefinedSymbolization.SupportSLD && _userDefinedSymbolization.UserStyle) { SLDRenderer sldRenderer = null; if (theme.FeatureRenderer is SLDRenderer) { sldRenderer = (SLDRenderer)theme.FeatureRenderer; } else { //if (theme.FilterQuery is ISpatialFilter) //{ // IGeometry pGeometry = GeometricTransformer.Transform2D( // ((ISpatialFilter)theme.FilterQuery).Geometry, // display.SpatialReference, // this.SpatialReference); // IGeometry oGeometry = ((ISpatialFilter)theme.FilterQuery).Geometry; // ((ISpatialFilter)theme.FilterQuery).Geometry = pGeometry; // sldRenderer = new SLDRenderer(theme); // ((ISpatialFilter)theme.FilterQuery).Geometry = oGeometry; //} //else { sldRenderer = await SLDRenderer.CreateAync(theme); if (display.SpatialReference != null) { sldRenderer.SetDefaultSrsName(display.SpatialReference.Name); } } } if (sldWriter == null) { sldWriter = new StyledLayerDescriptorWriter(); } sldWriter.WriteNamedLayer(theme.Class.Name, sldRenderer); } } request.Append("&LAYERS=" + layers.ToString()); if (sldWriter != null) { string sld = sldWriter.ToLineString(); if (!_use_SLD_BODY && !string.IsNullOrEmpty(MapServerConfig.DefaultOutputPath)) { string sldFilename = "style_" + Guid.NewGuid().ToString("N") + ".sld"; StreamWriter sw = new StreamWriter(MapServerConfig.DefaultOutputPath + @"/" + sldFilename); sw.WriteLine(sldWriter.ToString()); sw.Close(); request.Append("&SLD=" + MapServerConfig.DefaultOutputUrl + "/" + sldFilename); } else { request.Append("&SLD_BODY=" + sld.Replace("#", "%23")); } } else { request.Append("&STYLES=" + styles.ToString()); } if (_exceptions != null && _exceptions.Formats.Count > 0) { request.Append("&EXCEPTIONS=" + _exceptions.Formats[0]); } request.Append("&SRS=" + _srs.Srs[_srs.SRSIndex]); request.Append("&WIDTH=" + iWidth); request.Append("&HEIGHT=" + iHeight); request.Append("&FORMAT=" + _getMap.Formats[_getMap.FormatIndex]); request.Append("&BBOX=" + displayEnv.minx.ToString(_nhi) + "," + displayEnv.miny.ToString(_nhi) + "," + displayEnv.maxx.ToString(_nhi) + "," + displayEnv.maxy.ToString(_nhi)); //request.Append("&BGCOLOR=FFFFFF"); request.Append("&TRANSPARENT=TRUE"); if (_image != null) { _image.Dispose(); _image = null; } IBitmap bitmap = null; //if (_getMap.Post_OnlineResource != String.Empty && sldWriter != null) //{ // //bm = WebFunctions.DownloadImage(WMSDataset.Append2Url(_getMap.Post_OnlineResource, request.ToString() + "&SLD="), // // UTF8Encoding.UTF8.GetBytes(sldWriter.ToString())); // bm = WebFunctions.DownloadImage(_getMap.Post_OnlineResource, // UTF8Encoding.UTF8.GetBytes(request.ToString())); //} //else { #if (DEBUG) gView.Framework.system.Logger.LogDebug("Start WMS DownloadImage"); #endif string url = WMSDataset.Append2Url(_getMap.Get_OnlineResource, request.ToString()); try { bitmap = WebFunctions.DownloadImage(url, ConfigTextStream.ExtractValue(_dataset._connectionString, "usr"), ConfigTextStream.ExtractValue(_dataset._connectionString, "pwd")); } catch (Exception ex) { await WMSClass.ErrorLogAsync(display.Map as IServiceRequestContext, "MapRequest", url, ex); return(false); } #if (DEBUG) gView.Framework.system.Logger.LogDebug("WMS DownloadImage Finished"); #endif } if (bitmap != null) { _image = new GeorefBitmap(bitmap); _image.Envelope = displayEnv; _image.SpatialReference = this.SpatialReference; if (AfterMapRequest != null) { AfterMapRequest(this, display, _image); } } return(_image != null); }