UNPKG

vworld-react-3d

Version:

VWorld 3.0 API React Component - 한국 공공데이터 3D 지도 컴포넌트

325 lines (324 loc) 10.5 kB
export interface VWorldConfig { apiKey: string; } export interface VWorldCoord { x: number; y: number; z: number; } export interface VWorldDirection { heading: number; pitch: number; roll: number; } export interface VWorldCameraPosition { coord: VWorldCoord; direction: VWorldDirection; } export interface VWorldMapOptions { mapId?: string; initPosition?: VWorldCameraPosition; logo?: boolean; navigation?: boolean; autoRotate?: boolean; showGrid?: boolean; showAxis?: boolean; backgroundColor?: string; skyColor?: string; fogColor?: string; fogDensity?: number; terrain?: boolean; buildings?: boolean; roads?: boolean; water?: boolean; vegetation?: boolean; enableAntialiasing?: boolean; enableShadows?: boolean; enableFog?: boolean; maxFPS?: number; minDistance?: number; maxDistance?: number; enablePan?: boolean; enableZoom?: boolean; enableRotate?: boolean; animationDuration?: number; easingFunction?: string; } export interface VWorldCameraChangeEvent { type: "camerachange"; camera: VWorldCameraPosition; } export interface VWorldZoomChangeEvent { type: "zoomchange"; zoom: number; } export interface VWorldClickEvent { type: "click"; coord: VWorldCoord; } export interface VWorldDoubleClickEvent { type: "dblclick"; coord: VWorldCoord; } export interface VWorldMouseMoveEvent { type: "mousemove"; coord: VWorldCoord; } export interface VWorldWheelEvent { type: "wheel"; delta: number; } export type VWorldMapEvent = VWorldCameraChangeEvent | VWorldZoomChangeEvent | VWorldClickEvent | VWorldDoubleClickEvent | VWorldMouseMoveEvent | VWorldWheelEvent; export interface VWorldMapInstance { setOption(options: Partial<VWorldMapOptions>): void; start(): void; stop(): void; destroy(): void; resize(): void; getContainer(): HTMLElement; getSize(): { width: number; height: number; }; update(): void; getCurrentPosition(): VWorldCameraPosition; moveTo(position: VWorldCameraPosition, duration?: number): void; flyTo(position: VWorldCameraPosition, duration?: number): void; setCamera(position: VWorldCameraPosition): void; getCamera(): VWorldCameraPosition; lookAt(target: VWorldCoord, duration?: number): void; orbit(center: VWorldCoord, radius: number, duration?: number): void; pan(deltaX: number, deltaY: number, duration?: number): void; rotate(angle: number, duration?: number): void; tilt(angle: number, duration?: number): void; zoomTo(level: number, duration?: number): void; fitBounds(bounds: { min: VWorldCoord; max: VWorldCoord; }, duration?: number): void; zoomIn(level?: number): void; zoomOut(level?: number): void; setZoom(level: number): void; getZoom(): number; getMinZoom(): number; getMaxZoom(): number; setMinZoom(level: number): void; setMaxZoom(level: number): void; on(event: string, callback: (event: VWorldMapEvent) => void): void; off(event: string, callback?: (event: VWorldMapEvent) => void): void; once(event: string, callback: (event: VWorldMapEvent) => void): void; trigger(event: string, data?: unknown): void; addLayer(layer: VWorldLayer): void; removeLayer(layerId: string): void; getLayer(layerId: string): VWorldLayer | null; getLayers(): VWorldLayer[]; setLayerVisibility(layerId: string, visible: boolean): void; getLayerVisibility(layerId: string): boolean; setLayerOpacity(layerId: string, opacity: number): void; getLayerOpacity(layerId: string): number; setLayerOrder(layerId: string, order: number): void; getLayerOrder(layerId: string): number; clearLayers(): void; reloadLayer(layerId: string): void; addFeature(feature: VWorldFeature): void; removeFeature(featureId: string): void; getFeature(featureId: string): VWorldFeature | null; getFeatures(): VWorldFeature[]; setFeatureStyle(featureId: string, style: VWorldFeatureStyle): void; getFeatureStyle(featureId: string): VWorldFeatureStyle | null; setFeatureVisibility(featureId: string, visible: boolean): void; getFeatureVisibility(featureId: string): boolean; clearFeatures(): void; pickFeature(screenX: number, screenY: number): VWorldFeature | null; getBounds(): { min: VWorldCoord; max: VWorldCoord; }; getCenter(): VWorldCoord; getExtent(): { min: VWorldCoord; max: VWorldCoord; }; getProjection(): string; getScale(): number; getResolution(): number; getViewport(): { width: number; height: number; }; getPixelRatio(): number; animate(animation: VWorldAnimation): void; ease(easing: string, duration: number): void; interpolate(start: VWorldCameraPosition, end: VWorldCameraPosition, progress: number): VWorldCameraPosition; setAnimationDuration(duration: number): void; getAnimationDuration(): number; stopAnimation(): void; enableInteraction(): void; disableInteraction(): void; setInteractionMode(mode: string): void; getInteractionMode(): string; enablePan(): void; disablePan(): void; enableZoom(): void; disableZoom(): void; setRenderMode(mode: string): void; getRenderMode(): string; getFPS(): number; setQuality(quality: string): void; getQuality(): string; setMaxFPS(fps: number): void; loadData(url: string, options?: VWorldDataOptions): Promise<void>; loadTile(x: number, y: number, z: number): Promise<void>; loadTerrain(bounds: { min: VWorldCoord; max: VWorldCoord; }): Promise<void>; loadBuilding(buildingId: string): Promise<void>; loadPOI(poiId: string): Promise<void>; loadVectorData(url: string): Promise<void>; screenToWorld(screenX: number, screenY: number): VWorldCoord; worldToScreen(worldX: number, worldY: number, worldZ: number): { x: number; y: number; }; pixelToWorld(pixelX: number, pixelY: number): VWorldCoord; worldToPixel(worldX: number, worldY: number, worldZ: number): { x: number; y: number; }; coordinateToPixel(lon: number, lat: number, alt: number): { x: number; y: number; }; pixelToCoordinate(pixelX: number, pixelY: number): VWorldCoord; raycast(origin: VWorldCoord, direction: VWorldDirection): VWorldRaycastResult | null; getDistance(point1: VWorldCoord, point2: VWorldCoord): number; getBearing(point1: VWorldCoord, point2: VWorldCoord): number; getAltitude(lon: number, lat: number): Promise<number>; getSlope(point1: VWorldCoord, point2: VWorldCoord): number; getAspect(lon: number, lat: number): number; getVisibility(point1: VWorldCoord, point2: VWorldCoord): boolean; getSunPosition(date: Date): { azimuth: number; elevation: number; }; enableShadows(): void; disableShadows(): void; setShadowQuality(quality: string): void; enableFog(): void; disableFog(): void; setFogDensity(density: number): void; } export interface VWorldLayer { id: string; name: string; type: string; visible: boolean; opacity: number; order: number; url?: string; data?: unknown; } export interface VWorldFeature { id: string; type: string; geometry: { type: string; coordinates: number[] | number[][] | number[][][]; }; properties: Record<string, unknown>; style?: VWorldFeatureStyle; visible: boolean; } export interface VWorldFeatureStyle { color?: string; opacity?: number; size?: number; symbol?: string; outlineColor?: string; outlineWidth?: number; } export interface VWorldAnimation { type: string; duration: number; easing?: string; target: VWorldCameraPosition; } export interface VWorldDataOptions { format?: string; projection?: string; bounds?: { min: VWorldCoord; max: VWorldCoord; }; } export interface VWorldRaycastResult { point: VWorldCoord; distance: number; feature?: VWorldFeature; layer?: VWorldLayer; } export interface VWorldMapProps { config: VWorldConfig; options?: Partial<VWorldMapOptions>; /** 최초 생성 카메라 위치 */ initCameraPosition?: VWorldCameraPosition; /** 동적 카메라 위치 제어 */ cameraPosition?: VWorldCameraPosition; /** 레벨 제어 */ zoom?: number; /** 최소 레벨 */ minZoom?: number; /** 최대 레벨 */ maxZoom?: number; /** 카메라 이동 이벤트 콜백 */ onCameraChange?: (position: VWorldCameraPosition) => void; /** 변경 이벤트 콜백 */ onZoomChange?: (zoom: number) => void; /** 클릭 이벤트 콜백 */ onMapClick?: (position: VWorldCoord) => void; /** 더블클릭 이벤트 콜백 */ onMapDoubleClick?: (position: VWorldCoord) => void; /** 마우스 이동 이벤트 콜백 */ onMouseMove?: (position: VWorldCoord) => void; /** 마우스 이벤트 콜백 */ onWheel?: (delta: number) => void; /** 준비 완료 콜백 */ onMapReady?: (map: VWorldMapInstance) => void; /** 로드 완료 콜백 */ onMapLoad?: () => void; /** 에러 발생 콜백 */ onError?: (error: string) => void; /** CSS 클래스명 */ className?: string; /** 인라인 스타일 */ style?: React.CSSProperties; /** 컨테이너 너비 */ width?: string | number; /** 컨테이너 높이 */ height?: string | number; } export interface VWorldGlobal { vw?: { Map: new () => VWorldMapInstance; CameraPosition: new (coord: VWorldCoord, direction: VWorldDirection) => VWorldCameraPosition; CoordZ: new (x: number, y: number, z: number) => VWorldCoord; Direction: new (heading: number, pitch: number, roll: number) => VWorldDirection; }; v_protocol?: string; vworldUrl?: string; vworld2DCache?: string; vworldBaseMapUrl?: string; vworldStyledMapUrl?: string; vworldVectorKey?: string; vworldApiKey?: string; vworldNoCss?: string; vworldIsValid?: string; vworld3DUrl?: string; $?: JQueryStatic; vworldMapInstance?: VWorldMapInstance; } declare global { interface Window extends VWorldGlobal { } }