javascript - Kaavion tekeminen Leafletin popupissa käyttäen geoJson-dataa


Työskentelen kartan parissa, joka käyttää Leafletia ja jota täytetään tiedoston tiedoilla GeoJson-muodossa. Yleinen tavoitteeni on laittaa kaavioita Leafletin ponnahdusikkunoihin jokaiselle kartan merkille.

Jokaisen ominaisuuden merkkien saaminen ja ponnahdusikkunoiden avaaminen oli melko helppoa. Kuitenkin minun on vaikea käyttää D3:ta lisätäkseni ponnahdusikkunaan.

Yksinkertaisuuden vuoksi tavoitteeni tällä hetkellä on käyttää D3:ta luodakseni SVG:n jokaiseen Leafletin ponnahdusikkunan diviin ja piirtääkseni neliön.

Olen löytänyt joitakin esimerkkejä, joissa ihmiset ovat käyttäneet D3:ta luodakseen kaavioita leaflet-popupien sisällä, mutta kukaan heistä ei käyttänyt myös geoJsonia ja onEachFeature-funktiota. Tässä on yksi esimerkeistä: http://jsfiddle.net/6UJQ4/

Tässä on olennaisin osa koodistani:

L.geoJson( data,  {
    style: function (feature) {
        return { opacity: 0, fillOpacity: 0.5, fillColor: "#0f0" };
    },
    onEachFeature: function(feature, layer){

        var graph_container = '<div class="popupGraph" id="graph" style="width: 200px; height:200px;"></div>';

        layer.bindPopup(feature.properties.name + '<br>' + graph_container);    

        var svg = d3.select("#graph").selectAll("svg").append("svg").attr("width", 50).attr("height", 200);   

        var rectangle = svg.append("rect").attr("width", 25).attr("height", 25);

    }
}).addTo(map);

Uskon, että minulla on ongelmia, koska D3 ei löydä graph_container-diviä, mutta olen hieman jumissa sen kanssa, miten korjata tämä.

Jos jollakulla on kokemusta D3:n, Leafletin ja geoJsonin käytöstä yhdessä ja voisi selittää minulle, miten saan neliöni näkymään ponnahdusikkunoissa, tai jos joku tietää lähteen, joka voisi auttaa minua, arvostaisin sitä todella paljon. Kiitos etukäteen!

PÄIVITYS: Bits ratkaisi ongelmani! Jos joku tarvitsee toimivan esimerkin D3:n käytöstä Leaflet-popupeissa yhdessä GeoJsonin kanssa, Bits julkaisi sen kommenteissa, mutta julkaisen sen myös täällä: http://jsfiddle.net/2XfVc/132/

Vastaus #1

Se on melko yksinkertaista, sinun tarvitsee vain lisätä svg-elementti divisi sisälle. Ja aloittaa d3:n koodaus.

Anna minulle hetki, päivitän sinun fiddlessäsi.

Päivitys: Tässä sinulle http://jsfiddle.net/6UJQ4/6/

Otin vapauden yksinkertaistaa/poistaa esimerkkisi ylimääräiset osat vähiten yhteiseen nimittäjään vähentääkseni sekaannusta.

Päivitys: http://jsfiddle.net/6UJQ4/7/

Edellisessä fiddlessä kohtaat ongelmia, joissa kaikki merkintäsi valitaan aina, mikä antaa ei-toivottuja tuloksia. Käytä siis viimeisintä päivitystä.