MySQL пространственное поле - PullRequest
       24

MySQL пространственное поле

0 голосов
/ 09 сентября 2011

одним из значений, обновляемых для поля в таблице mysql, является 'location' типа 'point'.

Когда мы выбираем поле

select *,AsText(location) from somtable

Как мы можем использовать это поле в нашем скрипте? а нам нужно найти радиус или расстояние между 2 точками.

Ответы [ 2 ]

0 голосов
/ 15 апреля 2013

Эта ссылка позволяет получить подробный пример радиуса:

http://howto-use-mysql-spatial-ext.blogspot.in/2007/11/using-circular-area-selection.html

Он основан на примере MBRContains @ dRocking, а также объясняет, как построить многоугольник из заданной точки.

0 голосов
/ 22 июня 2012

Обычно вы хотите вернуть расстояние между двумя местоположениями в качестве другого поля, а не местоположения, потому что это сама точка, а не расстояние. Что-то вроде: Например:

$sql = 'SELECT *, ( 3959 * acos( cos( radians(' . $lat1 . ') ) * cos( radians(location.lat) ) * cos( radians(location.lng) - radians(' . $lng1 . ') ) + sin( radians(' . $lat1 . ') ) * sin( radians(location.lat) ) ) ) AS distanceFromUser FROM somtable WHERE....';

Но если вы используете тип данных Point, используйте вместо этого некоторые пространственные функции MySQL. Одним из популярных является MBRContains. Это делает ваш запрос примерно таким:

select * from somtable where
 MBRContains(
   GeomFromText('Polygon((swLat swLon, neLat swLon, neLat neLon, swLat neLon, swLat swLon))'), location );

Другие координаты задают ограничивающий прямоугольник, в котором должна существовать точка вашего местоположения. Так что во втором случае вы просто возвращаете очки в поле. В первом случае вы возвращаете расстояние до каждой точки вашей таблицы.

...