Einfärben von Gemeinden auf einer Karte

Reggie()

Bekanntes Mitglied
Hallo Coder,
wie würdet ihr diese Aufgabe lösen? Nehmen wir zB. die Bayernkarte. Dort gibts über 700 Gemeinden. Ich würde gerne ein Programm schreiben, dass eine Excel-Liste importiert (bestehend aus Gemeinde-Name und Wert) und die Gemeinden anhand einer frei wählbaren Farbskala einfärbt.
 
Würde ich gar nicht lösen. Ohne eine spezielle Karte, die alle gemeindegrenzen eingezeichnet hat, dürfte diese Aufgabe nahezu unmöglich werden oder halt eine sehr ungenaue Sache.
 
Die Daten aus der Excel-Datei kannst du in einer Map zwischenspeichern.
Es gibt bereits Bilder von Bayern-Karten mit den einzelnen Gemeinden. Zum Beispiel hier: https://www.google.de/imgres?imgurl...act=8#h=688&imgrc=TJCFeAwFdvSyGM:&vet=1&w=780
Zur Übung darf man das verwenden aber man darf das Programm dann nicht veröffentlichen.
Alernativ gibt es hier auch solch eine Karte: https://de.fotolia.com/id/58440588 Auf der Webseite kann man eine Lizenz für das Bild kaufen.

Ich würde dann für jede Gemeinde ein separates Bild machen, bei dem ich die Größe der Bilddatei beibehalte und alle anderen Gemeinden mit Paint wegmache. Danach mit Gimp den Hintergrund transparent machen.
In dem Java-Programm kannst du dann die Bilder reinladen und umfärben.
 
wie wärs wenn ich die Karte zwar nicht selber zeiche, aber eine fretige Karte "zerlege" in Gemeindestückchen, die ich dann einzeln einfärben kann? ginge das?
Plan B: wenn ich die Karte selber zeichnen muss, sind dann die Linien (Gemeinde/Landkreis-Grenzen) die Abgrenzungen der Objekte Gemeinde?
Ich stelle es mir so vor (mal ins Blaue gesponnen (daher stark vereinfacht)):
Java:
public class Gemeinde {
  String GemeindeName;  
  Array<Point> grenzPunkte;
  Point p;
  int wert;

  public Gemeinde(String n, Array<Point> p) {
    grenzPunkte= new ArrayList<Point>();
    GemeindeName = n;
    wert = null;
    }
    public ArrayList<Point> zeichneGemeindeGrenzen() {
      //aus Excel einlesen-Code und in x und y zwischenspeichern
      //for-Schleife Anzahl Punkte der Gemeinde      
      grenzPunkte.add(new Point(x,y));
   }
}
 
Du kannst es als Polygon zeichnen:
Java:
    protected void paintComponent(Graphics g) {
        Graphics2D g2 = (Graphics2D) g;
        GeneralPath polygon = new GeneralPath();

        // Startpunkt
        polygon.moveTo(20.0, 500.0);

        polygon.lineTo(..., ...);
        polygon.lineTo(..., ...);
        polygon.lineTo(..., ...);
        ...

        g2.draw(polygon);
    }
 
Polygon, damit werde ich mal rumexperimentieren... vielleicht muss ich die Bayernkarte etwas "grober" zeichnen, um erstmal Aufwand zu sparen.
 
Also ich würde zusehen, dass ich diese Karte bekomme ohne Text in den einzelnen Gemeindefeldern. Dann würde ich mir einmal die Mühe machen und für jede Gemeinde eine Pixelposition irgendwo innerhalb des zugehörigen Bereiches definieren. Und dann würde ich einfach mit einem simplen Floodfill Algorytmus die Bereiche füllen.
 
Du kannst es als Polygon zeichnen:
Java:
    protected void paintComponent(Graphics g) {
        Graphics2D g2 = (Graphics2D) g;
        GeneralPath polygon = new GeneralPath();

        // Startpunkt
        polygon.moveTo(20.0, 500.0);

        polygon.lineTo(..., ...);
        polygon.lineTo(..., ...);
        polygon.lineTo(..., ...);
        ...

        g2.draw(polygon);
    }
Hoppla. Damit zeichnet man nur die Grenzen auf der Karte. So kann man ein Polygon mit einer Farbe füllen:

Java:
Polygon meinPolygon = new Polygon(arrayMitDenXwerten, arrayMitDenYwerten, anzahlDerPunkte); 
g.fillPolygon(meinPolygon);
 

Zurück
Oben