在拖动曲面之前获取标记位置

时间:2014-04-27 23:38:54

标签: google-maps jsf-2 primefaces

我想在使用PrimeFaces GMap拖动标记之前存储先前的位置 - 可拖动标记

怎么做?

展示:GMap - 可拖动标记:

http://www.primefaces.org/showcase/ui/gmapDraggableMarkers.jsf

1 个答案:

答案 0 :(得分:0)

您可以存储原始Marker对象的副本,然后在onMarkerDrag处理程序中,您可以找到与MarkerDragEvent传递的Marker对应的原始Marker。

我说"副本"因为Primefaces可能会修改原始Marker的LatLng而不是创建一个新的(很可能)。您可以使用"数据"或"标题"属性为他们提供ID并正确匹配复制的标记。

我可以用代码解释一下,如果你需要帮助,请告诉我。

编辑:

为了满足您的要求,我将如下调整Primefaces展示示例(注意它需要Marker的标题是唯一的。如果这不可能,请使用Marker类的data属性实现它。 ):

package org.primefaces.examples.view;

//...

public class MapBean implements Serializable {

    private MapModel draggableModel;
    private Map<String, LatLng> positions = new HashMap<String, LatLng>(); // new

    public MapBean() {
        draggableModel = new DefaultMapModel();

        positions.put("Konyaalti", new LatLng(36.879466, 30.667648));
        positions.put("Ataturk Parki", new LatLng(36.883707, 30.689216));
        positions.put("Karaalioglu Parki", new LatLng(36.879703, 30.706707));
        positions.put("Kaleici", new LatLng(36.885233, 30.702323));

        for (Map.Entry<String, LatLng> e : positions.entrySet()) {
            Marker m = new Marker(e.getValue(), e.getKey());
            m.setDraggable(true);
            draggableModel.addOverlay(m);
        }
    }

    public void onMarkerDrag(MarkerDragEvent event) {
        marker = event.getMarker();

        addMessage(new FacesMessage(FacesMessage.SEVERITY_INFO, "Marker Dragged", "Lat:" + marker.getLatlng().getLat() + ", Lng:" + marker.getLatlng().getLng()));

        // update position and get the old one
        LatLng oldPosition = positions.put(marker.getTitle(), marker.getLatlng());

        // ...
    }

    // ...
}