2016-11-08 3 views
0

В моем предыдущем посте «Leaflet JS - changing esri shape into marker on certain zoom level » Я был в состоянии решить вопрос, который я имел с leaflet JS библиотеку и изменения многоугольника формой на маркеры иконки при достижении определенного уровня масштабирования.листовка JS + Leaflet.Deflate - Изменение значка маркеров по умолчанию для пользовательского значка

Мне посоветовал «Иван Санчес» использовать плагин «Leaflet.Deflate», и это работает как шарм, поэтому теперь различные формы трансформируются в маркеры после определенного уровня масштабирования, однако теперь я изо всех сил пытаюсь изменить по умолчанию листовка маркер значок в пользовательский значок маркера, поэтому мой вопрос сейчас:

можно ли изменить значок маркера по умолчанию к персонализированного значка маркера в то время как USIN g плагин 'Leaflet.ShapeFile' и 'Leaflet.Deflate' и какой был бы лучший способ сделать это?

Я хотел создать JSFiddle, но я не знаю, JSFiddle позволяет мне прикреплять zip-файл, содержащий файлы формы, поэтому я опубликую код, который я получил ниже, спасибо за вашу помощь, посоветуйте и поддержите:

<!doctype html> 
<html lang="en"> 

<head> 
    <meta charset='utf-8' /> 
    <title>v4</title> 
    <link rel="stylesheet" type="text/css" href="lib/leaflet/leaflet.css" /> 
    <!--[if lte IE 8]> <link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.6.4/leaflet.ie.css" /> <![endif]--> 
<link rel="stylesheet" type="text/css" href="lib/leaflet/L.Control.Sidebar.css" /> 
<style> 
    html { height: 100% } 
    body { height: 100%; margin: 0; padding: 0; } 
    #map { height: 100% } 
</style> 
</head> 

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

    <script src="lib/jquery/jquery-3.1.1.min.js"></script> 
    <script src="lib/leaflet/leaflet.js"></script> 
    <script src="lib/leaflet/catiline.js"></script> 
    <script src="lib/leaflet/leaflet.shpfile.js"></script> 
    <script src="lib/leaflet/shp.js"></script> 
    <script src="lib/leaflet/L.Control.Sidebar.js"></script> 
    <script src="lib/leaflet/L.Deflate.js"></script> 

    <script> 
     // init map 
     var m = L.map('map').setView([52.472833, 1.749609], 15); 

     // clicking on the map will hide the sidebar plugin. 
     m.on('click', function() { 
      sidebar.hide(); 
     }); 

     // init Deflate plugin 
     L.Deflate({ minSize: 10 }).addTo(m); 

     // Init side bar control 
     var sidebar = L.control.sidebar('sidebar', { closeButton: true, position: 'right' }); 
     m.addControl(sidebar); 

     // Init esri shape file via leaflet.shapefile, shp.js plugin 
     var businessProperties = new L.Shapefile('data/businessshapes.zip', { style: propertyStyle, onEachFeature: propertyOnEachFeature }).addTo(m); 

     // create on-click Feature 
     function propertyOnEachFeature(feature, layer) { 
      layer.on({ 
       mouseover: highlightFeature, 
       mouseout: resetHighlight, 
       click: function populate() { 
        sidebar.toggle(); 
        document.getElementById('pinfoHeader').innerHTML = "<h2>" + feature.properties.Building + " - Detailed Information</h2><br />"; 
        document.getElementById('pTitle').innerHTML = "Name: " + feature.properties.Building 
        document.getElementById('pDetails').innerHTML = "SHAPE_Leng: " + feature.properties.SHAPE_Leng + "<br/ >SHAPE_Area: " + feature.properties.SHAPE_Area 
       }, highlightFeature, zoomToFeature 
      }); 
     } 

     // style the properties style 
     function propertyStyle(feature) { 
      return { 
       fillColor: getPropertyColor(feature.properties.BusType), 
       weight: 2, 
       opacity: 1, 
       color: 'white', 
       dashArray: 3, 
       fillOpacity: 0.7 
      } 
     } 

     // set color per property according to the data table of the Esri Shape file. 
     function getPropertyColor(propStatus) { 
      if (propStatus == 'TypeA') { 
       return 'red'; 
      } else if (propStatus == 'TypeB') { 
       return 'green'; 
      } else { 
       return 'yellow'; 
      } 
     } 

     // set the highlighted color for polygon 
     function highlightFeature(e) { 
      var layer = e.target; 
      layer.setStyle({ 
       weight: 2, 
       color: 'black', 
       fillColor: 'white', 
       fillOpacity: 0.2 
      }); 

      if (!L.Browser.ie && !L.Browser.opera) { 
       layer.bringToFront(); 
      } 
     } 

     // reset the highlighted color for polygon after mouse leave polygon 
     function resetHighlight(e) { 
      businessProperties.resetStyle(e.target); 
     } 


     //Extend the Default marker class to overwrite the leaflet.deflate marker icon??? 
     var TestIcon = L.Icon.Default.extend({ 
      options: { 
       iconUrl: 'assets/images/markers/business.png' 
      } 
     }); 
     var testIcon = new TestIcon(); 

     businessProperties.addTo(m); 

     // Init base maps for switch 
     var grayscale = L.tileLayer('http://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png', { id: 'MapID', attribution: 'Map maintained by <a href="http://www.demo.com">Demo LTD</a>, &mdash; Map data &copy; <a href="http://openstreetmap.org">OpenStreetMap</a>,' }).addTo(m); 
     var streets = L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { id: 'MapID', attribution: 'Map maintained by <a href="http://www.demo.com">Demo LTD</a>, &mdash; Map data &copy; <a href="http://openstreetmap.org">OpenStreetMap</a>,' }); 

     var baseMaps = { 
      "Streets": streets, 
      "Grayscale": grayscale 
     }; 

     // Init overlay map switch 
     var overlayMaps = { 
      "Bussines Properties": businessProperties 
     }; 

     // Add switches to map control 
     L.control.layers(baseMaps, overlayMaps).addTo(m); 
    </script> 
</body> 
</html> 

ответ

2

можно ли изменить значок маркера по умолчанию пользовательский значок маркера в то время как с помощью плагина «Leaflet.Deflate»?

Ответ: No.

Текущий код Leaflet.Deflate использует маркер по умолчанию и маркер по умолчанию только см https://github.com/oliverroick/Leaflet.Deflate/blob/991f51ca82e7bb14a17c8d769b4c378c4ebaf700/src/L.Deflate.js#L42

Вы можете взломать ваш путь вокруг него, но я предпочел бы рекомендовать подать запрос на функцию в репо Leaflet.Deflate , Должно быть возможно изменить репозиторий Leaflet.Deflate, чтобы позволить функциям линии/полигона иметь дополнительные свойства, которые будут использоваться в качестве параметров маркера.

Смежные вопросы