2014-06-04 2 views
8

Ich habe versucht, eine TopoJson-Datei mit konsolidierten Layer-Daten zu erstellen, die, neben anderen Schichten, US-Bundesstaaten, Grafschaften und Kongressdistrikte.Client Seite Topojson Rendering scheinbar falsche Wege

Original .shp Shapefiles stammen aus dem Census Bureau Cartographic Boundary Files.

Diese wurden über Ogr2ogr in GeoJson konvertiert.

Dann kombiniert in TopoJson-Format über die Node-Server-Seite Bibliothek, mit Quantisierung von 1e7 und Retain-Proportion von 0,15. Bis zu diesem Punkt gibt es keinen Hinweis auf ein Problem.

Ich sehe die endgültige topojson Datei scheint mapshaper und Dinge mit OK aussehen: rendered via mapshaper

Aber, wenn sie mit der topojson Client-Bibliothek und D3.geo.path() zu machen versucht, begegne ich einige seltsame Wege in die congressionalDist Schicht: (die großen rechteckigen Bahnen um den kontinentalen USA, AK bemerken, und HALLO) square paths

eine Arbeitsversion der Seite finden Sie hier: http://jsl6906.net/D3/topojson_problem/map/

Ein paar relevante Hinweise:

  • Wenn ich meine topojson Generation Skript ändern Vereinfachung zu entfernen, die Wege dann scheinen korrekt über die gleiche d3.js Seite
  • zu zeigen, wenn ich nur die congressionalDist Schicht halten, wenn die topojson zu schaffen, scheinen die Wege dann zu korrekt wieder über die gleiche d3.js Seite:

good

nach so viel Fehlerbehebung versucht, wie ich in der Lage gewesen bin zu handhaben, ich dachte, ich hier jemand fragen würde, um zu sehen, ob jemand eine ähnliche Erfahrung hat Probleme. Danke für jede Hilfe.

+1

Dies scheint zu den in http://stackoverflow.com/questions/23953366/d3-large-geojson-file-does-not-show-draw-map-properly-usinging- genannten Problemen zu gehören. Projektionen/24055015 # 24055015. Dort ging die Berechnung der Grenze mit einigen der Regionen fehl, was auch zu großen Rechtecken führte. In Ihrem Beispiel zum Beispiel ergibt "d3.geo.bounds (cds [84])" '[[-180, -90], [180, 90]] ', was inkorrekt zu sein scheint. Ich weiß nicht, warum das passiert. –

+1

Immer noch nicht sicher, was das verursacht, aber eine interessante Sache, die ich bemerkt habe, ist, dass die 'ID'-Eigenschaft der an die beanstandeten Rechtecke gebundenen Daten in 'ZZ' endet, während alle anderen Objekte eine ID haben, die mit zwei Zahlen endet. Die IDs sind verantwortlich: 09ZZ, 17ZZ und 26ZZ. Versuchen Sie beispielsweise Folgendes: 'd3.selectAll (d3.selectAll ('. Cd') [0] .filter (function (d) {return d3.select (d) .attr ('id'). Slice (- 2) === 'ZZ'})). Style ('stroke', 'red') 'und Sie werden feststellen, dass nur diese Rechtecke rot gefärbt sind. – jshanley

+0

Es scheint, 'ZZ' ist der Code für" undefined "Kongressbezirke. Ich bin mir nicht ganz sicher, was das bedeutet, aber Sie können sehen, dass es in [diesem Datensatz] (http://www.census.gov/geo/reference/codes/files/national_cd113.txt) unter der Spalte CD113FP, wo auch immer, vorkommt Die NAMELSAD-Spalte enthält "Congressional Districts nicht definiert". Es gibt auch einen Verweis auf das Entfernen solcher Bezirke, wenn man ogr2ogr in [** diese Datei **] (https://github.com/mbstock/us-atlas/blob/bf502099b48e54116c88f277e6d800836ecbc210/Makefile#L276-L279) betreibt, die Teil von ['us-atlas'] (https://github.com/mbstock/us-atlas) – jshanley

Antwort

4

Wie ich in den Kommentaren erwähnt, hatte ich bemerkt, dass die drei beanstandeten Rechtecken alle auf den Daten mit einer id Eigenschaft in ZZ Endung gebunden waren, während alle anderen Wege enden IDs mit Zahlen hatten.

Nach einigen Google-Suche, kam ich auf, was ich denke, ist die Antwort.

Nach this document auf der census.gov Website

In Connecticut, Illinois und Michigan den Staat Teilnehmer nicht über die aktuellen (113.) Kongressbezirke zugewiesen werden alle der Staat oder ein gleichwertigen Fläche abzudecken . Der Code "ZZ" wurde an Gebiete ohne definierten Kongressbezirk (meist große Gewässer) vergeben. Diese nicht zugewiesenen Gebiete werden innerhalb des Staates als ein einziger Kongressbezirk für Zwecke der Datenpräsentation behandelt.

Es scheint, dass diese drei undefinierten Bezirke für die drei Rechtecke verantwortlich wären. Es ist unklar, an welchem ​​Punkt des Prozesses sie das Problem verursachen, aber ich glaube, es gibt eine einfache Lösung für Ihr unmittelbares Problem. Bei der Suche nach Informationen über den Code ZZ stolperte ich über this makefile in einem Projekt von mobostock namens us-atlas.

Es scheint, dass er auf ein ähnliches Problem gestoßen war und es geschafft hatte, die undefinierten Kongressbezirke herauszufiltern, als er ogr2ogr lief. Hier ist der relevante Code aus dieser Datei:

# remove undefined congressional districts 
shp/us/congress-ungrouped.shp: shp/us/congress-unfiltered.shp 
    rm -f [email protected] 
    ogr2ogr -f 'ESRI Shapefile' -where "GEOID NOT LIKE '%ZZ'" [email protected] $< 

Ich wette, dass, wenn Sie führen Sie Ihre ogr2ogr auf Shape-Datei der Fahnen mit hier gezeigt wird das Problem lösen.

+0

Interessant, danke. Ich werde das in den nächsten Tagen genauer untersuchen. Obwohl es scheint, dass dies die Wurzel des Problems ist, scheint es nicht zu erklären, warum die Pfade gut dargestellt werden, wenn ich sie nicht mit State/County - Shapefiles kombiniere, oder warum, wenn ich die Formen nicht mit topojson vereinfache Problem existiert nicht. Eine schnelle Reaktion darauf? – Josh

+0

Nicht im Moment. Wenn Sie die Details weiter untersuchen, sollten Sie untersuchen, wie Ihr Datensatz bei jedem Schritt des Konvertierungsprozesses aussieht. Achten Sie insbesondere auf signifikante Unterschiede in der * Art * der Daten, die die nicht definierten Bezirke im Vergleich darstellen zu den Daten für andere Bezirke. Meine Vermutung ist, dass diese Daten nach einem der Schritte in einem Format vorliegen, das d3 nicht korrekt darstellen kann. – jshanley

+0

Eine andere Möglichkeit, die mir einfällt ... Wenn Sie sagen, dass Sie diese Daten mit Zustandsgrenzen usw. kombinieren, gibt es einen Schritt in diesem Prozess, bei dem die Formen oder Pfade selbst irgendwie zu einer einzigen Form oder Pfad zusammengeführt werden? Wenn dies der Fall ist, ist es möglich, dass die Teile dieser undefinierten Gebiete, die sich über Wasser befinden, möglicherweise nicht mit den Landes- oder Kreisgrenzen verschmolzen werden können, wenn dieselben Gewässer als die Grenzen im Land-/Landkreis-Datensatz verwendet werden . – jshanley