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

Ainsi, jai une table qui contient 3 champs (Nom, Lat et Long) dans ma base de données (spatiale). Je veux créer une colonne de 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 parvenir?

Commentaires

Réponse

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) 

Jai ajouté la conversion de lng ou lat car je stocke le Long et le Lats sous forme de nombres.

Commentaires

  • Merci pour vos réponses, jai réussi pour résoudre mon problème en utilisant cette ligne: UPDATE yourdatabase SET geometry_column = geometry :: P oint ([ColX], [ColY], SRID)
  • 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 sexécutera.

Réponse

On dirait que vous voulez STGeomFromText() ou STPointFromText() Méthode 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 Geometry ou Geography, puis utilisez SQL pour remplir ce champ en utilisant vos valeurs de latitude / longitude.

Commentaires

  • 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 – Oui, vous pouvez utiliser celui-là si vous le souhaitez, en fait.

Réponse

SQL Server 2012

Vous pouvez le faire comme ceci,

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

Pour plus dinformations, consultez mon article sur les administrateurs de base de données, « SQL Server Constructeur de points ou version de ST_Point (x, y)? « 

Commentaires

  • Si le constructeur de Point prend x, y arguments, alors vous voudrez changer votre ordre comme tel: geography::Point(long, lat, 4326). La longitude est x et la latitude est y.

Réponse

Si un arrondi des valeurs Long / Lat dorigine se produit lors de lutilisation de linstruction CONVERT(VARCHAR,.

Essayez dutiliser:

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

Commentaires

  • Jai de lappréhension à utiliser cette méthode, car elle implique une perte de précision de localisation.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *