Créer une colonne de géographie / géométrie à partir des champs x et y - SQL Server 2008

26

Je suis nouveau dans SQL Server 2008 et j'espère que vous comprendrez ma question / besoin.

Ainsi, j'ai une table qui contient 3 champs (Nom, Lat et Long) dans ma base de données (spatiale). Je veux créer une colonne géométrie / géographie basée sur ces champs (Lat et Long) mais malheureusement sans succès.

Ma question est: comment puis-je y arriver?

Tudor
la source

Réponses:

36

Vous pouvez ajouter une colonne calculée comme celle-ci

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

J'ai ajouté la conversion de lng ou lat car je stocke les Long et Lats sous forme de nombres.

Jamo
la source
3
Merci pour vos réponses, j'ai réussi à résoudre mon problème en utilisant cette ligne: MISE À JOUR de votre base de données SET geometry_column = geometry :: Point ([ColX], [ColY], SRID)
Tudor
3
Il est possible de créer un déclencheur pour cela? Comme lorsque vous remplissez vos champs (colonnes X et Y) avec des informations, le script mentionné ci-dessus s'exécutera.
Tudor
10

On dirait que vous voulez la méthode STGeomFromText()ou STPointFromText()SQL:

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

ou

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

Créez votre champ Geometryou Geography, puis utilisez SQL pour remplir ce champ à l'aide de vos valeurs lat / lon.

Chad Cooper
la source
Quelle serait la différence en utilisant la méthode suivante à la place ...DECLARE @g geometry; SET @g = geometry::STPointFromText('POINT (100 100)', 0);
awesomo
@awesomo - Oui, vous pouvez l'utiliser si vous le souhaitez, en fait.
Chad Cooper
1

Si l'arrondissement des valeurs Long / Lat d'origine se produit lors de l'utilisation de l' CONVERT(VARCHAR,instruction.

Essayez d'utiliser:

GeoData = geometry:: STGeomFromText('POINT(' + CAST(CAST(X AS decimal(13, 2)) AS varchar) + ' '  + CAST(CAST(Y AS decimal(13, 2)) AS varchar) + ')', 4326)
Liz
la source