【问题标题】:Querying the location data from MySQL on google maps在谷歌地图上从 MySQL 查询位置数据
【发布时间】:2017-08-01 03:06:27
【问题描述】:

目前,我已经创建了一个页面,在谷歌地图上显示用户的所有位置(全部来自 MySQL 数据库)。但是因为有 5000+ 个用户位置,所以加载页面需要很长时间。

我想通过仅查询特定区域内的用户位置来提高效率。 (我正在查看的区域)

我可以做些什么来提高效率? google maps API 是否支持我想要的功能?我听说我可以做地理围栏 mysql,但我真的找不到如何使用它。

提前谢谢你。

【问题讨论】:

  • 地图的中心是什么?用户的当前位置还是固定点?
  • @Ares 我地图的中心是用户正在查看的当前位置。
  • 您如何将位置返回到 javascript?您使用的是什么后端语言?
  • @Ares 现在我正在使用 php

标签: javascript mysql google-maps


【解决方案1】:

可能有很多方法可以做你想做的事。如果您有用户的经度和纬度(听起来像您这样做),那么不要加载所有用户位置(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 属性

然后,您可以使用服务将其发送回您的脚本,然后该服务将从地图中删除标记并根据您的服务响应添加标记。所以你的 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 中的服务大概是这样的:

 $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();

希望对您有所帮助。

【讨论】:

  • 感谢您的建议^^
猜你喜欢
  • 2013-11-21
  • 2018-06-13
  • 1970-01-01
  • 1970-01-01
  • 2014-02-18
  • 2014-10-27
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
相关资源
最近更新 更多