changes
This commit is contained in:
parent
0b1826dccb
commit
5645ad83e5
|
|
@ -15,7 +15,7 @@ public function index()
|
||||||
public function show(string $projectName,?string $currentTab = null)
|
public function show(string $projectName,?string $currentTab = null)
|
||||||
{
|
{
|
||||||
if($project = Project::firstWhere([['name',$projectName]])) {
|
if($project = Project::firstWhere([['name',$projectName]])) {
|
||||||
$availableTabs = ['downloads', 'mosaics', 'reports', 'mailings', 'settings'];
|
$availableTabs = ['downloads', 'mosaics', 'reports', 'mailings', 'settings', 'exports'];
|
||||||
return in_array($currentTab, $availableTabs) ? view('projects.show', compact(['project', 'currentTab'])) : redirect(route('project.show', [$projectName,'downloads']));
|
return in_array($currentTab, $availableTabs) ? view('projects.show', compact(['project', 'currentTab'])) : redirect(route('project.show', [$projectName,'downloads']));
|
||||||
}
|
}
|
||||||
return abort(404);
|
return abort(404);
|
||||||
|
|
|
||||||
|
|
@ -16,9 +16,8 @@
|
||||||
class ProjectInterpolateGrowthModelJob implements ShouldQueue
|
class ProjectInterpolateGrowthModelJob implements ShouldQueue
|
||||||
{
|
{
|
||||||
use Batchable, Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
|
use Batchable, Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
|
||||||
|
|
||||||
protected Project $project;
|
protected Project $project;
|
||||||
protected Carbon $date;
|
|
||||||
protected int $offset;
|
|
||||||
|
|
||||||
public function __construct(Project $project)
|
public function __construct(Project $project)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
32
laravel_app/app/Jobs/newDownloadsUploaded.php
Normal file
32
laravel_app/app/Jobs/newDownloadsUploaded.php
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Jobs;
|
||||||
|
|
||||||
|
use Illuminate\Bus\Queueable;
|
||||||
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
|
use Illuminate\Foundation\Bus\Dispatchable;
|
||||||
|
use Illuminate\Queue\InteractsWithQueue;
|
||||||
|
use Illuminate\Queue\SerializesModels;
|
||||||
|
|
||||||
|
class newDownloadsUploaded implements ShouldQueue
|
||||||
|
{
|
||||||
|
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
|
||||||
|
|
||||||
|
private Project $project;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new job instance.
|
||||||
|
*/
|
||||||
|
public function __construct(Project $project)
|
||||||
|
{
|
||||||
|
$this->project = $project;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute the job.
|
||||||
|
*/
|
||||||
|
public function handle(): void
|
||||||
|
{
|
||||||
|
$this->project->newDownloadsUploaded();
|
||||||
|
}
|
||||||
|
}
|
||||||
56
laravel_app/app/Livewire/Projects/Tabs/Exports.php
Normal file
56
laravel_app/app/Livewire/Projects/Tabs/Exports.php
Normal file
|
|
@ -0,0 +1,56 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Livewire\Projects\Tabs;
|
||||||
|
|
||||||
|
use App\Models\Project;
|
||||||
|
use Livewire\Component;
|
||||||
|
|
||||||
|
class Exports extends Component
|
||||||
|
{
|
||||||
|
public Project $project;
|
||||||
|
public $formData = [];
|
||||||
|
|
||||||
|
public $showDownloadTifsModal = false;
|
||||||
|
public $showDownloadMosaicsModal = false;
|
||||||
|
|
||||||
|
|
||||||
|
public function mount()
|
||||||
|
{
|
||||||
|
$this->formData = [
|
||||||
|
'start_date' => now()->subDays(6)->format('Y-m-d'),
|
||||||
|
'end_date' => now()->subDay()->format('Y-m-d'),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public function render()
|
||||||
|
{
|
||||||
|
return view('livewire.projects.tabs.exports');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function downloadRds()
|
||||||
|
{
|
||||||
|
return $this->project->getRdsAsDownload();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function downloadTifs()
|
||||||
|
{
|
||||||
|
$startDate = \Carbon\Carbon::parse($this->formData['start_date']);
|
||||||
|
$endDate = \Carbon\Carbon::parse($this->formData['end_date']);
|
||||||
|
$this->showDownloadTifsModal = false;
|
||||||
|
return $this->project->getTifsAsZip(
|
||||||
|
$startDate, $endDate
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function downloadMosaics()
|
||||||
|
{
|
||||||
|
$startDate = \Carbon\Carbon::parse($this->formData['start_date']);
|
||||||
|
$endDate = \Carbon\Carbon::parse($this->formData['end_date']);
|
||||||
|
$this->showDownloadMosaicsModal = false;
|
||||||
|
return $this->project->getMosaicsAsZip(
|
||||||
|
$startDate, $endDate
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
namespace App\Models;
|
namespace App\Models;
|
||||||
|
|
||||||
|
use App\Jobs\ProjectDownloadRDSJob;
|
||||||
use App\Jobs\ProjectDownloadTiffJob;
|
use App\Jobs\ProjectDownloadTiffJob;
|
||||||
use App\Jobs\ProjectInterpolateGrowthModelJob;
|
use App\Jobs\ProjectInterpolateGrowthModelJob;
|
||||||
use App\Jobs\ProjectMosiacGeneratorJob;
|
use App\Jobs\ProjectMosiacGeneratorJob;
|
||||||
|
|
@ -348,7 +349,7 @@ public function getFileDownloadsFor(Carbon $endDate, int $offset = 7): array
|
||||||
public function getMosaicsFor(Carbon $endDate, int $offset = 7): array
|
public function getMosaicsFor(Carbon $endDate, int $offset = 7): array
|
||||||
{
|
{
|
||||||
return collect(range(0, 3))
|
return collect(range(0, 3))
|
||||||
->map(function() use ($endDate, $offset){
|
->map(function () use ($endDate, $offset) {
|
||||||
$currentEndDate = $endDate->clone();
|
$currentEndDate = $endDate->clone();
|
||||||
if (!$currentEndDate->isDayOfWeek($this->mail_day)) {
|
if (!$currentEndDate->isDayOfWeek($this->mail_day)) {
|
||||||
$endDate->previous($this->mail_day);
|
$endDate->previous($this->mail_day);
|
||||||
|
|
@ -402,4 +403,101 @@ private function getMinimumDateFromHarvestExcelFile(): Carbon
|
||||||
return min($carry, Carbon::instance(SharedDate::excelToDateTimeObject($value[$season_start_index])));
|
return min($carry, Carbon::instance(SharedDate::excelToDateTimeObject($value[$season_start_index])));
|
||||||
}, now());
|
}, now());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function newDownloadsUploaded()
|
||||||
|
{
|
||||||
|
// $this->createDownloadRecordsInDatabaseAndUpdateStatusForAllDownloadedImages();
|
||||||
|
$date = Carbon::parse('2023-01-01');
|
||||||
|
$now = Carbon::now();
|
||||||
|
|
||||||
|
$offset = (int) $date->diffInDays($now);
|
||||||
|
// dispatch_sync(new ProjectDownloadRDSJob($this, Carbon::yesterday(), 1));
|
||||||
|
dispatch_sync(new ProjectInterpolateGrowthModelJob($this));
|
||||||
|
}
|
||||||
|
public function getRdsAsDownload() {
|
||||||
|
|
||||||
|
$path = $this->download_path.'/Data/extracted_ci/cumulative_vals/combined_CI_data.rds';
|
||||||
|
|
||||||
|
return Storage::download(
|
||||||
|
$path, 'combined_CI_data.rds'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getTifsAsZip(Carbon $startDate, Carbon $endDate) {
|
||||||
|
$path = $this->download_path.'/merged_final_tif';
|
||||||
|
$files = collect(Storage::files($path))
|
||||||
|
->filter(fn($file) => Str::endsWith($file, '.tif'))
|
||||||
|
->filter(function ($file) use ($startDate, $endDate) {
|
||||||
|
$dateString = str_replace('.tif', '', basename($file));
|
||||||
|
$date = Carbon::parse($dateString);
|
||||||
|
return $date->between($startDate, $endDate);
|
||||||
|
});
|
||||||
|
|
||||||
|
return $this->createZipArchiveAndReturn($files);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getMosaicsAsZip(Carbon $startDate, Carbon $endDate) {
|
||||||
|
$path = $this->download_path.'/weekly_mosaic';
|
||||||
|
|
||||||
|
// create a collection of all week numbers and years for given date range
|
||||||
|
$allowedFiles = collect(CarbonPeriod::create($startDate, $endDate)->toArray())
|
||||||
|
->map(fn($date) => sprintf('week_%s_%s.tif',$date->weekOfYear, $date->year))
|
||||||
|
->unique();
|
||||||
|
|
||||||
|
|
||||||
|
$files = collect(Storage::files($path))
|
||||||
|
->filter(fn($file) => Str::endsWith($file, '.tif'))
|
||||||
|
->filter(function ($file) use ($allowedFiles) {
|
||||||
|
return $allowedFiles->contains(basename($file));
|
||||||
|
});
|
||||||
|
putenv('TMPDIR='.storage_path('app'));
|
||||||
|
|
||||||
|
return $this->createZipArchiveAndReturn($files);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function createZipArchiveAndReturn(Collection $files)
|
||||||
|
{
|
||||||
|
$zipPath = storage_path('app/'.$this->download_path.'/download.zip');
|
||||||
|
$zip = new \ZipArchive();
|
||||||
|
$zip->open($zipPath, \ZipArchive::CREATE | \ZipArchive::OVERWRITE);
|
||||||
|
$files->each(function ($file) use ($zip) {
|
||||||
|
$zip->addFile(storage_path('app/'.$file), basename($file));
|
||||||
|
});
|
||||||
|
$zip->close();
|
||||||
|
|
||||||
|
return response()->download(
|
||||||
|
$zipPath, 'download.zip'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function createDownloadRecordsInDatabaseAndUpdateStatusForAllDownloadedImages(): void
|
||||||
|
{
|
||||||
|
$merged_tiffs = $this->getMergedTiffList();
|
||||||
|
$this->downloads->each(function ($download) use ($merged_tiffs) {
|
||||||
|
if ($merged_tiffs->contains($download->path) && $download->status !== 'success') {
|
||||||
|
$download->setStatusSuccess();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$merged_tiffs->each(function ($path) {
|
||||||
|
if ($this->downloads()->where('path', $path)->count() === 0) {
|
||||||
|
$this->downloads()->create([
|
||||||
|
'path' => $path,
|
||||||
|
'status' => 'success',
|
||||||
|
'name' => explode('/', $path)[count(explode('/', $path)) - 1]
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public function createAllMosaicsInDatabaseAndUpdateStatusForAllDownloadedImages()
|
||||||
|
{
|
||||||
|
$list_of_desired_mosaics = $this->getMergedTiffList()
|
||||||
|
->map(fn($file) => str_replace('.tif', '', basename($file) ))
|
||||||
|
->map(function($date) {
|
||||||
|
$carbon = Carbon::parse($date);
|
||||||
|
return sprintf('week_%s_%s', $carbon->format('W'), $carbon->year);
|
||||||
|
})
|
||||||
|
->unique();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
BIN
laravel_app/public/Sonydownload.zip
Normal file
BIN
laravel_app/public/Sonydownload.zip
Normal file
Binary file not shown.
|
|
@ -0,0 +1,47 @@
|
||||||
|
@props([
|
||||||
|
'formData',
|
||||||
|
])
|
||||||
|
|
||||||
|
<x-modal wire:model.live="showDownloadMosaicsModal" {{ $attributes }} >
|
||||||
|
<x-form-modal submit="downloadMosaics" wire:loading.class="opacity-50">
|
||||||
|
<x-slot name="title">
|
||||||
|
{{ __('Download Mosaics') }}
|
||||||
|
</x-slot>
|
||||||
|
|
||||||
|
<x-slot name="description">
|
||||||
|
</x-slot>
|
||||||
|
|
||||||
|
|
||||||
|
<x-slot name="form">
|
||||||
|
<div class="col-span-6 sm:col-span-4">
|
||||||
|
<x-label for="start_date" value="{{ __('Start Date') }}"/>
|
||||||
|
<x-input id="start_date" type="date" max="{{\Carbon\Carbon::yesterday()->toDateString()}}" class="mt-1 block w-full" wire:model.live="formData.start_date" autofocus/>
|
||||||
|
<x-input-error for="formData.start_date" class="mt-2"/>
|
||||||
|
</div><div class="col-span-6 sm:col-span-4">
|
||||||
|
<x-label for="end_date" value="{{ __('End Date') }}"/>
|
||||||
|
<x-input id="end_date" type="date" max="{{\Carbon\Carbon::yesterday()->toDateString()}}" class="mt-1 block w-full" wire:model.live="formData.end_date" />
|
||||||
|
<x-input-error for="formData.end_date" class="mt-2"/>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<span class="whitespace-nowrap"></span>
|
||||||
|
</div>
|
||||||
|
</x-slot>
|
||||||
|
|
||||||
|
<x-slot name="actions">
|
||||||
|
<x-action-message class="mr-3" on="saved">
|
||||||
|
{{ __('Saved.') }}
|
||||||
|
</x-action-message>
|
||||||
|
|
||||||
|
<x-secondary-button class="mr-3"
|
||||||
|
type="button"
|
||||||
|
x-on:click="$wire.showDownloadMosaicsModal = false"
|
||||||
|
>
|
||||||
|
{{ __('Cancel') }}
|
||||||
|
</x-secondary-button>
|
||||||
|
<x-button wire:loading.disabled>
|
||||||
|
{{ __('Download') }}
|
||||||
|
</x-button>
|
||||||
|
|
||||||
|
</x-slot>
|
||||||
|
</x-form-modal>
|
||||||
|
</x-modal>
|
||||||
|
|
@ -0,0 +1,47 @@
|
||||||
|
@props([
|
||||||
|
'formData',
|
||||||
|
])
|
||||||
|
|
||||||
|
<x-modal wire:model.live="showDownloadTifsModal" {{ $attributes }} >
|
||||||
|
<x-form-modal submit="downloadTifs" wire:loading.class="opacity-50">
|
||||||
|
<x-slot name="title">
|
||||||
|
{{ __('Download Zip with satelite data') }}
|
||||||
|
</x-slot>
|
||||||
|
|
||||||
|
<x-slot name="description">
|
||||||
|
</x-slot>
|
||||||
|
|
||||||
|
|
||||||
|
<x-slot name="form">
|
||||||
|
<div class="col-span-6 sm:col-span-4">
|
||||||
|
<x-label for="start_date" value="{{ __('Start Date') }}"/>
|
||||||
|
<x-input id="start_date" type="date" max="{{\Carbon\Carbon::yesterday()->toDateString()}}" class="mt-1 block w-full" wire:model.live="formData.start_date" autofocus/>
|
||||||
|
<x-input-error for="formData.start_date" class="mt-2"/>
|
||||||
|
</div><div class="col-span-6 sm:col-span-4">
|
||||||
|
<x-label for="end_date" value="{{ __('End Date') }}"/>
|
||||||
|
<x-input id="end_date" type="date" max="{{\Carbon\Carbon::yesterday()->toDateString()}}" class="mt-1 block w-full" wire:model.live="formData.end_date" />
|
||||||
|
<x-input-error for="formData.end_date" class="mt-2"/>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<span class="whitespace-nowrap"></span>
|
||||||
|
</div>
|
||||||
|
</x-slot>
|
||||||
|
|
||||||
|
<x-slot name="actions">
|
||||||
|
<x-action-message class="mr-3" on="saved">
|
||||||
|
{{ __('Saved.') }}
|
||||||
|
</x-action-message>
|
||||||
|
|
||||||
|
<x-secondary-button class="mr-3"
|
||||||
|
type="button"
|
||||||
|
x-on:click="$wire.showDownloadTifsModal = false"
|
||||||
|
>
|
||||||
|
{{ __('Cancel') }}
|
||||||
|
</x-secondary-button>
|
||||||
|
<x-button wire:loading.disabled>
|
||||||
|
{{ __('Save') }}
|
||||||
|
</x-button>
|
||||||
|
|
||||||
|
</x-slot>
|
||||||
|
</x-form-modal>
|
||||||
|
</x-modal>
|
||||||
|
|
@ -4,4 +4,5 @@
|
||||||
<a class=" capitalize font-semibold text-md hover:rounded-lg hover:bg-gray-50 hover:text-indigo-600 hover:border-0 py-2 pl-2 pr-3 leading-6 whitespace-nowrap gap-2 flex items-baseline group text-gray-700 {{!($activeTab == 'reports') ?: 'rounded-lg bg-gray-50 text-indigo-600 border-0'}}" href="{{route('project.show',[$projectName,'reports'])}}"><i class="group-hover:text-indigo-600 w-6 text-gray-400 fg-map-stat fg-lg"></i>Reports</a>
|
<a class=" capitalize font-semibold text-md hover:rounded-lg hover:bg-gray-50 hover:text-indigo-600 hover:border-0 py-2 pl-2 pr-3 leading-6 whitespace-nowrap gap-2 flex items-baseline group text-gray-700 {{!($activeTab == 'reports') ?: 'rounded-lg bg-gray-50 text-indigo-600 border-0'}}" href="{{route('project.show',[$projectName,'reports'])}}"><i class="group-hover:text-indigo-600 w-6 text-gray-400 fg-map-stat fg-lg"></i>Reports</a>
|
||||||
<a class=" capitalize font-semibold text-md hover:rounded-lg hover:bg-gray-50 hover:text-indigo-600 hover:border-0 py-2 pl-2 pr-3 leading-6 whitespace-nowrap gap-2 flex items-baseline group text-gray-700 {{!($activeTab == 'mailings') ?: 'rounded-lg bg-gray-50 text-indigo-600 border-0'}}" href="{{route('project.show',[$projectName,'mailings'])}}"><i class="group-hover:text-indigo-600 w-6 text-gray-400 fa-regular fa-envelope"></i>Mailings</a>
|
<a class=" capitalize font-semibold text-md hover:rounded-lg hover:bg-gray-50 hover:text-indigo-600 hover:border-0 py-2 pl-2 pr-3 leading-6 whitespace-nowrap gap-2 flex items-baseline group text-gray-700 {{!($activeTab == 'mailings') ?: 'rounded-lg bg-gray-50 text-indigo-600 border-0'}}" href="{{route('project.show',[$projectName,'mailings'])}}"><i class="group-hover:text-indigo-600 w-6 text-gray-400 fa-regular fa-envelope"></i>Mailings</a>
|
||||||
<a class=" capitalize font-semibold text-md hover:rounded-lg hover:bg-gray-50 hover:text-indigo-600 hover:border-0 py-2 pl-2 pr-3 leading-6 whitespace-nowrap gap-2 flex items-baseline group text-gray-700 {{!($activeTab == 'settings') ?: 'rounded-lg bg-gray-50 text-indigo-600 border-0'}}" href="{{route('project.show',[$projectName,'settings'])}}"><i class="group-hover:text-indigo-600 w-6 text-gray-400 fa-solid fa-gear"></i>Settings</a>
|
<a class=" capitalize font-semibold text-md hover:rounded-lg hover:bg-gray-50 hover:text-indigo-600 hover:border-0 py-2 pl-2 pr-3 leading-6 whitespace-nowrap gap-2 flex items-baseline group text-gray-700 {{!($activeTab == 'settings') ?: 'rounded-lg bg-gray-50 text-indigo-600 border-0'}}" href="{{route('project.show',[$projectName,'settings'])}}"><i class="group-hover:text-indigo-600 w-6 text-gray-400 fa-solid fa-gear"></i>Settings</a>
|
||||||
|
<a class=" capitalize font-semibold text-md hover:rounded-lg hover:bg-gray-50 hover:text-indigo-600 hover:border-0 py-2 pl-2 pr-3 leading-6 whitespace-nowrap gap-2 flex items-baseline group text-gray-700 {{!($activeTab == 'exports') ?: 'rounded-lg bg-gray-50 text-indigo-600 border-0'}}" href="{{route('project.show',[$projectName,'exports'])}}"><i class="group-hover:text-indigo-600 w-6 text-gray-400 fa-solid fa-download"></i>Exports</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,56 @@
|
||||||
|
<div class="flex flex-col divide-y space-y-4 m-2">
|
||||||
|
<div id="edit" class="flex flex-col md:flex-row gap-2">
|
||||||
|
<div class="flex flex-col md:w-1/3">
|
||||||
|
<div class="text-xl font-bold ">
|
||||||
|
{{ __('RDS File') }}
|
||||||
|
</div>
|
||||||
|
<div class="text-gray-500 text-md">
|
||||||
|
{{__('Download the RDS file for this project')}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="md:w-2/3">
|
||||||
|
<button wire:click="downloadRds" class="inline-flex items-center rounded-md bg-indigo-600 px-2.5 py-1.5 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600" >Download RDS</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
class="flex flex-col md:flex-row">
|
||||||
|
<div class="flex flex-col my-4 md:w-1/3">
|
||||||
|
<span class="text-xl font-bold dark:text-gray-300">{{__('Download Tifs')}}</span>
|
||||||
|
<div class="text-gray-500 text-md">
|
||||||
|
{{ __('Create a zip file with satelite images for a given time series') }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="mail" class="flex flex-col md:w-2/3" > {{-- flex col--}}
|
||||||
|
<div class="flex justify-between my-4">
|
||||||
|
<div class="inline-flex items-center gap-2">
|
||||||
|
<div class=" text-md font-bold">
|
||||||
|
<button x-on:click="$wire.showDownloadTifsModal = true" class="inline-flex items-center rounded-md bg-indigo-600 px-2.5 py-1.5 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600" >Download tifs</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="flex w-full "></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
class="flex flex-col md:flex-row">
|
||||||
|
<div class="flex flex-col my-4 md:w-1/3">
|
||||||
|
<span class="text-xl font-bold dark:text-gray-300">{{__('Download Mosaics')}}</span>
|
||||||
|
<div class="text-gray-500 text-md">
|
||||||
|
{{ __('Create a zip file with mosaic images for a given time series') }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="mail" class="flex flex-col md:w-2/3" > {{-- flex col--}}
|
||||||
|
<div class="flex justify-between my-4">
|
||||||
|
<div class="inline-flex items-center gap-2">
|
||||||
|
<div class=" text-md font-bold">
|
||||||
|
<button x-on:click="$wire.showDownloadMosaicsModal = true" class="inline-flex items-center rounded-md bg-indigo-600 px-2.5 py-1.5 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600" >Download Mosaics</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="flex w-full "></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="flex justify-end items-center py-4"></div>
|
||||||
|
<x-download-mosaics-as-zip-modal :formData="$formData"></x-download-mosaics-as-zip-modal>
|
||||||
|
<x-download-tifs-as-zip-modal :formData="$formData"></x-download-tifs-as-zip-modal>
|
||||||
|
</div>
|
||||||
|
|
@ -24,6 +24,9 @@
|
||||||
@case('settings')
|
@case('settings')
|
||||||
<livewire:projects.tabs.settings :project="$project"></livewire:projects.tabs.settings>
|
<livewire:projects.tabs.settings :project="$project"></livewire:projects.tabs.settings>
|
||||||
@break
|
@break
|
||||||
|
@case('exports')
|
||||||
|
<livewire:projects.tabs.exports :project="$project"></livewire:projects.tabs.exports>
|
||||||
|
@break
|
||||||
@default
|
@default
|
||||||
<div class="flex w-full h-screen justify-center items-center"> Menu Component not found.</div>
|
<div class="flex w-full h-screen justify-center items-center"> Menu Component not found.</div>
|
||||||
@endswitch
|
@endswitch
|
||||||
|
|
|
||||||
|
|
@ -329,4 +329,5 @@ public static function scheduleDayProvider()
|
||||||
];
|
];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -230,20 +230,20 @@ create_CI_map <- function(pivot_raster, pivot_shape, pivot_spans, show_legend =
|
||||||
tm_shape(pivot_raster, unit = "m")+
|
tm_shape(pivot_raster, unit = "m")+
|
||||||
tm_raster(breaks = c(0,0.5,1,2,3,4,5,6,7,Inf), palette = "RdYlGn",legend.is.portrait = legend_is_portrait ,midpoint = NA) +
|
tm_raster(breaks = c(0,0.5,1,2,3,4,5,6,7,Inf), palette = "RdYlGn",legend.is.portrait = legend_is_portrait ,midpoint = NA) +
|
||||||
tm_layout(main.title = paste0("\nMax CI week ", week,"\n", age, " weeks old"),
|
tm_layout(main.title = paste0("\nMax CI week ", week,"\n", age, " weeks old"),
|
||||||
main.title.size = 0.7, legend.show = show_legend) +
|
main.title.size = 0.7, legend.show = show_legend) # +
|
||||||
tm_shape(pivot_shape) +
|
# tm_shape(pivot_shape) +
|
||||||
tm_borders(lwd = 3) + tm_text("sub_field", size = 1/2) +
|
# tm_borders(lwd = 3) + tm_text("sub_field", size = 1/2) +
|
||||||
tm_shape(pivot_spans) + tm_borders(lwd = 0.5, alpha=0.5)
|
# tm_shape(pivot_spans) + tm_borders(lwd = 0.5, alpha=0.5)
|
||||||
}
|
}
|
||||||
|
|
||||||
create_CI_diff_map <- function(pivot_raster, pivot_shape, pivot_spans, show_legend = F, legend_is_portrait = F, week_1, week_2, age){
|
create_CI_diff_map <- function(pivot_raster, pivot_shape, pivot_spans, show_legend = F, legend_is_portrait = F, week_1, week_2, age){
|
||||||
tm_shape(pivot_raster, unit = "m")+
|
tm_shape(pivot_raster, unit = "m")+
|
||||||
tm_raster(breaks = c(-3,-2,-1,0,1,2, 3), palette = "RdYlGn",legend.is.portrait = legend_is_portrait ,midpoint = 0, title = "CI difference") +
|
tm_raster(breaks = c(-3,-2,-1,0,1,2, 3), palette = "RdYlGn",legend.is.portrait = legend_is_portrait ,midpoint = 0, title = "CI difference") +
|
||||||
tm_layout(main.title = paste0("CI change week ", week_1, "- week ",week_2, "\n", age," weeks old"),
|
tm_layout(main.title = paste0("CI change week ", week_1, "- week ",week_2, "\n", age," weeks old"),
|
||||||
main.title.size = 0.7, legend.show = show_legend) +
|
main.title.size = 0.7, legend.show = show_legend) # +
|
||||||
tm_shape(pivot_shape) +
|
# tm_shape(pivot_shape) +
|
||||||
tm_borders(lwd = 3) + tm_text("sub_field", size = 1/2) +
|
# tm_borders(lwd = 3) + tm_text("sub_field", size = 1/2) +
|
||||||
tm_shape(pivot_spans) + tm_borders(lwd = 0.5, alpha=0.5)
|
# tm_shape(pivot_spans) + tm_borders(lwd = 0.5, alpha=0.5)
|
||||||
}
|
}
|
||||||
|
|
||||||
ci_plot <- function(pivotName){
|
ci_plot <- function(pivotName){
|
||||||
|
|
|
||||||
BIN
r_app/Rplots.pdf
BIN
r_app/Rplots.pdf
Binary file not shown.
|
|
@ -27,8 +27,6 @@ planet_tif_folder <- here(laravel_storage_dir, "merged_tif")
|
||||||
merged_final <- here(laravel_storage_dir, "merged_final_tif")
|
merged_final <- here(laravel_storage_dir, "merged_final_tif")
|
||||||
|
|
||||||
new_project_question = FALSE
|
new_project_question = FALSE
|
||||||
planet_tif_folder <- here(laravel_storage_dir, "merged_tif")
|
|
||||||
merged_final <- here(laravel_storage_dir, "merged_final_tif")
|
|
||||||
|
|
||||||
data_dir <- here(laravel_storage_dir, "Data")
|
data_dir <- here(laravel_storage_dir, "Data")
|
||||||
extracted_CI_dir <- here(data_dir, "extracted_ci")
|
extracted_CI_dir <- here(data_dir, "extracted_ci")
|
||||||
|
|
@ -53,7 +51,7 @@ pivot_stats2 <- readRDS(here(cumulative_CI_vals_dir,"combined_CI_data.rds")) %>%
|
||||||
# gather data into long format for easier calculation and visualisation
|
# gather data into long format for easier calculation and visualisation
|
||||||
pivot_stats_long <- pivot_stats2 %>%
|
pivot_stats_long <- pivot_stats2 %>%
|
||||||
tidyr::gather("Date", value, -field, -sub_field ) %>%
|
tidyr::gather("Date", value, -field, -sub_field ) %>%
|
||||||
mutate(Date = right(Date, 8),
|
mutate(#Date = right(Date, 8),
|
||||||
Date = lubridate::ymd(Date)
|
Date = lubridate::ymd(Date)
|
||||||
) %>%
|
) %>%
|
||||||
drop_na(c("value","Date")) %>%
|
drop_na(c("value","Date")) %>%
|
||||||
|
|
@ -72,7 +70,7 @@ pivot_stats_long <- pivot_stats2 %>%
|
||||||
# pivot_select_model_Data_2023 <- harvesting_data %>% filter(year == 2023) %>% filter(!is.na(season_start)) %>% pull(sub_field)
|
# pivot_select_model_Data_2023 <- harvesting_data %>% filter(year == 2023) %>% filter(!is.na(season_start)) %>% pull(sub_field)
|
||||||
|
|
||||||
pivot_select_model_Data_2024 <- harvesting_data %>% filter(year == 2024)%>% filter(!is.na(season_start)) %>% pull(sub_field)
|
pivot_select_model_Data_2024 <- harvesting_data %>% filter(year == 2024)%>% filter(!is.na(season_start)) %>% pull(sub_field)
|
||||||
print(pivot_select_model_Data_2024)
|
message(pivot_select_model_Data_2024)
|
||||||
# pivots_dates_Data_2022 <- pivots_dates0 %>% filter(!is.na(season_end_2022))
|
# pivots_dates_Data_2022 <- pivots_dates0 %>% filter(!is.na(season_end_2022))
|
||||||
# pivot_select_model_Data_2022 <- unique(pivots_dates_Data_2022$pivot_quadrant )
|
# pivot_select_model_Data_2022 <- unique(pivots_dates_Data_2022$pivot_quadrant )
|
||||||
#
|
#
|
||||||
|
|
@ -83,14 +81,14 @@ print(pivot_select_model_Data_2024)
|
||||||
# pivot_select_model_Data_2024 <- unique(pivots_dates_Data_2024$pivot_quadrant)
|
# pivot_select_model_Data_2024 <- unique(pivots_dates_Data_2024$pivot_quadrant)
|
||||||
|
|
||||||
extract_CI_data <- function(field_names, harvesting_data, field_CI_data, season) {
|
extract_CI_data <- function(field_names, harvesting_data, field_CI_data, season) {
|
||||||
# field_names = "4042902"
|
# field_names = "Nandi A1a"
|
||||||
# field_names = "1.13A"
|
# field_names = "1.13A"
|
||||||
# harvesting_data = harvesting_data
|
# harvesting_data = harvesting_data
|
||||||
# field_CI_data = pivot_stats_long
|
# field_CI_data = pivot_stats_long
|
||||||
# season= 2024
|
# season= 2024
|
||||||
|
|
||||||
filtered_harvesting_data <- harvesting_data %>%
|
filtered_harvesting_data <- harvesting_data %>%
|
||||||
na.omit() %>%
|
# na.omit() %>%
|
||||||
filter(year == season, sub_field %in% field_names)
|
filter(year == season, sub_field %in% field_names)
|
||||||
|
|
||||||
filtered_field_CI_data <- field_CI_data %>%
|
filtered_field_CI_data <- field_CI_data %>%
|
||||||
|
|
@ -125,6 +123,7 @@ extract_CI_data <- function(field_names, harvesting_data, field_CI_data, season)
|
||||||
# message('2023')
|
# message('2023')
|
||||||
Data_2024 <- map(pivot_select_model_Data_2024, ~ extract_CI_data(.x, harvesting_data = harvesting_data, field_CI_data = pivot_stats_long, season = 2024)) %>% list_rbind()
|
Data_2024 <- map(pivot_select_model_Data_2024, ~ extract_CI_data(.x, harvesting_data = harvesting_data, field_CI_data = pivot_stats_long, season = 2024)) %>% list_rbind()
|
||||||
message('2024')
|
message('2024')
|
||||||
|
head(Data_2024)
|
||||||
|
|
||||||
|
|
||||||
#CI_all <- rbind(Data_2023, Data_2024)
|
#CI_all <- rbind(Data_2023, Data_2024)
|
||||||
|
|
|
||||||
|
|
@ -92,7 +92,7 @@ if(project_dir == "chemba"){
|
||||||
names(field_boundaries_sf) <- c("field", "sub_field", "geometry")
|
names(field_boundaries_sf) <- c("field", "sub_field", "geometry")
|
||||||
field_boundaries <- field_boundaries_sf %>% vect()
|
field_boundaries <- field_boundaries_sf %>% vect()
|
||||||
harvesting_data <- read_excel(here(data_dir, "harvest.xlsx"),
|
harvesting_data <- read_excel(here(data_dir, "harvest.xlsx"),
|
||||||
col_types = c("numeric", "numeric", "numeric",
|
col_types = c("text", "text", "numeric",
|
||||||
"date", "date", "numeric", "text",
|
"date", "date", "numeric", "text",
|
||||||
"numeric", "numeric")) %>%
|
"numeric", "numeric")) %>%
|
||||||
mutate(season_end = case_when(
|
mutate(season_end = case_when(
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue