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.
Vielen Dank, ausgezeichnete Antwort und praktisches Beispiel :) – Ron