2013-08-18 13 views
5

Po załadowaniu pliku topodsona z kodu pocztowego w USA pojawia się błąd w pliku d3.js. groupdata jest niezdefiniowane w tej linii:Błąd mapowania kodów pocztowych w USA za pomocą topojsona

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; 

z błędem:

Uncaught TypeError: Cannot read property 'length' of undefined 

mój kod, który dzwoni i tworzenia ścieżek jest:

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) 
    }); 

I wygenerowany plik topojson ZIPCODE z tego repozytorium: https://github.com/mbostock/us-atlas. Kiedy sprawdzam obiekt topologii przy obciążeniu, widzę 32893 łuków pod topologią.objects.zipcodes.

Udało mi się załadować powiaty z przykładem chloropleth http://bl.ocks.org/mbostock/4060606 i używam podobnego wzoru jak to.

Używam d3.js w wersji 3.2.8 i topojson.js w wersji 1.2.3.

Wszelkie pomysły? Czy jest to zły plik z kodem pocztowym, czy też dzwonię źle?

+0

Jeśli masz [istota] (https://gist.github.com/) pokazując twój kod może nam pomóc. – Hugolpz

Odpowiedz

6

@Hugolpz - przepraszam, nie zareagowałem. Nie otrzymałem powiadomienia o Twoim komentarzu.

W końcu to rozgryzłem. Nagrywam to tutaj, więc może to komuś pomoże.

Pierwotnie otrzymałem shapefile z kodu pocztowego ze strony internetowej US Census (obecnie z powodu zamknięcia rządu). Nazwano go tl_2012_us_zcta510.zip i miał 836 MB. Próbowałem przekonwertować go za pomocą topojsona przy użyciu parametrów @mbostock zasugerowanych tutaj: http://bl.ocks.org/mbostock/4965422

Konwersja zajęła ponad 12 godzin, udostępniając plik node.js o pojemności 6 GB, aby przekonwertować plik kształtu na plik topojson. Nadal nie działa w d3.js (zobacz błędy w oryginalnym pytaniu). Ponadto, debugowanie tego dużego pliku json było trudne do debugowania. Oryginalny plik kształtu również nie był wyświetlany w QGIS.

W końcu zrezygnowałem i szukałem różnych zestawów danych. Geocommons ma 5MB plik kodu zip code z właściwościami takimi jak kod pocztowy, stan, nazwa, populacja i obszar: http://geocommons.com/overlays/54893. I przekazał je topojson i konwertowane shapefile w czasie krótszym niż minuta:

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

W celu sprawdzenia plik json to rozumieć, że używane https://github.com/einars/js-beautify poleceniem:

js-beautify zips_us_topo.json -o zips_us_topo_pretty.json 

kiedyś nieuprojoną wersję do załadowania w przeglądarce, ponieważ jest mniejsza.

Aby go zmapować, zasadniczo użyłem tego samego kodu, co mapa chloropleth hrabstwa @ mbostock. Jeśli trzeba, że ​​albo kod d3 lub oczyścić plik topojson można je tutaj:

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

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

+0

Szkoda, że ​​nie znalazłem tego wcześniej. Dzięki za publikację. – kwcto

+0

Dzięki za podzielenie się tym!Bardzo pomocne, gdy zacząłem tę samą ścieżkę i pobierałem te same pliki z US Census. – brhlavinka

Powiązane problemy