我想在使用PrimeFaces GMap拖动标记之前存储先前的位置 - 可拖动标记
怎么做?
展示:GMap - 可拖动标记:
http://www.primefaces.org/showcase/ui/gmapDraggableMarkers.jsf
答案 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());
// ...
}
// ...
}