2013-08-18 18 views
5

Dopo aver caricato un file topojson con codice postale negli Stati Uniti, ricevo un errore in d3.js. groupdata è indefinito su questa linea:Errore di mappatura dei codici postali statunitensi con topojson

function bind(group, groupData) { 
    var i, n = group.length, m = groupData.length, n0 = Math.min(n, m), updateNodes = new Array(m), enterNodes = new Array(m), exitNodes = new Array(n), node, nodeData; 

con un errore di:

Uncaught TypeError: Cannot read property 'length' of undefined 

Il mio codice che chiama e la creazione dei percorsi è:

d3.json("data/us-atlas/us-zipcodes.json", function(error, topology) { 
    svg.selectAll("path") 
     .data(topojson.feature(topology, topology.objects.zipcodes).features) 
     .enter() 
     .append("path") 
     .attr("d", path) 
    }); 

ho generato il file topojson codice postale da questo repo: https://github.com/mbostock/us-atlas. Quando controllo l'oggetto della topologia al caricamento, vedo 32893 archi in topology.objects.zipcodes.

Ho caricato con successo le contee sotto con l'esempio di cloropleto http://bl.ocks.org/mbostock/4060606 e sto usando un modello simile.

Sto usando d3.js versione 3.2.8 e topojson.js versione 1.2.3.

Qualche idea? È un cattivo file zipcode o sto chiamando male?

+0

Se si dispone di un [gist] (https://gist.github.com/) mostrando il tuo codice ci può aiutare. – Hugolpz

risposta

6

@ Hugolpz - scusa, non l'ho fatto non ho risposto. Non ho ricevuto la notifica del tuo commento.

Finalmente ho capito. Sto registrando qui, quindi forse aiuterà qualcuno.

Originariamente ho ricevuto gli shapefile del codice postale dal sito Web del Census degli Stati Uniti (attualmente inattivo a causa dell'arresto del governo). Si chiamava tl_2012_us_zcta510.zip ed era 836 MB. Ho provato a convertirlo usando topojson usando i parametri @mbostock suggeriti qui: http://bl.ocks.org/mbostock/4965422

La conversione ha richiesto oltre 12 ore dando a node.js 6 GB di memoria per convertire lo shapefile in un file topojson. Non funzionerebbe ancora in d3.js (vedi errori nella domanda originale). Inoltre, eseguendo il debug di un file json di grandi dimensioni è stato difficile eseguire il debug. Anche lo shapefile originale non viene visualizzato in QGIS.

Alla fine ho rinunciato e ho cercato diversi set di dati. Geocommons ha uno shapefile zipcode da 5MB con proprietà come codice postale, stato, nome, popolazione e area: http://geocommons.com/overlays/54893. Ho consegnato verso topojson e convertito lo shapefile in meno di un minuto:

topojson \ 
-p name=PO_NAME \ 
-p zip=ZIP \ 
-p state=STATE \ 
-o zips_us_topo.json \ 
zip_codes_for_the_usa.shp 

al fine di ispezionare il file JSON per capirlo, ho usato https://github.com/einars/js-beautify con questo comando:

js-beautify zips_us_topo.json -o zips_us_topo_pretty.json 

ho usato la versione non prevista da caricare nel browser, anche perché è più piccola.

Per mapparlo, ho utilizzato essenzialmente lo stesso codice della mappa di cloropleta della contea di @ mbostock. Se avete bisogno di questo o il codice D3 o ripulito il file topojson si può ottenere qui:

https://gist.github.com/jefffriesen/6892860

http://bl.ocks.org/jefffriesen/6892860

+0

Vorrei averlo trovato un po 'prima. Grazie per la pubblicazione. – kwcto

+0

Grazie per aver condiviso questo!Molto utile quando ho iniziato lo stesso percorso e stavo scaricando gli stessi file dal censimento americano. – brhlavinka

Problemi correlati