Добрый день.
Мы на основе src\components\GwtkSearchArea\actions\SelectMapCircleAction.ts сделали компоненты по выделению произвольной окружности.
Как можно сделать так, что бы можно было выделять много областей, а не одну. То есть например после окончания выделения окружности, можно сразу рисовать следующий окружность, и старый не удалялся .
По полигону как вы посоветовали работает (https://gisweb.ru/forum/forum31/14007-vydelenie-neskolkikh-oblastey-v-gis-webtoolkit-se-6.18.0 )
У меня получилось сделать рисования много областей, но с одним центром и разными радиусам, как можно сделать так, что после нажатия на правую кнопку можно рисовать окружность в другом месте. Вот код по нажатию на правую кнопку
Мы на основе 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(); } } } } |