代码之家  ›  专栏  ›  技术社区  ›  Julia

Mapbox获取当前位置

  •  0
  • Julia  · 技术社区  · 6 年前

    我正在从地图箱中获取当前位置。这是我在他们的地图箱网站上找到的一个例子,当我点击“找到我”时,它工作得很好。但是,当我在服务器上复制代码时,它似乎不起作用。当我用服务器上的代码单击“查找我”时,会出现“找不到位置”错误。谢谢。

     https://www.mapbox.com/mapbox.js/example/v1.0.0/geolocation/
    
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset=utf-8 />
    <title>Geolocation</title>
    <meta name='viewport' content='initial-scale=1,maximum-scale=1,user-scalable=no' />
    <script src='https://api.mapbox.com/mapbox.js/v3.1.1/mapbox.js'></script>
    <link href='https://api.mapbox.com/mapbox.js/v3.1.1/mapbox.css' rel='stylesheet' />
    <style>
      body { margin:0; padding:0; }
      #map { position:absolute; top:0; bottom:0; width:100%; }
    </style>
    </head>
    <body>
    <style>
    .ui-button {
      background:#3887BE;
      color:#FFF;
      display:block;
      position:absolute;
      top:50%;left:50%;
      width:160px;
      margin:-20px 0 0 -80px;
      z-index:100;
      text-align:center;
      padding:10px;
      border:1px solid rgba(0,0,0,0.4);
      border-radius:3px;
      }
      .ui-button:hover {
        background:#3074a4;
        color:#fff;
        }
    </style>
    
    <div id='map'></div>
    <a href='#' id='geolocate' class='ui-button'>Find me</a>
    
    <script>
    L.mapbox.accessToken = 'pk.eyJ1IjoidGltbGlzdGVuIiwiYSI6ImNqaWs5eWltbTAybG8za21zNjVuZjg5MW4ifQ.xCKtim61H1YXAkU5KT9-FQ';
    var geolocate = document.getElementById('geolocate');
    var map = L.mapbox.map('map', 'mapbox.streets');
    
    var myLayer = L.mapbox.featureLayer().addTo(map);
    
    // This uses the HTML5 geolocation API, which is available on
    // most mobile browsers and modern browsers, but not in Internet Explorer
    //
    // See this chart of compatibility for details:
    // http://caniuse.com/#feat=geolocation
    if (!navigator.geolocation) {
        geolocate.innerHTML = 'Geolocation is not available';
    } else {
        geolocate.onclick = function (e) {
            e.preventDefault();
            e.stopPropagation();
            map.locate();
        };
    }
    
    // Once we've got a position, zoom and center the map
    // on it, and add a single marker.
    map.on('locationfound', function(e) {
        map.fitBounds(e.bounds);
    
        myLayer.setGeoJSON({
            type: 'Feature',
            geometry: {
                type: 'Point',
                coordinates: [e.latlng.lng, e.latlng.lat]
            },
            properties: {
                'title': 'Here I am!',
                'marker-color': '#ff8888',
                'marker-symbol': 'star'
            }
        });
    
        // And hide the geolocation button
        geolocate.parentNode.removeChild(geolocate);
    });
    
    // If the user chooses not to allow their location
    // to be shared, display an error message.
    map.on('locationerror', function() {
        geolocate.innerHTML = 'Position could not be found';
    });
    </script>
    </body>
    </html>
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   pathmapper    6 年前

    这个密码对我来说很管用。

    当我用服务器上的代码单击“查找我”时,我会得到这个 错误“找不到位置。”

    这可能是因为你不使用 https 以及一个不支持地理位置不安全的来源(如Chrome)或你阻止了gelocation的浏览器。

    编辑:

    要从注释中回答您的问题,下面是用于在页面加载时查找位置的经过调整的代码,而不是单击“查找我”按钮:

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset=utf-8 />
    <title>Geolocation</title>
    <meta name='viewport' content='initial-scale=1,maximum-scale=1,user-scalable=no' />
    <script src='https://api.mapbox.com/mapbox.js/v3.1.1/mapbox.js'></script>
    <link href='https://api.mapbox.com/mapbox.js/v3.1.1/mapbox.css' rel='stylesheet' />
    <style>
      body { margin:0; padding:0; }
      #map { position:absolute; top:0; bottom:0; width:100%; }
    </style>
    </head>
    <body>
    
    <div id='map'></div>
    <a href='#' id='geolocate' class='ui-button'>Find me</a>
    
    <script>
    L.mapbox.accessToken = 'pk.eyJ1IjoidGltbGlzdGVuIiwiYSI6ImNqaWs5eWltbTAybG8za21zNjVuZjg5MW4ifQ.xCKtim61H1YXAkU5KT9-FQ';
    var map = L.mapbox.map('map', 'mapbox.streets');
    
    var myLayer = L.mapbox.featureLayer().addTo(map);
    
    // This uses the HTML5 geolocation API, which is available on
    // most mobile browsers and modern browsers, but not in Internet Explorer
    //
    // See this chart of compatibility for details:
    // http://caniuse.com/#feat=geolocation
    if (!navigator.geolocation) {
        geolocate.innerHTML = 'Geolocation is not available';
    } else {
          map.locate();
    }
    
    // Once we've got a position, zoom and center the map
    // on it, and add a single marker.
    map.on('locationfound', function(e) {
        map.fitBounds(e.bounds);
    
        myLayer.setGeoJSON({
            type: 'Feature',
            geometry: {
                type: 'Point',
                coordinates: [e.latlng.lng, e.latlng.lat]
            },
            properties: {
                'title': 'Here I am!',
                'marker-color': '#ff8888',
                'marker-symbol': 'star'
            }
        });
    
        // And hide the geolocation button
        geolocate.parentNode.removeChild(geolocate);
    });
    
    // If the user chooses not to allow their location
    // to be shared, display an error message.
    map.on('locationerror', function() {
        geolocate.innerHTML = 'Position could not be found';
    });
    </script>
    </body>
    </html>