Wie erstelle ich zusammenhängende Kartogramme in QGIS oder R?

21

Folgendes möchte ich (rechts) erreichen:

http://junkcharts.typepad.com/.a/6a00d8341e992c53ef0162fd6913e8970d-pi

Ich suche ein Tool oder eine Methode, um ein Shapefile (mit QGIS oder R) in diese Form zu transformieren. Und bitte beachten Sie: Es wird nicht nur ein sechseckiges Gitter oder ein Gitter aus Sechsecken abgeschnitten! Jedes Sechseck sollte die gleiche Zahl eines Maßes darstellen (z. B. repräsentiert jedes Sechseck 5.000 Bäume).

Vielleicht kennst du dich mit Scapetoad aus! http://scapetoad.choros.ch/ Ich möchte also grundsätzlich eine ähnliche Ausgabe wie scapetoad erzeugen - aber mit einem eingeschränkteren Raster (?).

Bearbeiten: Die Erwähnung von QGis und R ist keine Einschränkung - es ist nur, wo ich nach einer Lösung gesucht habe. Natürlich bin ich mit jedem Tool, jeder Methode oder Beratung zufrieden!

Chrugel
quelle
4
Der Titel auf dem Bild, auf das Sie verweisen, nennt ihn für Sie (zumindest allgemein). ebenso der Titel dieser Scapetoad-Seite: Es ist ein "Kartogramm". Insbesondere handelt es sich um ein (zusammenhängendes) Flächenkartogramm , das hexagonale Elemente verwendet.
whuber
Diese Referenz war sehr nützlich für mich, um dies in [r] zu tun!
jsta

Antworten:

7

Ein etwas befriedigenderes Verfahren:

  1. Erstellen Sie ein Kartogramm mit einer "diffusionsbasierten" Methode (wie Scapetoad).

    In QGis:

  2. Erstellen Sie eine hexagonale Ebene [Plugins> Qmarxan> Create Planning Grid] (verwenden Sie die entsprechende / gewünschte Anzahl von Sechsecken). Bearbeiten: Abhängig vom Zweck der Karte kann das Qmarxans-Raster von zweifelhafter Qualität sein. Das mmqgis- Plugin liefert viel bessere Ergebnisse (Polygone werden perfekt ausgerichtet).

  3. Verbinden Sie die hexagonale Ebene mit dem Kartogramm [Vektor> Datenverwaltungstools> Attribute nach Position verbinden]

  4. Jetzt hat die neue hexagonale Ebene alle Eigenschaften / Attribute aus dem Kartogramm und es ist möglich, auf jede Untereinheit einzeln zuzugreifen.

  5. Um die Form der Untereinheiten besser zu erhalten, können Sie manuell tweeking: Wählen Sie das oder die Sechsecke aus und ändern Sie die Attribute direkt in der Attributtabelle. Dieser Schritt funktioniert am besten, wenn die Schicht halbtransparent ist und das ursprüngliche diffusionsbasierte Kartogramm unten gezeigt wird.

  6. Zusammenführen der Sechsecke einer Untereinheit zu einer Einheit: 1. Wählen Sie alle Sechsecke einer Untereinheit aus (wenn viele vorhanden sind: Verwenden Sie die Attributtabelle zur Auswahl). 2. 'Bearbeiten umschalten'> 'Ausgewählte Features zusammenführen'.

Hauptsächlich das Manko b) bleibt - aber a) ist gelöst und auch bis zu einem gewissen Grad c) ist kein großes Problem mehr, b / c diese Methode dauert nicht so lange.

Bearbeiten: Schritt 4. (und danach eingefärbt) führt zu diesem Ergebnis (transparente Sechseck-Ebene oben, unten 'diffusionsbasiertes' Kartogramm): Illustration des "Grenzproblems"

Die hellgrünen Sechsecke nehmen eindeutig eine Reihe zu viel ...

Irgendwelche Ideen, wie es möglich ist, eine bessere / benutzerdefinierte Anpassung der "Verknüpfungsattribute" zu erreichen? - Ich suche nach einer Methode, um dem Algorithmus einen Schwellenwert zuzuweisen (z. B.> 50% der Fläche).

Chrugel
quelle
Ich kann für diesen Ansatz bürgen, ich habe es erfolgreich gemacht. Es wurde keine zufriedenstellende Möglichkeit gefunden, die Sechsecke räumlich mit dem Polygon zu verbinden, das die größte Überlappung aufweist. Ich vermute, dass postgresql / postgis benötigt würde (Join Attribute nach Ort entspricht nur der ersten, die es findet, was möglicherweise nicht optimal ist)
Steven Kay
2

In der Zwischenzeit werde ich vorstellen, was meine Idee bisher ist:

  1. Erstellen Sie ein Kartogramm mit einer "diffusionsbasierten" Methode (wie Scapetoad).

    In QGis:

  2. Erstellen Sie eine Punktebene [Vektor> Forschungswerkzeuge> Regelmäßige Punkte].

  3. Punktebene mit Kartogramm abschneiden.

  4. Erstellen Sie eine hexagonale Ebene [Plugins> Qmarxan> Create Planning Grid] (verwenden Sie die entsprechende / gewünschte Anzahl von Sechsecken).

  5. Zählen von Punkten pro Polygon [Vektor> Analysewerkzeuge> Punkte im Polygon].

  6. In den Layereigenschaften der hexagonalen Ebene: Regelbasierte Beschriftung (oder Beschneidung) anwenden [Filter: "PKTCNT"> = 1].

Das ist alles was ich bisher habe.

Mängel sind:

a) Dies ist nur die Gesamtform (Untereinheiten müssen erneut ausgearbeitet werden ...)

b) Die Anzahl der Sechsecke ist in gewisser Weise willkürlich und noch schlimmer

c) Wenn ich die Maßeinheit ändern möchte (z. B. statt 5'000 Bäume pro Sechseck jetzt 100'000 Bäume pro Sechseck = Komplexität / Detail weiter reduzieren), muss ich den gesamten Vorgang wiederholen.

Chrugel
quelle