События
Карта и объекты имеют следующие события.
События карты
MapClickEvent
Событие, которое возникает при щелчке по карте. Обратите внимание, что если пользователь дважды щелкнет, событие будет сработано дважды.
Ниже приведен пример обработки события щелчка по карте. Когда пользователь щелкает на карте, отображается уведомление с названием события и координатами места щелчка на карте:
protected GeometryFactory geometryFactory = GeometryUtils.getGeometryFactory();
@Autowired
private Notifications notifications;
@Subscribe("geoMap")
public void onGeoMapMapClick(final MapClickEvent event) {
Point point = geometryFactory.createPoint(event.getCoordinate());
notifications.create("ClickEvent", point.getCoordinate().toString())
.withPosition(Notification.Position.BOTTOM_END)
.show();
}
MapSingleClickEvent
Одиночное событие щелчка по карте возникает через 250 мс, чтобы убедиться, что это не двойной щелчок.
MapDoubleClickEvent
Событие возникает, когда пользователь выполняет двойной щелчок на карте.
Ниже приведен пример обработки события двойного щелчка по карте.
@ViewComponent
private GeoMap geoMap;
@Subscribe("geoMap")
public void onGeoMapMapDoubleClick(final MapDoubleClickEvent event) {
GeoMapView view = new GeoMapView();
view.setCenter(event.getCoordinate());
view.setZoom(6);
geoMap.setMapView(view);
}
MapMoveEndEvent
Событие возникает после перемещения карты (например, после масштабирования, панорамирования или перетаскивания карты).
Вот пример того, как обработать событие перемещения карты.
@Autowired
private Notifications notifications;
@Subscribe("geoMap")
public void onGeoMapMapMoveEnd(final MapMoveEndEvent event) {
notifications.create("MapMoveEndEvent",
String.format("""
Values:
Center: %s
Zoom: %s
Rotation: %s
""",
event.getCenter(),
event.getZoom(),
event.getRotation()))
.withPosition(Notification.Position.BOTTOM_END)
.show();
}
MapZoomChangedEvent
Событие срабатывает при изменении разрешения экрана карты.
Вот пример, демонстрирующий, как обработать событие изменения масштаба карты.
@Autowired
private Notifications notifications;
@Subscribe("geoMap")
public void onGeoMapMapZoomChanged(final MapZoomChangedEvent event) {
notifications.create("MapZoomChangedEvent", "Zoom: " + event.getZoom())
.withPosition(Notification.Position.BOTTOM_END)
.show();
}
События источников
SourceFeatureClickEvent
Событие, которое возникает при щелчке на объекте. Обратите внимание: если пользователь выполнит двойной щелчок, событие будет сработано дважды.
@ViewComponent("geoMap.vector.vectorSource")
private VectorSource vectorSource;
@Subscribe
public void onInit(final InitEvent event) {
vectorSource.addSourceFeatureClickListener(clickEvent -> {
Feature feature = clickEvent.getFeature();
notifications.create("SourceFeatureClickEvent",
feature.getGeometry().get().getClass().getSimpleName())
.withPosition(Notification.Position.BOTTOM_END)
.show();
});
}
SourceFeatureSingleClickEvent
Событие одиночного щелчка по объекту возникает через 250 мс, чтобы убедиться, что это не двойной щелчок.
SourceFeatureDoubleClickEvent
Событие возникает, когда пользователь выполняет двойной щелчок на объекте.
SourceFeatureSelectEvent
Событие срабатывает при выборе или отмене выбора объектов. Имейте в виду, что событие включает только те объекты, которые были только что выбраны или отменены. Например, если один объект уже выбран из двух, а затем выбирается второй объект, событие будет содержать только новый выбранный объект.
@Autowired
private Notifications notifications;
@Subscribe("map.featureLayer.featureSource")
public void onMapFeatureLayerFeatureSourceSourceFeatureSelect(final HasFeatureSelect.SourceFeatureSelectEvent event) {
notifications.create("SourceFeatureSelectEvent",
String.format("Selected: %s\nDeselected: %s",
event.getSelected().size(), event.getDeselected()))
.show();
}
SourceFeatureDragStartEvent
Событие возникает, когда пользователь начинает перетаскивать объект.
@Autowired
private Notifications notifications;
@Subscribe("map.featureLayer.featureSource")
public void onSourceFeatureDragStart(final HasFeatureDrag.SourceFeatureDragStartEvent event) {
notifications.create("SourceFeatureDragStartEvent", "Features: "
+ event.getFeatures().size())
.show();
}
SourceFeatureDragEndEvent
Событие возникает, когда пользователь заканчивает перетаскивание объекта.
@Autowired
private Notifications notifications;
@Subscribe("map.featureLayer.featureSource")
public void onSourceFeatureDragEnd(final HasFeatureDrag.SourceFeatureDragEndEvent event) {
notifications.create("SourceFeatureDragEndEvent", "Features: "
+ event.getFeatures().size())
.show();
}
SourceFeatureModifyStartEvent
Событие возникает при начале изменения объекта.
@Autowired
private Notifications notifications;
@Subscribe("map.featureLayer.featureSource")
public void onSourceFeatureModifyStart(final HasFeatureModify.SourceFeatureModifyStartEvent event) {
notifications.create("SourceFeatureModifyStartEvent", "Features: "
+ event.getFeatures().size())
.show();
}
SourceFeatureModifyEndEvent
Событие возникает при завершении изменения объекта.
@Autowired
private Notifications notifications;
@Subscribe("map.featureLayer.featureSource")
public void onSourceFeatureModifyEnd(final HasFeatureModify.SourceFeatureModifyEndEvent event) {
notifications.create("SourceFeatureModifyEndEvent", "Features: "
+ event.getFeatures().size())
.show();
}
SourceFeatureDeleteEvent
Событие возникает, когда объект удаляется из источника.
@Autowired
private Notifications notifications;
@Subscribe("map.featureLayer.featureSource")
public void onSourceFeatureDelete(final HasFeatureModify.SourceFeatureDeleteEvent event) {
notifications.create("SourceFeatureDeleteEvent", "Features: "
+ event.getFeatures().size())
.show();
}
GeoObjectClickEvent
Событие, которое возникает при щелчке на геообъекте. Обратите внимание: если пользователь выполнит двойной щелчок, событие будет сработано дважды.
@Autowired
private Notifications notifications;
@ViewComponent("map.vectorLayer.dataVectorSource")
private DataVectorSource<Location> dataVectorSource;
@Subscribe
public void onInit(final InitEvent event) {
dataVectorSource.addGeoObjectClickListener(clickEvent ->
notifications.create("GeoObject click", clickEvent.getItem().getCity())
.withPosition(Notification.Position.BOTTOM_END)
.show());
}
GeoObjectSingleClickEvent
Событие одиночного щелчка по геообъекту возникает через 250 мс, чтобы убедиться, что это не двойной щелчок.
GeoObjectDoubleClickEvent
Событие возникает, когда пользователь выполняет двойной щелчок на геообъекте.
GeoObjectSelectEvent
Событие выбора срабатывает, когда геообъекты выбираются или отменяются. Имейте в виду, что событие включает только что выбранные или отмененные геообъекты. Например, если один геообъект уже выбран из двух, а затем вы выбираете второй геообъект, событие будет содержать информацию только о втором, только что выбранном геообъекте.
@Autowired
private Notifications notifications;
@Subscribe("map.layer.source")
public void onMapLayerSourceGeoObjectSelect(final HasGeoObjectSelect.GeoObjectSelectEvent<Region> event) {
notifications.create("GeoObjectSelectEvent",
String.format("Selected: %s\nDeselected: %s",
event.getSelected().size(), event.getDeselected()))
.show();
}
GeoObjectDragStartEvent
Событие возникает, когда пользователь начинает перетаскивать геообъект.
@Autowired
private Notifications notifications;
@Subscribe("map.layer.source")
public void onSourceGeoObjectDragStart(final HasGeoObjectDrag.GeoObjectDragStartEvent<Region> event) {
notifications.create("GeoObjectDragStartEvent", "Items: "
+ event.getItems().size())
.show();
}
GeoObjectDragEndEvent
Событие возникает, когда пользователь заканчивает перетаскивание геообъекта.
@Autowired
private Notifications notifications;
@Subscribe("map.layer.source")
public void onSourceGeoObjectDragEnd(final HasGeoObjectDrag.GeoObjectDragEndEvent<Region> event) {
notifications.create("GeoObjectDragEndEvent", "Items: "
+ event.getItems().size())
.show();
}
GeoObjectModifyStartEvent
Событие возникает при начале изменения геообъекта.
@Autowired
private Notifications notifications;
@Subscribe("map.layer.source")
public void onSourceGeoObjectModifyStart(final HasGeoObjectModify.GeoObjectModifyStartEvent<Region> event) {
notifications.create("GeoObjectModifyStartEvent", "Items: "
+ event.getItems().size())
.show();
}
GeoObjectModifyEndEvent
Событие возникает при завершении изменения геообъекта.
@Autowired
private Notifications notifications;
@Subscribe("map.layer.source")
public void onSourceGeoObjectModifyEnd(final HasGeoObjectModify.GeoObjectModifyEndEvent<Region> event) {
notifications.create("GeoObjectModifyEndEvent", "Items: "
+ event.getItems().size())
.show();
}