Google Maps动态标记位置不正确-纬度和经度准确

使用Google Maps API,我正在动态添加地图标记来跟踪我们的车辆2。该网站使用bootstrap 4.3.1在asp.net c#mvc中编写,并使用ajax请求从以下位置获取最新标记位置:我们使用的车辆追踪器API。地图标记每5分钟更新一次,以显示当前位置。

在本地主机和其中一台内部服务器上运行应用程序时,标记会准确显示它们应在的位置。现在,我已将网站上传到外部Web服务器,我注意到地图标记不准确,并且始终处于错误的位置。

我有一个屏幕截图,显示了在开发工具中正在检查的标记,您可以看到标记应该位于的位置。

See marker and ghost position on screenshot

我已经检查了标记的数据,并且在这方面一切都很好,在检查开发工具中的代码后,似乎标记被CSS向下推,但是我似乎无法找到并取消选择任何会影响标记位置的类。

我已经设法在此处的JSFiddle中复制了该问题,位置数据已针对该演示进行了硬编码;

https://jsfiddle.net/znqo5xaL/

<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmvgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>

<div class="row">
        <div id="map"></div>
        <script>
            var locs;
            var markersArray = [];
            var map;

            function initMap() {
                locs = [{"lat":"53,5658418","lng":"-0,8491593","distanceList":null},{"lat":"52,8815088","lng":"-2,1409461","distanceList":null}];

                map = new google.maps.Map(
                    document.getElementById('map'),{ center: new google.maps.LatLng(54.113616,-1.607444),zoom: 6 });


                for (var i = 0; i < locs.length; i++) {
                    var marker = new google.maps.Marker({
                        position: {lat: parseFloat(locs[i].lat),lng: parseFloat(locs[i].lng)},animation: google.maps.Animation.DROP,map: map,});
                    markersArray.push(marker);
                };

                window.setInterval(function() {loadMarkers(image,map,markersArray,locs)},300000);

            }

            function setMarkers(markersArray,locs,image) {

                var locArray;

                $.ajax({

                    url:'../Home/UpdateLoc',dataType: "json",type: "GET",contentType: 'application/json; charset=utf-8',cache: true,success: function (data) {

                        locArray = data.locArray;

                        for (var i = 0; i < locArray.length; i++) {
                            var marker = new google.maps.Marker({

                                position: {lat: parseFloat(locArray[i].lat),lng: parseFloat(locArray[i].lng)},map: map

                            });
                            markersArray.push(marker);
                        };
                    },error: function (xhr) {
                        alert('error');
                    }
                });


            }

            function loadMarkers (image,locs) {

                var tst = markersArray;

                for (var i=0; i< tst.length; i++) {
                    tst[i].setMap(null);
                }
                setMarkers(markersArray,image);
            }

        </script>


        <script async defer src="https://maps.googleapis.com/maps/api/js?key=&callback=initMap"></script>

    </div>

您会发现在Google地图上搜索位置:53.5658418、0.8491593时,其位置与我的地图上显示的位置不同

应该使用上述坐标在Google地图上显示的标记位置。

什么可能导致此问题?

liulei9ok 回答:Google Maps动态标记位置不正确-纬度和经度准确

似乎不准确,是因为您使用parseFloat来解析逗号分隔的字符串。请参考该线程Javascript parse float is ignoring the decimals after my comma

尝试注销此内容:

 console.log("Commas: " + parseFloat(locs[i].lat) + "," + parseFloat(locs[i].lng));
 console.log("Dots: " + parseFloat(locs[i].lat.replace(',','.')) + "," + parseFloat(locs[i].lng.replace(','.')));

您将在输出中看到不同的坐标:

Commas: 53,0
Dots: 53.5658418,-0.8491593
Commas: 52,-2
Dots: 52.8815088,-2.1409461

快速解决方案是使用replace用小数点替换逗号,如上面的代码所示,因此标记的位置设置如下:

var marker = new google.maps.Marker({
     position: {
        lat: parseFloat(locs[i].lat.replace(','.')),lng: parseFloat(locs[i].lng.replace(',},...
});

希望这会有所帮助!

本文链接:https://www.f2er.com/3167448.html

大家都在问