我正在使用谷歌地图 javascript v3。我在地图上画了一个圆圈,并允许用户修改半径。然后,我将中心坐标和以公里为单位的半径发送到服务器脚本。我提取距离小于中心半径的所有标记。我使用 Great Circle 公式和 MySql GEOPOINT 对象来计算距离:
(6371 * acos (cos(radians(".$coord_X_center."))* cos(radians(X(GEOPOINT)))
* cos(radians(Y(GEOPOINT)) - radians(".$coord_Y_center."))
+ sin(radians(".$coord_X_center."))
* sin( radians(X(GEOPOINT) )))) AS Distance FROM table_markers c
HAVING Distance <= ".$radius." ORDER BY RATING desc,Distance;"
现在考虑我为您准备的示例: 示例 如果您修改圆的半径,仅排除一个标记,更多的标记将消失。这是因为计算的中心标记和消失标记之间的距离大于圆的半径。为什么?有什么区别?也许谷歌地图不像我在上面的公式中那样认为地球是一个球体?
更新:
已发送 POST 请求(用萤火虫仔细检查):centerx:8.222424000000046
中心:45.295839
半径:60.84800957919576
他们被铸造:
$coord_X_center = number_format((float) $post_filtered['centerx'], 4, '.', '');
$coord_Y_center = number_format((float) $post_filtered['centery'], 4, '.', '');
$radius = (int) $post_filtered['radius'];
答案,通过上面的公式:
{"names":["PONT-SAINT-MARTIN","FONTAINEMORE","LILLIANES","PERLOZ","GABY"],
"positions":[{"Lat":"7.81191320621736","Lon":"45.5991574533545"},
{"Lat":"7.88378299041174","Lon":"45.6488324511642"},
{"Lat":"7.85828195583629","Lon":"45.6242900876236"},
{"Lat":"7.81139246615188","Lon":"45.6285105114389"},
{"Lat":"7.88397564319245","Lon":"45.7144850123829"}]}