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
- sql-server-helper.com/sql-server-2008/…
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 jex
a Zeměpisná šířka jey
.
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.