当前位置: 首页 > 知识库问答 >
问题:

基于距离过滤谷歌地图标记

蒋飞捷
2023-03-14

我正在考虑根据与用户当前位置的距离过滤谷歌地图标记。我将此设置为从数据库中引入标记并显示在地图上,但我想限制这些标记的显示,仅显示距离用户当前位置3英里的标记。

我收到JSON形式的标记(具有lat long详细信息)如下:

function showMarkers(str) {
            if (str == "") {
                document.getElementById("products").innerHTML = "";
                return;
            }
            if (window.XMLHttpRequest) {
                // code for IE7+, Firefox, Chrome, Opera, Safari
                xmlhttp = new XMLHttpRequest();
            } else { // code for IE6, IE5
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
            xmlhttp.onreadystatechange = function() {
                if (this.readyState == 4 && this.status == 200) {
                    //$('#mapMarkerPositions').html(this.responseText);

                    let data = JSON.parse(this.responseText);
                    merchantMarkers = [];
                    for (let i = 0; i < data.length; i++) {
                        merchantMarkers[i] = data[i];
                    }
                    resetMarker();
                    reloadMarkers();


                }
            }
            xmlhttp.open("GET", "filterMarkers.php?s=" + str, true);
            xmlhttp.send();
        }

收到的JSON示例:

0: [,…]
0: "<a style="margin-left: 8px; font-weight: bold; font-family: Courier, Arial, Helvetica, sans-serif;">TestMerchant1</a><br>
↵   <button class="seeMerchantButton" onclick="showMerchant('TestMerchant1');showProfile();" value="TestMerchant1">See merchant</button>"
1: "51.503366"
2: "-0.223477"
3: "info"
4: {text: "£5", fontFamily: "Courier, Arial, Helvetica, sans-serif"}
fontFamily: "Courier, Arial, Helvetica, sans-serif"
text: "£5"
1: [,…]
0: "<a style="margin-left: 8px; font-weight: bold; font-family: Courier, Arial, Helvetica, sans-serif;">TestMerchant2</a><br>
↵   <button class="seeMerchantButton" onclick="showMerchant('TestMerchant2');showProfile();" value="TestMerchant2">See merchant</button>"
1: "51.503393"
2: "-0.226599"
3: "info"
4: {text: "£3", fontFamily: "Courier, Arial, Helvetica, sans-serif"}
fontFamily: "Courier, Arial, Helvetica, sans-serif"
text: "£3"

我将地图放在用户位置的中心,如下所示:

            if (navigator.geolocation) {
                navigator.geolocation.getCurrentPosition(function(position) {
                    initialLocation = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
                    map.setCenter(initialLocation);
                });
            }

我认为处理这个问题最有效的方法是过滤JSON,但我甚至不知道从哪里开始,因为我对谷歌地图API还不熟悉?我相信应用哈弗森公式的方法学可以在那里奏效,但我还是不确定这是怎么回事?

感谢您的帮助!

共有1个答案

孔理
2023-03-14

对此的回答非常简单,与评论中的建议一致。

提取当前用户的位置是这样做的

function showPosition(position) {
  y.innerHTML = position.coords.latitude + "latlong" + position.coords.longitude;

然后,我将其传递给PHP脚本,并在脚本中使用haversine公式进行过滤,因为它的效率要高得多

 类似资料:
  • 我有一些谷歌地图折线。我试图在它们周围画两条折线,这样它们就形成了某种边界: 所以对于原始折线的每一个点,我计算边界线点,从原点算起25米: 在这个例子中,让我们省略折线的第一个和最后一个点。所以我总是看上一个点和下一个点,计算中心点的偏移量。

  • 我如何根据坐标创建谷歌地图链接。他们的新基本共享网址包含许多参数,例如- https://www.google.com/maps/place/Vetlanda,瑞典/@57.4217311,15.0849255,13z/data=!3m1!4b1!4m2!3m1!1s0x465758d912d321b5:0x55675191e550be84?hl=en 有什么想法吗?不希望嵌入,而只是创建可以共享

  • 我试图实现一个地图使用谷歌地图与离子。我遵循了这个链接中的编码,但我得到的只是一个空白屏幕,不知道我哪里出错了。请帮忙 这是控制器 这是html文件 请帮忙。

  • 问题内容: 您如何计算Google Maps V3中两个标记之间的距离?(类似于inV2中的功能。) 谢谢.. 问题答案: 如果要自己计算,可以使用Haversine公式:

  • 我知道周围也有类似的问题,但我无法找到一个可靠的答案,这是我的问题:有没有什么方法可以在没有谷歌地图引用的情况下将标记存储在ArrayList(或任何其他存储)中,然后简单地将它们添加到我的地图中? 背景:我有一个应用程序,目前有大约3500个标记。每个标记还有一个与之相关联的数据(布尔数组存储每个标记的数据,用于根据用户交互使它们可见/不可见)。目前,我使用扩展AsyncTask的类来获取这些标

  • 我想更改Google Maps上选定的标记图标,因此我有以下代码: 在这一行,我从下面得到错误: 例外情况如下: