2016-04-15 10 views
1

hatte ich Datei mit den Ländern, aus denen ich Features erhalten, und dann tun Liste mit einfachen Markierungen:Ausklappen Karten wie Land für Punktposition erhalten

// Load country polygons and adds them as markers 
countries = GeoJSONReader.loadData(this, "countries.geo.json"); 
countryMarkers = MapUtils.createSimpleMarkers(countries); 

Jetzt möchte ich überprüfen, in welchem ​​Land der gegebenen Punkt ist. Also warf ich einfach Marker in AbstractShapeMarker und dann prüfen, ob isInsideByLocation:

for (Marker country: countryMarkers) { 
     AbstractShapeMarker cou = (AbstractShapeMarker)country; 
     if (cou.isInsideByLocation(place.getLocation())) { 
      System.out.println("country!:" + country.getLocation() + "" +country.getProperties().get("name")); 
     } 
    } 

Dies funktioniert gut für einfach geformte Länder, sondern auch für Länder, die mehrere Polygone (wie zB USA) ist enthält das funktioniert nicht.

In der Dokumentation http://unfoldingmaps.org/javadoc/de/fhpotsdam/unfolding/data/MarkerFactory.html die Marker-Fabrik zu tun:

MarkerFactory markerFactory = new MarkerFactory(); 
markerFactory.setPolygonClass(MyPolygonMarker.class); 
List<Marker> markers = markerFactory.createMarkers(features); 
map.addMarkers(markers); 

Aber ich kann nicht verstehen, wie ich Klassen erstellen kann, so dass ich nur Polygonformen erhalten.

Oder vielleicht ist dies eine andere Methode, um die Position der Position für ungefaltete Karten zu überprüfen.

Vielen Dank im Voraus!

Antwort

1

Das liegt daran, dass Sie die Markierungen an AbstractShapeMarker übergeben, die nur einzelne Polygon- oder Linienmarker behandelt. Keine Notwendigkeit zu werfen. Sie können einfach die map.getHitMarkers(x,y) oder map.getFirstHitMarker(x,y) verwenden und das verwenden.

void mouseMoved() { 
    Marker marker = map.getFirstHitMarker(mouseX, mouseY); 
    if (marker != null) { 
    println(marker.getStringProperty("name")); 
    } 
} 

Intern solcher Marker mehr Polygone enthält, sind MultiMarker s, so, wenn Sie etwas Besonderes machen wollen und die Art Casting benötigen, mit dieser Klasse gehen.

+0

Danke, Thagel, aber das ist nicht ich brauche. Ich brauche den Ländernamen ohne Map-Iteration - sonst könnte ich country.isInside (arg0, arg1, arg2) verwenden. Name des Landes ist für andere Berechnungen erforderlich .. –