2017-08-01 13 views
0

現在、Googleマップ上のすべてのユーザー(すべてのデータベース)を表示するページを作成しました。しかし、ユーザーの所在地が5000以上あるため、ページの読み込みに時間がかかります。GoogleマップのMySQLからの位置情報の照会

私は、特定の領域内のユーザーの場所を照会するだけで、より効率的にしたいと考えています。 (私が見ている領域)

私はそれをより効率的にするために何ができますか? GoogleマップAPIは、私が望む機能をサポートしていますか?私は、mysqlのジオフェンシングを行うことができると聞いたが、私は実際にそれを使用する方法を見つけることができません。

ありがとうございます。

enter image description here

+0

マップの中心は何ですか?ユーザーまたは固定小数点の現在の位置? – Ares

+0

@私のマップの中心は、ユーザーが現在見ている場所です。 –

+0

どのように場所をjavascriptに戻していますか?どのバックエンド言語を使用していますか? – Ares

答えて

2

は、あなたが欲しいものを行うには、おそらく多くの方法があります。ユーザーの経度と緯度がある場合は、すべてのユーザーの場所を読み込む代わりに、(select latitude, longitude from users)ユーザーの座標の範囲を指定して場所を絞り込むので、選択は次のようになります(疑似クエリ)

select latitude, longitude from users where latitude between (user.latitude + whateverrangeyouwant and user.latitude - whateverrangeyouwant) AND longitude between (user.longitude + whateverrangeyouwant AND user.longitude - whateverrangeyouwant); 

範囲は、おそらくあなたは、その後、マップからマーカーを削除し、追加するサービスを使用してスクリプトにこのバックを送信することができmap.boundsプロパティ

から撮影することができますあなたのサービスの応答に基づいて1つ。助け

$minLat = $_REQUEST['lat'] - ($_REQUEST['dl']/2); 
$maxLat = $_REQUEST['lat'] + ($_REQUEST['dl']/2); 
$minLon = $_REQUEST['lon'] - $_REQUEST['dln']; 
$maxLon = $_REQUEST['lon'] + $_REQUEST['dln']; 

$query = 'SELECT locations.latitude, 
        locations.longitude 
      FROM locations 
      WHERE (latitude BETWEEN ' . $minLat . ' AND ' . $maxLat . ') AND 
       (longitude BETWEEN ' . $minLon . ' AND ' . $maxLon. ')'; 

    } 

    $query = DB::query($query); 

    $json = array(); 

    while($location = $query->fetch_assoc()) { 
     $json[] = $location; 
    } 

    header('Content-Type: application/json'); 
    echo json_encode($json); 
    exit(); 

希望:だからあなたのjavascriptのは、おそらくこのような何かを見て、この(擬似コードで)

get user location; send service request for user locations and get them back in an array remove current markers add new markers from service result

PHPでのサービスのようになります。

+0

あなたの提案をありがとう^^ –

関連する問題