Добрый день.
Мы на основе src\components\GwtkSearchArea\actions\SelectMapCircleAction.ts сделали компоненты по выделению произвольной окружности.
Как можно сделать так, что бы можно было выделять много областей, а не одну. То есть например после окончания выделения окружности, можно сразу рисовать следующий окружность, и старый не удалялся .
По полигону как вы посоветовали работает ()
У меня получилось сделать рисования много областей, но с одним центром и разными радиусам, как можно сделать так, что после нажатия на правую кнопку можно рисовать окружность в другом месте. Вот код по нажатию на правую кнопку
Мы на основе src\components\GwtkSearchArea\actions\SelectMapCircleAction.ts сделали компоненты по выделению произвольной окружности.
Как можно сделать так, что бы можно было выделять много областей, а не одну. То есть например после окончания выделения окружности, можно сразу рисовать следующий окружность, и старый не удалялся .
По полигону как вы посоветовали работает ()
У меня получилось сделать рисования много областей, но с одним центром и разными радиусам, как можно сделать так, что после нажатия на правую кнопку можно рисовать окружность в другом месте. Вот код по нажатию на правую кнопку
| Код |
|---|
onMouseDown(event: MouseDeviceEvent) {
if (this.pointObjectCenter && event.pressedMouseButtonList[2]) {
const count = this.map.getActiveObject()?.getObjectSubObjectsCount() || 0;
if (count <= 9 && this.circleCenter) {
const objectNumber = count || -1 + 1;
let pointSelector: PointSelector = { objectNumber };
let centerPlane = this.mapWindow.getMap().pixelToPlane(this.circleCenter);
const geoPoint = this.pointXY.toGeoPoint();
const centrGeoPoint = centerPlane.toGeoPoint();
if (geoPoint && centrGeoPoint) {
const center = this.map.geoToPixel(
centrGeoPoint,
this.mapWindow.getMap().getZoom()
);
let radius = this.circleCenter.distanceTo( event.mousePosition) || 0;
if (geoPoint && centrGeoPoint) {
let radius_meter = this.calculateTheDistance(
centrGeoPoint?.getLatitude(),
geoPoint?.getLatitude(),
centrGeoPoint?.getLongitude(),
geoPoint?.getLongitude()
);
this.customFields = { radius_meter, pointXY: centerPlane };
const latitude = Number(centrGeoPoint.getLatitude()) || 0.1;
const longitude = Number(centrGeoPoint.getLongitude()) || 0.1;
const mapCalculator = new GWTK.MapCalculations(this.map);
for (
let numberPoint = 0;
numberPoint < 361;
numberPoint = numberPoint + 10
) {
const positions = mapCalculator.mapDirectPositionComputation(
latitude,
longitude,
numberPoint,
radius_meter
);
if (positions) {
this.multiObject.addGeoPoint(
new GeoPoint(positions.l, positions.b),
pointSelector
);
}
}
this.map.setActiveObject(this.multiObject);
this.showLabel(center.x, center.y, radius_meter);
this.circleObject.removeAllPoints();
this.mapWindow.setCursor(CURSOR_TYPE.crosshair);
this.parentTask.setState(AREA_ACTION_ID, SELECT_CIRCLE_ACTION);
}
}
} else {
this.mapWindow.addSnackBarMessage(
'Максимальное количество полигонов - 10'
);
}
}else if (event.originalEvent.button === 0) {
if (!this.circleCenter) {
const map = this.mapWindow.getMap();
const pointXY = map.pixelToPlane(event.mousePosition.clone());
if (pointXY) {
this.circleCenter = event.mousePosition.clone();
}
}
}
} |