Trovare la distanza tra due punti in MySQL. (Utilizzando il tipo di punto di dati)
Domanda
Supponiamo che io ho una tabella 2 colonna in questo modo:
| user_id | int(11) | NO | UNI | NULL | |
| utm | point | NO | MUL | NULL | |
Come si può vedere, è molto semplice. UTM è un Punto tipo di dato. Inserisco in questo modo:
INSERT INTO mytable(user_id, utm) VALUES(1, PointFromWKB(point(50, 50)));
Poi, creo un indice spaziale.
ALTER TABLE mytable ...add spatial index on(utm) or something. (forgot)
Bene, tutto è buono. Ora, voglio selezionare * in cui la distanza <99999. Ma non funziona!
//This is supposed to select all where the distance is less than 99999999.
set @mypoint = PointFromWKB(point(20,20))
select * from mytable where GLength(LineString(utm, @mypoint)) < 9999999;
Empty set (0.00 sec)
select * from mytable where GLength(LineStringFromWKB(LineString(utm, @mypoint))) < 9999;
Empty set (0.00 sec)
A proposito, ho cercato di INSERT INTO senza il PointFromWKB ... e non ha funzionato ... è per questo che qualcuno ha suggerito che PointFromWKB a me.
Soluzione
risolto. Questo è quello che ho fatto:
where GLength(LineStringFromWKB(LineString(asbinary(utm), asbinary(@mypoint)))) < 9999999999999;
Altri suggerimenti
Si può anche fare in questo modo. Non sono sicuro se è più veloce o meno.
select * from mytable where glength(geomfromtext(concat('linestring(', x(utm), ' ', y(utm), ',20 20', ')'))) < 99999999
Per quanto ne so, u deve provare in questo modo -
select * from mytable
where
(
GLength(
LineStringFromWKB(
LineString(
geoPoint,
GeomFromText('POINT(51.5177 -0.0968)')
)
)
)
) < 99999999
Più in questa risposta .
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow