Nette Database & PostGIS – načtení souřadnic ze sloupce typu GEOGRAPHY(POINT,4326)
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.

- Barvoj
- Člen | 60
Ahoj,
potřeboval bych poradit. :) Na projektu používáme PostGIS a já si nejsem
jistý jak v aplikaci pracovat se sloupcem typu
GEOGRAPHY(POINT,4326).
Mám následující (zjednodušenou) tabulku:
CREATE TABLE location (
id INTEGER PRIMARY KEY NOT NULL,
name TEXT NOT NULL,
geo GEOGRAPHY(POINT,4326) NOT NULL
);
A z aplikace k ní přistupuji přes repository:
use Nette\Database\Context;
class LocationRepository
{
private $database;
public function __construct(Context $database)
{
$this->database = $database;
}
public function get($id)
{
return $this->database->table('location')
->select('id, name, ST_X(geo::geometry) AS x, ST_Y(geo::geometry) AS y')
->where(['id' => $id])
->fetch();
}
}
Co mě trápí je, že musím explicitně uvádět
ST_X(geo::geometry) AS x, ST_Y(geo::geometry) AS y, jinak bych
z databáze získal ve sloupci geo pouze nějaký nesmyslný textový
řetězec.
Co mě trápí ještě víc je, že pokud mám například entitu house, která se na location odkazuje přes cizí klíč:
CREATE TABLE house (
id INTEGER PRIMARY KEY NOT NULL,
location_id INTEGER NOT NULL,
FOREIGN KEY (location_id) REFERENCES location (id)
a já získám house, tak se nemohu jednoduše odkázat na location->geo:
$house = $this->database->table('house')->get(1);
$geo = $house->location->geo; // toto vraci nesmyslný textový řetězec
Zajímalo by mě tedy, jestli lze pomocí nette database načítat
souřadnice bodu nějak lépe – ideálně aby fungoval zápis
$house->location->geo (nebo něco podobného)?