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

Requêtes MySQL Discussion :

Valeurs des types point (SPATIAL)


Sujet :

Requêtes MySQL

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Valeurs des types point (SPATIAL)
    Bonjour,

    je suis actuellement en train de faire une table nommée drops avec une colonne s'appelant lng_lat ayant pour type POINT.

    J'ai ensuite suivi la documentation de mysql (http://dev.mysql.com/doc/refman/5.6/...l-columns.html) pour insérer une valeur de lng_lat à une nouvelle entrée, avec cette syntaxe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SET @g = 'POINT(1 1)';
    INSERT INTO drops (lng_lat) VALUES (PointFromText(@g));
    Le code fonctionne mais lorsque je regarde la valeur obtenue sur phpMyAdmin j'obtiens ceci : 'POINT(1 1)',0

    est-ce normal ? Si oui, à quoi correspond le 0 ?

    Merci par avance !

  2. #2
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 380
    Points : 19 062
    Points
    19 062
    Par défaut
    Salut EpicM.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    --------------
    SET AUTOCOMMIT = 0
    --------------
     
    --------------
    START TRANSACTION
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE `base`
        DEFAULT CHARACTER SET `latin1`
        DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `test`
    --------------
     
    --------------
    CREATE TABLE `test`
    ( `id`        integer unsigned not null auto_increment primary key,
      `location`  point            not null
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `test` (`location`) values
      (ST_GeomFromText('POINT( 20.51  -51.17)')),
                       (POINT(-45.75,  10.25))
    --------------
     
    --------------
    select * from test
    --------------
     
    +----+---------------------------+
    | id | location                  |
    +----+---------------------------+
    |  1 |        Ãõ(\‚4(\Â•IÀ |
    |  2 |             àFÀ     €$@ |
    +----+---------------------------+
    --------------
    select      st_X(location), st_Y(location) from test
    --------------
     
    +----------------+----------------+
    | st_X(location) | st_Y(location) |
    +----------------+----------------+
    |          20.51 |         -51.17 |
    |         -45.75 |          10.25 |
    +----------------+----------------+
    --------------
    select st_AsText(location)                 from test
    --------------
     
    +---------------------+
    | st_AsText(location) |
    +---------------------+
    | POINT(20.51 -51.17) |
    | POINT(-45.75 10.25) |
    +---------------------+
    --------------
    COMMIT
    --------------
     
    --------------
    SET AUTOCOMMIT = 1
    --------------
     
    Appuyez sur une touche pour continuer...
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 766
    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 : 21 766
    Points : 52 563
    Points
    52 563
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par EpicM Voir le message
    Bonjour,

    je suis actuellement en train de faire une table nommée drops avec une colonne s'appelant lng_lat ayant pour type POINT.

    J'ai ensuite suivi la documentation de mysql (http://dev.mysql.com/doc/refman/5.6/...l-columns.html) pour insérer une valeur de lng_lat à une nouvelle entrée, avec cette syntaxe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SET @g = 'POINT(1 1)';
    INSERT INTO drops (lng_lat) VALUES (PointFromText(@g));
    Le code fonctionne mais lorsque je regarde la valeur obtenue sur phpMyAdmin j'obtiens ceci : 'POINT(1 1)',0

    est-ce normal ? Si oui, à quoi correspond le 0 ?

    Merci par avance !
    Probablement le SRID qui, pour de la géométrie euclidienne (et non du spatial) est à 0.

    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/ * * * * *

  4. #4
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 380
    Points : 19 062
    Points
    19 062
    Par défaut
    Salut SQLPRO.

    Citation Envoyé par EpicM
    ... avec une colonne s'appelant lng_lat ayant pour type POINT.
    Je suppose qu'EpicM parle de longitude et de latitude sur le globe terrestre.

    La latitude est une mesure angulaire s'étendant de 0° à l'équateur à 90° aux pôles.
    La longitude est une valeur angulaire, expression du positionnement est ou ouest d'un point sur Terre. Le 0° correspond au méridien de Greenwich.
    Le point (0 ; 0) correspond à l'intersection entre l'équateur et le méridien de Greenwich.

    Je pense qu'il fait référence à la géolocalisation à la surface de la terre, dans le cadre du GPS.

    Que vient faire ici le SRID (Spatial Reference ID) ?
    D'après ce que j'ai pu comprendre, sa valeur doit être : "4326".

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 766
    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 : 21 766
    Points : 52 563
    Points
    52 563
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par Artemus24 Voir le message
    Que vient faire ici le SRID (Spatial Reference ID) ?
    D'après ce que j'ai pu comprendre, sa valeur doit être : "4326".

    @+
    Et bien non... Tout dépend de ce que vous voulez faire

    Il suffit encore une fois de lire mon livre sur SQL, il y a un chapitre entier consacré au spatial puisque cette partie est intégrée à la norme SQL.

    Comme alternative, je vous propose de lire les articles que j'ai écrit à ce sujet :
    http://blog.developpez.com/sqlpro/p9...on_geographiqu
    http://blog.developpez.com/sqlpro/p9..._geographiqu_2

    Enfin, sachez que la partie spatiale de MySQL est farcie de bugs catastrophiques. En voici un particulièrement croustillant :
    http://blog.developpez.com/sqlpro/p9...ux#comment-144
    C'est pourquoi je ne connais pas d'entreprise utilisant la partie spatiale de MySQL qui donne la plupart du temps des résultats faux !


    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/ * * * * *

  6. #6
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 380
    Points : 19 062
    Points
    19 062
    Par défaut
    Salut SQLPRO.

    Citation Envoyé par SQLPro
    Tout dépend de ce que vous voulez faire
    Dans mon cas, rien. Ce n'est pas un sujet qui m'intéresse.

    Dans le cas de EpicM, je pense qu'il se complique inutilement à vouloir stocker les coordonnées GPS (latitude et longitude) dans le type "point" alors que c'est juste une donnée informationnelle.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 766
    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 : 21 766
    Points : 52 563
    Points
    52 563
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par Artemus24 Voir le message
    Dans le cas de EpicM, je pense qu'il se complique inutilement à vouloir stocker les coordonnées GPS (latitude et longitude) dans le type "point" alors que c'est juste une donnée informationnelle.
    Tout dépend des traitements envisagés du point de vu fonctionnel. par exemple s'il veut retrouver les points les plus proche d'un point donné dans un rayon de 5km, alors le spatiale sera indubitablement plus rapide... reste que l'indexation spatiale de MySQL est plus qu'embryonnaire et ne sait répondre plus vite qu'en utilisant des "valeurs atomiques" pour comparaisons et uniquement en utilisant les fonctions MBRContains() et MBRWithin()...
    Enfin, MySQmerde ne connais que le type GEOMETRY et pas le type GEOGRAPHY ce qui veut dire qu'utiliser les concept de longitude et latitude n'a aucun sens.... En sus au niveau des types géométriques il est limité aux type non courbes !

    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/ * * * * *

Discussions similaires

  1. Réponses: 0
    Dernier message: 27/05/2015, 11h13
  2. [JpGraph] supprimer les valeurs des points
    Par blopjerem dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 30/01/2008, 09h20
  3. [Formule] compter des valeurs de type texte
    Par marco361020 dans le forum Excel
    Réponses: 3
    Dernier message: 20/11/2007, 12h08
  4. Ecrire dans champ texte des valeurs de type float seulement
    Par aliomrani1 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 02/03/2007, 11h27
  5. stocker des valeurs de type différent
    Par jakouz dans le forum Langage
    Réponses: 3
    Dernier message: 28/11/2005, 09h36

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