Package de.fhpotsdam.unfolding.examples.marker.multimarker

Source Code of de.fhpotsdam.unfolding.examples.marker.multimarker.MultiMarkerApp

package de.fhpotsdam.unfolding.examples.marker.multimarker;

import java.util.ArrayList;
import java.util.List;

import processing.core.PApplet;

import de.fhpotsdam.unfolding.UnfoldingMap;
import de.fhpotsdam.unfolding.geo.Location;
import de.fhpotsdam.unfolding.marker.Marker;
import de.fhpotsdam.unfolding.marker.MultiMarker;
import de.fhpotsdam.unfolding.marker.SimplePolygonMarker;
import de.fhpotsdam.unfolding.utils.MapUtils;

/**
* Manual multi-marker example showing two polygons for France and Corsica to demonstrate a multi marker. By hovering
* over one of the two areas the whole MultiMarker gets selected, thus both areas are highlighted.
*
* <p><em>Note, that loading Unfolding's DataReader automatically create and handle multi-marker. Check e.g.
* {@link MarkerSelectionApp}.</em>
* </p>
*
* Set the boolean useMultiMarker to false to see the same areas as independent markers.
*/
public class MultiMarkerApp extends PApplet {

  boolean useMultiMarker = true;

  UnfoldingMap map;

  public void setup() {
    size(800, 600, OPENGL);

    map = new UnfoldingMap(this, "map");
    map.zoomToLevel(4);
    map.panTo(new Location(50f, 12f));
    MapUtils.createDefaultEventDispatcher(this, map);

    SimplePolygonMarker franceMarker = new SimplePolygonMarker(getFranceShapeLocations());
    SimplePolygonMarker corsicaMarker = new SimplePolygonMarker(getCorsicaShapeLocations());

    if (useMultiMarker) {
      // Create and add as MultiMarker
      MultiMarker multiMarker = new MultiMarker();
      multiMarker.addMarkers(franceMarker, corsicaMarker);
      map.addMarkers(multiMarker);

    } else {
      // Add France and Corsica as two independent polygon markers
      map.addMarkers(franceMarker, corsicaMarker);
    }
  }

  public void draw() {
    background(240);
    map.draw();
  }

  public void mouseMoved() {
    // Not via marker.isInside(...) as this example supports both MultiMarker and two markers.
    // multiMarker.isInside(map, mouseX, mouseY);

    Marker hitMarker = map.getDefaultMarkerManager().getFirstHitMarker(mouseX, mouseY);
    if (hitMarker != null) {
      hitMarker.setSelected(true);
    } else {
      for (Marker marker : map.getDefaultMarkerManager().getMarkers()) {
        marker.setSelected(false);
      }
    }
  }

  public static List<Location> getFranceShapeLocations() {
    // Crude shape of France
    List<Location> franceLocations = new ArrayList<Location>();
    franceLocations.add(new Location(48.985985f, 8.173828f));
    franceLocations.add(new Location(51.074539f, 2.460938f));
    franceLocations.add(new Location(49.33085f, -0.043945f));
    franceLocations.add(new Location(48.522426f, -4.746094f));
    franceLocations.add(new Location(46.231533f, -1.054687f));
    franceLocations.add(new Location(43.427392f, -1.801758f));
    franceLocations.add(new Location(42.397499f, 3.208008f));
    franceLocations.add(new Location(43.682174f, 3.911133f));
    franceLocations.add(new Location(43.075308f, 6.28418f));
    franceLocations.add(new Location(43.935879f, 7.734375f));
    franceLocations.add(new Location(46.534681f, 6.064453f));
    return franceLocations;
  }

  public static List<Location> getCorsicaShapeLocations() {
    // Crude shape of Corsica
    List<Location> corsicaLocations = new ArrayList<Location>();
    corsicaLocations.add(new Location(41.380106f, 9.162598f));
    corsicaLocations.add(new Location(42.231771f, 8.547363f));
    corsicaLocations.add(new Location(42.991791f, 9.404297f));
    corsicaLocations.add(new Location(42.052556f, 9.558105f));
    return corsicaLocations;
  }

}
TOP

Related Classes of de.fhpotsdam.unfolding.examples.marker.multimarker.MultiMarkerApp

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.