async public Task <bool> MapRequest(gView.Framework.Carto.IDisplay display) { if (_dataset == null) { return(false); } List <IWebServiceTheme> themes = Themes; if (themes == null) { return(false); } #region Check for visible Layers bool visFound = this.Themes.Where(l => l.Visible).Count() > 0; if (!visFound) { if (_image != null) { _image.Dispose(); _image = null; } return(true); } #endregion Check for visible Layers var serviceUrl = _dataset.ServiceUrl(); //IServiceRequestContext context = display.Map as IServiceRequestContext; var jsonExportMap = new JsonExportMap(); if (display?.Envelope != null) { var env = display.Envelope; jsonExportMap.BBox = $"{env.minx.ToDoubleString()},{env.miny.ToDoubleString()},{env.maxx.ToDoubleString()},{env.maxy.ToDoubleString()}"; } var sRef = display.SpatialReference ?? this.SpatialReference; if (sRef != null) { jsonExportMap.BBoxSRef = sRef.Name.ToLower().Replace("epsg:", ""); } jsonExportMap.Size = $"{display.iWidth},{display.iHeight}"; var layerIds = this.Themes .Where(l => l.Visible && (l.Class is IWebFeatureClass || l.Class is IWebRasterClass)) .Select(l => { if (l.Class is IWebFeatureClass) { return(((IWebFeatureClass)l.Class).ID); } if (l.Class is IWebRasterClass) { return(((IWebRasterClass)l.Class).ID); } return(String.Empty); }); jsonExportMap.Layers = $"show:{String.Join(",", layerIds)}"; var urlParameters = SerializeToUrlParameters(jsonExportMap); var response = await _dataset.TryPostAsync <JsonExportResponse>( serviceUrl .UrlAppendPath("export") .UrlAppendParameters("f=json") .UrlAppendParameters(urlParameters)); bool hasImage = false; if (!String.IsNullOrWhiteSpace(response.Href)) { var bm = WebFunctions.DownloadImage(response.Href); if (bm != null) { hasImage = true; _image = new GeorefBitmap(bm); if (response.Extent != null) { _image.Envelope = new Envelope(response.Extent.Xmin, response.Extent.Ymin, response.Extent.Xmax, response.Extent.Ymax); } _image.SpatialReference = sRef; } } if (!hasImage) { if (_image != null) { _image.Dispose(); _image = null; } return(false); } return(true); return(true); }
public IActionResult ExportMap(string folder, string id) { try { if (folder != DefaultFolder) { throw new Exception("Unknown folder: " + folder); } var interpreter = InternetMapServer.GetInterpreter(typeof(ArcGisServerInterperter)); #region Request JsonExportMap exportMap = Deserialize <JsonExportMap>( Request.HasFormContentType ? (IEnumerable <KeyValuePair <string, StringValues> >)Request.Form : (IEnumerable <KeyValuePair <string, StringValues> >)Request.Query); ServiceRequest serviceRequest = new ServiceRequest(id, JsonConvert.SerializeObject(exportMap)) { OnlineResource = InternetMapServer.OnlineResource, Method = "export" }; #endregion #region Security Identity identity = Identity.FromFormattedString(String.Empty); identity.HashedPassword = String.Empty; serviceRequest.Identity = identity; #endregion #region Queue & Wait IServiceRequestContext context = new ServiceRequestContext( InternetMapServer.Instance, interpreter, serviceRequest); InternetMapServer.ThreadQueue.AddQueuedThreadSync(interpreter.Request, context); #endregion if (serviceRequest.Succeeded) { return(Result(JsonConvert.DeserializeObject <JsonExportResponse>(serviceRequest.Response))); } else { return(Result(JsonConvert.DeserializeObject <JsonError>(serviceRequest.Response))); } } catch (Exception ex) { return(Json(new JsonError() { error = new JsonError.Error() { code = 999, message = ex.Message } })); } }
private void ExportMapRequest(IServiceRequestContext context) { try { _exportMap = JsonConvert.DeserializeObject <JsonExportMap>(context.ServiceRequest.Request); using (var serviceMap = context.CreateServiceMapInstance()) { #region Display serviceMap.Display.dpi = _exportMap.Dpi; var size = _exportMap.Size.ToSize(); serviceMap.Display.iWidth = size[0]; serviceMap.Display.iHeight = size[1]; var bbox = _exportMap.BBox.ToBBox(); serviceMap.Display.ZoomTo(new Envelope(bbox[0], bbox[1], bbox[2], bbox[3])); #endregion #region ImageFormat / Transparency var imageFormat = (ImageFormat)Enum.Parse(typeof(ImageFormat), _exportMap.ImageFormat); var iFormat = System.Drawing.Imaging.ImageFormat.Png; if (imageFormat == ImageFormat.jpg) { iFormat = System.Drawing.Imaging.ImageFormat.Jpeg; } if (_exportMap.Transparent) { serviceMap.Display.MakeTransparent = true; serviceMap.Display.TransparentColor = System.Drawing.Color.White; } else { serviceMap.Display.MakeTransparent = false; } if (serviceMap.Display.MakeTransparent && iFormat == System.Drawing.Imaging.ImageFormat.Png) { // Beim Png sollt dann beim zeichnen keine Hintergrund Rectangle gemacht werden // Darum Farbe mit A=0 // Sonst schaut das Bild beim PNG32 und Antialiasing immer zerrupft aus... serviceMap.Display.BackgroundColor = System.Drawing.Color.Transparent; } #endregion serviceMap.BeforeRenderLayers += ServiceMap_BeforeRenderLayers; serviceMap.Render(); if (serviceMap.MapImage != null) { string fileName = serviceMap.Name.Replace(",", "_") + "_" + System.Guid.NewGuid().ToString("N") + "." + iFormat.ToString().ToLower(); string path = (_mapServer.OutputPath + @"/" + fileName).ToPlattformPath(); serviceMap.SaveImage(path, iFormat); context.ServiceRequest.Succeeded = true; context.ServiceRequest.Response = JsonConvert.SerializeObject(new JsonExportResponse() { Href = _mapServer.OutputUrl + "/" + fileName, Width = serviceMap.Display.iWidth, Height = serviceMap.Display.iHeight, ContentType = "image/" + iFormat.ToString().ToLower(), Scale = serviceMap.Display.mapScale, Extent = new JsonExtent() { Xmin = serviceMap.Display.Envelope.minx, Ymin = serviceMap.Display.Envelope.miny, Xmax = serviceMap.Display.Envelope.maxx, Ymax = serviceMap.Display.Envelope.maxy // ToDo: SpatialReference } }); } else { context.ServiceRequest.Succeeded = false; context.ServiceRequest.Response = JsonConvert.SerializeObject(new JsonError() { error = new JsonError.Error() { code = -1, message = "No image data" } }); } } } catch (Exception ex) { context.ServiceRequest.Succeeded = false; context.ServiceRequest.Response = JsonConvert.SerializeObject(new JsonError() { error = new JsonError.Error() { code = -1, message = ex.Message } }); } }