2016-01-18 49 views
0

我正在使用leafletjs來顯示地圖並在其上放置一些標記。我一直被困在一個奇怪的問題,其中一些標記彈出窗口不顯示。在玩它時,我發現,當我從谷歌地圖取得虛擬緯向數據時,它確實會觸發,但不是我從我的數據中獲得的經緯度。但是在這兩種情況下,我都會在地圖上貼上標記。因此,如果經緯度有問題,我如何在地圖上正確標記它們? 彈出火災時,我有這樣的經緯度:bindpopup不會觸發leafletjs的標記

lat: "1.478744" 
long: "-0.295573" 

,它不會火這樣的:

lat: "51.483679748651" 
long: "-0.29162660006234" 

這是我的代碼:

<html style='height: 100%; width: 100%;'> 
<head> 

    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> 
    <meta charset="utf-8"> 
    <script src="src/jquery-1.12.0.min.js"></script> 

    <link rel="stylesheet" href="leaflet.css" />   
    <link rel="stylesheet" href="src/L.Control.Sidebar.css" /> 

<style> 
    body { 
     padding: 30px; 
     font-family: sans-serif; 
    } 

    @font-face { font-family: Roboto-Medium; src: url('fonts/Roboto-Medium.ttf'); } 
    @font-face { font-family: Roboto-Regular; src: url('fonts/Roboto-Regular.ttf'); } 

    #map { 
     width: 100%; 
     height: 600px; 
     border-radius: 10px; 
    } 

    #sidebar { 
     padding: 24px; 
     height: auto; 
     width: auto; 
     float: right;    
     font-family: monospace; 
    } 

    hr { width:100%; height:1px; background: #fff } 

    .popLabelTitle { 
     color: #000000;      
     font-family: Roboto-Regular; 
     font-size: 20 
    } 

    .popLabelSubTitle { 
     color: #505050;      
     font-family: Roboto-Regular; 
     font-size: 14 
    } 

    .popLabelBlurred { 
     color: #505050;      
     font-family: Roboto-Medium; 
     font-size: 14 
    } 
    .radioTitle { 
     color: #505050;      
     font-family: Roboto-Regular; 
     font-size: 14   
    } 
</style> 

</head> 

<body> 


    <div id="sidebar"> 
     <span style="font-family: Roboto-Regular;">Filter</span><br>    
     <input backgroundColor="red" type="radio" name="filter" value="schedule" > <label class="radioTitle" >Schedule</label> <br>    
     <input type="radio" name="filter" value="risk"> <label class="radioTitle" >Risk</label> <br> 
     <input type="radio" name="filter" value="opm"> <label class="radioTitle" >OPM</label> <br> 
     <input type="radio" name="filter" value="location"> <label class="radioTitle" >Location</label> <br> 
     <input type="radio" name="filter" value="all" checked> <label class="radioTitle" >All</label> <br> 
    </div>  

    <div id="map"></div> 

    <script src="leaflet.js"></script> 
    <script src="src/L.Control.Sidebar.js"></script> 

    <script> 

     $(document).ready(function() {     
     $('input[type="radio"]').change(function(){ 
       //alert(this.value); 
      });  

     });   

     var map; 
     var poiData = [{ 
      "id" : "15555", 
      "color": "blue", 
      "address" : "5 Rue de l'Arcade, 11400 Castelnaudary, France", 
      "description" : "", 
      "lat" : "51.47344681882283", 
      "lon" : "-0.3091066283535285", 
      "name" : "Le Petit Gazouilli", 
      "zoom_show" : "2"     
     },{ 
      "id" : "142065", 
      "color": "green", 
      "address" : "5 Rue de l'Arcade, 11400 Castelnaudary, France", 
      "description" : "", 
      "lat" : "51.483679748651", 
      "lon" : "-0.29162660006234", 
      "name" : "Le Petit ", 
      "zoom_show" : "2" 
     }];  


     window.onresize = function() { 

      Ti.API.info('********** RESIZE FUNCTION IS CALLED1!!!!! window.innerHeight' + window.innerHeight + ' //// document.body.clientHeight = ' + document.body.clientHeight); 
      // outputs window.innerheight = 
      document.getElementById("map").style.height = window.innerHeight + 'px'; 
      // maybe change this to html/body tag to let it be a more generic fix. 
      map.invalidateSize(); 
      // relevant to your leaflet map to trigger resizing/redrawing /filling. 
     }; 

     var path = "", 
      obj = "", 
      center = "", 
      bounds = "", 
      minZoomLevel = "", 
      maxZoomLevel = ""; 
     /* 
     Ti.App.addEventListener("app:startWebview", function(e) { 
      obj = JSON.parse(e.pois); 
      center = JSON.parse(e.center); 
      minZoomLevel = JSON.parse(e.minZoomLevel); 
      maxZoomLevel = JSON.parse(e.maxZoomLevel); 
      bounds = JSON.parse(e.bounds); 
      createMap(); 

     });*/ 
      obj = poiData; 
      center = [51.478744, -0.295573];     
      minZoomLevel = 16; 
      maxZoomLevel = 18; 
      //bounds = [[51.470103, -0.310407], [51.478376, -0.280567]]; 
      bounds = [[51.470103, -0.310407], [51.486674, -0.286572]]; //sw,ne 

      createMap(); 

     function createMap() { 
      //alert('2s'); 

      var points = obj; 
      map = L.map('map', { 
       //center : [51.47834563230677, -0.29832356080899747], 
       //layers: [tileLayer['Gray'], groupA, groupB], 
       center : center, 
       zoom : minZoomLevel, 
       zoomControl : true      
      }); 


      var tl = L.tileLayer('mapTiles/richmond/{z}_{x}_{y}.png?access_token=pk.eyJ1IjoibWFwYm94IiwiYSI6IjZjNmRjNzk3ZmE2MTcwOTEwMGY0MzU3YjUzOWFmNWZhIn0.Y8bhBaUMqFiPrDRW9hieoQ', { 
       minZoom : minZoomLevel, 
       maxZoom : maxZoomLevel, 
       bounds : bounds, 
       //maxNativeZoom : 14, 
       unloadInvisibleTiles : true, 
       id : 'mapbox.streets' 

      }).addTo(map); 


      map.setMaxBounds(bounds); 

    var sidebar = L.control.sidebar('sidebar', {    
     closeButton: false, 
     position: 'right' 
    }); 
    map.addControl(sidebar); 
    sidebar.show(); 

    setTimeout(function() { 
     sidebar.show(); 
    }, 500); 
    tl.on("load",function() { 
     //alert("all visible tiles have been loaded"); 
}); 
      var poiLayer, 
       indicatorMarker; 



      function onClick(e) { 
       alert('clicked a poi! '); 
       //Ti.API.info("click " + JSON.stringify(e.target.options.item)); 
       // if (e && e.target && e.target.options && e.target.options.item) { 
       // alert('clicked a poi!'); 
       // Ti.App.fireEvent("app:openPoi", { 
       // poiItem : JSON.stringify(e.target.options.item) 
       // }); 
       // } 
      } 

      var zoomFactor = 0.8; 
      function addPois(zoom) { 
       var poiArray = []; 
       if (poiLayer) { 
        poiLayer.clearLayers(); 
       } 

       for (var i = 0,j = points.length; i < j; i++) { 
        //alert('ss'); 
        var item = points[i]; 
        // if (showPoi(item, zoom)) { 

        // var w = 50; 
        //var h = 60; 

        var w = 28; 
        var h = 42; 

        if (currentZoom === 16) { 
         w = w * zoomFactor; 
         h = h * zoomFactor; 
        } 

        /* 
        var icon = "", 
        iconHtml = ""; 

        if (item.recommended) { 
        icon = "rec_tapped_poi"; 
        } 
        if (item.favourited) { 
        icon = "fav_tapped_poi"; 
        } 

        if (icon) { 
        iconHtml = '<img style="width:15px;height:15px;position:absolute;left:50%;margin-left:-7px;top:-6px" src="images/' + icon + '.png">'; 
        } 
        */ 

        var pinIcon = ""; 

        if (item.color == "blue") { 
         pinIcon = "mapMarkerBlue"; 
        } 
        if (item.color == "green") { 
         pinIcon = "mapMarkerGreen"; 
        } 
        if (item.color == "purple") { 
         pinIcon = "mapMarkerPurple"; 
        } 
        var myIcon = L.divIcon({        
         iconSize : [w, h], 
         iconAnchor : [(w/2), h], 
         className : "testclass", 
         html : '<img style="width:' + w + 'px;height:' + h + 'px" src="images/poi_icons/' + pinIcon + '.png">' 
        }); 

        poiArray.push(L.marker([item.lat, item.lon], { 
         icon : myIcon, 
         item : item,              
        }).addTo(map).bindPopup(L.popup({offset:(0,1)}).setContent("<div><label class='popLabelTitle' >12345678</label></div>" 
         + "<div><label class='popLabelSubTitle' >Last Inspected 1/1/11</label></div>" 
         + "<hr /><div><label class='popLabelBlurred' >Dashboard</label></div>")));       

       }; 

       poiLayer = L.layerGroup(poiArray); 

       poiLayer.addTo(map); 
      } 

      addPois(currentZoom); 

      //var currentZoom = 12; 
      var currentZoom = 16; 
      map.on('zoomend', function(e) { 

       var z = map.getZoom(); 

       if (currentZoom != z) { 
        currentZoom = z; 

        // addPois(z); 
       } 
      }); 

      Ti.App.addEventListener("app:addPoints", function(e) { 

       if (e.points) { 
        Ti.API.info(e.points); 
        points = e.points; 
        addPois(currentZoom); 
       } 
      });     

     } 


    </script> 
</body> 

回答

0

我有地圖右側的側邊欄阻止了側欄區域附近標記的點擊。謝謝

+0

你的問題下有一個編輯按鈕....你應該使用它。這不是一個答案。 – iH8