2016-04-30 6 views
1

Google Maps API ermöglicht es, eine Ebene auf der Karte zu erstellen, die eine Polylinie enthält, die Punkte miteinander verbindet.erstellen Sie eine Polylinie in Gluon mapLayer

Ich habe gesucht, wo ich ein Beispiel oder eine Implementierung für dieses für Gluons MapLayer finden konnte.

Bitte Rat

Antwort

3

Zwar gibt es keine explizite API für Linien, Polylinien oder Polygone auf einem MapView zeichnen, ist die MapLayer eine Schicht, wo Sie Shape jede JavaFX zeichnen können, Sie kümmern sich um sie auf die Skalierung nehmen die Bereitstellung Kartenkoordinaten.

Dafür, wenn Sie einen Blick auf die classPoiLayer haben, können Sie, dass für jede MapPoint (definiert durch Breite und Länge) sehen Sie einen 2D-Punkt erhalten können (definiert durch x und y), und Sie können ein Unentschieden Knoten an dieser Position:

public class PoiLayer extends MapLayer { 

    private final Polygon polygon; 

    public PoiLayer() { 
     polygon = new Polygon(); 
     polygon.setStroke(Color.RED); 
     polygon.setFill(Color.rgb(255, 0, 0, 0.5)); 
     this.getChildren().add(polygon); 
    } 

    @Override 
    protected void layoutLayer() { 
     polygon.getPoints().clear(); 
     for (Pair<MapPoint, Node> candidate : points) { 
      MapPoint point = candidate.getKey(); 
      Node icon = candidate.getValue(); 
      Point2D mapPoint = baseMap.getMapPoint(point.getLatitude(), point.getLongitude()); 
      icon.setTranslateX(mapPoint.getX()); 
      icon.setTranslateY(mapPoint.getY()); 

      polygon.getPoints().addAll(mapPoint.getX(), mapPoint.getY()); 
     } 
    } 
} 

Jetzt:

MapPoint point = new MapPoint(37.396256,-121.953847); 
Node icon = new Circle(5, Color.BLUE); 
Point2D mapPoint = baseMap.getMapPoint(point.getLatitude(), point.getLongitude()); 
icon.setTranslateX(mapPoint.getX()); 
icon.setTranslateY(mapPoint.getY()); 

Also, wenn Sie erstellen möchten, zum Beispiel ein Polygon auf eine Reihe von Punkten basierend, haben Sie eine Polygon Objekt auf die Ebene hinzufügen , auf der Demo-Klasse, erstellen Sie eine Reihe von mapPoints, und fügen Sie sie auf der Karte:

private final List<MapPoint> polPoints = Arrays.asList(
     new MapPoint(37.887242, -122.178799), new MapPoint(37.738729, -121.921567), 
     new MapPoint(37.441704, -121.921567), new MapPoint(37.293191, -122.178799), 
     new MapPoint(37.441704, -122.436031), new MapPoint(37.738729, -122.436031)); 

private MapLayer myDemoLayer() { 
    PoiLayer poi = new PoiLayer(); 
    for (MapPoint mapPoint : polPoints) { 
     poi.addPoint(mapPoint, new Circle(5, Color.BLUE)); 
    } 
    return poi; 
} 

Und Sie werden eine Karte mit dem geo-located Polygon oben drauf haben.

poi

+0

Vielen Dank, ausgezeichnete Antwort und praktisches Beispiel :) – Ron

Verwandte Themen