События

Карта и объекты имеют следующие события.

События карты

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();
}

События объектов

FeatureClickEvent

Событие, которое возникает при щелчке на объекте. Обратите внимание: если пользователь выполнит двойной щелчок, событие будет сработано дважды.

FeatureSingleClickEvent

Событие возникает через 250 мс, чтобы убедиться, что это не двойной щелчок.

FeatureDoubleClickEvent

Событие возникает, когда пользователь выполняет двойной щелчок на объекте.