У меня есть следующий код:
set @lon = 121.4732134;
set @lat = 31.2304321;
set @point = point(@lon, @lat);
set @radius = .5;
set @polygon = ST_Buffer(@point, @radius);
select l.city,l.latitude,l.longitude,
st_distance_sphere(l.latlngindex, point(@lon, @lat)) as distance
from table_locations l
where st_within(l.latlngindex, @polygon)
order by distance
;
Работает нормально, дает результат, но только первые 5 или 6 точны по отношению к ним. Остальные неточны, я проверил это на нескольких сайтах.
Структура таблицы -
`locationid`,
`latitude`,
`longitude`,
`latlngindex` point not null,
spatial index `latlngindex` (`latlngindex`)
Образцы вставок :
insert into `table_locations` values(2001,31.2372705, 121.4705291, Point(121.2372705, 31.4705291));
insert into `table_locations` values(2002,31.2328741, 121.4741493, Point(121.2328741, 31.4741493));
insert into `table_locations` values(2003,31.2300200, 121.4749245, Point(121.2300200, 31.4749245));
insert into `table_locations` values(2004,31.2302308, 121.4705508, Point(121.2302308, 31.4705508));
insert into `table_locations` values(2005,31.2391562, 121.4771425, Point(121.2391562, 31.4771425));
insert into `table_locations` values(2006,31.2331857, 121.4779539, Point(121.2331857, 31.4779539));
Пример строки результатов :
Lat Long distance
31.2397267', '121.4742061', '35019.00977766075'
Расстояние между (31.2397267, 121.4742061) и (31.2304321, 121.4732134) должно составлять 1004 м, тогда как оно равно 35019 м.