Gluon Mobile 4とGluon Maps 1.0.1を使用して、フットステップを示すレイヤーを持つマップを表示しています。ユーザーがマウスボタンをダブルクリックすると、新しい足踏みステップが表示されます。これは素晴らしいですが、私は現在、(ユーザーがクリックした)ポインタ座標からMapPoint
(レイヤーに必要)に変換するための回避策が必要です。ここでGluon Maps 1.0.1を使用してマウスポインタ座標をMapPointに変換するにはどうすればよいですか?
マウスクリックが得られる方法です。
public MainView(String name) {
super(name);
MapView mapView = new MapView();
mapView.setZoom(18f);
mapView.setCenter(NUREMBERG);
layer = new FootStepsLayer();
mapView.addLayer(layer);
setCenter(mapView);
layer.addPoint(NUREMBERG);
setOnMouseClicked(event -> {
if ((event.getButton() == MouseButton.PRIMARY)
&& (event.getClickCount() == 2)) {
double x = event.getX();
double y = event.getY();
layer.addPoint(x, y);
}
});
}
現在、私の層の実装は次のようになります。
public class FootStepsLayer extends MapLayer {
private static final Image FOOTSTEPS
= new Image(FootStepsLayer.class.getResourceAsStream("/footsteps.png"),
32, 32, true, true);
private final ObservableList<Pair<MapPoint, Node>> points
= FXCollections.observableArrayList();
public void addPoint(MapPoint mapPoint) {
Node node = new ImageView(FOOTSTEPS);
Pair<MapPoint, Node> pair = new Pair<>(mapPoint, node);
points.add(pair);
getChildren().add(node);
markDirty();
}
public void addPoint(double x, double y) {
Bounds bounds = baseMap.getParent().getLayoutBounds();
baseMap.moveX(x - bounds.getWidth()/2);
baseMap.moveY(y - bounds.getHeight()/2);
addPoint(new MapPoint(baseMap.centerLat().get(),
baseMap.centerLon().get()));
}
@Override
protected void layoutLayer() {
// Warning: suggested conversion to functional style crashed app on BlueStacks
for (Pair<MapPoint, Node> element : points) {
MapPoint mapPoint = element.getKey();
Node node = element.getValue();
Point2D point = baseMap.getMapPoint(mapPoint.getLatitude(), mapPoint.getLongitude());
node.setVisible(true);
node.setTranslateX(point.getX());
node.setTranslateY(point.getY());
}
}
}
私の回避策はpublic void addPoint(double x, double y)
である:私はmoveX()
を呼び出していますmoveY()
、それ以降はcenterLat()
とをクエリできます。マップが移動し、新しい足のステップがマップの中心になるため、これは理想的ではありません。私が望むのは、地図の位置が変わらないことです。
もし私がそれを見落とさなければ、マウス座標を地理的位置に変換するためのAPIがないようです。質問create a polyline in gluon mapLayerで答えられるように、BaseMap
クラスには2つの方法がありますが、他の方法は見つけられません。しかし、それを行う方法がなければならない。 ;-)
素晴らしいです、ありがとうございます。プルリクエストを作成しようとしています。数日かかるかもしれません。 – Thomas