IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

GEOGRAPHY from two POINT


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 111
    Par défaut GEOGRAPHY from two POINT
    Bonjour

    J'ai un petit souci avec une structure de T-SQL...

    Je dois créer un objet GEOGRAPHY à partir de deux POINT qui sont initialisés.
    J'ai trouvé la ligne de code suivante qui me permet de créer une GEOGRAPHY à partir des coordonnées de deux POINTS :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    geography::STGeomFromText('LINESTRING(47.656 -122.360, 47.656 -122.343)', 4326)
    Mon problème étant que je ne sais pas comment introduire dans cette ligne mes variables : @point1Lat, @point1Long, @point2Lat, @point2Long, car je ne connais leur Lat et Long qu'à travers les variables...

    Merci

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Vous pouvez créer une fonction pour ce faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CREATE FUNCTION Fn_getGeographyLineString
    	(
    		@point1Lat decimal(6,3)
    		, @point1Long decimal(6,3)
    		, @point2Lat decimal(6,3)
    		, @point2Long decimal(6,3)
    	)
    	RETURNS geography
    AS
    BEGIN
    	DECLARE @line_string varchar(64) = 'LINESTRING(' + CAST(@point1Long AS varchar(8)) + ' ' + CAST(@point1Lat AS varchar(8)) + ', ' + CAST(@point2Long AS varchar(8))+  ' ' + CAST(@point2Lat AS varchar(8)) + ')'
     
    	RETURN geography::STGeomFromText(@line_string, 4326)
    END
    @++

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 111
    Par défaut
    Cela ne fonctionne pas...

    Mes lat et long sont en float par définition... Sans conversion, la valeur du Lat est tronquée à 4 chiffres après la virgule (au lieu de 5).
    Avec conversion en decimal, j'ai deux problèmes :
    -> Soit la conversion fait un arrondi qui me donne plusieurs points "égaux" et donc le LINESTRING est faut => plantage
    -> Soit il y a une erreur de conversion arithmétique...

    Comment faire pour garder ma valeur de Lat le plus juste possible???

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 002
    Billets dans le blog
    6
    Par défaut
    modifiez les types DECIMAL en float.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 111
    Par défaut
    Cela ne règle pas mon problème!

    Bien entendu j'ai donc passé en paramètre des float et non des décimaux, mais justement mon problème ce trouve dans le fait que mes valeurs sont par conséquent tronquées...
    Même si je converti mes float en décimaux dans la fonction, avant de créer mon Linestring, les valeurs sont tronquées...

  6. #6
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Ce que voulait dire SQLPro est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CREATE FUNCTION Fn_getGeographyLineString
    	(
    		@point1Lat float
    		, @point1Long float
    		, @point2Lat float
    		, @point2Long float
    	)
    	RETURNS geography
    AS
    BEGIN
    	DECLARE @line_string varchar(64) = 'LINESTRING(' + CAST(@point1Long AS varchar(15)) + ' ' + CAST(@point1Lat AS varchar(15)) + ', ' + CAST(@point2Long AS varchar(15))+  ' ' + CAST(@point2Lat AS varchar(15)) + ')'
     
    	RETURN geography::STGeomFromText(@line_string, 4326)
    END
    @++

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 111
    Par défaut
    Je suis tombée sur ce site :

    http://social.msdn.microsoft.com/For...b-fea1745455c5

    Apparemment cette personne a le même problème que moi, mais je ne comprend pas trop comment y palier...
    Mes erreurs doivent aussi provenir de certaines valeurs de latitude et longitude qui ne conviennent pas si elles sont associées au sein d'une même linestring...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Nombre maximum de point dans un polygon type geography
    Par blairswish dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 13/07/2010, 14h18
  2. with-clause referenced two different from-clause elements
    Par VirageGroup dans le forum Hibernate
    Réponses: 0
    Dernier message: 20/10/2009, 15h50
  3. compression de données du point de vue algorithmique
    Par GoldenEye dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 26/06/2002, 15h51
  4. savoir si 1 point est a l'intérieur d'un cercle ...
    Par skarladevobsy dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 23/05/2002, 18h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo