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)?