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
- sql-server-helper.com/sql-server-2008/…
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 estx
et la latitude esty
.
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.