///WARNING! Need enternet public async Task MapGoogleUploadWhiteImageTest() { var cd = Directory.GetCurrentDirectory(); var model = new UploadImageMapModel { Latitude = 55, Longitude = 48, Scale = 17, Zoom = 21, MapType = MapTypes.Google }; var ret = await MainControllerService.UploadImageFromMaps(model, Guid.Empty); Assert.False(File.Exists(cd + "\\images\\101.bmp")); var expected = ("", 400, "Image_So_Zommed"); Assert.Equal(expected.Item2, ret.Item2); Assert.Equal(expected.Item3, ret.Item3); Assert.Equal(expected.Item1.GetHashCode(), ret.Item1.GetHashCode()); File.Delete(cd + "\\images\\101.bmp"); }
///WARNING! Need enternet public async Task MapBingUploadTest() { var cd = Directory.GetCurrentDirectory(); var model = new UploadImageMapModel { Latitude = 55, Longitude = 48, Scale = 17, Zoom = 17, MapType = MapTypes.Bing }; var ret = await MainControllerService.UploadImageFromMaps(model, Guid.Empty); Assert.True(File.Exists(cd + "\\images\\101.bmp")); var expected = (new { resultImagePath = "\\images\\101.bmp" }, 200, ""); Assert.Equal(expected.Item2, ret.Item2); Assert.Equal(expected.Item3, ret.Item3); Assert.Equal(expected.Item1.GetHashCode(), ret.Item1.GetHashCode()); File.Delete(cd + "\\images\\101.bmp"); }
public async Task <IActionResult> UploadImageFromMap([FromBody] UploadImageMapModel model) { return(await Upload <UploadImageMapModel>(model)); }
/// <summary> /// Upload image from Google maps or Bing Maps with longitude, lantitude and scale /// </summary> /// <param name="model">Model to upload</param> /// <returns>(result, state, message)</returns> public async Task <(object, int, string)> UploadImageFromMaps(UploadImageMapModel model, Guid UserId) { var filePath = _fileService.GetNextFilesPath(1, DirectoryType.Upload)[0]; var key = ""; var url = ""; switch (model.MapType) { case MapTypes.Bing: key = "AsxCWNx09JBu4SthLwqimpbExMR30Ho7iVzGaxCp6TsMzlDn9G7f3O6tZS40io7K"; url = $@"https://dev.virtualearth.net/REST/v1/Imagery/Map/Aerial/{model.Latitude}," + $@"{model.Longitude}/{model.Zoom}?mapSize={model.MapSizeX ?? 2000},{model.MapSizeY ?? 1500}&key={key}"; break; case MapTypes.Google: key = "AIzaSyD1Gub16QiBvQ4olb_0HvFidiqQoPKsrkk"; url = $@"https://maps.googleapis.com/maps/api/staticmap?center={model.Latitude}," + $@"{model.Longitude}&zoom={model.Zoom}&size={model.MapSizeX ?? 640}x{model.MapSizeY ?? 640}&key={key}" + "&maptype=satellite&scale=1&format=bmp"; break; } using (var client = new HttpClient()) { try { using (var result = await client.GetAsync(url)) { if (result.IsSuccessStatusCode) { //TODO: Handle error if ((await result.Content.ReadAsStreamAsync()).TryConvertToImage(out Image img)) { Bitmap bmp = (Bitmap)img; if (model.MapType == MapTypes.Bing && (bmp.GetPixel(0, bmp.Height - 1).Name == "fff5f2ed" || bmp.GetPixel(bmp.Width - 1, bmp.Height - 1).Name == "fff5f2ed") || (model.MapType == MapTypes.Google && (bmp.GetPixel(0, bmp.Height - 1).Name == "ffe4e2de" || bmp.GetPixel(bmp.Width - 1, bmp.Height - 1).Name == "ffe4e2de")) ) { return("", 400, "Image_So_Zommed"); } img.Save(filePath, System.Drawing.Imaging.ImageFormat.Bmp); string retUrl = filePath.Remove(0, filePath.LastIndexOf("\\images\\")); ImageDBModel image = new ImageDBModel { Cells = null, Expires = model.IsPreview ? DateTime.Now + TimeSpan.FromDays(1) : DateTime.Now + TimeSpan.FromDays(30), IsPreview = model.IsPreview, Longitude = model.Longitude, Latitude = model.Latitude, Scale = -1, URL = retUrl }; if (UserId == Guid.Empty) { _applicationDBContext.Images.Add(image); } else { _applicationDBContext.Users.Find(UserId).DownloadedImages.Add(image); } await _applicationDBContext.SaveChangesAsync(); return(new { resultImagePath = retUrl }, 200, ""); } return("", 400, "File_Not_Image"); } } } catch (HttpRequestException) { return("", 404, "Host_Not_found"); } } return("", 400, "Unavailable_URL"); }