Diferència entre revisions de la pàgina «MySQL geolocalització»

De Cacauet Wiki
Salta a la navegació Salta a la cerca
Línia 24: Línia 24:
  
 
El punt més bàsic es pot crear amb:
 
El punt més bàsic es pot crear amb:
  mysql> SELECT Point(0,0);
+
  mysql> select Point(1,2);
 
  +---------------------------+
 
  +---------------------------+
  | Point(0,0)                |
+
  | Point(1,2)                |
 
  +---------------------------+
 
  +---------------------------+
  |    ��                   |
+
  |    ��         �?      @  |
 
  +---------------------------+
 
  +---------------------------+
 
  1 row in set (0.00 sec)
 
  1 row in set (0.00 sec)
  
 +
Les coordenades (1,2) són ''floats'' i podem referir-se a qualsevol referència: distància en metres, km, angles, sistema normalitzat, geoespacial, etc.
  
 +
Si volem veure les coordenades de forma llegible hem d'utilitzar algunes funcions (no les trobareu en MySQL 5.5, només a partir de la 5.6):
 +
mysql> select ST_X(Point(1,2)) , ST_Y(Point(1,2));
 +
+------------------+------------------+
 +
| ST_X(Point(1,2)) | ST_Y(Point(1,2)) |
 +
+------------------+------------------+
 +
|                1 |                2 |
 +
+------------------+------------------+
 +
1 row in set (0.00 sec)
 +
 +
 +
=== Creant taules amb POINT ===
 +
Podem crear una taula amb el tipus POINT fàcilment:
 +
mysql> CREATE TABLE geo (comentari TEXT, punt POINT);
 +
 +
I introduir dades com us podeu imaginar:
 +
mysql> INSERT INTO geo VALUES("punt 1",Point(1.313,2.087));
 +
 +
=== Formats alternatius ===
 +
En [http://dev.mysql.com/doc/refman/5.7/en/gis-data-formats.html aquesta referència de MySQL] i en d'altres llocs, però, trobareu que s'utilitza un format alternatiu conegut com a '''WKT (Well-Known Text)''', i necessitem d'algunes funcions per transformar d'un format a l'altre.
 +
 +
Funcions espaials: http://dev.mysql.com/doc/refman/5.7/en/spatial-function-reference.html
 +
 +
Per exemple, per crear un punt a partir de WKT:
 +
mysql> SELECT ST_GeomFromText('POINT (1.7578125 41.396484375)');
 +
 +
O per visualitzar de forma llegible la nostra taula:
 +
mysql> SELECT AsWKT(punt) FROM geo;
 +
+--------------------+
 +
| AsWKT(punt)        |
 +
+--------------------+
 +
| POINT(1 2)        |
 +
| POINT(1.313 2.087) |
 +
+--------------------+
 +
2 rows in set (0.00 sec)
  
 
<br>
 
<br>

Revisió del 19:53, 6 des 2016

La geolocalització ha pres molta importància en les aplicacions mòbils. Des de fa temps els diversos SGBD han anat incorporant funcions per facilitar el càlcul de distàncies amb les dades provinents del GPS dels mòbils.

Amb aquestes dades i funcions podem fer:

  • Localització de punts en mapes.
  • Càlcul de distàncies des dels usuaris a altres punts.
  • Ubicació d'un mòbil en un país o zona.
  • etc.


Introducció

El motor de base de dades MySQL incorpora funcions de càlcul geoespaial. En concret des de les versions:

  • Classes geomètriques: POINT, MULTIPOINT, LINE, etc. des de la versió 5.5
  • Funcions geoespacials: ST_Distance, ST_Distance_Sphere, etc. des de la versió 5.6(incomplet) / 5.7

Referències:


La classe POINT

Des de MySQL 5.5 s'incorpora un tipus de dades geomètriques genèriques. S'emmagatzemen en un format intern que costa de llegir en una query des de la consola, tot i que la majoria d'interfícies gràfiques com phpmyadmin ens faciliten la visualització. Caldrà utilitzar algunes funcions per visualitzar correctament les dades.

El punt més bàsic es pot crear amb:

mysql> select Point(1,2);
+---------------------------+
| Point(1,2)                |
+---------------------------+
|     ��         �?       @  |
+---------------------------+
1 row in set (0.00 sec)

Les coordenades (1,2) són floats i podem referir-se a qualsevol referència: distància en metres, km, angles, sistema normalitzat, geoespacial, etc.

Si volem veure les coordenades de forma llegible hem d'utilitzar algunes funcions (no les trobareu en MySQL 5.5, només a partir de la 5.6):

mysql> select ST_X(Point(1,2)) , ST_Y(Point(1,2));
+------------------+------------------+
| ST_X(Point(1,2)) | ST_Y(Point(1,2)) |
+------------------+------------------+
|                1 |                2 |
+------------------+------------------+
1 row in set (0.00 sec)


Creant taules amb POINT

Podem crear una taula amb el tipus POINT fàcilment:

mysql> CREATE TABLE geo (comentari TEXT, punt POINT);

I introduir dades com us podeu imaginar:

mysql> INSERT INTO geo VALUES("punt 1",Point(1.313,2.087));

Formats alternatius

En aquesta referència de MySQL i en d'altres llocs, però, trobareu que s'utilitza un format alternatiu conegut com a WKT (Well-Known Text), i necessitem d'algunes funcions per transformar d'un format a l'altre.

Funcions espaials: http://dev.mysql.com/doc/refman/5.7/en/spatial-function-reference.html

Per exemple, per crear un punt a partir de WKT:

mysql> SELECT ST_GeomFromText('POINT (1.7578125 41.396484375)');

O per visualitzar de forma llegible la nostra taula:

mysql> SELECT AsWKT(punt) FROM geo;
+--------------------+
| AsWKT(punt)        |
+--------------------+
| POINT(1 2)         |
| POINT(1.313 2.087) |
+--------------------+
2 rows in set (0.00 sec)


Càlculs de distància entre punts


Per investigar més