Jsem nový v SQL Server 2008 a doufám, že mé otázce porozumíte / potřebuji.

Mám tedy tabulku, která obsahuje 3 pole (Name, Lat a Long) v mé databázi (prostorové). Chci vytvořit sloupec geometrie / geografie na základě těchto polí (Lat a Dlouhá), ale bohužel bez úspěchu.

Moje otázka zní: Jak to zvládnu?

Komentáře

Odpověď

Takto přidaný vypočítaný sloupec můžete přidat

alter table yourTable add geographyColumn as geography::STGeomFromText("POINT("+convert(varchar(20),Long)+" "+convert(varchar(20),Lat)+")",4326) 

Přidal jsem převod z lng nebo lat, protože ukládám Long a Lats jako čísla.

Komentáře

  • Děkuji za vaše odpovědi, podařilo se mi vyřešit můj problém pomocí tohoto řádku: UPDATE yourdatabase SET geometry_column = geometry :: P mast ([ColX], [ColY], SRID)
  • Je možné vytvořit spouštěč? Podobně jako při vyplnění polí (sloupce X a Y) informacemi se spustí výše uvedený skript.

Odpověď

Vypadá to, že chcete STGeomFromText() nebo STPointFromText() Metoda SQL:

DECLARE @g geography; SET @g = geography::STGeomFromText("POINT(-122.34900 47.65100)", 4326); SELECT @g.ToString(); 

nebo

DECLARE @g geography; SET @g = geography::STPointFromText("POINT(-122.34900 47.65100)", 4326); SELECT @g.ToString(); 

Vytvořte pole Geometry nebo Geography a pomocí SQL vyplňte toto pole pomocí hodnot lat / lon.

Komentáře

  • Jaký by byl rozdíl v použití následující metody … DECLARE @g geometry; SET @g = geometry::STPointFromText('POINT (100 100)', 0);
  • @awesomo – Ano, tenhle můžete vlastně použít, pokud chcete.

Odpovědět

SQL Server 2012

Můžete to udělat takto,

SELECT geography::Point(lat, long, 4326) 

Další informace naleznete v mém příspěvku pro správce databáze, „SQL Server Konstruktor bodu nebo verze ST_Point (x, y)? „

Komentáře

  • Pokud je konstruktor pro Point přebírá argumenty x, y, pak budete chtít změnit jejich pořadí: geography::Point(long, lat, 4326). Zeměpisná délka je x a Zeměpisná šířka je y.

Odpovědět

Pokud při použití příkazu CONVERT(VARCHAR, dojde k zaokrouhlení původních hodnot Long / Lat.

Zkuste použít:

GeoData = geometry:: STGeomFromText("POINT(" + CAST(CAST(X AS decimal(13, 2)) AS varchar) + " " + CAST(CAST(Y AS decimal(13, 2)) AS varchar) + ")", 4326) 

Komentáře

  • Při používání této metody mám obavy, protože zahrnuje ztrátu přesnosti polohy.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *