2014-12-30 3 views
0

Я пытаюсь загрузить файл GeoJSON для интерактивной карты графств Западной Вирджинии, но я получаю сообщение об ошибке Uncaught ReferenceError: wvData is not defined на линии 140. Может кто-нибудь помочь мне разобраться, как это решить? Я прикрепляю свой полный код.Ошибка API API GeoJSON

<html> 
<head> 
<title>Leaflet Interactive GeoJSON</title> 
<meta http-equiv="X-UA-Compatible" content="IE=edge" /> 
<meta charset="utf-8" /> 

<meta name="viewport" content="width=device-width, initial-scale=1.0"> 

<link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.css" /> 

<style> 
    #map { 
     width: 100%; 
     height: 100%; 
    } 

    .info { 
     padding: 6px 8px; 
     font: 14px/16px Arial, Helvetica, sans-serif; 
     background: white; 
     background: rgba(255,255,255,0.8); 
     box-shadow: 0 0 15px rgba(0,0,0,0.2); 
     border-radius: 5px; 
    } 
    .info h4 { 
     margin: 0 0 5px; 
     color: #777; 
    } 

    .legend { 
     text-align: left; 
     line-height: 18px; 
     color: #555; 
    } 
    .legend i { 
     width: 18px; 
     height: 18px; 
     float: left; 
     margin-right: 8px; 
     opacity: 0.7; 
    } 
</style> 
</head> 
<body> 
<div id="map"></div> 

<script src="http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.js"></script> 

<script type="text/javascript" src="CountySelection.js"></script> 
<script type="text/javascript"> 

    var map = L.map('map').setView([37.8, -96], 4); 

    L.tileLayer('https://{s}.tiles.mapbox.com/v3/{id}/{z}/{x}/{y}.png', { 
     maxZoom: 16, 
     attribution: 'Map data &copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, ' + 
      '<a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, ' + 
      'Imagery © <a href="http://mapbox.com">Mapbox</a>', 
     id: 'examples.map-20v6611k' 
    }).addTo(map); 


    // control that shows state info on hover 
    var info = L.control(); 

    info.onAdd = function (map) { 
     this._div = L.DomUtil.create('div', 'info'); 
     this.update(); 
     return this._div; 
    }; 

    info.update = function (props) { 
     this._div.innerHTML = '<h4>US Population Density</h4>' + (props ? 
      '<b>' + props.NAME + '</b><br />' + props.POP2010 + ' people/mi<sup>2</sup>' 
      : 'Hover over a state'); 
    }; 

    info.addTo(map); 


    // get color depending on population density value 
    function getColor(d) { 
     return d > 1000 ? '#800026' : 
       d > 500 ? '#BD0026' : 
       d > 200 ? '#E31A1C' : 
       d > 100 ? '#FC4E2A' : 
       d > 50 ? '#FD8D3C' : 
       d > 20 ? '#FEB24C' : 
       d > 10 ? '#FED976' : 
          '#FFEDA0'; 
    } 

    function style(feature) { 
     return { 
      weight: 2, 
      opacity: 1, 
      color: 'white', 
      dashArray: '3', 
      fillOpacity: 0.7, 
      fillColor: getColor(feature.properties.POP2010) 
     }; 
    } 

    function highlightFeature(e) { 
     var layer = e.target; 

     layer.setStyle({ 
      weight: 5, 
      color: '#666', 
      dashArray: '', 
      fillOpacity: 0.7 
     }); 

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

     info.update(layer.feature.properties); 
    } 

    var geojson; 

    function resetHighlight(e) { 
     geojson.resetStyle(e.target); 
     info.update(); 
    } 

    function zoomToFeature(e) { 
     map.fitBounds(e.target.getBounds()); 
    } 

    function onEachFeature(feature, layer) { 
     layer.on({ 
      mouseover: highlightFeature, 
      mouseout: resetHighlight, 
      click: zoomToFeature 
     }); 
    } <!-- ADDED: Line 140 in the source code --> 

    geojson = L.geoJson(wvData, { 
     style: style, 
     onEachFeature: onEachFeature 
    }).addTo(map); 

    map.attributionControl.addAttribution('Population data &copy; <a href="http://census.gov/">US Census Bureau</a>'); 


    var legend = L.control({position: 'bottomright'}); 

    legend.onAdd = function (map) { 

     var div = L.DomUtil.create('div', 'info legend'), 
      grades = [0, 10, 20, 50, 100, 200, 500, 1000], 
      labels = [], 
      from, to; 

     for (var i = 0; i < grades.length; i++) { 
      from = grades[i]; 
      to = grades[i + 1]; 

      labels.push(
       '<i style="background:' + getColor(from + 1) + '"></i> ' + 
       from + (to ? '&ndash;' + to : '+')); 
     } 

     div.innerHTML = labels.join('<br>'); 
     return div; 
    }; 

    legend.addTo(map); 

</script> 
</body> 
</html> 

ответ

1

В строке

geojson = L.geoJson(wvData, { 
    style: style, 
    onEachFeature: onEachFeature 
}).addTo(map); 

вы еще не определили wvData в любом месте, и выглядит, как вы не загрузили файл GeoJSON еще либо. Если данные заданы в отдельном файле geojson, вам необходимо загрузить его с помощью запроса ajax или проверить leaflet-omnivore plugin.

+0

Спасибо за помощь всем! – TWS

+0

отметьте любое как правильное? stackexchange заказывает вопросы на основе голосов и ответов, а не комментариев. –

+0

Я новичок на этом сайте. Как объявить ответ в качестве ответа? – TWS

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