我正在使用谷歌地图javascript v3。 我在地图上画了一个圆圈,我允许用户修改半径。 然后,我将中心的坐标和以km为单位的半径发送到服务器脚本。 我提取距离小于中心半径的所有标记。我使用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;"
现在考虑我为你准备的例子: Example 如果修改圆的半径,只是为了排除一个标记,则会有更多标记消失。这是因为在中心和消失的标记之间计算的距离高于圆的半径。 为什么?有什么不同?也许谷歌地图不像我在上面的公式中那样认为地球是一个球体?
更新
发送POST请求(使用firebug进行双重检查): centerx:8.222424000000046
centery: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"}]}