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

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 is x en breedtegraad is y.

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.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *