public object Clone() { MapServerClass clone = new MapServerClass(_dataset); clone._clonedThemes = new List <IWebServiceTheme>(); foreach (IWebServiceTheme theme in Themes) { if (theme == null || theme.Class == null) { continue; } clone._clonedThemes.Add(LayerFactory.Create(theme.Class, theme as ILayer, clone) as IWebServiceTheme); } clone.AfterMapRequest = AfterMapRequest; return(clone); }
async protected override Task <string> SendRequest(IUserData userData, string axlRequest) { if (_dataset == null) { return(""); } string server = ConfigTextStream.ExtractValue(_dataset.ConnectionString, "server"); string service = ConfigTextStream.ExtractValue(_dataset.ConnectionString, "service"); IServiceRequestContext context = (userData != null) ? userData.GetUserData("IServiceRequestContext") as IServiceRequestContext : null; string user = ConfigTextStream.ExtractValue(_dataset.ConnectionString, "user"); string pwd = Identity.HashPassword(ConfigTextStream.ExtractValue(_dataset.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; // ToDo: //pwd = context.ServiceRequest.Identity.HashedPassword; } ServerConnection conn = new ServerConnection(server); string resp = conn.Send(service, axlRequest, "BB294D9C-A184-4129-9555-398AA70284BC", user, pwd); try { return(conn.Send(service, axlRequest, "BB294D9C-A184-4129-9555-398AA70284BC", user, pwd)); } catch (Exception ex) { MapServerClass.ErrorLog(context, "Query", server, service, ex); return(String.Empty); } }
async public Task <bool> MapRequest(gView.Framework.Carto.IDisplay display) { if (_dataset == null) { return(false); } if (!_dataset._opened) { await _dataset.Open(); } IServiceRequestContext context = display.Map as IServiceRequestContext; try { ISpatialReference sRef = (display.SpatialReference != null) ? display.SpatialReference.Clone() as ISpatialReference : null; StringBuilder sb = new StringBuilder(); sb.Append("<?xml version='1.0' encoding='utf-8'?>"); sb.Append("<ARCXML version='1.1'>"); sb.Append("<REQUEST>"); sb.Append("<GET_IMAGE>"); sb.Append("<PROPERTIES>"); sb.Append("<ENVELOPE minx='" + display.Envelope.minx.ToString() + "' miny='" + display.Envelope.miny.ToString() + "' maxx='" + display.Envelope.maxx.ToString() + "' maxy='" + display.Envelope.maxy.ToString() + "' />"); sb.Append("<IMAGESIZE width='" + display.iWidth + "' height='" + display.iHeight + "' />"); sb.Append("<BACKGROUND color='255,255,255' transcolor='255,255,255' />"); //if (display.SpatialReference != null && !display.SpatialReference.Equals(_sRef)) //{ // string map_param = gView.Framework.Geometry.SpatialReference.ToProj4(display.SpatialReference); // sb.Append("<SPATIALREFERENCE name='" + display.SpatialReference.Name + "' param='" + map_param + "' />"); //} if (sRef != null) { string map_param = gView.Framework.Geometry.SpatialReference.ToProj4(display.SpatialReference); sb.Append("<SPATIALREFERENCE name='" + display.SpatialReference.Name + "' param='" + map_param + "' />"); string wkt = gView.Framework.Geometry.SpatialReference.ToESRIWKT(sRef); string geotranwkt = gView.Framework.Geometry.SpatialReference.ToESRIGeotransWKT(sRef); if (wkt != null) { wkt = wkt.Replace("\"", """); geotranwkt = geotranwkt.Replace("\"", """); if (!String.IsNullOrEmpty(geotranwkt)) { sb.Append("<FEATURECOORDSYS string=\"" + wkt + "\" datumtransformstring=\"" + geotranwkt + "\" />"); sb.Append("<FILTERCOORDSYS string=\"" + wkt + "\" datumtransformstring=\"" + geotranwkt + "\" />"); } else { sb.Append("<FEATURECOORDSYS string=\"" + wkt + "\" />"); sb.Append("<FILTERCOORDSYS string=\"" + wkt + "\" />"); } } } sb.Append("<LAYERLIST>"); foreach (IWebServiceTheme theme in Themes) { sb.Append("<LAYERDEF id='" + theme.LayerID + "' visible='" + (theme.Visible && !theme.Locked).ToString() + "' />"); } sb.Append("</LAYERLIST>"); sb.Append("</PROPERTIES>"); sb.Append("</GET_IMAGE>"); sb.Append("</REQUEST>"); sb.Append("</ARCXML>"); string user = ConfigTextStream.ExtractValue(_dataset._connection, "user"); string pwd = Identity.HashPassword(ConfigTextStream.ExtractValue(_dataset._connection, "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; // ToDo: //pwd = context.ServiceRequest.Identity.HashedPassword; } #if (DEBUG) //Logger.LogDebug("Start gView Mapserver Request"); #endif ServerConnection service = new ServerConnection(ConfigTextStream.ExtractValue(_dataset._connection, "server")); string resp = service.Send(_name, sb.ToString(), "BB294D9C-A184-4129-9555-398AA70284BC", user, pwd); #if (DEBUG) //Logger.LogDebug("gView Mapserver Request Finished"); #endif XmlDocument doc = new XmlDocument(); doc.LoadXml(resp); IBitmap bitmap = null; XmlNode output = doc.SelectSingleNode("//OUTPUT[@file]"); if (_image != null) { _image.Dispose(); _image = null; } try { System.IO.FileInfo fi = new System.IO.FileInfo(output.Attributes["file"].Value); if (fi.Exists) { bitmap = Current.Engine.CreateBitmap(fi.FullName); } } catch { } if (bitmap == null) { bitmap = WebFunctions.DownloadImage(output); } if (bitmap != null) { _image = new GeorefBitmap(bitmap); _image.SpatialReference = display.SpatialReference; _image.Envelope = display.Envelope; if (AfterMapRequest != null) { AfterMapRequest(this, display, _image); } } return(_image != null); } catch (Exception ex) { MapServerClass.ErrorLog(context, "MapRequest", ConfigTextStream.ExtractValue(_dataset._connection, "server"), _name, ex); return(false); } }