leaflet-polydraw
Version:
Advanced polygon drawing and editing plugin for Leaflet with drag-and-drop, smart merging, and comprehensive editing tools
118 lines • 4.27 kB
TypeScript
import * as L from 'leaflet';
import { TurfHelper } from '../turf-helper';
import { PolygonInformationService } from '../polygon-information.service';
import type { Feature, Polygon, MultiPolygon } from 'geojson';
import type { PolydrawConfig, PolydrawPolygon } from '../types/polydraw-interfaces';
import { ModeManager } from './mode-manager';
import { EventManager } from './event-manager';
export interface InteractionResult {
success: boolean;
featureGroups?: L.FeatureGroup[];
error?: string;
}
export interface PolygonInteractionManagerDependencies {
turfHelper: TurfHelper;
polygonInformation: PolygonInformationService;
map: L.Map;
config: PolydrawConfig;
modeManager: ModeManager;
eventManager: EventManager;
}
/**
* PolygonInteractionManager handles all interactions with existing polygons.
* This includes dragging polygons, dragging markers, edge interactions, and popup menus.
*/
export declare class PolygonInteractionManager {
private markerFeatureGroupMap;
private markerModifierHandlers;
private _activeMarker;
private isDraggingMarker;
private turfHelper;
private polygonInformation;
private map;
private config;
private modeManager;
private eventManager;
private currentDragPolygon;
private currentModifierDragMode;
private isModifierKeyHeld;
private _openMenuPopup;
private getFeatureGroups;
private addFeatureGroup;
private removeFeatureGroup;
constructor(dependencies: PolygonInteractionManagerDependencies, featureGroupAccess: {
getFeatureGroups: () => L.FeatureGroup[];
addFeatureGroup: (fg: L.FeatureGroup) => void;
removeFeatureGroup: (fg: L.FeatureGroup) => void;
});
/**
* Add markers to a polygon feature group
*/
addMarkers(latlngs: L.LatLngLiteral[], featureGroup: L.FeatureGroup): void;
/**
* Add hole markers to a polygon feature group, with configurable special markers.
*/
addHoleMarkers(latlngs: L.LatLngLiteral[], featureGroup: L.FeatureGroup): void;
/**
* Add edge click listeners to a polygon
*/
addEdgeClickListeners(polygon: L.Polygon, featureGroup: L.FeatureGroup): void;
/**
* Enable polygon dragging functionality
*/
enablePolygonDragging(polygon: PolydrawPolygon, latlngs: Feature<Polygon | MultiPolygon>): void;
/**
* Update marker draggable state based on current mode
*/
updateMarkerDraggableState(): void;
/**
* Update all markers for edge deletion visual feedback
*/
updateAllMarkersForEdgeDeletion(showFeedback: boolean): void;
/**
* Update individual marker for edge deletion visual feedback
*/
updateMarkerForEdgeDeletion(marker: L.Marker, showFeedback: boolean): void;
/**
* Set modifier key held state
*/
setModifierKeyHeld(isHeld: boolean): void;
private onEdgeClick;
private highlightEdgeOnHover;
private elbowClicked;
private findFeatureGroupForPoly;
private markerDrag;
private markerDragEnd;
private onPolygonMouseMove;
private onPolygonMouseUp;
private offsetPolygonCoordinates;
private updateMarkersAndHoleLinesDuringDrag;
private updatePolygonAfterDrag;
private getDragSubtractModifierKey;
private detectDragSubtractModifierKey;
private setSubtractVisualMode;
private updateMarkerColorsForSubtractMode;
private handleModifierToggleDuringDrag;
private isModifierDragActive;
private performModifierSubtract;
/**
* Check if two bounding boxes overlap
*/
private boundingBoxesOverlap;
private isDragSubtractModifierKeyPressed;
private getEdgeDeletionModifierKey;
private isEdgeDeletionModifierKeyPressed;
private onMarkerHoverForEdgeDeletion;
private onMarkerHoverForEdgeDeletionEvent;
private onMarkerLeaveForEdgeDeletionEvent;
private getMarkerIndex;
private ensureMarkerSeparation;
private findAlternativeMarkerPosition;
private createDivIcon;
private getLatLngInfoString;
private generateMenuMarkerPopup;
private getPolygonGeoJSONFromFeatureGroup;
private getTotalPolygonPerimeter;
private generateInfoMarkerPopup;
}
//# sourceMappingURL=polygon-interaction-manager.d.ts.map