downloaderV2, download single tile

This commit is contained in:
Anton Martynenko
2025-10-28 15:10:50 +01:00
parent 7b24c1d720
commit 12f3bf890a
2 changed files with 179 additions and 20 deletions
+31 -20
View File
@@ -3,6 +3,7 @@ using Microsoft.AspNetCore.Mvc;
using Microsoft.OpenApi.Models;
using Swashbuckle.AspNetCore.SwaggerGen;
using SatelliteProvider.DataAccess;
using SatelliteProvider.DataAccess.Models;
using SatelliteProvider.DataAccess.Repositories;
using SatelliteProvider.Common.Configs;
using SatelliteProvider.Common.Interfaces;
@@ -22,6 +23,7 @@ builder.Services.AddSingleton<IRegionRepository>(sp => new RegionRepository(conn
builder.Services.AddHttpClient();
builder.Services.AddSingleton<GoogleMapsDownloader>();
builder.Services.AddSingleton<GoogleMapsDownloaderV2>();
builder.Services.AddSingleton<ITileService, TileService>();
builder.Services.AddEndpointsApiExplorer();
@@ -97,41 +99,50 @@ IResult UploadImage([FromForm] UploadImageRequest request)
return Results.Ok(new SaveResult { Success = false });
}
async Task<IResult> DownloadSingleTile([FromBody] DownloadTileRequest request, ITileService tileService, ILogger<Program> logger)
async Task<IResult> DownloadSingleTile([FromBody] DownloadTileRequest request, GoogleMapsDownloaderV2 downloader, ITileRepository tileRepository, ILogger<Program> logger)
{
try
{
logger.LogInformation("Downloading single tile at ({Lat}, {Lon}) with zoom level {Zoom}",
request.Latitude, request.Longitude, request.ZoomLevel);
var tiles = await tileService.DownloadAndStoreTilesAsync(
var downloadedTile = await downloader.DownloadSingleTileAsync(
request.Latitude,
request.Longitude,
1.0,
request.ZoomLevel);
if (tiles.Count == 0)
var now = DateTime.UtcNow;
var tileEntity = new TileEntity
{
logger.LogWarning("No tiles were downloaded");
return Results.NotFound(new { message = "No tiles were downloaded" });
}
Id = Guid.NewGuid(),
ZoomLevel = downloadedTile.ZoomLevel,
Latitude = downloadedTile.CenterLatitude,
Longitude = downloadedTile.CenterLongitude,
TileSizeMeters = downloadedTile.TileSizeMeters,
TileSizePixels = 256,
ImageType = "jpg",
MapsVersion = $"downloaded_{now:yyyy-MM-dd}",
FilePath = downloadedTile.FilePath,
CreatedAt = now,
UpdatedAt = now
};
var tile = tiles[0];
logger.LogInformation("Tile downloaded successfully: {Id}", tile.Id);
await tileRepository.InsertAsync(tileEntity);
logger.LogInformation("Tile saved to database with ID: {Id}", tileEntity.Id);
var response = new DownloadTileResponse
{
Id = tile.Id,
ZoomLevel = tile.ZoomLevel,
Latitude = tile.Latitude,
Longitude = tile.Longitude,
TileSizeMeters = tile.TileSizeMeters,
TileSizePixels = tile.TileSizePixels,
ImageType = tile.ImageType,
MapsVersion = tile.MapsVersion,
FilePath = tile.FilePath,
CreatedAt = tile.CreatedAt,
UpdatedAt = tile.UpdatedAt
Id = tileEntity.Id,
ZoomLevel = tileEntity.ZoomLevel,
Latitude = tileEntity.Latitude,
Longitude = tileEntity.Longitude,
TileSizeMeters = tileEntity.TileSizeMeters,
TileSizePixels = tileEntity.TileSizePixels,
ImageType = tileEntity.ImageType,
MapsVersion = tileEntity.MapsVersion,
FilePath = tileEntity.FilePath,
CreatedAt = tileEntity.CreatedAt,
UpdatedAt = tileEntity.UpdatedAt
};
return Results.Ok(response);