Save cooridnates as GeoJSON in database
This commit is contained in:
parent
4656be5a32
commit
ddb815d1b4
5 changed files with 130 additions and 2 deletions
33
migrations/Version20210715135559.php
Normal file
33
migrations/Version20210715135559.php
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace DoctrineMigrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Doctrine\Migrations\AbstractMigration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Auto-generated Migration: Please modify to your needs!
|
||||||
|
*/
|
||||||
|
final class Version20210715135559 extends AbstractMigration
|
||||||
|
{
|
||||||
|
public function getDescription(): string
|
||||||
|
{
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function up(Schema $schema): void
|
||||||
|
{
|
||||||
|
// this up() migration is auto-generated, please modify it to your needs
|
||||||
|
$this->addSql('ALTER TABLE offering ADD coordinates TEXT DEFAULT NULL');
|
||||||
|
$this->addSql('COMMENT ON COLUMN offering.coordinates IS \'(DC2Type:array)\'');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function down(Schema $schema): void
|
||||||
|
{
|
||||||
|
// this down() migration is auto-generated, please modify it to your needs
|
||||||
|
$this->addSql('CREATE SCHEMA public');
|
||||||
|
$this->addSql('ALTER TABLE offering DROP coordinates');
|
||||||
|
}
|
||||||
|
}
|
35
migrations/Version20210715142350.php
Normal file
35
migrations/Version20210715142350.php
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace DoctrineMigrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Doctrine\Migrations\AbstractMigration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Auto-generated Migration: Please modify to your needs!
|
||||||
|
*/
|
||||||
|
final class Version20210715142350 extends AbstractMigration
|
||||||
|
{
|
||||||
|
public function getDescription(): string
|
||||||
|
{
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function up(Schema $schema): void
|
||||||
|
{
|
||||||
|
// this up() migration is auto-generated, please modify it to your needs
|
||||||
|
$this->addSql('ALTER TABLE offering ADD coordinate JSON DEFAULT NULL');
|
||||||
|
$this->addSql('ALTER TABLE offering DROP coordinates');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function down(Schema $schema): void
|
||||||
|
{
|
||||||
|
// this down() migration is auto-generated, please modify it to your needs
|
||||||
|
$this->addSql('CREATE SCHEMA public');
|
||||||
|
$this->addSql('ALTER TABLE offering ADD coordinates TEXT DEFAULT NULL');
|
||||||
|
$this->addSql('ALTER TABLE offering DROP coordinate');
|
||||||
|
$this->addSql('COMMENT ON COLUMN offering.coordinates IS \'(DC2Type:array)\'');
|
||||||
|
}
|
||||||
|
}
|
36
migrations/Version20210715142732.php
Normal file
36
migrations/Version20210715142732.php
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace DoctrineMigrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Doctrine\Migrations\AbstractMigration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Auto-generated Migration: Please modify to your needs!
|
||||||
|
*/
|
||||||
|
final class Version20210715142732 extends AbstractMigration
|
||||||
|
{
|
||||||
|
public function getDescription(): string
|
||||||
|
{
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function up(Schema $schema): void
|
||||||
|
{
|
||||||
|
// this up() migration is auto-generated, please modify it to your needs
|
||||||
|
$this->addSql('ALTER TABLE offering ALTER coordinate TYPE TEXT');
|
||||||
|
$this->addSql('ALTER TABLE offering ALTER coordinate DROP DEFAULT');
|
||||||
|
$this->addSql('COMMENT ON COLUMN offering.coordinate IS \'(DC2Type:object)\'');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function down(Schema $schema): void
|
||||||
|
{
|
||||||
|
// this down() migration is auto-generated, please modify it to your needs
|
||||||
|
$this->addSql('CREATE SCHEMA public');
|
||||||
|
$this->addSql('ALTER TABLE offering ALTER coordinate TYPE JSON');
|
||||||
|
$this->addSql('ALTER TABLE offering ALTER coordinate DROP DEFAULT');
|
||||||
|
$this->addSql('COMMENT ON COLUMN offering.coordinate IS NULL');
|
||||||
|
}
|
||||||
|
}
|
|
@ -13,6 +13,8 @@ use App\Service\DistanceCalculator;
|
||||||
use App\Service\OfferPhotoHelper;
|
use App\Service\OfferPhotoHelper;
|
||||||
|
|
||||||
use Doctrine\ORM\EntityManagerInterface;
|
use Doctrine\ORM\EntityManagerInterface;
|
||||||
|
use Location\Coordinate;
|
||||||
|
use Location\Formatter\Coordinate\GeoJSON;
|
||||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||||
use Symfony\Component\HttpFoundation\Request;
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
use Symfony\Component\HttpFoundation\Response;
|
use Symfony\Component\HttpFoundation\Response;
|
||||||
|
@ -38,7 +40,7 @@ class OfferController extends AbstractController
|
||||||
}
|
}
|
||||||
|
|
||||||
#[Route('/new', name: 'new_offer')]
|
#[Route('/new', name: 'new_offer')]
|
||||||
public function newOffer(Request $request, string $photoDir, OfferPhotoHelper $offerPhotoHelper): Response
|
public function newOffer(Request $request, string $photoDir, OfferPhotoHelper $offerPhotoHelper, PlzToCoordinate $plzconverter): Response
|
||||||
{
|
{
|
||||||
$offer = new Offering();
|
$offer = new Offering();
|
||||||
$form = $this->createForm(OfferingFormType::class, $offer);
|
$form = $this->createForm(OfferingFormType::class, $offer);
|
||||||
|
@ -50,6 +52,11 @@ class OfferController extends AbstractController
|
||||||
$offer->setByUser($user);
|
$offer->setByUser($user);
|
||||||
$offer->setCreatedAt(new \DateTime());
|
$offer->setCreatedAt(new \DateTime());
|
||||||
|
|
||||||
|
if ($offerPlz = $form['zipCode']->getData()) {
|
||||||
|
$coordinate = $plzconverter->convertPlzToCoordinate($offerPlz);
|
||||||
|
$offer->setCoordinate($coordinate->format(new GeoJSON()));
|
||||||
|
}
|
||||||
|
|
||||||
if ($photo = $form['photo']->getData()) {
|
if ($photo = $form['photo']->getData()) {
|
||||||
$offerPhotoHelper->uploadOfferPhoto($photoDir, $photo, $offer);
|
$offerPhotoHelper->uploadOfferPhoto($photoDir, $photo, $offer);
|
||||||
}
|
}
|
||||||
|
@ -81,7 +88,7 @@ class OfferController extends AbstractController
|
||||||
|
|
||||||
if (isset($userPlz))
|
if (isset($userPlz))
|
||||||
{
|
{
|
||||||
$distance = $distanceCalculator->calculateDistance($plzconverter->getCoordinates($offerPlz), $plzconverter->getCoordinates($userPlz));
|
$distance = $distanceCalculator->calculateDistance($plzconverter->convertPlzToCoordinate($offerPlz), $plzconverter->convertPlzToCoordinate($userPlz));
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->render('app/offer.html.twig', [
|
return $this->render('app/offer.html.twig', [
|
||||||
|
|
|
@ -51,6 +51,11 @@ class Offering
|
||||||
*/
|
*/
|
||||||
private $description;
|
private $description;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ORM\Column(type="object", nullable=true)
|
||||||
|
*/
|
||||||
|
private $coordinate;
|
||||||
|
|
||||||
public function getId(): ?int
|
public function getId(): ?int
|
||||||
{
|
{
|
||||||
return $this->id;
|
return $this->id;
|
||||||
|
@ -132,4 +137,16 @@ class Offering
|
||||||
{
|
{
|
||||||
return (string) $this-getTitle();
|
return (string) $this-getTitle();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getCoordinate()
|
||||||
|
{
|
||||||
|
return $this->coordinate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setCoordinate($coordinate): self
|
||||||
|
{
|
||||||
|
$this->coordinate = $coordinate;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue