<?php
declare(strict_types=1);
use Adawolfa\RUIAN\Address\Coordinates;
use Adawolfa\RUIAN\AddressWGS84;
use Adawolfa\RUIAN\DatabaseFactory;
use Adawolfa\RUIAN\Reader;
use JTSK\Converter;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
require(__DIR__ . '/vendor/autoload_runtime.php');
return function (Command $command): Command {
$command->addArgument(
name: 'result',
mode: InputArgument::REQUIRED,
description: 'Output file name.',
);
$command->addOption(
name: 'source',
shortcut: 's',
mode: InputOption::VALUE_REQUIRED,
description: 'CSV source file',
default: sprintf(
'https://vdp.cuzk.cz/vymenny_format/csv/%s_OB_ADR_csv.zip',
date_create('last day of last month')->format('Ymd'),
),
);
$command->setCode(function (InputInterface $input): int {
$reader = Reader::open($input->getOption('source'));
$database = DatabaseFactory::create();
$converter = new Converter;
foreach ($reader->read() as $address) {
$wgs84 = null;
if ($address->jtskCoordinates !== null) {
[$x, $y] = array_values($converter->JTSKtoWGS84(
$address->jtskCoordinates->x,
$address->jtskCoordinates->y,
));
$wgs84 = new Coordinates((string) $x, (string) $y);
}
$database->push(new AddressWGS84($address, $wgs84));
}
$database->write($input->getArgument('result'));
return 0;
});
return $command;
};