-2

Google マップの JavaScript v3 を使用しています。地図上に円を描き、ユーザーが半径を変更できるようにします。次に、中心の座標と半径 (km) をサーバー スクリプトに送信します。中心から半径未満の距離にあるすべてのマーカーを抽出します。大円の式と 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;" 

ここで、私が用意した例を考えてみましょう: 円の半径を変更すると、1 つのマーカーを除外するだけで、さらに多くのマーカーが消えます。これは、中心と消えたマーカーの間で計算された距離が、円の半径よりも大きいためです。なんで?違いはなんですか?上の式のように、Google マップは地球を球体と見なしていないのでしょうか?

アップデート:

POST リクエストが送信されました (firebug で再確認): 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 キロメートルです(少なくとも Google によると、6371 km ではありません)。

于 2014-12-29T12:21:10.663 に答える