Ejemplo n.º 1
0
        ///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");
        }
Ejemplo n.º 2
0
        ///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");
        }
Ejemplo n.º 3
0
 public async Task <IActionResult> UploadImageFromMap([FromBody] UploadImageMapModel model)
 {
     return(await Upload <UploadImageMapModel>(model));
 }
Ejemplo n.º 4
0
        /// <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");
        }