我正在尝试在下面创建以下算法,但我不确定如何开始,因此这里没有任何代码:
目标是展示(例如 Google 地图中的 30 家商店(。我目前正在应用程序中使用谷歌地图API。
算法:
根据缩放级别检索30个不同的商店。
示例 1:如果缩放为 10(城市缩放(,则以该特定缩放显示 30 个不同的商店。这些商店将覆盖地图的不同纬度和长度。(理想情况下,根据用户当前在地图中看到的内容覆盖北部、南部、东部和西部(。
示例 2:如果用户缩放到级别 15,(街道缩放(它还将以该特定缩放显示这 30 家商店。如果不是 30 个商店,它将显示 (<30(。
任何帮助将不胜感激。如果需要进一步澄清,请发表评论,我将对帖子进行修改。
- 在显示商店之前,您需要隐藏"标准"标记,就像 Jozef 的这个答案一样:
您只需修改地图样式即可完成此操作:添加 风格 地图
- 像这样创建 JSON 文件src\main\res\raw\map_style.json:
[ { featureType: "poi", elementType: "labels", stylers: [ { visibility: "off" } ] } ]
- 将地图样式添加到
GoogleMap
googleMap.setMapStyle(MapStyleOptions.loadRawResourceStyle(getContext(), R.raw.map_style));
-
您可以使用 Google 地点 API 中的地点搜索,并通过附近的网址请求获取兴趣点列表:
https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=<LAT_LNG>&types=point_of_interest&radius=<RADIUS_IN_METERS>&sensor=false&key=<YOUR_APP_KEY>
解析它。
铌!附近的 URL 请求仅返回 20 个位置,为了加载更多数据,您应该使用响应next_page_token
标签中的字符串值,并通过pagetoken
参数将其传递给下一个请求:
https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=<LAT_LNG>&types=point_of_interest&radius=<RADIUS_IN_METERS>&sensor=false&key=<YOUR_APP_KEY>&pagetoken=<TOKEN_FOR_NEXT_PAGE_FROM_next_page_token_TAG_OF_RESPONSE>
- 您可以按
rating
或其他字段或其他自定义条件从列表中选择 30 家商店。似乎,如果用户将缩放从 10 更改为 15,则在缩放 10 上显示的所有商店应该仍然可见。