Save cooridnates as GeoJSON in database

This commit is contained in:
Jannis Portmann 2021-07-16 11:00:02 +02:00
parent 4656be5a32
commit ddb815d1b4
5 changed files with 130 additions and 2 deletions

View 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');
}
}

View 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)\'');
}
}

View 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');
}
}

View file

@ -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', [

View file

@ -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;
}
} }