-2

我正在使用谷歌地图 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"}]}
4

1 回答 1

0

地球的半径是6378.1 公里(不是 6371 公里,至少根据谷歌)。

于 2014-12-29T12:21:10.663 回答