首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Google地图api获取我地址中离我最近的地方

Google地图api获取我地址中离我最近的地方
EN

Stack Overflow用户
提问于 2017-08-07 05:59:04
回答 1查看 2.9K关注 0票数 1

我正在写一个网站,显示我们的商店附近的一个地址。我从服务中获得了每个商店的经纬度位置列表。我找到了自己的位置,并标记出离我的location.Can最近的商店找不到的stores.But。您能帮帮我吗?:)

代码语言:javascript
复制
 function initMap() {
        var map = new google.maps.Map(document.getElementById('map'), {
            center: new google.maps.LatLng(40.188528, 29.060964),
            zoom: 10
        });
        var infoWindow = new google.maps.InfoWindow;

        if (navigator.geolocation) {
            navigator.geolocation.getCurrentPosition(function(position) {
                var pos = {
                    lat: position.coords.latitude,
                    lng: position.coords.longitude
                };
                infoWindow.setPosition(pos);
                infoWindow.setContent('Location found.');
                infoWindow.open(map);
            }, function() {
                handleLocationError(true, infoWindow, map.getCenter());
            });
        } else {
            // Browser doesn't support Geolocation
            handleLocationError(false, infoWindow, map.getCenter());
        }
        
        downloadUrl('locations.xml', function(data) {
            var xml = data.responseXML;
            var markers = xml.documentElement.getElementsByTagName('marker');
            Array.prototype.forEach.call(markers, function(markerElem) {
                var id = markerElem.getAttribute('id');
                var name = markerElem.getAttribute('name');
                var address = markerElem.getAttribute('address');
                var type = markerElem.getAttribute('type');
                var point = new google.maps.LatLng(
                    parseFloat(markerElem.getAttribute('lat')),
                    parseFloat(markerElem.getAttribute('lng')));

                var infowincontent = document.createElement('div');
                var strong = document.createElement('strong');
                strong.textContent = name
                infowincontent.appendChild(strong);
                infowincontent.appendChild(document.createElement('br'));

                var text = document.createElement('text');
                text.textContent = address
                infowincontent.appendChild(text);
                var icon = customLabel[type] || {};
                var marker = new google.maps.Marker({
                    map: map,
                    position: point,
                    label: icon.label
                });
                marker.addListener('click', function() {
                    infoWindow.setContent(infowincontent);
                    infoWindow.open(map, marker);
                });
            });
        });
    }

代码语言:javascript
复制
<markers>
<marker id="1" name="Pronet" address="Altınşehir Mahallesi, Muammer Aksoy Cd. No:45, 16120 Nilüfer/Bursa" lat="40.227127" lng="28.924318" type="Ajans"/>
<marker id="2" name="Nette" address="Fethiye Mahallesi, Bursa Cd No:1, 16140 Başiskele/Bursa" lat="40.227173" lng="28.979762" type="Ajans"/>
<marker id="3" name="Alivre" address="Osmangazi Mahallesi, Altıparmak Caddesi, No:86 Stad İş Merkezi K:6 D:15, 16050 Osmangazi/Bursa" lat="40.190341" lng="29.050251" type="Ajans"/>

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-07 16:03:59

您可以使用此函数来查找您的位置周围最近的标记:

代码语言:javascript
复制
function rad(x) { return x * Math.PI / 180; }
function find_closest_marker(position) {
    var lat = position.lat;
    var lng = position.lng;
    var R = 6371; // radius of earth in km
    var distances = [];
    var closest = -1;
    for (i = 0; i < gmarkers.length; i++) {
        if (gmarkers[i]) {
            var mlat = gmarkers[i].position.lat();
            var mlng = gmarkers[i].position.lng();
            var dLat = rad(mlat - lat);
            var dLong = rad(mlng - lng);
            var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
                Math.cos(rad(lat)) * Math.cos(rad(lat)) * Math.sin(dLong / 2) * Math.sin(dLong / 2);
            var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
            var d = R * c;
            distances[i] = d;
            if (closest == -1 || d < distances[closest]) {
                closest = i;

            }
        }
    }

    return (closest);

}

但是,在初始化标记时,可以将它们放在数组标记中,如下所示:

代码语言:javascript
复制
markers.push (newMarker);

您可以像这样使用函数:

代码语言:javascript
复制
var closestMarker = find_closest_marker (yourPosition);

closestMarker=markers[closestMarker];

函数find_closest_marker返回数组markers中最近的大小写。

如果你有什么问题,请告诉我。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45537011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档