Ik ben nieuw in SQL Server 2008 en ik hoop dat je mijn vraag / nodig.
Dus, ik heb een tabel die 3 velden (Naam, Lat en Lang) in mijn databank bevat (ruimtelijk). Ik wil een geometrie / geografiekolom maken op basis van die velden (Lat en Long) maar helaas zonder succes.
Mijn vraag is: hoe kan ik dat voor elkaar krijgen?
Reacties
- sql-server-helper.com/sql-server-2008/…
Antwoord
Je kunt een zo berekende kolom toevoegen
alter table yourTable add geographyColumn as geography::STGeomFromText("POINT("+convert(varchar(20),Long)+" "+convert(varchar(20),Lat)+")",4326)
Ik heb de conversie van lng of lat toegevoegd omdat ik de Long en Lats als getallen bewaar.
Opmerkingen
- Bedankt voor je antwoorden, het is me gelukt om mijn probleem met deze regel op te lossen: UPDATE uwdatabase SET geometry_column = geometry :: P oint ([ColX], [ColY], SRID)
- Is het mogelijk om hiervoor een trigger te creëren? Zoals wanneer u uw velden (kolommen X en Y) met informatie vult, zal het hierboven genoemde script worden uitgevoerd.
Answer
Het lijkt erop dat u de STGeomFromText()
of STPointFromText()
SQL-methode:
DECLARE @g geography; SET @g = geography::STGeomFromText("POINT(-122.34900 47.65100)", 4326); SELECT @g.ToString();
of
DECLARE @g geography; SET @g = geography::STPointFromText("POINT(-122.34900 47.65100)", 4326); SELECT @g.ToString();
Maak uw Geometry
of Geography
veld en gebruik vervolgens SQL om dat veld te vullen met uw lat / lon-waarden.
Reacties
- Wat zou het verschil zijn als je in plaats daarvan de volgende methode gebruikt …
DECLARE @g geometry; SET @g = geometry::STPointFromText('POINT (100 100)', 0);
- @awesomo – Ja, je zou die kunnen gebruiken als je wilt, eigenlijk.
Antwoord
SQL Server 2012
Je kunt het op deze manier doen,
SELECT geography::Point(lat, long, 4326)
Zie voor meer informatie mijn bericht over Database Administrators, “SQL Server Point Constructor of versie van ST_Point (x, y)? “
Comments
- Als de constructor voor
Point
neemt x, y argumenten, dan wil je je volgorde als volgt veranderen:geography::Point(long, lat, 4326)
. Lengtegraad isx
en breedtegraad isy
.
Antwoord
Als afronding van de originele Long / Lat-waarden optreedt bij gebruik van de CONVERT(VARCHAR,
-instructie.
Probeer het volgende:
GeoData = geometry:: STGeomFromText("POINT(" + CAST(CAST(X AS decimal(13, 2)) AS varchar) + " " + CAST(CAST(Y AS decimal(13, 2)) AS varchar) + ")", 4326)
Reacties
- Ik vrees bij het gebruik van deze methode, omdat het verlies van de locatienauwkeurigheid inhoudt.