diff --git a/backend/src/aerial/aerialRouter.ts b/backend/src/aerial/aerialRouter.ts new file mode 100644 index 0000000..7370579 --- /dev/null +++ b/backend/src/aerial/aerialRouter.ts @@ -0,0 +1,144 @@ +import express from 'express'; +import { + listMedia, + createMedia, + listCctv, + listSatRequests, + createSatRequest, + updateSatRequestStatus, + isValidSatStatus, +} from './aerialService.js'; +import { isValidNumber } from '../middleware/security.js'; +import { requireAuth, requirePermission } from '../auth/authMiddleware.js'; + +const router = express.Router(); + +// ============================================================ +// AERIAL_MEDIA 라우트 +// ============================================================ + +// GET /api/aerial/media — 미디어 목록 +router.get('/media', requireAuth, requirePermission('aerial', 'READ'), async (req, res) => { + try { + const { equipType, mediaType, acdntSn, search } = req.query; + const acdntSnNum = acdntSn ? parseInt(acdntSn as string, 10) : undefined; + if (acdntSn && !isValidNumber(acdntSnNum, 1, 999999)) { + res.status(400).json({ error: '유효하지 않은 사고 번호' }); + return; + } + const items = await listMedia({ + equipType: equipType as string | undefined, + mediaType: mediaType as string | undefined, + acdntSn: acdntSnNum, + search: search as string | undefined, + }); + res.json(items); + } catch (err) { + console.error('[aerial] 미디어 목록 오류:', err); + res.status(500).json({ error: '미디어 목록 조회 실패' }); + } +}); + +// POST /api/aerial/media — 미디어 메타 등록 +router.post('/media', requireAuth, requirePermission('aerial', 'CREATE'), async (req, res) => { + try { + const { + acdntSn, fileNm, orgnlNm, filePath, lon, lat, locDc, + equipTpCd, equipNm, mediaTpCd, takngDtm, fileSz, resolution, + } = req.body; + if (!fileNm) { + res.status(400).json({ error: '파일명은 필수입니다.' }); + return; + } + const result = await createMedia({ + acdntSn, fileNm, orgnlNm, filePath, lon, lat, locDc, + equipTpCd, equipNm, mediaTpCd, takngDtm, fileSz, resolution, + }); + res.status(201).json(result); + } catch (err) { + console.error('[aerial] 미디어 등록 오류:', err); + res.status(500).json({ error: '미디어 등록 실패' }); + } +}); + +// ============================================================ +// CCTV_CAMERA 라우트 +// ============================================================ + +// GET /api/aerial/cctv — CCTV 목록 +router.get('/cctv', requireAuth, requirePermission('aerial', 'READ'), async (req, res) => { + try { + const { region, status } = req.query; + const items = await listCctv({ + region: region as string | undefined, + status: status as string | undefined, + }); + res.json(items); + } catch (err) { + console.error('[aerial] CCTV 목록 오류:', err); + res.status(500).json({ error: 'CCTV 목록 조회 실패' }); + } +}); + +// ============================================================ +// SAT_REQUEST 라우트 +// ============================================================ + +// GET /api/aerial/satellite — 위성 촬영 요청 목록 +router.get('/satellite', requireAuth, requirePermission('aerial', 'READ'), async (req, res) => { + try { + const { status } = req.query; + const items = await listSatRequests({ + status: status as string | undefined, + }); + res.json(items); + } catch (err) { + console.error('[aerial] 위성 요청 목록 오류:', err); + res.status(500).json({ error: '위성 요청 목록 조회 실패' }); + } +}); + +// POST /api/aerial/satellite — 위성 촬영 요청 생성 +router.post('/satellite', requireAuth, requirePermission('aerial', 'CREATE'), async (req, res) => { + try { + const { + reqCd, acdntSn, lon, lat, zoneDc, coordDc, zoneAreaKm2, + satNm, providerNm, resolution, purposeDc, reqstrNm, reqDtm, expectedRcvDtm, + } = req.body; + if (!reqCd) { + res.status(400).json({ error: '요청코드는 필수입니다.' }); + return; + } + const result = await createSatRequest({ + reqCd, acdntSn, lon, lat, zoneDc, coordDc, zoneAreaKm2, + satNm, providerNm, resolution, purposeDc, reqstrNm, reqDtm, expectedRcvDtm, + }); + res.status(201).json(result); + } catch (err) { + console.error('[aerial] 위성 요청 생성 오류:', err); + res.status(500).json({ error: '위성 요청 생성 실패' }); + } +}); + +// POST /api/aerial/satellite/:sn/status — 위성 요청 상태 변경 +router.post('/satellite/:sn/status', requireAuth, requirePermission('aerial', 'CREATE'), async (req, res) => { + try { + const sn = parseInt(req.params.sn as string, 10); + if (!isValidNumber(sn, 1, 999999)) { + res.status(400).json({ error: '유효하지 않은 요청 번호' }); + return; + } + const { sttsCd } = req.body; + if (!sttsCd || !isValidSatStatus(sttsCd)) { + res.status(400).json({ error: '유효하지 않은 상태값 (PENDING/SHOOTING/COMPLETED/CANCELLED)' }); + return; + } + await updateSatRequestStatus(sn, sttsCd); + res.json({ success: true }); + } catch (err) { + console.error('[aerial] 위성 요청 상태 변경 오류:', err); + res.status(500).json({ error: '위성 요청 상태 변경 실패' }); + } +}); + +export default router; diff --git a/backend/src/aerial/aerialService.ts b/backend/src/aerial/aerialService.ts new file mode 100644 index 0000000..f9db73e --- /dev/null +++ b/backend/src/aerial/aerialService.ts @@ -0,0 +1,341 @@ +import { wingPool } from '../db/wingDb.js'; + +// ============================================================ +// AERIAL_MEDIA +// ============================================================ + +interface AerialMediaItem { + aerialMediaSn: number; + acdntSn: number | null; + fileNm: string; + orgnlNm: string | null; + filePath: string | null; + lon: number | null; + lat: number | null; + locDc: string | null; + equipTpCd: string | null; + equipNm: string | null; + mediaTpCd: string | null; + takngDtm: string | null; + fileSz: string | null; + resolution: string | null; + regDtm: string; +} + +interface ListMediaInput { + equipType?: string; + mediaType?: string; + acdntSn?: number; + search?: string; +} + +function rowToMedia(r: Record): AerialMediaItem { + return { + aerialMediaSn: r.aerial_media_sn as number, + acdntSn: r.acdnt_sn as number | null, + fileNm: r.file_nm as string, + orgnlNm: r.orgnl_nm as string | null, + filePath: r.file_path as string | null, + lon: r.lon ? parseFloat(r.lon as string) : null, + lat: r.lat ? parseFloat(r.lat as string) : null, + locDc: r.loc_dc as string | null, + equipTpCd: r.equip_tp_cd as string | null, + equipNm: r.equip_nm as string | null, + mediaTpCd: r.media_tp_cd as string | null, + takngDtm: r.takng_dtm as string | null, + fileSz: r.file_sz as string | null, + resolution: r.resolution as string | null, + regDtm: r.reg_dtm as string, + }; +} + +export async function listMedia(input: ListMediaInput): Promise { + const conditions: string[] = ["USE_YN = 'Y'"]; + const params: (string | number)[] = []; + let idx = 1; + + if (input.equipType) { + conditions.push(`EQUIP_TP_CD = $${idx++}`); + params.push(input.equipType); + } + if (input.mediaType) { + conditions.push(`MEDIA_TP_CD = $${idx++}`); + params.push(input.mediaType); + } + if (input.acdntSn) { + conditions.push(`ACDNT_SN = $${idx++}`); + params.push(input.acdntSn); + } + if (input.search) { + conditions.push(`(FILE_NM ILIKE '%' || $${idx} || '%' OR EQUIP_NM ILIKE '%' || $${idx} || '%')`); + params.push(input.search); + idx++; + } + + const { rows } = await wingPool.query( + `SELECT AERIAL_MEDIA_SN, ACDNT_SN, FILE_NM, ORGNL_NM, FILE_PATH, + LON, LAT, LOC_DC, EQUIP_TP_CD, EQUIP_NM, MEDIA_TP_CD, + TAKNG_DTM, FILE_SZ, RESOLUTION, REG_DTM + FROM AERIAL_MEDIA + WHERE ${conditions.join(' AND ')} + ORDER BY TAKNG_DTM DESC NULLS LAST`, + params + ); + + return rows.map((r: Record) => rowToMedia(r)); +} + +export async function createMedia(input: { + acdntSn?: number; + fileNm: string; + orgnlNm?: string; + filePath?: string; + lon?: number; + lat?: number; + locDc?: string; + equipTpCd?: string; + equipNm?: string; + mediaTpCd?: string; + takngDtm?: string; + fileSz?: string; + resolution?: string; +}): Promise<{ aerialMediaSn: number }> { + const { rows } = await wingPool.query( + `INSERT INTO AERIAL_MEDIA ( + ACDNT_SN, FILE_NM, ORGNL_NM, FILE_PATH, + LON, LAT, + GEOM, + LOC_DC, EQUIP_TP_CD, EQUIP_NM, MEDIA_TP_CD, + TAKNG_DTM, FILE_SZ, RESOLUTION + ) VALUES ( + $1, $2, $3, $4, + $5, $6, + CASE WHEN $5 IS NOT NULL AND $6 IS NOT NULL THEN ST_SetSRID(ST_MakePoint($5::float, $6::float), 4326) END, + $7, $8, $9, $10, + $11, $12, $13 + ) RETURNING AERIAL_MEDIA_SN`, + [ + input.acdntSn || null, + input.fileNm, + input.orgnlNm || null, + input.filePath || null, + input.lon || null, + input.lat || null, + input.locDc || null, + input.equipTpCd || null, + input.equipNm || null, + input.mediaTpCd || null, + input.takngDtm || null, + input.fileSz || null, + input.resolution || null, + ] + ); + + return { aerialMediaSn: rows[0].aerial_media_sn }; +} + +// ============================================================ +// CCTV_CAMERA +// ============================================================ + +interface CctvCameraItem { + cctvSn: number; + cameraNm: string; + regionNm: string | null; + lon: number | null; + lat: number | null; + locDc: string | null; + coordDc: string | null; + sttsCd: string; + ptzYn: string; + sourceNm: string | null; + streamUrl: string | null; + regDtm: string; +} + +interface ListCctvInput { + region?: string; + status?: string; +} + +function rowToCctv(r: Record): CctvCameraItem { + return { + cctvSn: r.cctv_sn as number, + cameraNm: r.camera_nm as string, + regionNm: r.region_nm as string | null, + lon: r.lon ? parseFloat(r.lon as string) : null, + lat: r.lat ? parseFloat(r.lat as string) : null, + locDc: r.loc_dc as string | null, + coordDc: r.coord_dc as string | null, + sttsCd: r.stts_cd as string, + ptzYn: r.ptz_yn as string, + sourceNm: r.source_nm as string | null, + streamUrl: r.stream_url as string | null, + regDtm: r.reg_dtm as string, + }; +} + +export async function listCctv(input: ListCctvInput): Promise { + const conditions: string[] = ["USE_YN = 'Y'"]; + const params: string[] = []; + let idx = 1; + + if (input.region) { + conditions.push(`REGION_NM = $${idx++}`); + params.push(input.region); + } + if (input.status) { + conditions.push(`STTS_CD = $${idx++}`); + params.push(input.status); + } + + const { rows } = await wingPool.query( + `SELECT CCTV_SN, CAMERA_NM, REGION_NM, LON, LAT, + LOC_DC, COORD_DC, STTS_CD, PTZ_YN, SOURCE_NM, STREAM_URL, REG_DTM + FROM CCTV_CAMERA + WHERE ${conditions.join(' AND ')} + ORDER BY REGION_NM, CAMERA_NM`, + params + ); + + return rows.map((r: Record) => rowToCctv(r)); +} + +// ============================================================ +// SAT_REQUEST +// ============================================================ + +interface SatRequestItem { + satReqSn: number; + reqCd: string; + acdntSn: number | null; + lon: number | null; + lat: number | null; + zoneDc: string | null; + coordDc: string | null; + zoneAreaKm2: number | null; + satNm: string | null; + providerNm: string | null; + resolution: string | null; + purposeDc: string | null; + reqstrNm: string | null; + reqDtm: string | null; + expectedRcvDtm: string | null; + sttsCd: string; + regDtm: string; +} + +interface ListSatRequestsInput { + status?: string; +} + +function rowToSatRequest(r: Record): SatRequestItem { + return { + satReqSn: r.sat_req_sn as number, + reqCd: r.req_cd as string, + acdntSn: r.acdnt_sn as number | null, + lon: r.lon ? parseFloat(r.lon as string) : null, + lat: r.lat ? parseFloat(r.lat as string) : null, + zoneDc: r.zone_dc as string | null, + coordDc: r.coord_dc as string | null, + zoneAreaKm2: r.zone_area_km2 ? parseFloat(r.zone_area_km2 as string) : null, + satNm: r.sat_nm as string | null, + providerNm: r.provider_nm as string | null, + resolution: r.resolution as string | null, + purposeDc: r.purpose_dc as string | null, + reqstrNm: r.reqstr_nm as string | null, + reqDtm: r.req_dtm as string | null, + expectedRcvDtm: r.expected_rcv_dtm as string | null, + sttsCd: r.stts_cd as string, + regDtm: r.reg_dtm as string, + }; +} + +export async function listSatRequests(input: ListSatRequestsInput): Promise { + const conditions: string[] = ["USE_YN = 'Y'"]; + const params: string[] = []; + let idx = 1; + + if (input.status) { + conditions.push(`STTS_CD = $${idx++}`); + params.push(input.status); + } + + const { rows } = await wingPool.query( + `SELECT SAT_REQ_SN, REQ_CD, ACDNT_SN, LON, LAT, + ZONE_DC, COORD_DC, ZONE_AREA_KM2, SAT_NM, PROVIDER_NM, + RESOLUTION, PURPOSE_DC, REQSTR_NM, + REQ_DTM, EXPECTED_RCV_DTM, STTS_CD, REG_DTM + FROM SAT_REQUEST + WHERE ${conditions.join(' AND ')} + ORDER BY REQ_DTM DESC NULLS LAST`, + params + ); + + return rows.map((r: Record) => rowToSatRequest(r)); +} + +export async function createSatRequest(input: { + reqCd: string; + acdntSn?: number; + lon?: number; + lat?: number; + zoneDc?: string; + coordDc?: string; + zoneAreaKm2?: number; + satNm?: string; + providerNm?: string; + resolution?: string; + purposeDc?: string; + reqstrNm?: string; + reqDtm?: string; + expectedRcvDtm?: string; +}): Promise<{ satReqSn: number }> { + const { rows } = await wingPool.query( + `INSERT INTO SAT_REQUEST ( + REQ_CD, ACDNT_SN, LON, LAT, + GEOM, + ZONE_DC, COORD_DC, ZONE_AREA_KM2, + SAT_NM, PROVIDER_NM, RESOLUTION, + PURPOSE_DC, REQSTR_NM, REQ_DTM, EXPECTED_RCV_DTM + ) VALUES ( + $1, $2, $3, $4, + CASE WHEN $3 IS NOT NULL AND $4 IS NOT NULL THEN ST_SetSRID(ST_MakePoint($3::float, $4::float), 4326) END, + $5, $6, $7, + $8, $9, $10, + $11, $12, $13, $14 + ) RETURNING SAT_REQ_SN`, + [ + input.reqCd, + input.acdntSn || null, + input.lon || null, + input.lat || null, + input.zoneDc || null, + input.coordDc || null, + input.zoneAreaKm2 || null, + input.satNm || null, + input.providerNm || null, + input.resolution || null, + input.purposeDc || null, + input.reqstrNm || null, + input.reqDtm || null, + input.expectedRcvDtm || null, + ] + ); + + return { satReqSn: rows[0].sat_req_sn }; +} + +const VALID_SAT_STATUSES = ['PENDING', 'SHOOTING', 'COMPLETED', 'CANCELLED'] as const; +type SatStatus = typeof VALID_SAT_STATUSES[number]; + +export function isValidSatStatus(value: string): value is SatStatus { + return (VALID_SAT_STATUSES as readonly string[]).includes(value); +} + +export async function updateSatRequestStatus(sn: number, sttsCd: string): Promise { + await wingPool.query( + `UPDATE SAT_REQUEST SET STTS_CD = $1 WHERE SAT_REQ_SN = $2 AND USE_YN = 'Y'`, + [sttsCd, sn] + ); +} diff --git a/backend/src/board/boardRouter.ts b/backend/src/board/boardRouter.ts index e854c5c..39f2d39 100644 --- a/backend/src/board/boardRouter.ts +++ b/backend/src/board/boardRouter.ts @@ -1,7 +1,10 @@ import { Router } from 'express' import { requireAuth, requirePermission } from '../auth/authMiddleware.js' import { AuthError } from '../auth/authService.js' -import { listPosts, getPost, createPost, updatePost, deletePost } from './boardService.js' +import { + listPosts, getPost, createPost, updatePost, deletePost, + listManuals, createManual, updateManual, deleteManual, incrementManualDownload, +} from './boardService.js' const router = Router() @@ -14,8 +17,88 @@ const CATEGORY_RESOURCE: Record = { } // ============================================================ -// GET /api/board — 게시글 목록 +// 매뉴얼 라우트 (/:sn 보다 먼저 등록해야 함) // ============================================================ + +// GET /api/board/manual — 매뉴얼 목록 +router.get('/manual', requireAuth, requirePermission('board:manual', 'READ'), async (req, res) => { + try { + const { category, search } = req.query + const items = await listManuals({ + category: category as string | undefined, + search: search as string | undefined, + }) + res.json(items) + } catch (err) { + console.error('[board] 매뉴얼 목록 오류:', err) + res.status(500).json({ error: '매뉴얼 목록 조회 중 오류가 발생했습니다.' }) + } +}) + +// POST /api/board/manual — 매뉴얼 등록 +router.post('/manual', requireAuth, requirePermission('board:manual', 'CREATE'), async (req, res) => { + try { + const { catgNm, title, version, fileTp, fileSz, filePath, authorNm } = req.body + if (!catgNm || !title) { + res.status(400).json({ error: '카테고리와 제목은 필수입니다.' }) + return + } + const result = await createManual({ catgNm, title, version, fileTp, fileSz, filePath, authorNm }) + res.status(201).json(result) + } catch (err) { + if (err instanceof AuthError) { res.status(err.status).json({ error: err.message }); return } + console.error('[board] 매뉴얼 등록 오류:', err) + res.status(500).json({ error: '매뉴얼 등록 중 오류가 발생했습니다.' }) + } +}) + +// PUT /api/board/manual/:sn — 매뉴얼 수정 +router.put('/manual/:sn', requireAuth, requirePermission('board:manual', 'UPDATE'), async (req, res) => { + try { + const sn = parseInt(req.params.sn as string, 10) + if (isNaN(sn)) { res.status(400).json({ error: '유효하지 않은 매뉴얼 번호입니다.' }); return } + const { catgNm, title, version, fileTp, fileSz, filePath } = req.body + await updateManual(sn, { catgNm, title, version, fileTp, fileSz, filePath }) + res.json({ success: true }) + } catch (err) { + if (err instanceof AuthError) { res.status(err.status).json({ error: err.message }); return } + console.error('[board] 매뉴얼 수정 오류:', err) + res.status(500).json({ error: '매뉴얼 수정 중 오류가 발생했습니다.' }) + } +}) + +// DELETE /api/board/manual/:sn — 매뉴얼 삭제 +router.delete('/manual/:sn', requireAuth, requirePermission('board:manual', 'DELETE'), async (req, res) => { + try { + const sn = parseInt(req.params.sn as string, 10) + if (isNaN(sn)) { res.status(400).json({ error: '유효하지 않은 매뉴얼 번호입니다.' }); return } + await deleteManual(sn) + res.json({ success: true }) + } catch (err) { + if (err instanceof AuthError) { res.status(err.status).json({ error: err.message }); return } + console.error('[board] 매뉴얼 삭제 오류:', err) + res.status(500).json({ error: '매뉴얼 삭제 중 오류가 발생했습니다.' }) + } +}) + +// POST /api/board/manual/:sn/download — 매뉴얼 다운로드 카운트 증가 +router.post('/manual/:sn/download', requireAuth, requirePermission('board:manual', 'READ'), async (req, res) => { + try { + const sn = parseInt(req.params.sn as string, 10) + if (isNaN(sn)) { res.status(400).json({ error: '유효하지 않은 매뉴얼 번호입니다.' }); return } + await incrementManualDownload(sn) + res.json({ success: true }) + } catch (err) { + console.error('[board] 다운로드 카운트 오류:', err) + res.status(500).json({ error: '다운로드 처리 중 오류가 발생했습니다.' }) + } +}) + +// ============================================================ +// 게시글 라우트 +// ============================================================ + +// GET /api/board — 게시글 목록 router.get('/', requireAuth, requirePermission('board', 'READ'), async (req, res) => { try { const { categoryCd, search, page, size } = req.query @@ -32,9 +115,7 @@ router.get('/', requireAuth, requirePermission('board', 'READ'), async (req, res } }) -// ============================================================ // GET /api/board/:sn — 게시글 상세 -// ============================================================ router.get('/:sn', requireAuth, requirePermission('board', 'READ'), async (req, res) => { try { const sn = parseInt(req.params.sn as string, 10) @@ -54,9 +135,7 @@ router.get('/:sn', requireAuth, requirePermission('board', 'READ'), async (req, } }) -// ============================================================ // POST /api/board — 게시글 작성 (카테고리별 CREATE 권한) -// ============================================================ router.post('/', requireAuth, async (req, res, next) => { const resource = CATEGORY_RESOURCE[req.body.categoryCd] || 'board' requirePermission(resource, 'CREATE')(req, res, next) @@ -87,9 +166,7 @@ router.post('/', requireAuth, async (req, res, next) => { } }) -// ============================================================ // PUT /api/board/:sn — 게시글 수정 (소유자 검증은 서비스에서) -// ============================================================ router.put('/:sn', requireAuth, requirePermission('board', 'UPDATE'), async (req, res) => { try { const sn = parseInt(req.params.sn as string, 10) @@ -111,9 +188,7 @@ router.put('/:sn', requireAuth, requirePermission('board', 'UPDATE'), async (req } }) -// ============================================================ // DELETE /api/board/:sn — 게시글 삭제 (논리 삭제, 소유자 검증) -// ============================================================ router.delete('/:sn', requireAuth, requirePermission('board', 'DELETE'), async (req, res) => { try { const sn = parseInt(req.params.sn as string, 10) diff --git a/backend/src/board/boardService.ts b/backend/src/board/boardService.ts index 1b554a7..d09fce5 100644 --- a/backend/src/board/boardService.ts +++ b/backend/src/board/boardService.ts @@ -220,6 +220,163 @@ export async function updatePost( ) } +// ============================================================ +// 매뉴얼 CRUD +// ============================================================ + +interface ManualItem { + manualSn: number + catgNm: string + title: string + version: string | null + fileTp: string | null + fileSz: string | null + filePath: string | null + authorNm: string | null + dwnldCnt: number + regDtm: string +} + +interface ListManualsInput { + category?: string + search?: string +} + +interface CreateManualInput { + catgNm: string + title: string + version?: string + fileTp?: string + fileSz?: string + filePath?: string + authorNm?: string +} + +interface UpdateManualInput { + catgNm?: string + title?: string + version?: string + fileTp?: string + fileSz?: string + filePath?: string +} + +function rowToManual(r: Record): ManualItem { + return { + manualSn: r.manual_sn as number, + catgNm: r.catg_nm as string, + title: r.title as string, + version: r.version as string | null, + fileTp: r.file_tp as string | null, + fileSz: r.file_sz as string | null, + filePath: r.file_path as string | null, + authorNm: r.author_nm as string | null, + dwnldCnt: r.dwnld_cnt as number, + regDtm: r.reg_dtm as string, + } +} + +export async function listManuals(input: ListManualsInput): Promise { + const conditions: string[] = ["USE_YN = 'Y'"] + const params: string[] = [] + let idx = 1 + + if (input.category) { + conditions.push(`CATG_NM = $${idx++}`) + params.push(input.category) + } + if (input.search) { + conditions.push(`(TITLE ILIKE $${idx} OR AUTHOR_NM ILIKE $${idx})`) + params.push(`%${input.search}%`) + idx++ + } + + const { rows } = await wingPool.query( + `SELECT MANUAL_SN, CATG_NM, TITLE, VERSION, FILE_TP, FILE_SZ, + FILE_PATH, AUTHOR_NM, DWNLD_CNT, REG_DTM + FROM MANUAL_FILE + WHERE ${conditions.join(' AND ')} + ORDER BY REG_DTM DESC`, + params + ) + + return rows.map((r: Record) => rowToManual(r)) +} + +export async function createManual(input: CreateManualInput): Promise<{ manualSn: number }> { + if (!input.title || input.title.trim().length === 0) { + throw new AuthError('제목은 필수입니다.', 400) + } + + const { rows } = await wingPool.query( + `INSERT INTO MANUAL_FILE (CATG_NM, TITLE, VERSION, FILE_TP, FILE_SZ, FILE_PATH, AUTHOR_NM) + VALUES ($1, $2, $3, $4, $5, $6, $7) + RETURNING MANUAL_SN`, + [input.catgNm, input.title.trim(), input.version || null, input.fileTp || null, input.fileSz || null, input.filePath || null, input.authorNm || null] + ) + + return { manualSn: rows[0].manual_sn } +} + +export async function updateManual(manualSn: number, input: UpdateManualInput): Promise { + const existing = await wingPool.query( + `SELECT MANUAL_SN FROM MANUAL_FILE WHERE MANUAL_SN = $1 AND USE_YN = 'Y'`, + [manualSn] + ) + if (existing.rows.length === 0) { + throw new AuthError('매뉴얼을 찾을 수 없습니다.', 404) + } + + const sets: string[] = [] + const params: (string | number | null)[] = [] + let idx = 1 + + if (input.catgNm !== undefined) { sets.push(`CATG_NM = $${idx++}`); params.push(input.catgNm) } + if (input.title !== undefined) { sets.push(`TITLE = $${idx++}`); params.push(input.title.trim()) } + if (input.version !== undefined) { sets.push(`VERSION = $${idx++}`); params.push(input.version) } + if (input.fileTp !== undefined) { sets.push(`FILE_TP = $${idx++}`); params.push(input.fileTp) } + if (input.fileSz !== undefined) { sets.push(`FILE_SZ = $${idx++}`); params.push(input.fileSz) } + if (input.filePath !== undefined) { sets.push(`FILE_PATH = $${idx++}`); params.push(input.filePath) } + + if (sets.length === 0) { + throw new AuthError('수정할 항목이 없습니다.', 400) + } + + sets.push('MDFCN_DTM = NOW()') + params.push(manualSn) + + await wingPool.query( + `UPDATE MANUAL_FILE SET ${sets.join(', ')} WHERE MANUAL_SN = $${idx}`, + params + ) +} + +export async function deleteManual(manualSn: number): Promise { + const existing = await wingPool.query( + `SELECT MANUAL_SN FROM MANUAL_FILE WHERE MANUAL_SN = $1 AND USE_YN = 'Y'`, + [manualSn] + ) + if (existing.rows.length === 0) { + throw new AuthError('매뉴얼을 찾을 수 없습니다.', 404) + } + + await wingPool.query( + `UPDATE MANUAL_FILE SET USE_YN = 'N', MDFCN_DTM = NOW() WHERE MANUAL_SN = $1`, + [manualSn] + ) +} + +export async function incrementManualDownload(manualSn: number): Promise { + await wingPool.query( + `UPDATE MANUAL_FILE SET DWNLD_CNT = DWNLD_CNT + 1 WHERE MANUAL_SN = $1 AND USE_YN = 'Y'`, + [manualSn] + ) +} + +// ============================================================ +// 게시글 삭제 +// ============================================================ + export async function deletePost(postSn: number, requesterId: string): Promise { // 게시글 존재 + 작성자 확인 const existing = await wingPool.query( diff --git a/backend/src/hns/hnsRouter.ts b/backend/src/hns/hnsRouter.ts index 68aff33..fa34ab3 100644 --- a/backend/src/hns/hnsRouter.ts +++ b/backend/src/hns/hnsRouter.ts @@ -1,9 +1,88 @@ import express from 'express' -import { searchSubstances, getSubstanceById } from './hnsService.js' +import { searchSubstances, getSubstanceById, listAnalyses, getAnalysis, createAnalysis, deleteAnalysis } from './hnsService.js' import { isValidNumber } from '../middleware/security.js' +import { requireAuth, requirePermission } from '../auth/authMiddleware.js' const router = express.Router() +// ============================================================ +// HNS 분석 라우트 (/:id 보다 먼저 등록) +// ============================================================ + +// GET /api/hns/analyses — 분석 목록 +router.get('/analyses', requireAuth, requirePermission('hns', 'READ'), async (req, res) => { + try { + const { status, substance, search } = req.query + const items = await listAnalyses({ + status: status as string | undefined, + substance: substance as string | undefined, + search: search as string | undefined, + }) + res.json(items) + } catch (err) { + console.error('[hns] 분석 목록 오류:', err) + res.status(500).json({ error: 'HNS 분석 목록 조회 실패' }) + } +}) + +// GET /api/hns/analyses/:sn — 분석 상세 +router.get('/analyses/:sn', requireAuth, requirePermission('hns', 'READ'), async (req, res) => { + try { + const sn = parseInt(req.params.sn as string, 10) + if (!isValidNumber(sn, 1, 999999)) { + res.status(400).json({ error: '유효하지 않은 분석 번호' }) + return + } + const item = await getAnalysis(sn) + if (!item) { + res.status(404).json({ error: '분석을 찾을 수 없습니다' }) + return + } + res.json(item) + } catch (err) { + console.error('[hns] 분석 상세 오류:', err) + res.status(500).json({ error: 'HNS 분석 조회 실패' }) + } +}) + +// POST /api/hns/analyses — 분석 생성 +router.post('/analyses', requireAuth, requirePermission('hns', 'CREATE'), async (req, res) => { + try { + const { anlysNm, acdntDtm, locNm, lon, lat, sbstNm, spilQty, spilUnitCd, fcstHr, algoCd, critMdlCd, windSpd, windDir, temp, humid, atmStblCd, analystNm } = req.body + if (!anlysNm) { + res.status(400).json({ error: '분석명은 필수입니다.' }) + return + } + const result = await createAnalysis({ + anlysNm, acdntDtm, locNm, lon, lat, sbstNm, spilQty, spilUnitCd, fcstHr, algoCd, critMdlCd, windSpd, windDir, temp, humid, atmStblCd, analystNm, + }) + res.status(201).json(result) + } catch (err) { + console.error('[hns] 분석 생성 오류:', err) + res.status(500).json({ error: 'HNS 분석 생성 실패' }) + } +}) + +// DELETE /api/hns/analyses/:sn — 분석 삭제 +router.delete('/analyses/:sn', requireAuth, requirePermission('hns', 'DELETE'), async (req, res) => { + try { + const sn = parseInt(req.params.sn as string, 10) + if (!isValidNumber(sn, 1, 999999)) { + res.status(400).json({ error: '유효하지 않은 분석 번호' }) + return + } + await deleteAnalysis(sn) + res.json({ success: true }) + } catch (err) { + console.error('[hns] 분석 삭제 오류:', err) + res.status(500).json({ error: 'HNS 분석 삭제 실패' }) + } +}) + +// ============================================================ +// HNS 물질 라우트 +// ============================================================ + // HNS 물질 검색 router.get('/', async (req, res) => { try { diff --git a/backend/src/hns/hnsService.ts b/backend/src/hns/hnsService.ts index 5e5fe11..e130524 100644 --- a/backend/src/hns/hnsService.ts +++ b/backend/src/hns/hnsService.ts @@ -88,6 +88,163 @@ export async function searchSubstances(params: HnsSearchParams) { } } +// ============================================================ +// HNS 분석 CRUD +// ============================================================ + +interface HnsAnalysisItem { + hnsAnlysSn: number + anlysNm: string + acdntDtm: string | null + locNm: string | null + lon: number | null + lat: number | null + sbstNm: string | null + spilQty: number | null + spilUnitCd: string | null + fcstHr: number | null + algoCd: string | null + critMdlCd: string | null + windSpd: number | null + windDir: string | null + execSttsCd: string + riskCd: string | null + analystNm: string | null + rsltData: Record | null + regDtm: string +} + +interface ListAnalysesInput { + status?: string + substance?: string + search?: string +} + +function rowToAnalysis(r: Record): HnsAnalysisItem { + return { + hnsAnlysSn: r.hns_anlys_sn as number, + anlysNm: r.anlys_nm as string, + acdntDtm: r.acdnt_dtm as string | null, + locNm: r.loc_nm as string | null, + lon: r.lon ? parseFloat(r.lon as string) : null, + lat: r.lat ? parseFloat(r.lat as string) : null, + sbstNm: r.sbst_nm as string | null, + spilQty: r.spil_qty ? parseFloat(r.spil_qty as string) : null, + spilUnitCd: r.spil_unit_cd as string | null, + fcstHr: r.fcst_hr as number | null, + algoCd: r.algo_cd as string | null, + critMdlCd: r.crit_mdl_cd as string | null, + windSpd: r.wind_spd ? parseFloat(r.wind_spd as string) : null, + windDir: r.wind_dir as string | null, + execSttsCd: r.exec_stts_cd as string, + riskCd: r.risk_cd as string | null, + analystNm: r.analyst_nm as string | null, + rsltData: (r.rslt_data as Record) ?? null, + regDtm: r.reg_dtm as string, + } +} + +export async function listAnalyses(input: ListAnalysesInput): Promise { + const conditions: string[] = ["USE_YN = 'Y'"] + const params: string[] = [] + let idx = 1 + + if (input.status) { + conditions.push(`EXEC_STTS_CD = $${idx++}`) + params.push(input.status) + } + if (input.substance) { + conditions.push(`SBST_NM ILIKE '%' || $${idx++} || '%'`) + params.push(input.substance) + } + if (input.search) { + conditions.push(`(ANLYS_NM ILIKE '%' || $${idx} || '%' OR LOC_NM ILIKE '%' || $${idx} || '%')`) + params.push(input.search) + idx++ + } + + const { rows } = await wingPool.query( + `SELECT HNS_ANLYS_SN, ANLYS_NM, ACDNT_DTM, LOC_NM, LON, LAT, + SBST_NM, SPIL_QTY, SPIL_UNIT_CD, FCST_HR, ALGO_CD, CRIT_MDL_CD, + WIND_SPD, WIND_DIR, EXEC_STTS_CD, RISK_CD, ANALYST_NM, + RSLT_DATA, REG_DTM + FROM HNS_ANALYSIS + WHERE ${conditions.join(' AND ')} + ORDER BY ACDNT_DTM DESC NULLS LAST`, + params + ) + + return rows.map((r: Record) => rowToAnalysis(r)) +} + +export async function getAnalysis(sn: number): Promise { + const { rows } = await wingPool.query( + `SELECT HNS_ANLYS_SN, ANLYS_NM, ACDNT_DTM, LOC_NM, LON, LAT, + SBST_NM, SPIL_QTY, SPIL_UNIT_CD, FCST_HR, ALGO_CD, CRIT_MDL_CD, + WIND_SPD, WIND_DIR, TEMP, HUMID, ATM_STBL_CD, + EXEC_STTS_CD, RISK_CD, ANALYST_NM, + RSLT_DATA, REG_DTM + FROM HNS_ANALYSIS + WHERE HNS_ANLYS_SN = $1 AND USE_YN = 'Y'`, + [sn] + ) + if (rows.length === 0) return null + return rowToAnalysis(rows[0] as Record) +} + +export async function createAnalysis(input: { + anlysNm: string + acdntDtm?: string + locNm?: string + lon?: number + lat?: number + sbstNm?: string + spilQty?: number + spilUnitCd?: string + fcstHr?: number + algoCd?: string + critMdlCd?: string + windSpd?: number + windDir?: string + temp?: number + humid?: number + atmStblCd?: string + analystNm?: string +}): Promise<{ hnsAnlysSn: number }> { + const { rows } = await wingPool.query( + `INSERT INTO HNS_ANALYSIS ( + ANLYS_NM, ACDNT_DTM, LOC_NM, LON, LAT, + GEOM, LOC_DC, + SBST_NM, SPIL_QTY, SPIL_UNIT_CD, FCST_HR, ALGO_CD, CRIT_MDL_CD, + WIND_SPD, WIND_DIR, TEMP, HUMID, ATM_STBL_CD, + ANALYST_NM, EXEC_STTS_CD + ) VALUES ( + $1, $2, $3, $4, $5, + CASE WHEN $4 IS NOT NULL AND $5 IS NOT NULL THEN ST_SetSRID(ST_MakePoint($4::float, $5::float), 4326) END, + CASE WHEN $4 IS NOT NULL AND $5 IS NOT NULL THEN $4 || ' + ' || $5 END, + $6, $7, $8, $9, $10, $11, + $12, $13, $14, $15, $16, + $17, 'PENDING' + ) RETURNING HNS_ANLYS_SN`, + [ + input.anlysNm, input.acdntDtm || null, input.locNm || null, input.lon || null, input.lat || null, + input.sbstNm || null, input.spilQty || null, input.spilUnitCd || 'KL', + input.fcstHr || null, input.algoCd || null, input.critMdlCd || null, + input.windSpd || null, input.windDir || null, input.temp || null, input.humid || null, input.atmStblCd || null, + input.analystNm || null, + ] + ) + + return { hnsAnlysSn: rows[0].hns_anlys_sn } +} + +export async function deleteAnalysis(sn: number): Promise { + await wingPool.query( + `UPDATE HNS_ANALYSIS SET USE_YN = 'N', MDFCN_DTM = NOW() WHERE HNS_ANLYS_SN = $1`, + [sn] + ) +} + export async function getSubstanceById(id: number) { const { rows } = await wingPool.query( `SELECT SBST_SN, ABBREVIATION, NM_KR, NM_EN, UN_NO, CAS_NO, SEBC, DATA diff --git a/backend/src/prediction/predictionRouter.ts b/backend/src/prediction/predictionRouter.ts new file mode 100644 index 0000000..c6802e4 --- /dev/null +++ b/backend/src/prediction/predictionRouter.ts @@ -0,0 +1,127 @@ +import express from 'express'; +import { + listAnalyses, getAnalysisDetail, getBacktrack, listBacktracksByAcdnt, + createBacktrack, saveBoomLine, listBoomLines, +} from './predictionService.js'; +import { isValidNumber } from '../middleware/security.js'; +import { requireAuth, requirePermission } from '../auth/authMiddleware.js'; + +const router = express.Router(); + +// GET /api/prediction/analyses — 분석 목록 +router.get('/analyses', requireAuth, requirePermission('prediction', 'READ'), async (req, res) => { + try { + const { search } = req.query; + const items = await listAnalyses({ search: search as string | undefined }); + res.json(items); + } catch (err) { + console.error('[prediction] 분석 목록 오류:', err); + res.status(500).json({ error: '분석 목록 조회 실패' }); + } +}); + +// GET /api/prediction/analyses/:acdntSn — 분석 상세 +router.get('/analyses/:acdntSn', requireAuth, requirePermission('prediction', 'READ'), async (req, res) => { + try { + const acdntSn = parseInt(req.params.acdntSn as string, 10); + if (!isValidNumber(acdntSn, 1, 999999)) { + res.status(400).json({ error: '유효하지 않은 사고 번호' }); + return; + } + const detail = await getAnalysisDetail(acdntSn); + if (!detail) { + res.status(404).json({ error: '분석을 찾을 수 없습니다' }); + return; + } + res.json(detail); + } catch (err) { + console.error('[prediction] 분석 상세 오류:', err); + res.status(500).json({ error: '분석 상세 조회 실패' }); + } +}); + +// GET /api/prediction/backtrack — 사고별 역추적 목록 +router.get('/backtrack', requireAuth, requirePermission('prediction', 'READ'), async (req, res) => { + try { + const acdntSn = parseInt(req.query.acdntSn as string, 10); + if (!isValidNumber(acdntSn, 1, 999999)) { + res.status(400).json({ error: '유효하지 않은 사고 번호' }); + return; + } + const items = await listBacktracksByAcdnt(acdntSn); + res.json(items); + } catch (err) { + console.error('[prediction] 역추적 목록 오류:', err); + res.status(500).json({ error: '역추적 목록 조회 실패' }); + } +}); + +// GET /api/prediction/backtrack/:sn — 역추적 상세 +router.get('/backtrack/:sn', requireAuth, requirePermission('prediction', 'READ'), async (req, res) => { + try { + const sn = parseInt(req.params.sn as string, 10); + if (!isValidNumber(sn, 1, 999999)) { + res.status(400).json({ error: '유효하지 않은 역추적 번호' }); + return; + } + const item = await getBacktrack(sn); + if (!item) { + res.status(404).json({ error: '역추적 결과를 찾을 수 없습니다' }); + return; + } + res.json(item); + } catch (err) { + console.error('[prediction] 역추적 상세 오류:', err); + res.status(500).json({ error: '역추적 조회 실패' }); + } +}); + +// POST /api/prediction/backtrack — 역추적 생성 +router.post('/backtrack', requireAuth, requirePermission('prediction', 'CREATE'), async (req, res) => { + try { + const { acdntSn, lat, lon, estSpilDtm, anlysRange, srchRadiusNm } = req.body; + if (!acdntSn || !lat || !lon) { + res.status(400).json({ error: '사고번호, 위도, 경도는 필수입니다' }); + return; + } + const result = await createBacktrack({ acdntSn, lat, lon, estSpilDtm, anlysRange, srchRadiusNm }); + res.status(201).json(result); + } catch (err) { + console.error('[prediction] 역추적 생성 오류:', err); + res.status(500).json({ error: '역추적 생성 실패' }); + } +}); + +// GET /api/prediction/boom/:acdntSn — 오일펜스 목록 +router.get('/boom/:acdntSn', requireAuth, requirePermission('prediction', 'READ'), async (req, res) => { + try { + const acdntSn = parseInt(req.params.acdntSn as string, 10); + if (!isValidNumber(acdntSn, 1, 999999)) { + res.status(400).json({ error: '유효하지 않은 사고 번호' }); + return; + } + const items = await listBoomLines(acdntSn); + res.json(items); + } catch (err) { + console.error('[prediction] 오일펜스 목록 오류:', err); + res.status(500).json({ error: '오일펜스 목록 조회 실패' }); + } +}); + +// POST /api/prediction/boom — 오일펜스 저장 +router.post('/boom', requireAuth, requirePermission('prediction', 'CREATE'), async (req, res) => { + try { + const { acdntSn, boomNm, priorityOrd, geojson, lengthM, efficiencyPct } = req.body; + if (!acdntSn || !boomNm || !geojson) { + res.status(400).json({ error: '사고번호, 이름, GeoJSON은 필수입니다' }); + return; + } + const result = await saveBoomLine({ acdntSn, boomNm, priorityOrd, geojson, lengthM, efficiencyPct }); + res.status(201).json(result); + } catch (err) { + console.error('[prediction] 오일펜스 저장 오류:', err); + res.status(500).json({ error: '오일펜스 저장 실패' }); + } +}); + +export default router; diff --git a/backend/src/prediction/predictionService.ts b/backend/src/prediction/predictionService.ts new file mode 100644 index 0000000..e46afd3 --- /dev/null +++ b/backend/src/prediction/predictionService.ts @@ -0,0 +1,429 @@ +import { wingPool } from '../db/wingDb.js'; + +interface PredictionAnalysis { + acdntSn: number; + acdntNm: string; + occurredAt: string; + analysisDate: string; + requestor: string; + duration: string; + oilType: string; + volume: number | null; + location: string; + lat: number | null; + lon: number | null; + kospsStatus: string; + poseidonStatus: string; + opendriftStatus: string; + backtrackStatus: string; + analyst: string; + officeName: string; +} + +interface PredictionDetail { + acdnt: { + acdntSn: number; + acdntNm: string; + occurredAt: string; + lat: number | null; + lon: number | null; + location: string; + analyst: string; + officeName: string; + }; + spill: { + oilType: string; + volume: number | null; + unit: string; + fcstHr: number | null; + } | null; + vessels: Array<{ + vesselInfoSn: number; + imoNo: string; + vesselNm: string; + vesselTp: string; + loaM: number | null; + breadthM: number | null; + draftM: number | null; + gt: number | null; + dwt: number | null; + builtYr: number | null; + flagCd: string; + callsign: string; + engineDc: string; + insuranceData: unknown; + }>; + weather: Array<{ + obsDtm: string; + locNm: string; + temp: string; + weatherDc: string; + wind: string; + wave: string; + humid: string; + vis: string; + sst: string; + }>; +} + +interface BacktrackResult { + backtrackSn: number; + acdntSn: number; + estSpilDtm: string | null; + anlysRange: string | null; + lon: number | null; + lat: number | null; + srchRadiusNm: number | null; + totalVessels: number | null; + execSttsCd: string; + rsltData: unknown; + regDtm: string; +} + +interface CreateBacktrackInput { + acdntSn: number; + lat: number; + lon: number; + estSpilDtm?: string; + anlysRange?: string; + srchRadiusNm?: number; +} + +interface SaveBoomLineInput { + acdntSn: number; + boomNm: string; + priorityOrd?: number; + geojson: unknown; + lengthM?: number; + efficiencyPct?: number; +} + +interface BoomLineItem { + boomLineSn: number; + acdntSn: number; + boomNm: string; + priorityOrd: number; + geom: unknown; + lengthM: number | null; + efficiencyPct: number | null; + sttsCd: string; + regDtm: string; +} + +interface ListAnalysesInput { + search?: string; +} + +export async function listAnalyses(input: ListAnalysesInput): Promise { + const params: unknown[] = []; + const conditions: string[] = ["A.USE_YN = 'Y'"]; + + if (input.search) { + params.push(`%${input.search}%`); + conditions.push(`(A.ACDNT_NM ILIKE $${params.length} OR A.LOC_DC ILIKE $${params.length})`); + } + + const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : ''; + + const sql = ` + SELECT + A.ACDNT_SN, + A.ACDNT_NM, + A.OCCRN_DTM, + A.LAT, + A.LNG, + A.LOC_DC, + A.ANALYST_NM, + A.OFFICE_NM, + A.REGION_NM, + S.OIL_TP_CD, + S.SPIL_QTY, + S.SPIL_UNIT_CD, + S.FCST_HR, + P.KOSPS_STATUS, + P.POSEIDON_STATUS, + P.OPENDRIFT_STATUS, + B.BACKTRACK_STATUS + FROM ACDNT A + LEFT JOIN SPIL_DATA S ON S.ACDNT_SN = A.ACDNT_SN + LEFT JOIN ( + SELECT + ACDNT_SN, + MAX(CASE WHEN ALGO_CD = 'KOSPS' THEN EXEC_STTS_CD END) AS KOSPS_STATUS, + MAX(CASE WHEN ALGO_CD = 'POSEIDON' THEN EXEC_STTS_CD END) AS POSEIDON_STATUS, + MAX(CASE WHEN ALGO_CD = 'OPENDRIFT' THEN EXEC_STTS_CD END) AS OPENDRIFT_STATUS + FROM PRED_EXEC + GROUP BY ACDNT_SN + ) P ON P.ACDNT_SN = A.ACDNT_SN + LEFT JOIN ( + SELECT + ACDNT_SN, + MAX(CASE WHEN B.EXEC_STTS_CD IS NOT NULL THEN B.EXEC_STTS_CD ELSE 'pending' END) AS BACKTRACK_STATUS + FROM BACKTRACK B + GROUP BY ACDNT_SN + ) B ON B.ACDNT_SN = A.ACDNT_SN + ${whereClause} + ORDER BY A.OCCRN_DTM DESC + `; + + const { rows } = await wingPool.query(sql, params); + + return rows.map((row: Record) => ({ + acdntSn: Number(row['acdnt_sn']), + acdntNm: String(row['acdnt_nm'] ?? ''), + occurredAt: row['occrn_dtm'] ? String(row['occrn_dtm']) : '', + analysisDate: row['occrn_dtm'] ? String(row['occrn_dtm']) : '', + requestor: String(row['analyst_nm'] ?? ''), + duration: row['fcst_hr'] != null ? `${row['fcst_hr']}hr` : '', + oilType: String(row['oil_tp_cd'] ?? ''), + volume: row['spil_qty'] != null ? parseFloat(String(row['spil_qty'])) : null, + location: String(row['loc_dc'] ?? ''), + lat: row['lat'] != null ? parseFloat(String(row['lat'])) : null, + lon: row['lng'] != null ? parseFloat(String(row['lng'])) : null, + kospsStatus: String(row['kosps_status'] ?? 'pending').toLowerCase(), + poseidonStatus: String(row['poseidon_status'] ?? 'pending').toLowerCase(), + opendriftStatus: String(row['opendrift_status'] ?? 'pending').toLowerCase(), + backtrackStatus: String(row['backtrack_status'] ?? 'pending').toLowerCase(), + analyst: String(row['analyst_nm'] ?? ''), + officeName: String(row['office_nm'] ?? ''), + })); +} + +export async function getAnalysisDetail(acdntSn: number): Promise { + const acdntSql = ` + SELECT + A.ACDNT_SN, + A.ACDNT_NM, + A.OCCRN_DTM, + A.LAT, + A.LNG, + A.LOC_DC, + A.ANALYST_NM, + A.OFFICE_NM + FROM ACDNT A + WHERE A.ACDNT_SN = $1 + AND A.USE_YN = 'Y' + `; + const { rows: acdntRows } = await wingPool.query(acdntSql, [acdntSn]); + if (acdntRows.length === 0) return null; + + const a = acdntRows[0] as Record; + + const spillSql = ` + SELECT + OIL_TP_CD, + SPIL_QTY, + SPIL_UNIT_CD, + FCST_HR + FROM SPIL_DATA + WHERE ACDNT_SN = $1 + ORDER BY SPIL_DATA_SN ASC + LIMIT 1 + `; + const { rows: spillRows } = await wingPool.query(spillSql, [acdntSn]); + + const vesselSql = ` + SELECT + VESSEL_INFO_SN, + IMO_NO, + VESSEL_NM, + VESSEL_TP, + LOA_M, + BREADTH_M, + DRAFT_M, + GT, + DWT, + BUILT_YR, + FLAG_CD, + CALLSIGN, + ENGINE_DC, + INSURANCE_DATA + FROM VESSEL_INFO + WHERE ACDNT_SN = $1 + ORDER BY VESSEL_INFO_SN ASC + `; + const { rows: vesselRows } = await wingPool.query(vesselSql, [acdntSn]); + + const weatherSql = ` + SELECT + OBS_DTM, + LOC_NM, + TEMP, + WEATHER_DC, + WIND, + WAVE, + HUMID, + VIS, + SST + FROM ACDNT_WEATHER + WHERE ACDNT_SN = $1 + ORDER BY OBS_DTM ASC + `; + const { rows: weatherRows } = await wingPool.query(weatherSql, [acdntSn]); + + const spill = + spillRows.length > 0 + ? (() => { + const s = spillRows[0] as Record; + return { + oilType: String(s['oil_tp_cd'] ?? ''), + volume: s['spil_qty'] != null ? parseFloat(String(s['spil_qty'])) : null, + unit: String(s['spil_unit_cd'] ?? ''), + fcstHr: s['fcst_hr'] != null ? parseFloat(String(s['fcst_hr'])) : null, + }; + })() + : null; + + const vessels = vesselRows.map((v: Record) => ({ + vesselInfoSn: Number(v['vessel_info_sn']), + imoNo: String(v['imo_no'] ?? ''), + vesselNm: String(v['vessel_nm'] ?? ''), + vesselTp: String(v['vessel_tp'] ?? ''), + loaM: v['loa_m'] != null ? parseFloat(String(v['loa_m'])) : null, + breadthM: v['breadth_m'] != null ? parseFloat(String(v['breadth_m'])) : null, + draftM: v['draft_m'] != null ? parseFloat(String(v['draft_m'])) : null, + gt: v['gt'] != null ? parseFloat(String(v['gt'])) : null, + dwt: v['dwt'] != null ? parseFloat(String(v['dwt'])) : null, + builtYr: v['built_yr'] != null ? Number(v['built_yr']) : null, + flagCd: String(v['flag_cd'] ?? ''), + callsign: String(v['callsign'] ?? ''), + engineDc: String(v['engine_dc'] ?? ''), + insuranceData: v['insurance_data'] ?? null, + })); + + const weather = weatherRows.map((w: Record) => ({ + obsDtm: w['obs_dtm'] ? String(w['obs_dtm']) : '', + locNm: String(w['loc_nm'] ?? ''), + temp: String(w['temp'] ?? ''), + weatherDc: String(w['weather_dc'] ?? ''), + wind: String(w['wind'] ?? ''), + wave: String(w['wave'] ?? ''), + humid: String(w['humid'] ?? ''), + vis: String(w['vis'] ?? ''), + sst: String(w['sst'] ?? ''), + })); + + return { + acdnt: { + acdntSn: Number(a['acdnt_sn']), + acdntNm: String(a['acdnt_nm'] ?? ''), + occurredAt: a['occrn_dtm'] ? String(a['occrn_dtm']) : '', + lat: a['lat'] != null ? parseFloat(String(a['lat'])) : null, + lon: a['lng'] != null ? parseFloat(String(a['lng'])) : null, + location: String(a['loc_dc'] ?? ''), + analyst: String(a['analyst_nm'] ?? ''), + officeName: String(a['office_nm'] ?? ''), + }, + spill, + vessels, + weather, + }; +} + +export async function getBacktrack(sn: number): Promise { + const sql = ` + SELECT BACKTRACK_SN, ACDNT_SN, EST_SPIL_DTM, ANLYS_RANGE, + LON, LAT, SRCH_RADIUS_NM, TOTAL_VESSELS, + EXEC_STTS_CD, RSLT_DATA, REG_DTM + FROM BACKTRACK + WHERE BACKTRACK_SN = $1 AND USE_YN = 'Y' + `; + const { rows } = await wingPool.query(sql, [sn]); + if (rows.length === 0) return null; + return rowToBacktrack(rows[0] as Record); +} + +export async function listBacktracksByAcdnt(acdntSn: number): Promise { + const sql = ` + SELECT BACKTRACK_SN, ACDNT_SN, EST_SPIL_DTM, ANLYS_RANGE, + LON, LAT, SRCH_RADIUS_NM, TOTAL_VESSELS, + EXEC_STTS_CD, RSLT_DATA, REG_DTM + FROM BACKTRACK + WHERE ACDNT_SN = $1 AND USE_YN = 'Y' + ORDER BY REG_DTM DESC + `; + const { rows } = await wingPool.query(sql, [acdntSn]); + return rows.map((r: Record) => rowToBacktrack(r)); +} + +function rowToBacktrack(r: Record): BacktrackResult { + return { + backtrackSn: Number(r['backtrack_sn']), + acdntSn: Number(r['acdnt_sn']), + estSpilDtm: r['est_spil_dtm'] ? String(r['est_spil_dtm']) : null, + anlysRange: r['anlys_range'] ? String(r['anlys_range']) : null, + lon: r['lon'] != null ? parseFloat(String(r['lon'])) : null, + lat: r['lat'] != null ? parseFloat(String(r['lat'])) : null, + srchRadiusNm: r['srch_radius_nm'] != null ? parseFloat(String(r['srch_radius_nm'])) : null, + totalVessels: r['total_vessels'] != null ? Number(r['total_vessels']) : null, + execSttsCd: String(r['exec_stts_cd'] ?? ''), + rsltData: r['rslt_data'] ?? null, + regDtm: String(r['reg_dtm'] ?? ''), + }; +} + +export async function createBacktrack( + input: CreateBacktrackInput, +): Promise<{ backtrackSn: number }> { + const { acdntSn, lat, lon, estSpilDtm, anlysRange, srchRadiusNm } = input; + + const sql = ` + INSERT INTO BACKTRACK (ACDNT_SN, LAT, LON, GEOM, LOC_DC, EST_SPIL_DTM, ANLYS_RANGE, SRCH_RADIUS_NM, EXEC_STTS_CD) + VALUES ( + $1, $2, $3, + ST_SetSRID(ST_MakePoint($3::float, $2::float), 4326), + $3 || ' + ' || $2, + $4, $5, $6, 'PENDING' + ) + RETURNING BACKTRACK_SN + `; + + const { rows } = await wingPool.query(sql, [ + acdntSn, lat, lon, + estSpilDtm || null, anlysRange || null, srchRadiusNm || null, + ]); + + return { backtrackSn: Number((rows[0] as Record)['backtrack_sn']) }; +} + +export async function saveBoomLine(input: SaveBoomLineInput): Promise<{ boomLineSn: number }> { + const { acdntSn, boomNm, priorityOrd = 0, geojson, lengthM, efficiencyPct } = input; + + const sql = ` + INSERT INTO BOOM_LINE (ACDNT_SN, BOOM_NM, PRIORITY_ORD, GEOM, LENGTH_M, EFFICIENCY_PCT) + VALUES ($1, $2, $3, ST_GeomFromGeoJSON($4), $5, $6) + RETURNING BOOM_LINE_SN + `; + + const { rows } = await wingPool.query(sql, [ + acdntSn, boomNm, priorityOrd, + JSON.stringify(geojson), + lengthM || null, efficiencyPct || null, + ]); + + return { boomLineSn: Number((rows[0] as Record)['boom_line_sn']) }; +} + +export async function listBoomLines(acdntSn: number): Promise { + const sql = ` + SELECT BOOM_LINE_SN, ACDNT_SN, BOOM_NM, PRIORITY_ORD, + ST_AsGeoJSON(GEOM) AS GEOM, LENGTH_M, EFFICIENCY_PCT, STTS_CD, REG_DTM + FROM BOOM_LINE + WHERE ACDNT_SN = $1 AND USE_YN = 'Y' + ORDER BY PRIORITY_ORD ASC + `; + + const { rows } = await wingPool.query(sql, [acdntSn]); + + return rows.map((r: Record) => ({ + boomLineSn: Number(r['boom_line_sn']), + acdntSn: Number(r['acdnt_sn']), + boomNm: String(r['boom_nm'] ?? ''), + priorityOrd: Number(r['priority_ord'] ?? 0), + geom: r['geom'] != null ? JSON.parse(String(r['geom'])) : null, + lengthM: r['length_m'] != null ? parseFloat(String(r['length_m'])) : null, + efficiencyPct: r['efficiency_pct'] != null ? parseFloat(String(r['efficiency_pct'])) : null, + sttsCd: String(r['stts_cd'] ?? 'PLANNED'), + regDtm: String(r['reg_dtm'] ?? ''), + })); +} diff --git a/backend/src/rescue/rescueRouter.ts b/backend/src/rescue/rescueRouter.ts new file mode 100644 index 0000000..ba984d8 --- /dev/null +++ b/backend/src/rescue/rescueRouter.ts @@ -0,0 +1,66 @@ +import express from 'express'; +import { listOps, getOps, listScenarios } from './rescueService.js'; +import { isValidNumber } from '../middleware/security.js'; +import { requireAuth, requirePermission } from '../auth/authMiddleware.js'; + +const router = express.Router(); + +// ============================================================ +// GET /api/rescue/ops — 구조 작전 목록 +// ============================================================ +router.get('/ops', requireAuth, requirePermission('rescue', 'READ'), async (req, res) => { + try { + const { sttsCd, acdntTpCd, search } = req.query; + const items = await listOps({ + sttsCd: sttsCd as string | undefined, + acdntTpCd: acdntTpCd as string | undefined, + search: search as string | undefined, + }); + res.json(items); + } catch (err) { + console.error('[rescue] 구조 작전 목록 오류:', err); + res.status(500).json({ error: '구조 작전 목록 조회 실패' }); + } +}); + +// ============================================================ +// GET /api/rescue/ops/:sn — 구조 작전 단건 상세 +// ============================================================ +router.get('/ops/:sn', requireAuth, requirePermission('rescue', 'READ'), async (req, res) => { + try { + const sn = parseInt(req.params.sn as string, 10); + if (!isValidNumber(sn, 1, 999999)) { + res.status(400).json({ error: '유효하지 않은 구조 작전 번호' }); + return; + } + const item = await getOps(sn); + if (!item) { + res.status(404).json({ error: '구조 작전을 찾을 수 없습니다.' }); + return; + } + res.json(item); + } catch (err) { + console.error('[rescue] 구조 작전 상세 오류:', err); + res.status(500).json({ error: '구조 작전 상세 조회 실패' }); + } +}); + +// ============================================================ +// GET /api/rescue/ops/:sn/scenarios — 시나리오 목록 +// ============================================================ +router.get('/ops/:sn/scenarios', requireAuth, requirePermission('rescue', 'READ'), async (req, res) => { + try { + const sn = parseInt(req.params.sn as string, 10); + if (!isValidNumber(sn, 1, 999999)) { + res.status(400).json({ error: '유효하지 않은 구조 작전 번호' }); + return; + } + const scenarios = await listScenarios(sn); + res.json(scenarios); + } catch (err) { + console.error('[rescue] 시나리오 목록 오류:', err); + res.status(500).json({ error: '시나리오 목록 조회 실패' }); + } +}); + +export default router; diff --git a/backend/src/rescue/rescueService.ts b/backend/src/rescue/rescueService.ts new file mode 100644 index 0000000..7ca4cb2 --- /dev/null +++ b/backend/src/rescue/rescueService.ts @@ -0,0 +1,217 @@ +import { wingPool } from '../db/wingDb.js'; + +// ============================================================ +// 인터페이스 +// ============================================================ + +interface RescueOpsListItem { + rescueOpsSn: number; + acdntSn: number | null; + opsCd: string; + acdntTpCd: string | null; + vesselNm: string | null; + commanderNm: string | null; + lon: number | null; + lat: number | null; + locDc: string | null; + depthM: number | null; + currentDc: string | null; + gmM: number | null; + listDeg: number | null; + trimM: number | null; + buoyancyPct: number | null; + oilRateLpm: number | null; + bmRatioPct: number | null; + totalCrew: number | null; + survivors: number | null; + missing: number | null; + sttsCd: string; + regDtm: string; + mdfcnDtm: string; +} + +interface RescueOpsDetail extends RescueOpsListItem { + hydroData: Record | null; + gmdssData: Record | null; +} + +interface RescueScenarioItem { + scenarioSn: number; + rescueOpsSn: number; + timeStep: string; + scenarioDtm: string | null; + svrtCd: string | null; + gmM: number | null; + listDeg: number | null; + trimM: number | null; + buoyancyPct: number | null; + oilRateLpm: number | null; + bmRatioPct: number | null; + description: string | null; + compartments: unknown[] | null; + assessment: unknown[] | null; + actions: unknown[] | null; + sortOrd: number; + regDtm: string; +} + +interface ListOpsInput { + sttsCd?: string; + acdntTpCd?: string; + search?: string; +} + +// ============================================================ +// 구조 작전 목록 조회 +// ============================================================ + +export async function listOps(input?: ListOpsInput): Promise { + const conditions: string[] = ["USE_YN = 'Y'"]; + const params: unknown[] = []; + let idx = 1; + + if (input?.sttsCd) { + conditions.push(`STTS_CD = $${idx++}`); + params.push(input.sttsCd); + } + if (input?.acdntTpCd) { + conditions.push(`ACDNT_TP_CD = $${idx++}`); + params.push(input.acdntTpCd); + } + if (input?.search) { + conditions.push(`VESSEL_NM ILIKE '%' || $${idx++} || '%'`); + params.push(input.search); + } + + const where = 'WHERE ' + conditions.join(' AND '); + + const sql = ` + SELECT + RESCUE_OPS_SN, ACDNT_SN, OPS_CD, ACDNT_TP_CD, VESSEL_NM, COMMANDER_NM, + LON, LAT, LOC_DC, DEPTH_M, CURRENT_DC, + GM_M, LIST_DEG, TRIM_M, BUOYANCY_PCT, OIL_RATE_LPM, BM_RATIO_PCT, + TOTAL_CREW, SURVIVORS, MISSING, + STTS_CD, REG_DTM, MDFCN_DTM + FROM wing.RESCUE_OPS + ${where} + ORDER BY REG_DTM DESC + `; + + const { rows } = await wingPool.query(sql, params); + + return rows.map((r: Record) => ({ + rescueOpsSn: r.rescue_ops_sn as number, + acdntSn: (r.acdnt_sn as number) ?? null, + opsCd: r.ops_cd as string, + acdntTpCd: (r.acdnt_tp_cd as string) ?? null, + vesselNm: (r.vessel_nm as string) ?? null, + commanderNm: (r.commander_nm as string) ?? null, + lon: r.lon != null ? parseFloat(r.lon as string) : null, + lat: r.lat != null ? parseFloat(r.lat as string) : null, + locDc: (r.loc_dc as string) ?? null, + depthM: r.depth_m != null ? parseFloat(r.depth_m as string) : null, + currentDc: (r.current_dc as string) ?? null, + gmM: r.gm_m != null ? parseFloat(r.gm_m as string) : null, + listDeg: r.list_deg != null ? parseFloat(r.list_deg as string) : null, + trimM: r.trim_m != null ? parseFloat(r.trim_m as string) : null, + buoyancyPct: r.buoyancy_pct != null ? parseFloat(r.buoyancy_pct as string) : null, + oilRateLpm: r.oil_rate_lpm != null ? parseFloat(r.oil_rate_lpm as string) : null, + bmRatioPct: r.bm_ratio_pct != null ? parseFloat(r.bm_ratio_pct as string) : null, + totalCrew: (r.total_crew as number) ?? null, + survivors: (r.survivors as number) ?? null, + missing: (r.missing as number) ?? null, + sttsCd: r.stts_cd as string, + regDtm: (r.reg_dtm as Date).toISOString(), + mdfcnDtm: (r.mdfcn_dtm as Date).toISOString(), + })); +} + +// ============================================================ +// 구조 작전 단건 상세 조회 +// ============================================================ + +export async function getOps(sn: number): Promise { + const sql = ` + SELECT + RESCUE_OPS_SN, ACDNT_SN, OPS_CD, ACDNT_TP_CD, VESSEL_NM, COMMANDER_NM, + LON, LAT, LOC_DC, DEPTH_M, CURRENT_DC, + GM_M, LIST_DEG, TRIM_M, BUOYANCY_PCT, OIL_RATE_LPM, BM_RATIO_PCT, + TOTAL_CREW, SURVIVORS, MISSING, + HYDRO_DATA, GMDSS_DATA, + STTS_CD, REG_DTM, MDFCN_DTM + FROM wing.RESCUE_OPS + WHERE RESCUE_OPS_SN = $1 AND USE_YN = 'Y' + `; + + const { rows } = await wingPool.query(sql, [sn]); + if (rows.length === 0) return null; + + const r = rows[0] as Record; + + return { + rescueOpsSn: r.rescue_ops_sn as number, + acdntSn: (r.acdnt_sn as number) ?? null, + opsCd: r.ops_cd as string, + acdntTpCd: (r.acdnt_tp_cd as string) ?? null, + vesselNm: (r.vessel_nm as string) ?? null, + commanderNm: (r.commander_nm as string) ?? null, + lon: r.lon != null ? parseFloat(r.lon as string) : null, + lat: r.lat != null ? parseFloat(r.lat as string) : null, + locDc: (r.loc_dc as string) ?? null, + depthM: r.depth_m != null ? parseFloat(r.depth_m as string) : null, + currentDc: (r.current_dc as string) ?? null, + gmM: r.gm_m != null ? parseFloat(r.gm_m as string) : null, + listDeg: r.list_deg != null ? parseFloat(r.list_deg as string) : null, + trimM: r.trim_m != null ? parseFloat(r.trim_m as string) : null, + buoyancyPct: r.buoyancy_pct != null ? parseFloat(r.buoyancy_pct as string) : null, + oilRateLpm: r.oil_rate_lpm != null ? parseFloat(r.oil_rate_lpm as string) : null, + bmRatioPct: r.bm_ratio_pct != null ? parseFloat(r.bm_ratio_pct as string) : null, + totalCrew: (r.total_crew as number) ?? null, + survivors: (r.survivors as number) ?? null, + missing: (r.missing as number) ?? null, + hydroData: (r.hydro_data as Record) ?? null, + gmdssData: (r.gmdss_data as Record) ?? null, + sttsCd: r.stts_cd as string, + regDtm: (r.reg_dtm as Date).toISOString(), + mdfcnDtm: (r.mdfcn_dtm as Date).toISOString(), + }; +} + +// ============================================================ +// 시나리오 목록 조회 +// ============================================================ + +export async function listScenarios(rescueOpsSn: number): Promise { + const sql = ` + SELECT + SCENARIO_SN, RESCUE_OPS_SN, TIME_STEP, SCENARIO_DTM, SVRT_CD, + GM_M, LIST_DEG, TRIM_M, BUOYANCY_PCT, OIL_RATE_LPM, BM_RATIO_PCT, + DESCRIPTION, COMPARTMENTS, ASSESSMENT, ACTIONS, + SORT_ORD, REG_DTM + FROM wing.RESCUE_SCENARIO + WHERE RESCUE_OPS_SN = $1 + ORDER BY SORT_ORD ASC + `; + + const { rows } = await wingPool.query(sql, [rescueOpsSn]); + + return rows.map((r: Record) => ({ + scenarioSn: r.scenario_sn as number, + rescueOpsSn: r.rescue_ops_sn as number, + timeStep: r.time_step as string, + scenarioDtm: r.scenario_dtm != null ? (r.scenario_dtm as Date).toISOString() : null, + svrtCd: (r.svrt_cd as string) ?? null, + gmM: r.gm_m != null ? parseFloat(r.gm_m as string) : null, + listDeg: r.list_deg != null ? parseFloat(r.list_deg as string) : null, + trimM: r.trim_m != null ? parseFloat(r.trim_m as string) : null, + buoyancyPct: r.buoyancy_pct != null ? parseFloat(r.buoyancy_pct as string) : null, + oilRateLpm: r.oil_rate_lpm != null ? parseFloat(r.oil_rate_lpm as string) : null, + bmRatioPct: r.bm_ratio_pct != null ? parseFloat(r.bm_ratio_pct as string) : null, + description: (r.description as string) ?? null, + compartments: (r.compartments as unknown[]) ?? null, + assessment: (r.assessment as unknown[]) ?? null, + actions: (r.actions as unknown[]) ?? null, + sortOrd: r.sort_ord as number, + regDtm: (r.reg_dtm as Date).toISOString(), + })); +} diff --git a/backend/src/scat/scatRouter.ts b/backend/src/scat/scatRouter.ts new file mode 100644 index 0000000..760da89 --- /dev/null +++ b/backend/src/scat/scatRouter.ts @@ -0,0 +1,62 @@ +import { Router } from 'express'; +import { requireAuth } from '../auth/authMiddleware.js'; +import { listZones, listSections, getSection } from './scatService.js'; + +const router = Router(); + +// ============================================================ +// GET /api/scat/zones — 조사구역 목록 +// ============================================================ +router.get('/zones', requireAuth, async (_req, res) => { + try { + const zones = await listZones(); + res.json(zones); + } catch (err) { + console.error('[scat] 조사구역 목록 조회 오류:', err); + res.status(500).json({ error: '조사구역 목록 조회 중 오류가 발생했습니다.' }); + } +}); + +// ============================================================ +// GET /api/scat/sections — 해안구간 목록 (필터링) +// ============================================================ +router.get('/sections', requireAuth, async (req, res) => { + try { + const { zone, status, sensitivity, jurisdiction, search } = req.query as { + zone?: string; + status?: string; + sensitivity?: string; + jurisdiction?: string; + search?: string; + }; + const sections = await listSections({ zone, status, sensitivity, jurisdiction, search }); + res.json(sections); + } catch (err) { + console.error('[scat] 해안구간 목록 조회 오류:', err); + res.status(500).json({ error: '해안구간 목록 조회 중 오류가 발생했습니다.' }); + } +}); + +// ============================================================ +// GET /api/scat/sections/:sn — 해안구간 상세 +// ============================================================ +router.get('/sections/:sn', requireAuth, async (req, res) => { + try { + const sn = parseInt(req.params.sn as string, 10); + if (isNaN(sn)) { + res.status(400).json({ error: '유효하지 않은 구간 번호입니다.' }); + return; + } + const section = await getSection(sn); + if (!section) { + res.status(404).json({ error: '해안구간을 찾을 수 없습니다.' }); + return; + } + res.json(section); + } catch (err) { + console.error('[scat] 해안구간 상세 조회 오류:', err); + res.status(500).json({ error: '해안구간 상세 조회 중 오류가 발생했습니다.' }); + } +}); + +export default router; diff --git a/backend/src/scat/scatService.ts b/backend/src/scat/scatService.ts new file mode 100644 index 0000000..2369524 --- /dev/null +++ b/backend/src/scat/scatService.ts @@ -0,0 +1,212 @@ +import { wingPool } from '../db/wingDb.js'; + +// ============================================================ +// 인터페이스 +// ============================================================ + +interface ZoneItem { + cstSrvyZoneSn: number; + zoneCd: string; + zoneNm: string; + jrsdNm: string; + sectCnt: number; + latCenter: number; + lngCenter: number; + latRange: number; + lngRange: number; +} + +interface SectionListItem { + cstSectSn: number; + sectCd: string; + sectNm: string; + cstTpCd: string; + esiCd: string; + esiNum: number; + lenM: number; + snstvtCd: string; + srvySttsCd: string; + lat: number; + lng: number; + tags: string[]; + zoneCd: string; + zoneNm: string; + jrsdNm: string; +} + +interface SectionDetail { + cstSectSn: number; + sectCd: string; + sectNm: string; + cstTpCd: string; + esiCd: string; + esiNum: number; + lenM: number; + snstvtCd: string; + srvySttsCd: string; + lat: number; + lng: number; + tags: string[]; + geomJson: Record | null; + zoneCd: string; + zoneNm: string; + jrsdNm: string; + shoreTp: string | null; + accessDc: string | null; + accessPt: string | null; + sensitiveInfo: { t: string; v: string }[]; + cleanupMethods: string[]; + endCriteria: string[]; + notes: string[]; +} + +// ============================================================ +// 조사구역 목록 조회 +// ============================================================ + +export async function listZones(): Promise { + const sql = ` + SELECT CST_SRVY_ZONE_SN, ZONE_CD, ZONE_NM, JRSD_NM, + SECT_CNT, LAT_CENTER, LNG_CENTER, LAT_RANGE, LNG_RANGE + FROM wing.CST_SRVY_ZONE + WHERE USE_YN = 'Y' + ORDER BY CST_SRVY_ZONE_SN + `; + + const { rows } = await wingPool.query(sql); + + // pg QueryResult rows — NUMERIC은 string 반환, 타입 단언 불가피 + return rows.map((r: Record) => ({ + cstSrvyZoneSn: r.cst_srvy_zone_sn as number, + zoneCd: r.zone_cd as string, + zoneNm: r.zone_nm as string, + jrsdNm: r.jrsd_nm as string, + sectCnt: r.sect_cnt as number, + latCenter: parseFloat(r.lat_center as string), + lngCenter: parseFloat(r.lng_center as string), + latRange: parseFloat(r.lat_range as string), + lngRange: parseFloat(r.lng_range as string), + })); +} + +// ============================================================ +// 해안구간 목록 조회 (필터링) +// ============================================================ + +export async function listSections(filters: { + zone?: string; + status?: string; + sensitivity?: string; + jurisdiction?: string; + search?: string; +}): Promise { + const conditions: string[] = []; + const params: unknown[] = []; + let idx = 1; + + if (filters.zone) { + conditions.push(`z.ZONE_CD = $${idx++}`); + params.push(filters.zone); + } + if (filters.status) { + conditions.push(`s.SRVY_STTS_CD = $${idx++}`); + params.push(filters.status); + } + if (filters.sensitivity) { + conditions.push(`s.SNSTVT_CD = $${idx++}`); + params.push(filters.sensitivity); + } + if (filters.jurisdiction) { + conditions.push(`z.JRSD_NM ILIKE '%' || $${idx++} || '%'`); + params.push(filters.jurisdiction); + } + if (filters.search) { + conditions.push(`s.SECT_NM ILIKE '%' || $${idx++} || '%'`); + params.push(filters.search); + } + + conditions.push("s.USE_YN = 'Y'"); + conditions.push("z.USE_YN = 'Y'"); + const where = 'WHERE ' + conditions.join(' AND '); + + const sql = ` + SELECT s.CST_SECT_SN, s.SECT_CD, s.SECT_NM, s.CST_TP_CD, + s.ESI_CD, s.ESI_NUM, s.LEN_M, s.SNSTVT_CD, s.SRVY_STTS_CD, + s.LAT, s.LNG, s.TAGS, + z.ZONE_CD, z.ZONE_NM, z.JRSD_NM + FROM wing.CST_SECT s + JOIN wing.CST_SRVY_ZONE z ON z.CST_SRVY_ZONE_SN = s.CST_SRVY_ZONE_SN + ${where} + ORDER BY s.CST_SECT_SN + `; + + const { rows } = await wingPool.query(sql, params); + + return rows.map((r: Record) => ({ + cstSectSn: r.cst_sect_sn as number, + sectCd: r.sect_cd as string, + sectNm: r.sect_nm as string, + cstTpCd: r.cst_tp_cd as string, + esiCd: r.esi_cd as string, + esiNum: r.esi_num as number, + lenM: r.len_m as number, + snstvtCd: r.snstvt_cd as string, + srvySttsCd: r.srvy_stts_cd as string, + lat: parseFloat(r.lat as string), + lng: parseFloat(r.lng as string), + tags: (r.tags as string[]) ?? [], + zoneCd: r.zone_cd as string, + zoneNm: r.zone_nm as string, + jrsdNm: r.jrsd_nm as string, + })); +} + +// ============================================================ +// 해안구간 단건 상세 조회 (JSONB 포함) +// ============================================================ + +export async function getSection(sn: number): Promise { + const sql = ` + SELECT s.CST_SECT_SN, s.SECT_CD, s.SECT_NM, s.CST_TP_CD, + s.ESI_CD, s.ESI_NUM, s.LEN_M, s.SNSTVT_CD, s.SRVY_STTS_CD, + s.LAT, s.LNG, s.TAGS, + ST_AsGeoJSON(s.GEOM)::jsonb AS geom_json, + s.SHORE_TP, s.ACCESS_DC, s.ACCESS_PT, + s.SENSITIVE_INFO, s.CLEANUP_METHODS, s.END_CRITERIA, s.NOTES, + z.ZONE_CD, z.ZONE_NM, z.JRSD_NM + FROM wing.CST_SECT s + JOIN wing.CST_SRVY_ZONE z ON z.CST_SRVY_ZONE_SN = s.CST_SRVY_ZONE_SN + WHERE s.CST_SECT_SN = $1 AND s.USE_YN = 'Y' + `; + + const { rows } = await wingPool.query(sql, [sn]); + if (rows.length === 0) return null; + + const r = rows[0] as Record; + + return { + cstSectSn: r.cst_sect_sn as number, + sectCd: r.sect_cd as string, + sectNm: r.sect_nm as string, + cstTpCd: r.cst_tp_cd as string, + esiCd: r.esi_cd as string, + esiNum: r.esi_num as number, + lenM: r.len_m as number, + snstvtCd: r.snstvt_cd as string, + srvySttsCd: r.srvy_stts_cd as string, + lat: parseFloat(r.lat as string), + lng: parseFloat(r.lng as string), + tags: (r.tags as string[]) ?? [], + geomJson: (r.geom_json as Record) ?? null, + zoneCd: r.zone_cd as string, + zoneNm: r.zone_nm as string, + jrsdNm: r.jrsd_nm as string, + shoreTp: (r.shore_tp as string) ?? null, + accessDc: (r.access_dc as string) ?? null, + accessPt: (r.access_pt as string) ?? null, + sensitiveInfo: (r.sensitive_info as { t: string; v: string }[]) ?? [], + cleanupMethods: (r.cleanup_methods as string[]) ?? [], + endCriteria: (r.end_criteria as string[]) ?? [], + notes: (r.notes as string[]) ?? [], + }; +} diff --git a/backend/src/server.ts b/backend/src/server.ts index 8474690..6efd807 100755 --- a/backend/src/server.ts +++ b/backend/src/server.ts @@ -18,6 +18,10 @@ import hnsRouter from './hns/hnsRouter.js' import reportsRouter from './reports/reportsRouter.js' import assetsRouter from './assets/assetsRouter.js' import incidentsRouter from './incidents/incidentsRouter.js' +import scatRouter from './scat/scatRouter.js' +import predictionRouter from './prediction/predictionRouter.js' +import aerialRouter from './aerial/aerialRouter.js' +import rescueRouter from './rescue/rescueRouter.js' import { sanitizeBody, sanitizeQuery, @@ -45,7 +49,13 @@ app.use(helmet({ scriptSrc: ["'self'"], styleSrc: ["'self'", "'unsafe-inline'"], imgSrc: ["'self'", "data:", "blob:"], - connectSrc: ["'self'", "http://localhost:*", "https://*.gc-si.dev", "https://*.data.go.kr", "https://*.khoa.go.kr"], + connectSrc: [ + "'self'", + ...(process.env.NODE_ENV !== 'production' ? ['http://localhost:*'] : []), + 'https://*.gc-si.dev', + 'https://*.data.go.kr', + 'https://*.khoa.go.kr', + ], fontSrc: ["'self'"], objectSrc: ["'none'"], frameSrc: ["'none'"], @@ -61,11 +71,12 @@ app.disable('x-powered-by') // 3. CORS: 허용된 출처만 접근 가능 const allowedOrigins = [ - 'http://localhost:5173', // Vite dev server - 'http://localhost:5174', - 'http://localhost:3000', - 'https://wing-demo.gc-si.dev', - process.env.FRONTEND_URL, // 운영 환경 프론트엔드 URL (추가 도메인) + process.env.FRONTEND_URL || 'https://wing-demo.gc-si.dev', + ...(process.env.NODE_ENV !== 'production' ? [ + 'http://localhost:5173', + 'http://localhost:5174', + 'http://localhost:3000', + ] : []), ].filter(Boolean) as string[] app.use(cors({ @@ -147,6 +158,10 @@ app.use('/api/hns', hnsRouter) app.use('/api/reports', reportsRouter) app.use('/api/assets', assetsRouter) app.use('/api/incidents', incidentsRouter) +app.use('/api/scat', scatRouter) +app.use('/api/prediction', predictionRouter) +app.use('/api/aerial', aerialRouter) +app.use('/api/rescue', rescueRouter) // 헬스 체크 app.get('/health', (_req, res) => { diff --git a/database/migration/010_postgis_geom.sql b/database/migration/010_postgis_geom.sql new file mode 100644 index 0000000..999260f --- /dev/null +++ b/database/migration/010_postgis_geom.sql @@ -0,0 +1,31 @@ +-- ============================================================ +-- 010: PostGIS GEOMETRY 컬럼 일괄 추가 +-- 기존 NUMERIC LAT/LNG 유지 + GEOMETRY(Point, 4326) 추가 +-- ============================================================ + +SET search_path TO wing, public; + +-- PostGIS 익스텐션 확인 +CREATE EXTENSION IF NOT EXISTS postgis; + +-- ============================================================ +-- 1. ASSET_ORG — 방제자산 기관 위치 +-- ============================================================ +ALTER TABLE ASSET_ORG ADD COLUMN IF NOT EXISTS GEOM GEOMETRY(Point, 4326); + +UPDATE ASSET_ORG +SET GEOM = ST_SetSRID(ST_MakePoint(LNG, LAT), 4326) +WHERE LAT IS NOT NULL AND LNG IS NOT NULL AND GEOM IS NULL; + +CREATE INDEX IF NOT EXISTS IDX_ASSET_ORG_GEOM ON ASSET_ORG USING GIST(GEOM); + +-- ============================================================ +-- 2. ACDNT — 사고 위치 +-- ============================================================ +ALTER TABLE ACDNT ADD COLUMN IF NOT EXISTS LOC_GEOM GEOMETRY(Point, 4326); + +UPDATE ACDNT +SET LOC_GEOM = ST_SetSRID(ST_MakePoint(LNG, LAT), 4326) +WHERE LAT IS NOT NULL AND LNG IS NOT NULL AND LOC_GEOM IS NULL; + +CREATE INDEX IF NOT EXISTS IDX_ACDNT_LOC_GEOM ON ACDNT USING GIST(LOC_GEOM); diff --git a/database/migration/011_scat.sql b/database/migration/011_scat.sql new file mode 100644 index 0000000..e67f29c --- /dev/null +++ b/database/migration/011_scat.sql @@ -0,0 +1,1410 @@ +-- ============================================================ +-- 011: SCAT 해안조사 테이블 생성 + 시드 데이터 +-- CST_SRVY_ZONE (26건), CST_SECT (1,005건+), 상세 데이터 16건 +-- ============================================================ + +SET search_path TO wing, public; + +-- ============================================================ +-- 1. CST_SRVY_ZONE — 해안조사구역 (26개) +-- ============================================================ +CREATE TABLE IF NOT EXISTS CST_SRVY_ZONE ( + CST_SRVY_ZONE_SN SERIAL PRIMARY KEY, + ZONE_CD VARCHAR(10) NOT NULL UNIQUE, + ZONE_NM VARCHAR(100) NOT NULL, + JRSD_NM VARCHAR(20), + SECT_CNT INTEGER DEFAULT 0, + LAT_CENTER NUMERIC(9,6), + LNG_CENTER NUMERIC(9,6), + LAT_RANGE NUMERIC(9,6), + LNG_RANGE NUMERIC(9,6), + GEOM GEOMETRY(Point, 4326), + USE_YN CHAR(1) DEFAULT 'Y', + REG_DTM TIMESTAMPTZ DEFAULT NOW() +); + +-- ============================================================ +-- 2. CST_SECT — 해안구간 (1,005건+) +-- ============================================================ +CREATE TABLE IF NOT EXISTS CST_SECT ( + CST_SECT_SN SERIAL PRIMARY KEY, + CST_SRVY_ZONE_SN INTEGER REFERENCES CST_SRVY_ZONE(CST_SRVY_ZONE_SN), + SECT_CD VARCHAR(20) NOT NULL UNIQUE, + SECT_NM VARCHAR(200), + CST_TP_CD VARCHAR(30), + ESI_CD VARCHAR(5), + ESI_NUM SMALLINT, + LEN_M NUMERIC(8,1), + SNSTVT_CD VARCHAR(10), + SRVY_STTS_CD VARCHAR(10) DEFAULT '미조사', + LAT NUMERIC(9,6), + LNG NUMERIC(9,6), + GEOM GEOMETRY(Point, 4326), + TAGS JSONB DEFAULT '[]', + SHORE_TP VARCHAR(20), + ACCESS_DC VARCHAR(500), + ACCESS_PT VARCHAR(200), + SENSITIVE_INFO JSONB DEFAULT '[]', + CLEANUP_METHODS JSONB DEFAULT '[]', + END_CRITERIA JSONB DEFAULT '[]', + NOTES JSONB DEFAULT '[]', + USE_YN CHAR(1) DEFAULT 'Y', + REG_DTM TIMESTAMPTZ DEFAULT NOW() +); + +-- ============================================================ +-- 3. 시드 데이터 INSERT +-- ============================================================ +INSERT INTO wing.CST_SRVY_ZONE (ZONE_CD,ZONE_NM,JRSD_NM,SECT_CNT,LAT_CENTER,LNG_CENTER,LAT_RANGE,LNG_RANGE) VALUES ('SGSS','성산읍','서귀포',99,33.39,126.89,0.07,0.05); +INSERT INTO wing.CST_SRVY_ZONE (ZONE_CD,ZONE_NM,JRSD_NM,SECT_CNT,LAT_CENTER,LNG_CENTER,LAT_RANGE,LNG_RANGE) VALUES ('SGPS','표선면','서귀포',41,33.33,126.81,0.03,0.04); +INSERT INTO wing.CST_SRVY_ZONE (ZONE_CD,ZONE_NM,JRSD_NM,SECT_CNT,LAT_CENTER,LNG_CENTER,LAT_RANGE,LNG_RANGE) VALUES ('SGNW','남원읍','서귀포',73,33.26,126.63,0.02,0.05); +INSERT INTO wing.CST_SRVY_ZONE (ZONE_CD,ZONE_NM,JRSD_NM,SECT_CNT,LAT_CENTER,LNG_CENTER,LAT_RANGE,LNG_RANGE) VALUES ('SGHY','하효동·보목동','서귀포',8,33.245,126.59,0.005,0.02); +INSERT INTO wing.CST_SRVY_ZONE (ZONE_CD,ZONE_NM,JRSD_NM,SECT_CNT,LAT_CENTER,LNG_CENTER,LAT_RANGE,LNG_RANGE) VALUES ('SGTP','토평동·동흥동','서귀포',12,33.245,126.555,0.005,0.015); +INSERT INTO wing.CST_SRVY_ZONE (ZONE_CD,ZONE_NM,JRSD_NM,SECT_CNT,LAT_CENTER,LNG_CENTER,LAT_RANGE,LNG_RANGE) VALUES ('SGSG','서귀동·서홍동','서귀포',20,33.245,126.53,0.005,0.015); +INSERT INTO wing.CST_SRVY_ZONE (ZONE_CD,ZONE_NM,JRSD_NM,SECT_CNT,LAT_CENTER,LNG_CENTER,LAT_RANGE,LNG_RANGE) VALUES ('SGHG','호근동·법환동','서귀포',6,33.245,126.5,0.005,0.02); +INSERT INTO wing.CST_SRVY_ZONE (ZONE_CD,ZONE_NM,JRSD_NM,SECT_CNT,LAT_CENTER,LNG_CENTER,LAT_RANGE,LNG_RANGE) VALUES ('SGGJ','강정동','서귀포',21,33.245,126.45,0.005,0.03); +INSERT INTO wing.CST_SRVY_ZONE (ZONE_CD,ZONE_NM,JRSD_NM,SECT_CNT,LAT_CENTER,LNG_CENTER,LAT_RANGE,LNG_RANGE) VALUES ('SGWP','월평동·대포동','서귀포',4,33.245,126.4,0.005,0.02); +INSERT INTO wing.CST_SRVY_ZONE (ZONE_CD,ZONE_NM,JRSD_NM,SECT_CNT,LAT_CENTER,LNG_CENTER,LAT_RANGE,LNG_RANGE) VALUES ('SGJM','중문동','서귀포',8,33.245,126.37,0.005,0.015); +INSERT INTO wing.CST_SRVY_ZONE (ZONE_CD,ZONE_NM,JRSD_NM,SECT_CNT,LAT_CENTER,LNG_CENTER,LAT_RANGE,LNG_RANGE) VALUES ('SGSE','색달동·하예동','서귀포',8,33.245,126.34,0.005,0.015); +INSERT INTO wing.CST_SRVY_ZONE (ZONE_CD,ZONE_NM,JRSD_NM,SECT_CNT,LAT_CENTER,LNG_CENTER,LAT_RANGE,LNG_RANGE) VALUES ('SGAD','안덕면','서귀포',38,33.24,126.29,0.01,0.035); +INSERT INTO wing.CST_SRVY_ZONE (ZONE_CD,ZONE_NM,JRSD_NM,SECT_CNT,LAT_CENTER,LNG_CENTER,LAT_RANGE,LNG_RANGE) VALUES ('SGDJ','대정읍','서귀포',79,33.25,126.21,0.035,0.05); +INSERT INTO wing.CST_SRVY_ZONE (ZONE_CD,ZONE_NM,JRSD_NM,SECT_CNT,LAT_CENTER,LNG_CENTER,LAT_RANGE,LNG_RANGE) VALUES ('JJHG','한경면','제주',81,33.31,126.19,0.04,0.04); +INSERT INTO wing.CST_SRVY_ZONE (ZONE_CD,ZONE_NM,JRSD_NM,SECT_CNT,LAT_CENTER,LNG_CENTER,LAT_RANGE,LNG_RANGE) VALUES ('JJHL','한림읍','제주',87,33.39,126.26,0.04,0.05); +INSERT INTO wing.CST_SRVY_ZONE (ZONE_CD,ZONE_NM,JRSD_NM,SECT_CNT,LAT_CENTER,LNG_CENTER,LAT_RANGE,LNG_RANGE) VALUES ('JJAW','애월읍','제주',89,33.46,126.35,0.04,0.06); +INSERT INTO wing.CST_SRVY_ZONE (ZONE_CD,ZONE_NM,JRSD_NM,SECT_CNT,LAT_CENTER,LNG_CENTER,LAT_RANGE,LNG_RANGE) VALUES ('JJOD','외도이동','제주',19,33.505,126.43,0.005,0.015); +INSERT INTO wing.CST_SRVY_ZONE (ZONE_CD,ZONE_NM,JRSD_NM,SECT_CNT,LAT_CENTER,LNG_CENTER,LAT_RANGE,LNG_RANGE) VALUES ('JJND','내도동','제주',7,33.505,126.44,0.003,0.008); +INSERT INTO wing.CST_SRVY_ZONE (ZONE_CD,ZONE_NM,JRSD_NM,SECT_CNT,LAT_CENTER,LNG_CENTER,LAT_RANGE,LNG_RANGE) VALUES ('JJIH','이호일동','제주',20,33.5,126.46,0.005,0.012); +INSERT INTO wing.CST_SRVY_ZONE (ZONE_CD,ZONE_NM,JRSD_NM,SECT_CNT,LAT_CENTER,LNG_CENTER,LAT_RANGE,LNG_RANGE) VALUES ('JJDD','도두동','제주',17,33.51,126.49,0.005,0.012); +INSERT INTO wing.CST_SRVY_ZONE (ZONE_CD,ZONE_NM,JRSD_NM,SECT_CNT,LAT_CENTER,LNG_CENTER,LAT_RANGE,LNG_RANGE) VALUES ('JJYD','용담동','제주',19,33.515,126.52,0.005,0.015); +INSERT INTO wing.CST_SRVY_ZONE (ZONE_CD,ZONE_NM,JRSD_NM,SECT_CNT,LAT_CENTER,LNG_CENTER,LAT_RANGE,LNG_RANGE) VALUES ('JJSD','삼도이동','제주',2,33.515,126.525,0.003,0.005); +INSERT INTO wing.CST_SRVY_ZONE (ZONE_CD,ZONE_NM,JRSD_NM,SECT_CNT,LAT_CENTER,LNG_CENTER,LAT_RANGE,LNG_RANGE) VALUES ('JJGI','건입동','제주',26,33.52,126.545,0.005,0.015); +INSERT INTO wing.CST_SRVY_ZONE (ZONE_CD,ZONE_NM,JRSD_NM,SECT_CNT,LAT_CENTER,LNG_CENTER,LAT_RANGE,LNG_RANGE) VALUES ('JJHB','화북일동','제주',23,33.52,126.565,0.005,0.012); +INSERT INTO wing.CST_SRVY_ZONE (ZONE_CD,ZONE_NM,JRSD_NM,SECT_CNT,LAT_CENTER,LNG_CENTER,LAT_RANGE,LNG_RANGE) VALUES ('JJYN','삼양삼동','제주',19,33.52,126.585,0.005,0.012); +INSERT INTO wing.CST_SRVY_ZONE (ZONE_CD,ZONE_NM,JRSD_NM,SECT_CNT,LAT_CENTER,LNG_CENTER,LAT_RANGE,LNG_RANGE) VALUES ('JJSY','삼양일동','제주',24,33.52,126.59,0.005,0.012); +INSERT INTO wing.CST_SRVY_ZONE (ZONE_CD,ZONE_NM,JRSD_NM,SECT_CNT,LAT_CENTER,LNG_CENTER,LAT_RANGE,LNG_RANGE) VALUES ('JJJC','조천읍','제주',95,33.535,126.64,0.015,0.04); +INSERT INTO wing.CST_SRVY_ZONE (ZONE_CD,ZONE_NM,JRSD_NM,SECT_CNT,LAT_CENTER,LNG_CENTER,LAT_RANGE,LNG_RANGE) VALUES ('JJGJ','구좌읍','제주',147,33.53,126.78,0.03,0.1); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-1','신풍리 해안','수직호안','1B',1,131.0,'하','진행중',33.319860,126.839920,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-2','오조리 해안','모래자갈혼합','5',5,270.0,'중','미조사',33.320564,126.841802,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-3','신풍리 해안','모래','3A',3,325.0,'하','완료',33.321725,126.840587,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-4','시흥리 해안','투과성 인공호안','6B',6,525.0,'중','완료',33.324314,126.842838,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-5','고성리 해안','자갈·왕자갈','6A',6,588.0,'중','완료',33.325923,126.843839,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-6','신풍리 해안','모래자갈혼합','5',5,728.0,'중','미조사',33.327067,126.845018,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-7','오조리 해안','자갈·왕자갈','6A',6,203.0,'중','미조사',33.329065,126.846102,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-8','신천리 해안','자갈·왕자갈','6A',6,150.0,'중','완료',33.330356,126.848144,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-9','고성리 해안','모래','3A',3,260.0,'하','미조사',33.332739,126.849622,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-10','신산리 해안','수직호안','1B',1,977.0,'하','완료',33.331550,126.849773,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-11','성산리 해안','투과성 인공호안','6B',6,626.0,'중','완료',33.334358,126.851529,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-12','시흥리 해안','모래자갈혼합','5',5,135.0,'중','진행중',33.335672,126.852513,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-13','신천리 해안','모래자갈혼합','5',5,994.0,'중','미조사',33.336448,126.853314,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-14','온평리 해안','투과성 인공호안','6B',6,630.0,'중','완료',33.337493,126.853320,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-15','오조리 해안','모래자갈혼합','5',5,919.0,'중','미조사',33.338878,126.855164,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-16','신풍리 해안','수직호안','1B',1,635.0,'하','완료',33.342066,126.855563,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-17','시흥리 해안','수직호안','1B',1,635.0,'하','완료',33.343656,126.856557,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-18','온평리 해안','투과성 인공호안','6B',6,591.0,'중','완료',33.343963,126.858078,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-19','성산리 해안','수직암반','1A',1,145.0,'하','미조사',33.346966,126.859839,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-20','신풍리 해안','자갈·왕자갈','6A',6,216.0,'중','완료',33.348438,126.858962,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-21','신산리 해안','모래자갈혼합','5',5,644.0,'중','완료',33.348065,126.860403,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-22','삼달리 해안','수평암반','8A',8,620.0,'상','완료',33.351110,126.861400,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-23','신풍리 해안','수평암반','8A',8,397.0,'상','완료',33.350873,126.861329,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-24','시흥리 해안','수직호안','1B',1,842.0,'하','완료',33.353751,126.863388,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-25','시흥리 해안','수직암반','1A',1,892.0,'하','완료',33.355228,126.863424,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-26','시흥리 해안','자갈·왕자갈','6A',6,597.0,'중','완료',33.356331,126.865237,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-27','신산리 해안','모래자갈혼합','5',5,423.0,'중','완료',33.355712,126.865165,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-28','신산리 해안','수평암반','8A',8,354.0,'상','완료',33.357769,126.866679,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-29','삼달리 해안','모래자갈혼합','5',5,829.0,'중','진행중',33.359616,126.867368,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-30','삼달리 해안','수직호안','1B',1,566.0,'하','진행중',33.361752,126.869232,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-31','오조리 해안','수평암반','8A',8,532.0,'상','완료',33.361658,126.872020,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-32','신천리 해안','수직호안','1B',1,355.0,'하','진행중',33.365500,126.872380,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-33','삼달리 해안','모래','3A',3,901.0,'하','진행중',33.364330,126.872229,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-34','신천리 해안','모래','3A',3,366.0,'하','완료',33.367372,126.875101,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-35','신산리 해안','투과성 인공호안','6B',6,190.0,'중','진행중',33.367136,126.873539,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-36','고성리 해안','모래','3A',3,557.0,'하','진행중',33.370542,126.874442,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-37','오조리 해안','수직암반','1A',1,142.0,'하','완료',33.370674,126.875587,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-38','신풍리 해안','자갈·왕자갈','6A',6,514.0,'중','완료',33.371635,126.878340,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-39','고성리 해안','모래','3A',3,785.0,'하','완료',33.375614,126.877403,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-40','고성리 해안','모래','3A',3,986.0,'하','완료',33.374309,126.879916,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-41','삼달리 해안','모래','3A',3,792.0,'하','완료',33.377226,126.879991,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-42','신풍리 해안','모래자갈혼합','5',5,150.0,'중','완료',33.378446,126.882098,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-43','신천리 해안','모래자갈혼합','5',5,493.0,'중','미조사',33.381351,126.883406,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-44','삼달리 해안','자갈·왕자갈','6A',6,756.0,'중','진행중',33.382331,126.885001,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-45','온평리 해안','모래자갈혼합','5',5,478.0,'중','완료',33.382216,126.884190,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-46','시흥리 해안','투과성 인공호안','6B',6,350.0,'중','완료',33.384900,126.887089,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-47','삼달리 해안','수평암반','8A',8,782.0,'상','미조사',33.384966,126.886922,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-48','온평리 해안','수직암반','1A',1,766.0,'하','미조사',33.385814,126.888669,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-49','신천리 해안','모래자갈혼합','5',5,696.0,'중','완료',33.388359,126.888823,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-50','시흥리 해안','수직암반','1A',1,219.0,'하','완료',33.390053,126.890148,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-51','시흥리 해안','수평암반','8A',8,782.0,'상','진행중',33.391076,126.892280,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-52','신산리 해안','수직암반','1A',1,935.0,'하','완료',33.392328,126.890852,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-53','온평리 해안','자갈·왕자갈','6A',6,226.0,'중','진행중',33.393991,126.894091,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-54','신천리 해안','모래','3A',3,938.0,'하','완료',33.394689,126.895148,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-55','삼달리 해안','수직호안','1B',1,937.0,'하','완료',33.398498,126.895107,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-56','고성리 해안','자갈·왕자갈','6A',6,475.0,'중','완료',33.397103,126.897455,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-57','신천리 해안','수직호안','1B',1,931.0,'하','완료',33.398691,126.897716,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-58','성산리 해안','투과성 인공호안','6B',6,684.0,'중','완료',33.400379,126.897293,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-59','신산리 해안','자갈·왕자갈','6A',6,833.0,'중','완료',33.402602,126.900655,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-60','삼달리 해안','투과성 인공호안','6B',6,382.0,'중','완료',33.404912,126.899329,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-61','고성리 해안','모래자갈혼합','5',5,708.0,'중','완료',33.405830,126.902089,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-62','온평리 해안','수평암반','8A',8,898.0,'상','완료',33.406519,126.902785,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-63','시흥리 해안','투과성 인공호안','6B',6,932.0,'중','완료',33.407829,126.904595,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-64','삼달리 해안','자갈·왕자갈','6A',6,611.0,'중','완료',33.410651,126.903367,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-65','온평리 해안','모래','3A',3,207.0,'하','완료',33.410496,126.906283,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-66','시흥리 해안','수직호안','1B',1,881.0,'하','완료',33.413401,126.907459,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-67','신천리 해안','모래자갈혼합','5',5,911.0,'중','미조사',33.412954,126.908331,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-68','삼달리 해안','수직호안','1B',1,711.0,'하','미조사',33.414338,126.909168,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-69','신천리 해안','자갈·왕자갈','6A',6,592.0,'중','완료',33.417473,126.910527,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-70','신산리 해안','모래자갈혼합','5',5,268.0,'중','완료',33.418378,126.910739,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-71','고성리 해안','수평암반','8A',8,904.0,'상','완료',33.419171,126.911844,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-72','신천리 해안','모래','3A',3,185.0,'하','진행중',33.421341,126.912325,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-73','시흥리 해안','수평암반','8A',8,186.0,'상','완료',33.423812,126.914304,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-74','성산리 해안','수평암반','8A',8,434.0,'상','완료',33.424445,126.913413,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-75','오조리 해안','모래','3A',3,155.0,'하','완료',33.425615,126.916707,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-76','성산리 해안','수직암반','1A',1,866.0,'하','진행중',33.426717,126.917658,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-77','신풍리 해안','수직호안','1B',1,725.0,'하','완료',33.428904,126.918269,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-78','신산리 해안','모래','3A',3,301.0,'하','완료',33.429837,126.917834,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-79','시흥리 해안','수평암반','8A',8,231.0,'상','미조사',33.432180,126.919119,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-80','성산리 해안','투과성 인공호안','6B',6,763.0,'중','미조사',33.433093,126.919200,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-81','온평리 해안','수직암반','1A',1,689.0,'하','미조사',33.432941,126.920522,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-82','시흥리 해안','자갈·왕자갈','6A',6,115.0,'중','완료',33.435583,126.924137,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-83','온평리 해안','수평암반','8A',8,432.0,'상','완료',33.438473,126.923686,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-84','고성리 해안','투과성 인공호안','6B',6,750.0,'중','미조사',33.439889,126.925318,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-85','신산리 해안','모래','3A',3,502.0,'하','미조사',33.440299,126.924855,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-86','신산리 해안','자갈·왕자갈','6A',6,660.0,'중','완료',33.441231,126.925237,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-87','성산리 해안','모래','3A',3,474.0,'하','완료',33.444034,126.926412,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-88','신산리 해안','자갈·왕자갈','6A',6,511.0,'중','완료',33.443085,126.929611,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-89','오조리 해안','수직암반','1A',1,100.0,'하','미조사',33.444595,126.931037,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-90','성산리 해안','수직암반','1A',1,552.0,'하','완료',33.445967,126.930386,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-91','신천리 해안','수직암반','1A',1,164.0,'하','완료',33.447672,126.931651,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-92','성산리 해안','투과성 인공호안','6B',6,246.0,'중','미조사',33.450797,126.933207,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-93','삼달리 해안','수평암반','8A',8,432.0,'상','완료',33.450252,126.933057,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-94','온평리 해안','수직암반','1A',1,339.0,'하','미조사',33.452242,126.935458,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-95','성산리 해안','자갈·왕자갈','6A',6,258.0,'중','완료',33.454577,126.936907,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-96','고성리 해안','모래자갈혼합','5',5,914.0,'중','완료',33.454275,126.938401,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-97','성산리 해안','수평암반','8A',8,361.0,'상','완료',33.458618,126.938442,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-98','신풍리 해안','자갈·왕자갈','6A',6,318.0,'중','진행중',33.457748,126.940221,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSS'),'SGSS-99','시흥리 해안','수직호안','1B',1,598.0,'하','진행중',33.458684,126.939771,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGPS'),'SGPS-1','표선리 해안','모래자갈혼합','5',5,686.0,'중','완료',33.300265,126.769099,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGPS'),'SGPS-2','하천리 해안','투과성 인공호안','6B',6,288.0,'중','진행중',33.302853,126.773476,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGPS'),'SGPS-3','하천리 해안','모래자갈혼합','5',5,440.0,'중','미조사',33.303643,126.774999,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGPS'),'SGPS-4','표선리 해안','자갈·왕자갈','6A',6,763.0,'중','진행중',33.304416,126.777167,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGPS'),'SGPS-5','하천리 해안','수직암반','1A',1,133.0,'하','완료',33.305461,126.778996,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGPS'),'SGPS-6','표선리 해안','수직암반','1A',1,111.0,'하','완료',33.308084,126.781258,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGPS'),'SGPS-7','세화리 해안','모래','3A',3,878.0,'하','미조사',33.310021,126.782738,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGPS'),'SGPS-8','하천리 해안','자갈·왕자갈','6A',6,366.0,'중','완료',33.310547,126.785101,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGPS'),'SGPS-9','하천리 해안','모래','3A',3,319.0,'하','완료',33.311593,126.785428,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGPS'),'SGPS-10','표선리 해안','모래자갈혼합','5',5,481.0,'중','완료',33.314565,126.788296,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGPS'),'SGPS-11','하천리 해안','수평암반','8A',8,372.0,'상','미조사',33.315379,126.791457,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGPS'),'SGPS-12','표선리 해안','모래자갈혼합','5',5,260.0,'중','미조사',33.317147,126.792285,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGPS'),'SGPS-13','표선리 해안','수평암반','8A',8,914.0,'상','완료',33.318509,126.795475,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGPS'),'SGPS-14','표선리 해안','투과성 인공호안','6B',6,157.0,'중','미조사',33.320087,126.796331,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGPS'),'SGPS-15','표선리 해안','수평암반','8A',8,438.0,'상','완료',33.322311,126.796795,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGPS'),'SGPS-16','하천리 해안','자갈·왕자갈','6A',6,660.0,'중','미조사',33.321430,126.800205,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGPS'),'SGPS-17','하천리 해안','모래','3A',3,588.0,'하','완료',33.322967,126.803445,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGPS'),'SGPS-18','하천리 해안','수직호안','1B',1,754.0,'하','미조사',33.325307,126.803498,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGPS'),'SGPS-19','표선리 해안','모래자갈혼합','5',5,567.0,'중','완료',33.326590,126.806691,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGPS'),'SGPS-20','세화리 해안','수직호안','1B',1,920.0,'하','미조사',33.329748,126.806914,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGPS'),'SGPS-21','표선리 해안','자갈·왕자갈','6A',6,361.0,'중','완료',33.331360,126.810363,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGPS'),'SGPS-22','하천리 해안','수평암반','8A',8,220.0,'상','완료',33.331889,126.811817,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGPS'),'SGPS-23','표선리 해안','수직호안','1B',1,628.0,'하','완료',33.332671,126.813395,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGPS'),'SGPS-24','세화리 해안','모래자갈혼합','5',5,117.0,'중','완료',33.333742,126.815621,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGPS'),'SGPS-25','하천리 해안','모래자갈혼합','5',5,834.0,'중','완료',33.336926,126.818754,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGPS'),'SGPS-26','하천리 해안','자갈·왕자갈','6A',6,144.0,'중','완료',33.337678,126.819931,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGPS'),'SGPS-27','표선리 해안','모래','3A',3,672.0,'하','완료',33.339927,126.822083,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGPS'),'SGPS-28','표선리 해안','자갈·왕자갈','6A',6,299.0,'중','완료',33.341357,126.825319,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGPS'),'SGPS-29','표선리 해안','수직암반','1A',1,168.0,'하','진행중',33.340927,126.825450,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGPS'),'SGPS-30','세화리 해안','모래','3A',3,124.0,'하','완료',33.344684,126.826616,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGPS'),'SGPS-31','하천리 해안','모래','3A',3,381.0,'하','완료',33.343669,126.829810,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGPS'),'SGPS-32','세화리 해안','투과성 인공호안','6B',6,123.0,'중','완료',33.347503,126.832660,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGPS'),'SGPS-33','표선리 해안','모래','3A',3,893.0,'하','완료',33.349297,126.833361,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGPS'),'SGPS-34','세화리 해안','수직암반','1A',1,326.0,'하','완료',33.350230,126.836732,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGPS'),'SGPS-35','표선리 해안','투과성 인공호안','6B',6,110.0,'중','진행중',33.350467,126.836677,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGPS'),'SGPS-36','하천리 해안','모래자갈혼합','5',5,516.0,'중','미조사',33.353652,126.839578,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGPS'),'SGPS-37','세화리 해안','모래','3A',3,455.0,'하','완료',33.354133,126.841204,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGPS'),'SGPS-38','표선리 해안','모래자갈혼합','5',5,932.0,'중','완료',33.355799,126.844442,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGPS'),'SGPS-39','표선리 해안','투과성 인공호안','6B',6,160.0,'중','진행중',33.357558,126.846355,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGPS'),'SGPS-40','표선리 해안','수직호안','1B',1,197.0,'하','미조사',33.359211,126.848829,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGPS'),'SGPS-41','세화리 해안','투과성 인공호안','6B',6,257.0,'중','완료',33.360109,126.849277,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-1','위미리 해안','모래','3A',3,839.0,'하','완료',33.240460,126.580960,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-2','남원리 해안','투과성 인공호안','6B',6,462.0,'중','진행중',33.240330,126.582477,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-3','신흥리 해안','투과성 인공호안','6B',6,863.0,'중','완료',33.241536,126.581475,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-4','위미리 해안','수직호안','1B',1,851.0,'하','완료',33.242974,126.582851,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-5','남원리 해안','수평암반','8A',8,797.0,'상','완료',33.241429,126.586809,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-6','신례리 해안','수평암반','8A',8,371.0,'상','완료',33.243918,126.586929,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-7','신례리 해안','수평암반','8A',8,689.0,'상','완료',33.242805,126.588411,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-8','태흥리 해안','투과성 인공호안','6B',6,576.0,'중','완료',33.243780,126.590562,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-9','신흥리 해안','수평암반','8A',8,247.0,'상','미조사',33.244602,126.591848,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-10','신례리 해안','자갈·왕자갈','6A',6,661.0,'중','완료',33.245233,126.592559,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-11','위미리 해안','수직암반','1A',1,758.0,'하','완료',33.244126,126.593135,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-12','태흥리 해안','수직암반','1A',1,922.0,'하','완료',33.247304,126.594211,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-13','신례리 해안','투과성 인공호안','6B',6,465.0,'중','완료',33.246320,126.596464,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-14','신흥리 해안','모래','3A',3,777.0,'하','미조사',33.248077,126.598744,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-15','신흥리 해안','자갈·왕자갈','6A',6,562.0,'중','완료',33.246729,126.598879,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-16','남원리 해안','모래','3A',3,948.0,'하','진행중',33.249781,126.601456,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-17','신례리 해안','모래자갈혼합','5',5,941.0,'중','진행중',33.249873,126.601489,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-18','신흥리 해안','수직호안','1B',1,863.0,'하','완료',33.248713,126.602359,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-19','신흥리 해안','수평암반','8A',8,212.0,'상','진행중',33.248978,126.603934,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-20','태흥리 해안','수직호안','1B',1,168.0,'하','완료',33.249466,126.605793,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-21','남원리 해안','수평암반','8A',8,817.0,'상','완료',33.251783,126.608591,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-22','태흥리 해안','자갈·왕자갈','6A',6,680.0,'중','완료',33.250922,126.609131,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-23','신례리 해안','모래자갈혼합','5',5,977.0,'중','미조사',33.253232,126.610805,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-24','신흥리 해안','투과성 인공호안','6B',6,819.0,'중','완료',33.252320,126.612126,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-25','위미리 해안','수평암반','8A',8,278.0,'상','완료',33.254551,126.614812,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-26','남원리 해안','투과성 인공호안','6B',6,393.0,'중','진행중',33.252973,126.613899,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-27','신례리 해안','모래','3A',3,844.0,'하','완료',33.253276,126.616312,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-28','태흥리 해안','자갈·왕자갈','6A',6,375.0,'중','미조사',33.253833,126.618907,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-29','남원리 해안','수평암반','8A',8,437.0,'상','진행중',33.254147,126.618109,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-30','신례리 해안','수평암반','8A',8,482.0,'상','미조사',33.256417,126.619273,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-31','남원리 해안','모래자갈혼합','5',5,931.0,'중','완료',33.255713,126.621198,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-32','태흥리 해안','수평암반','8A',8,860.0,'상','미조사',33.257132,126.622358,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-33','태흥리 해안','모래','3A',3,437.0,'하','완료',33.258203,126.625425,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-34','신례리 해안','수평암반','8A',8,594.0,'상','완료',33.259282,126.625634,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-35','위미리 해안','수평암반','8A',8,418.0,'상','완료',33.259596,126.627824,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-36','신례리 해안','투과성 인공호안','6B',6,630.0,'중','완료',33.258311,126.628537,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-37','신례리 해안','모래','3A',3,464.0,'하','완료',33.260895,126.629434,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-38','남원리 해안','모래자갈혼합','5',5,405.0,'중','미조사',33.261904,126.631798,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-39','남원리 해안','수직호안','1B',1,181.0,'하','완료',33.260246,126.633408,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-40','신례리 해안','수직암반','1A',1,115.0,'하','완료',33.262537,126.634060,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-41','남원리 해안','수평암반','8A',8,288.0,'상','완료',33.263320,126.635958,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-42','신례리 해안','모래자갈혼합','5',5,432.0,'중','완료',33.261899,126.636091,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-43','신례리 해안','수직호안','1B',1,611.0,'하','완료',33.264551,126.637075,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-44','위미리 해안','수직호안','1B',1,779.0,'하','완료',33.264335,126.639170,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-45','위미리 해안','모래','3A',3,306.0,'하','완료',33.265463,126.640316,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-46','신례리 해안','투과성 인공호안','6B',6,884.0,'중','완료',33.264694,126.641285,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-47','신례리 해안','수직호안','1B',1,655.0,'하','완료',33.265978,126.642651,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-48','위미리 해안','모래자갈혼합','5',5,309.0,'중','완료',33.265041,126.644718,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-49','신례리 해안','수직암반','1A',1,236.0,'하','완료',33.266862,126.646841,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-50','남원리 해안','모래자갈혼합','5',5,917.0,'중','진행중',33.266317,126.648633,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-51','남원리 해안','모래자갈혼합','5',5,299.0,'중','미조사',33.267839,126.650942,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-52','태흥리 해안','수평암반','8A',8,961.0,'상','완료',33.266895,126.650465,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-53','남원리 해안','모래자갈혼합','5',5,908.0,'중','완료',33.268782,126.651283,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-54','태흥리 해안','수평암반','8A',8,596.0,'상','완료',33.269555,126.652724,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-55','태흥리 해안','수평암반','8A',8,423.0,'상','완료',33.268789,126.654872,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-56','남원리 해안','수직호안','1B',1,851.0,'하','완료',33.270568,126.657843,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-57','위미리 해안','수직호안','1B',1,187.0,'하','완료',33.270606,126.658044,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-58','태흥리 해안','모래자갈혼합','5',5,212.0,'중','완료',33.270922,126.658959,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-59','신례리 해안','수직호안','1B',1,689.0,'하','진행중',33.272109,126.661732,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-60','신흥리 해안','투과성 인공호안','6B',6,562.0,'중','완료',33.272463,126.661004,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-61','태흥리 해안','투과성 인공호안','6B',6,652.0,'중','완료',33.273979,126.664346,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-62','위미리 해안','수직암반','1A',1,702.0,'하','완료',33.274370,126.666078,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-63','위미리 해안','수직암반','1A',1,181.0,'하','완료',33.275543,126.666947,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-64','신례리 해안','수직호안','1B',1,386.0,'하','완료',33.275878,126.667619,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-65','신례리 해안','수직암반','1A',1,216.0,'하','완료',33.275082,126.669548,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-66','신흥리 해안','모래자갈혼합','5',5,273.0,'중','완료',33.275268,126.669321,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-67','남원리 해안','모래','3A',3,371.0,'하','완료',33.275692,126.670372,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-68','위미리 해안','수직암반','1A',1,310.0,'하','완료',33.275805,126.671690,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-69','신례리 해안','투과성 인공호안','6B',6,310.0,'중','미조사',33.278697,126.675203,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-70','신례리 해안','수평암반','8A',8,935.0,'상','진행중',33.277955,126.675162,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-71','태흥리 해안','모래','3A',3,416.0,'하','완료',33.278515,126.676320,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-72','남원리 해안','자갈·왕자갈','6A',6,775.0,'중','완료',33.278098,126.678703,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGNW'),'SGNW-73','태흥리 해안','투과성 인공호안','6B',6,937.0,'중','진행중',33.279014,126.678932,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGHY'),'SGHY-1','보목동 해안','투과성 인공호안','6B',6,631.0,'중','완료',33.241262,126.569158,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGHY'),'SGHY-2','보목동 해안','모래자갈혼합','5',5,725.0,'중','진행중',33.242828,126.576307,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGHY'),'SGHY-3','보목동 해안','수직호안','1B',1,481.0,'하','완료',33.242640,126.581143,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGHY'),'SGHY-4','하효동 해안','투과성 인공호안','6B',6,175.0,'중','완료',33.243827,126.587211,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGHY'),'SGHY-5','하효동 해안','모래','3A',3,281.0,'하','완료',33.246545,126.591531,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGHY'),'SGHY-6','하효동 해안','자갈·왕자갈','6A',6,723.0,'중','완료',33.245751,126.597324,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGHY'),'SGHY-7','하효동 해안','모래','3A',3,383.0,'하','완료',33.248691,126.604983,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGHY'),'SGHY-8','보목동 해안','수직호안','1B',1,723.0,'하','완료',33.248777,126.609866,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGTP'),'SGTP-1','동흥동 해안','수직암반','1A',1,911.0,'하','완료',33.240972,126.539742,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGTP'),'SGTP-2','동흥동 해안','자갈·왕자갈','6A',6,526.0,'중','완료',33.241380,126.543472,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGTP'),'SGTP-3','토평동 해안','모래','3A',3,616.0,'하','완료',33.243044,126.544852,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGTP'),'SGTP-4','동흥동 해안','수직암반','1A',1,781.0,'하','미조사',33.242472,126.547752,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGTP'),'SGTP-5','동흥동 해안','수직호안','1B',1,801.0,'하','미조사',33.242613,126.549458,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGTP'),'SGTP-6','동흥동 해안','모래자갈혼합','5',5,655.0,'중','완료',33.245221,126.553176,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGTP'),'SGTP-7','토평동 해안','투과성 인공호안','6B',6,433.0,'중','완료',33.244580,126.554910,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGTP'),'SGTP-8','토평동 해안','수직암반','1A',1,628.0,'하','완료',33.246488,126.560412,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGTP'),'SGTP-9','동흥동 해안','수직암반','1A',1,103.0,'하','완료',33.248246,126.560702,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGTP'),'SGTP-10','토평동 해안','모래자갈혼합','5',5,997.0,'중','완료',33.247003,126.565086,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGTP'),'SGTP-11','동흥동 해안','수평암반','8A',8,780.0,'상','미조사',33.249101,126.568255,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGTP'),'SGTP-12','토평동 해안','수직암반','1A',1,607.0,'하','완료',33.250350,126.569428,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSG'),'SGSG-1','서귀동 해안','수평암반','8A',8,996.0,'상','완료',33.240270,126.514970,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSG'),'SGSG-2','서귀동 해안','투과성 인공호안','6B',6,939.0,'중','진행중',33.241973,126.516763,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSG'),'SGSG-3','서홍동 해안','투과성 인공호안','6B',6,716.0,'중','완료',33.241790,126.519474,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSG'),'SGSG-4','서홍동 해안','수평암반','8A',8,378.0,'상','진행중',33.241630,126.519234,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSG'),'SGSG-5','서귀동 해안','수직호안','1B',1,707.0,'하','완료',33.240635,126.521290,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSG'),'SGSG-6','서귀동 해안','수직암반','1A',1,606.0,'하','완료',33.243449,126.521613,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSG'),'SGSG-7','서귀동 해안','투과성 인공호안','6B',6,220.0,'중','진행중',33.242255,126.524556,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSG'),'SGSG-8','서귀동 해안','수직암반','1A',1,543.0,'하','미조사',33.244828,126.525178,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSG'),'SGSG-9','서홍동 해안','수직호안','1B',1,183.0,'하','완료',33.244769,126.528918,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSG'),'SGSG-10','서홍동 해안','모래','3A',3,303.0,'하','완료',33.244928,126.529379,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSG'),'SGSG-11','서귀동 해안','투과성 인공호안','6B',6,234.0,'중','완료',33.244603,126.531232,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSG'),'SGSG-12','서홍동 해안','모래자갈혼합','5',5,726.0,'중','미조사',33.244458,126.532842,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSG'),'SGSG-13','서귀동 해안','수평암반','8A',8,680.0,'상','진행중',33.244884,126.535184,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSG'),'SGSG-14','서홍동 해안','수직암반','1A',1,233.0,'하','완료',33.245723,126.536789,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSG'),'SGSG-15','서귀동 해안','수직암반','1A',1,684.0,'하','완료',33.247519,126.536548,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSG'),'SGSG-16','서귀동 해안','자갈·왕자갈','6A',6,399.0,'중','완료',33.246932,126.537635,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSG'),'SGSG-17','서홍동 해안','수직암반','1A',1,945.0,'하','미조사',33.248789,126.541034,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSG'),'SGSG-18','서홍동 해안','수평암반','8A',8,224.0,'상','완료',33.247822,126.542180,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSG'),'SGSG-19','서홍동 해안','모래자갈혼합','5',5,227.0,'중','미조사',33.250254,126.543504,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSG'),'SGSG-20','서홍동 해안','수직암반','1A',1,416.0,'하','완료',33.249500,126.543630,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGHG'),'SGHG-1','법환동 해안','수직호안','1B',1,135.0,'하','진행중',33.240891,126.480247,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGHG'),'SGHG-2','법환동 해안','수직호안','1B',1,196.0,'하','완료',33.242654,126.487136,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGHG'),'SGHG-3','서호동 해안','수평암반','8A',8,917.0,'상','완료',33.243634,126.495084,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGHG'),'SGHG-4','서호동 해안','투과성 인공호안','6B',6,795.0,'중','완료',33.247224,126.504294,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGHG'),'SGHG-5','법환동 해안','수직암반','1A',1,846.0,'하','완료',33.247427,126.510839,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGHG'),'SGHG-6','서호동 해안','모래','3A',3,295.0,'하','진행중',33.248757,126.518636,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGGJ'),'SGGJ-1','강정동 해안','투과성 인공호안','6B',6,125.0,'중','완료',33.239149,126.419667,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGGJ'),'SGGJ-2','강정동 해안','투과성 인공호안','6B',6,935.0,'중','완료',33.239142,126.421796,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGGJ'),'SGGJ-3','강정동 해안','수평암반','8A',8,271.0,'상','완료',33.242154,126.425598,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGGJ'),'SGGJ-4','강정동 해안','수평암반','8A',8,851.0,'상','완료',33.242381,126.429276,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGGJ'),'SGGJ-5','강정동 해안','모래자갈혼합','5',5,579.0,'중','미조사',33.243375,126.432667,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGGJ'),'SGGJ-6','강정동 해안','수직호안','1B',1,778.0,'하','완료',33.242142,126.433546,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGGJ'),'SGGJ-7','강정동 해안','모래','3A',3,341.0,'하','완료',33.242585,126.438278,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGGJ'),'SGGJ-8','강정동 해안','자갈·왕자갈','6A',6,454.0,'중','완료',33.243750,126.440260,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGGJ'),'SGGJ-9','강정동 해안','모래자갈혼합','5',5,632.0,'중','완료',33.245080,126.445021,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGGJ'),'SGGJ-10','강정동 해안','수평암반','8A',8,200.0,'상','진행중',33.244768,126.447913,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGGJ'),'SGGJ-11','강정동 해안','투과성 인공호안','6B',6,247.0,'중','완료',33.244194,126.450110,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGGJ'),'SGGJ-12','강정동 해안','모래','3A',3,183.0,'하','완료',33.245367,126.451755,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGGJ'),'SGGJ-13','강정동 해안','모래','3A',3,652.0,'하','완료',33.244726,126.456664,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGGJ'),'SGGJ-14','강정동 해안','모래','3A',3,152.0,'하','진행중',33.245368,126.457799,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGGJ'),'SGGJ-15','강정동 해안','자갈·왕자갈','6A',6,398.0,'중','완료',33.247526,126.461589,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGGJ'),'SGGJ-16','강정동 해안','투과성 인공호안','6B',6,610.0,'중','진행중',33.248789,126.464827,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGGJ'),'SGGJ-17','강정동 해안','수직암반','1A',1,643.0,'하','완료',33.247609,126.467909,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGGJ'),'SGGJ-18','강정동 해안','수평암반','8A',8,719.0,'상','완료',33.247661,126.470023,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGGJ'),'SGGJ-19','강정동 해안','수평암반','8A',8,302.0,'상','진행중',33.248950,126.472747,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGGJ'),'SGGJ-20','강정동 해안','투과성 인공호안','6B',6,686.0,'중','진행중',33.249957,126.476020,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGGJ'),'SGGJ-21','강정동 해안','투과성 인공호안','6B',6,361.0,'중','진행중',33.249048,126.480175,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGWP'),'SGWP-1','월평동 해안','자갈·왕자갈','6A',6,938.0,'중','미조사',33.238800,126.379996,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGWP'),'SGWP-2','대포동 해안','수직암반','1A',1,453.0,'하','완료',33.242730,126.394586,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGWP'),'SGWP-3','월평동 해안','모래자갈혼합','5',5,503.0,'중','완료',33.247661,126.406886,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGWP'),'SGWP-4','월평동 해안','모래자갈혼합','5',5,550.0,'중','완료',33.251093,126.419968,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGJM'),'SGJM-1','중문동 해안','모래','3A',3,340.0,'하','완료',33.240457,126.354384,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGJM'),'SGJM-2','중문동 해안','모래','3A',3,978.0,'하','완료',33.242044,126.358301,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGJM'),'SGJM-3','중문동 해안','모래자갈혼합','5',5,771.0,'중','완료',33.243378,126.362580,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGJM'),'SGJM-4','중문동 해안','수평암반','8A',8,836.0,'상','미조사',33.244923,126.366489,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGJM'),'SGJM-5','중문동 해안','투과성 인공호안','6B',6,293.0,'중','완료',33.246254,126.372967,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGJM'),'SGJM-6','중문동 해안','자갈·왕자갈','6A',6,670.0,'중','완료',33.246742,126.377482,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGJM'),'SGJM-7','중문동 해안','수직호안','1B',1,273.0,'하','진행중',33.248462,126.379646,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGJM'),'SGJM-8','중문동 해안','수직암반','1A',1,346.0,'하','완료',33.249948,126.383883,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSE'),'SGSE-1','색달동 해안','수평암반','8A',8,586.0,'상','미조사',33.241394,126.324383,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSE'),'SGSE-2','색달동 해안','투과성 인공호안','6B',6,131.0,'중','진행중',33.241597,126.328974,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSE'),'SGSE-3','하예동 해안','수평암반','8A',8,406.0,'상','미조사',33.241728,126.333184,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSE'),'SGSE-4','하예동 해안','자갈·왕자갈','6A',6,410.0,'중','완료',33.243027,126.336760,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSE'),'SGSE-5','색달동 해안','자갈·왕자갈','6A',6,305.0,'중','완료',33.245335,126.340913,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSE'),'SGSE-6','하예동 해안','수직호안','1B',1,405.0,'하','미조사',33.246653,126.345289,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSE'),'SGSE-7','색달동 해안','모래','3A',3,237.0,'하','진행중',33.247218,126.350058,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGSE'),'SGSE-8','색달동 해안','모래','3A',3,802.0,'하','완료',33.251150,126.353634,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGAD'),'SGAD-1','대평리 해안','투과성 인공호안','6B',6,280.0,'중','완료',33.231313,126.254514,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGAD'),'SGAD-2','덕수리 해안','모래자갈혼합','5',5,783.0,'중','진행중',33.229883,126.257264,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGAD'),'SGAD-3','사계리 해안','수직암반','1A',1,879.0,'하','미조사',33.229836,126.257337,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGAD'),'SGAD-4','창천리 해안','모래','3A',3,832.0,'하','미조사',33.232423,126.260828,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGAD'),'SGAD-5','사계리 해안','수직호안','1B',1,507.0,'하','완료',33.231075,126.261548,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGAD'),'SGAD-6','창천리 해안','수평암반','8A',8,288.0,'상','완료',33.232368,126.265438,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGAD'),'SGAD-7','대평리 해안','수직암반','1A',1,132.0,'하','완료',33.232493,126.267212,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGAD'),'SGAD-8','창천리 해안','모래자갈혼합','5',5,201.0,'중','완료',33.233981,126.269530,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGAD'),'SGAD-9','대평리 해안','모래','3A',3,523.0,'하','미조사',33.233647,126.269020,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGAD'),'SGAD-10','사계리 해안','투과성 인공호안','6B',6,681.0,'중','완료',33.234128,126.270817,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGAD'),'SGAD-11','사계리 해안','수평암반','8A',8,223.0,'상','완료',33.234162,126.275221,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGAD'),'SGAD-12','덕수리 해안','수직호안','1B',1,383.0,'하','완료',33.235388,126.275474,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGAD'),'SGAD-13','화순리 해안','투과성 인공호안','6B',6,833.0,'중','미조사',33.237452,126.276293,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGAD'),'SGAD-14','대평리 해안','수직호안','1B',1,991.0,'하','완료',33.238340,126.279107,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGAD'),'SGAD-15','감산리 해안','모래','3A',3,262.0,'하','미조사',33.238429,126.280783,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGAD'),'SGAD-16','덕수리 해안','자갈·왕자갈','6A',6,715.0,'중','진행중',33.237621,126.283745,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGAD'),'SGAD-17','화순리 해안','수직암반','1A',1,955.0,'하','완료',33.238419,126.284645,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGAD'),'SGAD-18','대평리 해안','수직호안','1B',1,862.0,'하','진행중',33.238226,126.287376,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGAD'),'SGAD-19','사계리 해안','수직암반','1A',1,906.0,'하','완료',33.240415,126.289027,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGAD'),'SGAD-20','화순리 해안','투과성 인공호안','6B',6,252.0,'중','완료',33.241013,126.292437,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGAD'),'SGAD-21','화순리 해안','모래자갈혼합','5',5,177.0,'중','미조사',33.240793,126.293781,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGAD'),'SGAD-22','창천리 해안','모래','3A',3,420.0,'하','완료',33.241133,126.295494,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGAD'),'SGAD-23','대평리 해안','모래','3A',3,630.0,'하','미조사',33.242945,126.297418,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGAD'),'SGAD-24','덕수리 해안','수직암반','1A',1,698.0,'하','완료',33.243858,126.298451,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGAD'),'SGAD-25','창천리 해안','모래','3A',3,867.0,'하','미조사',33.243976,126.300035,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGAD'),'SGAD-26','창천리 해안','수직호안','1B',1,736.0,'하','진행중',33.243037,126.302888,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGAD'),'SGAD-27','감산리 해안','수직호안','1B',1,914.0,'하','진행중',33.242893,126.305064,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGAD'),'SGAD-28','덕수리 해안','모래','3A',3,349.0,'하','진행중',33.244798,126.306779,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGAD'),'SGAD-29','사계리 해안','모래','3A',3,143.0,'하','완료',33.243863,126.307578,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGAD'),'SGAD-30','덕수리 해안','모래','3A',3,516.0,'하','완료',33.246020,126.308460,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGAD'),'SGAD-31','감산리 해안','모래자갈혼합','5',5,659.0,'중','완료',33.246255,126.313196,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGAD'),'SGAD-32','덕수리 해안','수직암반','1A',1,810.0,'하','완료',33.246149,126.313831,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGAD'),'SGAD-33','대평리 해안','수직암반','1A',1,383.0,'하','완료',33.246476,126.315532,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGAD'),'SGAD-34','감산리 해안','모래','3A',3,488.0,'하','완료',33.246864,126.315965,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGAD'),'SGAD-35','감산리 해안','수평암반','8A',8,235.0,'상','진행중',33.248841,126.320448,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGAD'),'SGAD-36','덕수리 해안','투과성 인공호안','6B',6,292.0,'중','완료',33.250123,126.320056,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGAD'),'SGAD-37','사계리 해안','수직암반','1A',1,836.0,'하','완료',33.250872,126.323912,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGAD'),'SGAD-38','대평리 해안','자갈·왕자갈','6A',6,591.0,'중','완료',33.250227,126.323621,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-1','하모리 해안','자갈·왕자갈','6A',6,293.0,'중','미조사',33.215928,126.160536,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-2','하모리 해안','수평암반','8A',8,969.0,'상','진행중',33.216188,126.162192,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-3','인성리 해안','수직암반','1A',1,804.0,'하','완료',33.215487,126.162432,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-4','하모리 해안','수직암반','1A',1,256.0,'하','완료',33.217665,126.162573,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-5','하모리 해안','투과성 인공호안','6B',6,538.0,'중','완료',33.219914,126.164848,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-6','상모리 해안','모래자갈혼합','5',5,286.0,'중','완료',33.219563,126.167082,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-7','신도리 해안','수직암반','1A',1,904.0,'하','진행중',33.219443,126.167306,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-8','보성리 해안','투과성 인공호안','6B',6,247.0,'중','완료',33.221640,126.168649,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-9','하모리 해안','수직호안','1B',1,216.0,'하','미조사',33.223148,126.170301,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-10','영락리 해안','모래','3A',3,564.0,'하','완료',33.224543,126.172622,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-11','보성리 해안','모래자갈혼합','5',5,137.0,'중','완료',33.223932,126.172141,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-12','상모리 해안','수평암반','8A',8,947.0,'상','완료',33.224085,126.173870,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-13','하모리 해안','모래','3A',3,446.0,'하','완료',33.226137,126.175064,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-14','보성리 해안','모래','3A',3,754.0,'하','미조사',33.227635,126.177832,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-15','보성리 해안','모래자갈혼합','5',5,999.0,'중','완료',33.227671,126.176738,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-16','보성리 해안','모래','3A',3,622.0,'하','미조사',33.227144,126.180614,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-17','영락리 해안','모래자갈혼합','5',5,348.0,'중','완료',33.229514,126.181138,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-18','보성리 해안','수평암반','8A',8,408.0,'상','완료',33.231509,126.180389,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-19','신도리 해안','수직호안','1B',1,480.0,'하','완료',33.231319,126.182067,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-20','하모리 해안','투과성 인공호안','6B',6,441.0,'중','미조사',33.231798,126.184310,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-21','하모리 해안','자갈·왕자갈','6A',6,392.0,'중','완료',33.232694,126.186263,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-22','신도리 해안','투과성 인공호안','6B',6,479.0,'중','미조사',33.234676,126.186885,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-23','영락리 해안','투과성 인공호안','6B',6,575.0,'중','완료',33.234611,126.189498,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-24','상모리 해안','모래자갈혼합','5',5,739.0,'중','완료',33.236079,126.190507,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-25','영락리 해안','투과성 인공호안','6B',6,279.0,'중','완료',33.236213,126.190372,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-26','하모리 해안','수직암반','1A',1,832.0,'하','완료',33.236239,126.192182,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-27','무릉리 해안','수평암반','8A',8,539.0,'상','진행중',33.237501,126.192177,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-28','보성리 해안','수평암반','8A',8,808.0,'상','완료',33.239470,126.195123,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-29','영락리 해안','자갈·왕자갈','6A',6,752.0,'중','완료',33.240603,126.195286,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-30','하모리 해안','수평암반','8A',8,168.0,'상','완료',33.239903,126.196855,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-31','상모리 해안','모래','3A',3,998.0,'하','미조사',33.242410,126.198423,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-32','상모리 해안','자갈·왕자갈','6A',6,516.0,'중','진행중',33.243195,126.200137,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-33','보성리 해안','수직호안','1B',1,213.0,'하','완료',33.243008,126.201408,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-34','상모리 해안','자갈·왕자갈','6A',6,852.0,'중','완료',33.244576,126.201099,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-35','하모리 해안','투과성 인공호안','6B',6,656.0,'중','완료',33.244620,126.204670,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-36','무릉리 해안','수평암반','8A',8,634.0,'상','완료',33.245667,126.204789,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-37','신도리 해안','투과성 인공호안','6B',6,562.0,'중','미조사',33.248413,126.205727,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-38','영락리 해안','수직호안','1B',1,618.0,'하','완료',33.247623,126.208302,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-39','하모리 해안','자갈·왕자갈','6A',6,309.0,'중','미조사',33.249900,126.208020,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-40','신도리 해안','모래','3A',3,367.0,'하','완료',33.249119,126.208853,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-41','무릉리 해안','수직호안','1B',1,466.0,'하','완료',33.250241,126.210785,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-42','무릉리 해안','수평암반','8A',8,415.0,'상','완료',33.252313,126.212570,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-43','인성리 해안','수직호안','1B',1,192.0,'하','진행중',33.252620,126.213825,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-44','보성리 해안','모래자갈혼합','5',5,568.0,'중','미조사',33.252929,126.215188,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-45','보성리 해안','수평암반','8A',8,327.0,'상','완료',33.255546,126.217759,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-46','영락리 해안','모래','3A',3,655.0,'하','미조사',33.254157,126.218725,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-47','상모리 해안','수직호안','1B',1,633.0,'하','진행중',33.255515,126.219829,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-48','하모리 해안','자갈·왕자갈','6A',6,610.0,'중','미조사',33.257494,126.219200,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-49','신도리 해안','모래','3A',3,387.0,'하','완료',33.257695,126.221346,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-50','인성리 해안','수직암반','1A',1,166.0,'하','완료',33.257984,126.224289,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-51','인성리 해안','모래','3A',3,118.0,'하','완료',33.260373,126.225017,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-52','무릉리 해안','수직호안','1B',1,250.0,'하','완료',33.261977,126.224165,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-53','상모리 해안','모래','3A',3,779.0,'하','미조사',33.262037,126.227885,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-54','보성리 해안','수직호안','1B',1,897.0,'하','완료',33.262106,126.228240,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-55','무릉리 해안','자갈·왕자갈','6A',6,561.0,'중','완료',33.264136,126.228128,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-56','인성리 해안','수평암반','8A',8,304.0,'상','완료',33.264041,126.229591,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-57','영락리 해안','투과성 인공호안','6B',6,741.0,'중','완료',33.265821,126.230793,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-58','하모리 해안','모래자갈혼합','5',5,497.0,'중','완료',33.266294,126.232503,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-59','무릉리 해안','모래자갈혼합','5',5,777.0,'중','완료',33.268091,126.234844,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-60','하모리 해안','모래','3A',3,261.0,'하','완료',33.269141,126.236960,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-61','인성리 해안','수직호안','1B',1,828.0,'하','완료',33.269904,126.236481,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-62','하모리 해안','모래','3A',3,991.0,'하','완료',33.271112,126.237650,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-63','무릉리 해안','모래자갈혼합','5',5,570.0,'중','완료',33.270348,126.240712,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-64','신도리 해안','모래','3A',3,465.0,'하','미조사',33.270674,126.240440,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-65','보성리 해안','수평암반','8A',8,276.0,'상','완료',33.271507,126.240660,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-66','무릉리 해안','모래자갈혼합','5',5,457.0,'중','완료',33.273843,126.242551,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-67','영락리 해안','모래','3A',3,366.0,'하','완료',33.275625,126.243691,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-68','상모리 해안','모래자갈혼합','5',5,277.0,'중','미조사',33.273951,126.247004,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-69','상모리 해안','수평암반','8A',8,994.0,'상','진행중',33.276965,126.247516,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-70','무릉리 해안','자갈·왕자갈','6A',6,839.0,'중','완료',33.277137,126.248417,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-71','상모리 해안','수직호안','1B',1,747.0,'하','미조사',33.277581,126.250338,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-72','상모리 해안','모래자갈혼합','5',5,873.0,'중','완료',33.278618,126.251325,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-73','무릉리 해안','수평암반','8A',8,264.0,'상','완료',33.278998,126.252488,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-74','영락리 해안','모래자갈혼합','5',5,166.0,'중','완료',33.280032,126.252518,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-75','인성리 해안','수직호안','1B',1,154.0,'하','미조사',33.282445,126.253792,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-76','영락리 해안','자갈·왕자갈','6A',6,633.0,'중','완료',33.282547,126.257012,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-77','무릉리 해안','투과성 인공호안','6B',6,300.0,'중','완료',33.282628,126.257008,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-78','영락리 해안','수평암반','8A',8,993.0,'상','완료',33.282861,126.257654,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='SGDJ'),'SGDJ-79','영락리 해안','모래자갈혼합','5',5,473.0,'중','진행중',33.283663,126.260434,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-1','두모리 해안','수직호안','1B',1,335.0,'하','완료',33.268627,126.151392,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-2','용수리 해안','자갈·왕자갈','6A',6,866.0,'중','완료',33.271106,126.149868,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-3','두모리 해안','수직암반','1A',1,647.0,'하','완료',33.270624,126.151136,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-4','판포리 해안','모래','3A',3,318.0,'하','완료',33.274001,126.152018,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-5','두모리 해안','수직암반','1A',1,857.0,'하','완료',33.275494,126.153820,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-6','판포리 해안','자갈·왕자갈','6A',6,730.0,'중','완료',33.275979,126.154436,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-7','용수리 해안','수직암반','1A',1,307.0,'하','완료',33.276447,126.155300,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-8','판포리 해안','자갈·왕자갈','6A',6,319.0,'중','완료',33.277205,126.157930,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-9','신창리 해안','수직암반','1A',1,989.0,'하','완료',33.278919,126.157039,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-10','고산리 해안','수평암반','8A',8,214.0,'상','완료',33.277947,126.158328,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-11','판포리 해안','자갈·왕자갈','6A',6,258.0,'중','미조사',33.281207,126.159014,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-12','고산리 해안','수직호안','1B',1,271.0,'하','완료',33.280622,126.159832,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-13','두모리 해안','모래','3A',3,694.0,'하','완료',33.282910,126.162664,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-14','두모리 해안','수직호안','1B',1,188.0,'하','완료',33.284067,126.162436,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-15','판포리 해안','모래','3A',3,956.0,'하','완료',33.284085,126.162643,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-16','고산리 해안','자갈·왕자갈','6A',6,643.0,'중','미조사',33.284785,126.164568,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-17','두모리 해안','수직호안','1B',1,730.0,'하','미조사',33.285768,126.165365,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-18','용수리 해안','자갈·왕자갈','6A',6,951.0,'중','미조사',33.286628,126.167046,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-19','용수리 해안','투과성 인공호안','6B',6,678.0,'중','진행중',33.286639,126.169410,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-20','신창리 해안','수직호안','1B',1,909.0,'하','완료',33.288259,126.168948,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-21','두모리 해안','수평암반','8A',8,671.0,'상','완료',33.289753,126.170450,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-22','신창리 해안','투과성 인공호안','6B',6,978.0,'중','완료',33.292453,126.171258,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-23','용수리 해안','수직암반','1A',1,960.0,'하','진행중',33.291625,126.173182,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-24','신창리 해안','모래','3A',3,365.0,'하','진행중',33.292306,126.172955,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-25','용수리 해안','모래','3A',3,574.0,'하','완료',33.294099,126.174880,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-26','고산리 해안','자갈·왕자갈','6A',6,356.0,'중','완료',33.293875,126.176198,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-27','신창리 해안','수평암반','8A',8,253.0,'상','진행중',33.297453,126.175556,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-28','신창리 해안','수직호안','1B',1,526.0,'하','완료',33.295899,126.178115,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-29','금등리 해안','모래','3A',3,770.0,'하','완료',33.299004,126.178990,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-30','신창리 해안','수직호안','1B',1,525.0,'하','완료',33.299344,126.178415,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-31','금등리 해안','수평암반','8A',8,649.0,'상','완료',33.299740,126.178653,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-32','두모리 해안','투과성 인공호안','6B',6,140.0,'중','완료',33.300659,126.182183,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-33','고산리 해안','수직암반','1A',1,387.0,'하','완료',33.300696,126.180513,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-34','금등리 해안','모래','3A',3,198.0,'하','완료',33.301704,126.182627,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-35','판포리 해안','수직암반','1A',1,658.0,'하','진행중',33.304515,126.182679,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-36','고산리 해안','수직호안','1B',1,456.0,'하','완료',33.303769,126.183905,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-37','금등리 해안','모래','3A',3,635.0,'하','진행중',33.306077,126.187090,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-38','판포리 해안','자갈·왕자갈','6A',6,467.0,'중','완료',33.307162,126.187486,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-39','용수리 해안','수직호안','1B',1,401.0,'하','완료',33.309180,126.188565,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-40','용수리 해안','모래','3A',3,385.0,'하','미조사',33.309429,126.188741,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-41','금등리 해안','투과성 인공호안','6B',6,912.0,'중','완료',33.309127,126.189081,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-42','신창리 해안','수평암반','8A',8,702.0,'상','완료',33.310927,126.191331,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-43','고산리 해안','수직호안','1B',1,774.0,'하','완료',33.313168,126.191514,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-44','신창리 해안','모래','3A',3,623.0,'하','완료',33.312797,126.192641,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-45','금등리 해안','수평암반','8A',8,663.0,'상','완료',33.312567,126.194370,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-46','고산리 해안','수평암반','8A',8,683.0,'상','완료',33.314508,126.193976,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-47','두모리 해안','투과성 인공호안','6B',6,610.0,'중','미조사',33.315794,126.196046,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-48','금등리 해안','모래자갈혼합','5',5,457.0,'중','완료',33.316299,126.198483,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-49','고산리 해안','모래','3A',3,640.0,'하','완료',33.318343,126.196532,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-50','고산리 해안','수직암반','1A',1,666.0,'하','미조사',33.319310,126.198815,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-51','두모리 해안','투과성 인공호안','6B',6,318.0,'중','완료',33.320796,126.200524,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-52','두모리 해안','자갈·왕자갈','6A',6,659.0,'중','완료',33.319839,126.200343,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-53','두모리 해안','투과성 인공호안','6B',6,402.0,'중','완료',33.322992,126.201790,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-54','고산리 해안','모래자갈혼합','5',5,153.0,'중','완료',33.323921,126.201618,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-55','고산리 해안','모래','3A',3,780.0,'하','완료',33.323050,126.204594,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-56','용수리 해안','수직호안','1B',1,340.0,'하','완료',33.325574,126.206132,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-57','판포리 해안','자갈·왕자갈','6A',6,817.0,'중','완료',33.325024,126.205047,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-58','고산리 해안','수평암반','8A',8,399.0,'상','완료',33.327857,126.207520,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-59','고산리 해안','수평암반','8A',8,874.0,'상','완료',33.327931,126.209017,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-60','고산리 해안','자갈·왕자갈','6A',6,236.0,'중','진행중',33.328200,126.210349,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-61','금등리 해안','모래자갈혼합','5',5,291.0,'중','진행중',33.329489,126.208882,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-62','신창리 해안','수평암반','8A',8,351.0,'상','완료',33.331349,126.210327,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-63','신창리 해안','수직암반','1A',1,749.0,'하','완료',33.332133,126.211660,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-64','판포리 해안','모래','3A',3,457.0,'하','완료',33.334140,126.213767,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-65','두모리 해안','투과성 인공호안','6B',6,150.0,'중','미조사',33.334109,126.212753,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-66','신창리 해안','투과성 인공호안','6B',6,529.0,'중','진행중',33.336447,126.215608,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-67','금등리 해안','자갈·왕자갈','6A',6,177.0,'중','완료',33.335065,126.216161,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-68','금등리 해안','자갈·왕자갈','6A',6,238.0,'중','완료',33.338303,126.216330,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-69','고산리 해안','모래','3A',3,803.0,'하','진행중',33.338885,126.217187,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-70','두모리 해안','모래','3A',3,285.0,'하','미조사',33.339912,126.217517,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-71','두모리 해안','수평암반','8A',8,460.0,'상','완료',33.338650,126.219887,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-72','두모리 해안','자갈·왕자갈','6A',6,728.0,'중','미조사',33.341849,126.219660,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-73','금등리 해안','수직호안','1B',1,378.0,'하','완료',33.341844,126.222012,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-74','용수리 해안','수직호안','1B',1,112.0,'하','완료',33.342387,126.224375,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-75','판포리 해안','모래자갈혼합','5',5,324.0,'중','완료',33.343333,126.223495,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-76','두모리 해안','투과성 인공호안','6B',6,436.0,'중','완료',33.346472,126.224928,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-77','판포리 해안','모래자갈혼합','5',5,743.0,'중','완료',33.346923,126.227219,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-78','판포리 해안','수직암반','1A',1,602.0,'하','완료',33.347098,126.225763,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-79','금등리 해안','자갈·왕자갈','6A',6,200.0,'중','완료',33.348229,126.226862,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-80','두모리 해안','모래','3A',3,236.0,'하','진행중',33.348453,126.227913,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHG'),'JJHG-81','판포리 해안','수직호안','1B',1,986.0,'하','완료',33.349171,126.230411,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-1','한수리 해안','수직암반','1A',1,590.0,'하','진행중',33.350085,126.209514,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-2','한림리 해안','수평암반','8A',8,648.0,'상','진행중',33.352183,126.210532,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-3','옹포리 해안','수직암반','1A',1,257.0,'하','완료',33.352830,126.212719,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-4','귀덕리 해안','투과성 인공호안','6B',6,640.0,'중','완료',33.354270,126.214215,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-5','수원리 해안','투과성 인공호안','6B',6,301.0,'중','미조사',33.355160,126.213926,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-6','귀덕리 해안','투과성 인공호안','6B',6,221.0,'중','완료',33.354297,126.216146,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-7','금능리 해안','모래','3A',3,215.0,'하','진행중',33.356991,126.218422,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-8','한림리 해안','투과성 인공호안','6B',6,462.0,'중','미조사',33.355435,126.217970,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-9','귀덕리 해안','모래','3A',3,462.0,'하','미조사',33.357966,126.219438,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-10','귀덕리 해안','자갈·왕자갈','6A',6,753.0,'중','완료',33.357188,126.220954,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-11','월령리 해안','자갈·왕자갈','6A',6,767.0,'중','진행중',33.358558,126.222862,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-12','금능리 해안','모래','3A',3,399.0,'하','미조사',33.358965,126.224235,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-13','월령리 해안','수직암반','1A',1,152.0,'하','완료',33.361268,126.225115,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-14','월령리 해안','수직호안','1B',1,871.0,'하','미조사',33.362517,126.226357,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-15','한림리 해안','모래자갈혼합','5',5,156.0,'중','완료',33.363974,126.227096,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-16','금능리 해안','투과성 인공호안','6B',6,775.0,'중','완료',33.364544,126.226519,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-17','옹포리 해안','자갈·왕자갈','6A',6,629.0,'중','완료',33.363521,126.228171,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-18','협재리 해안','수직호안','1B',1,432.0,'하','완료',33.367144,126.228355,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-19','한수리 해안','투과성 인공호안','6B',6,189.0,'중','완료',33.367359,126.229799,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-20','월령리 해안','수직암반','1A',1,156.0,'하','완료',33.367426,126.232702,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-21','한림리 해안','수직호안','1B',1,591.0,'하','완료',33.367516,126.234636,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-22','한림리 해안','자갈·왕자갈','6A',6,995.0,'중','완료',33.369552,126.234964,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-23','귀덕리 해안','수평암반','8A',8,452.0,'상','완료',33.369952,126.234267,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-24','금능리 해안','수직암반','1A',1,472.0,'하','완료',33.372483,126.236299,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-25','옹포리 해안','투과성 인공호안','6B',6,255.0,'중','진행중',33.373739,126.237540,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-26','귀덕리 해안','자갈·왕자갈','6A',6,492.0,'중','완료',33.374714,126.237624,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-27','월령리 해안','투과성 인공호안','6B',6,982.0,'중','진행중',33.373668,126.239540,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-28','옹포리 해안','자갈·왕자갈','6A',6,827.0,'중','미조사',33.376073,126.242005,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-29','협재리 해안','수평암반','8A',8,568.0,'상','진행중',33.377481,126.243253,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-30','옹포리 해안','수직암반','1A',1,847.0,'하','미조사',33.378337,126.242687,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-31','옹포리 해안','모래자갈혼합','5',5,662.0,'중','완료',33.378603,126.243906,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-32','옹포리 해안','자갈·왕자갈','6A',6,917.0,'중','완료',33.377414,126.245527,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-33','협재리 해안','자갈·왕자갈','6A',6,719.0,'중','미조사',33.380962,126.247536,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-34','한림리 해안','수직호안','1B',1,815.0,'하','완료',33.380710,126.248224,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-35','귀덕리 해안','수평암반','8A',8,881.0,'상','완료',33.382740,126.249511,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-36','협재리 해안','모래자갈혼합','5',5,325.0,'중','완료',33.383950,126.251914,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-37','귀덕리 해안','수직호안','1B',1,726.0,'하','완료',33.382455,126.250617,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-38','옹포리 해안','수평암반','8A',8,288.0,'상','완료',33.384854,126.253866,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-39','귀덕리 해안','수직호안','1B',1,521.0,'하','미조사',33.384580,126.255412,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-40','수원리 해안','모래','3A',3,924.0,'하','완료',33.387371,126.255746,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-41','금능리 해안','수평암반','8A',8,516.0,'상','진행중',33.386745,126.255016,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-42','한수리 해안','자갈·왕자갈','6A',6,520.0,'중','진행중',33.388718,126.258762,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-43','월령리 해안','수직암반','1A',1,397.0,'하','완료',33.387612,126.260262,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-44','옹포리 해안','수직호안','1B',1,780.0,'하','완료',33.388985,126.261264,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-45','한림리 해안','모래자갈혼합','5',5,832.0,'중','완료',33.390339,126.260687,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-46','귀덕리 해안','수직암반','1A',1,613.0,'하','완료',33.391947,126.261357,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-47','귀덕리 해안','수평암반','8A',8,312.0,'상','완료',33.392441,126.262212,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-48','한림리 해안','모래','3A',3,503.0,'하','진행중',33.392674,126.263420,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-49','옹포리 해안','모래자갈혼합','5',5,950.0,'중','완료',33.393881,126.267224,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-50','월령리 해안','수직암반','1A',1,121.0,'하','완료',33.395198,126.267515,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-51','금능리 해안','수평암반','8A',8,300.0,'상','완료',33.395088,126.268666,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-52','금능리 해안','투과성 인공호안','6B',6,655.0,'중','미조사',33.396141,126.268386,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-53','한림리 해안','투과성 인공호안','6B',6,111.0,'중','완료',33.399109,126.270588,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-54','금능리 해안','모래자갈혼합','5',5,480.0,'중','완료',33.399020,126.271605,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-55','금능리 해안','모래','3A',3,120.0,'하','완료',33.400726,126.273769,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-56','한림리 해안','자갈·왕자갈','6A',6,681.0,'중','완료',33.399711,126.275024,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-57','귀덕리 해안','수직암반','1A',1,634.0,'하','완료',33.403468,126.275583,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-58','금능리 해안','수직호안','1B',1,223.0,'하','완료',33.402736,126.276594,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-59','금능리 해안','모래','3A',3,688.0,'하','완료',33.403856,126.276572,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-60','한림리 해안','모래','3A',3,712.0,'하','완료',33.405733,126.279960,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-61','옹포리 해안','자갈·왕자갈','6A',6,931.0,'중','완료',33.404679,126.280628,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-62','한수리 해안','수평암반','8A',8,388.0,'상','완료',33.407933,126.281540,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-63','귀덕리 해안','자갈·왕자갈','6A',6,268.0,'중','완료',33.406313,126.282783,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-64','협재리 해안','수평암반','8A',8,190.0,'상','미조사',33.407600,126.283209,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-65','금능리 해안','모래자갈혼합','5',5,657.0,'중','완료',33.410914,126.283359,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-66','한수리 해안','모래','3A',3,379.0,'하','완료',33.409345,126.286579,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-67','옹포리 해안','수직호안','1B',1,980.0,'하','완료',33.411498,126.285830,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-68','한림리 해안','모래','3A',3,435.0,'하','완료',33.411750,126.288844,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-69','귀덕리 해안','자갈·왕자갈','6A',6,183.0,'중','완료',33.412448,126.289667,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-70','옹포리 해안','수직호안','1B',1,579.0,'하','완료',33.414786,126.289932,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-71','귀덕리 해안','모래자갈혼합','5',5,620.0,'중','진행중',33.415616,126.290693,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-72','금능리 해안','모래','3A',3,718.0,'하','진행중',33.416015,126.292138,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-73','옹포리 해안','투과성 인공호안','6B',6,403.0,'중','완료',33.418352,126.293496,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-74','귀덕리 해안','자갈·왕자갈','6A',6,680.0,'중','완료',33.417967,126.295357,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-75','한림리 해안','수직호안','1B',1,526.0,'하','완료',33.418706,126.296450,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-76','옹포리 해안','모래자갈혼합','5',5,452.0,'중','완료',33.420912,126.298383,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-77','수원리 해안','투과성 인공호안','6B',6,519.0,'중','미조사',33.420513,126.298399,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-78','금능리 해안','자갈·왕자갈','6A',6,784.0,'중','미조사',33.421036,126.298041,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-79','금능리 해안','모래자갈혼합','5',5,304.0,'중','진행중',33.421627,126.302173,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-80','금능리 해안','수직암반','1A',1,194.0,'하','완료',33.423005,126.302757,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-81','금능리 해안','자갈·왕자갈','6A',6,732.0,'중','완료',33.423054,126.303610,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-82','귀덕리 해안','수평암반','8A',8,326.0,'상','진행중',33.424319,126.304834,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-83','수원리 해안','수직호안','1B',1,976.0,'하','진행중',33.426538,126.306768,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-84','한림리 해안','수직암반','1A',1,542.0,'하','완료',33.428483,126.306732,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-85','옹포리 해안','수직암반','1A',1,899.0,'하','진행중',33.429242,126.306195,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-86','월령리 해안','수직호안','1B',1,240.0,'하','미조사',33.428083,126.308930,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHL'),'JJHL-87','월령리 해안','수평암반','8A',8,969.0,'상','미조사',33.430018,126.309885,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-1','구엄리 해안','수평암반','8A',8,645.0,'상','완료',33.419629,126.291022,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-2','신엄리 해안','수직호안','1B',1,966.0,'하','미조사',33.420031,126.292628,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-3','애월리 해안','수평암반','8A',8,323.0,'상','완료',33.422618,126.293417,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-4','구엄리 해안','수평암반','8A',8,546.0,'상','완료',33.423054,126.295103,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-5','애월리 해안','모래자갈혼합','5',5,683.0,'중','완료',33.423234,126.294724,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-6','구엄리 해안','모래','3A',3,326.0,'하','완료',33.425810,126.295950,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-7','금성리 해안','수직호안','1B',1,726.0,'하','완료',33.425832,126.298475,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-8','곽지리 해안','자갈·왕자갈','6A',6,692.0,'중','진행중',33.427308,126.298153,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-9','곽지리 해안','투과성 인공호안','6B',6,983.0,'중','진행중',33.427666,126.300623,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-10','하귀2리 해안','투과성 인공호안','6B',6,662.0,'중','완료',33.428219,126.301505,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-11','신엄리 해안','투과성 인공호안','6B',6,264.0,'중','완료',33.429038,126.304417,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-12','구엄리 해안','수직호안','1B',1,911.0,'하','완료',33.429151,126.305256,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-13','고내리 해안','투과성 인공호안','6B',6,724.0,'중','완료',33.431632,126.307470,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-14','금성리 해안','모래','3A',3,808.0,'하','완료',33.430394,126.306774,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-15','금성리 해안','수평암반','8A',8,760.0,'상','미조사',33.432567,126.309972,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-16','신엄리 해안','수직호안','1B',1,183.0,'하','완료',33.434015,126.309428,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-17','하귀2리 해안','수평암반','8A',8,601.0,'상','완료',33.435547,126.312238,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-18','구엄리 해안','수직호안','1B',1,113.0,'하','완료',33.434482,126.312782,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-19','고내리 해안','수직호안','1B',1,442.0,'하','완료',33.436940,126.313468,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-20','하귀2리 해안','수직호안','1B',1,631.0,'하','완료',33.436293,126.314673,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-21','구엄리 해안','수평암반','8A',8,904.0,'상','완료',33.438125,126.318557,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-22','하귀1리 해안','투과성 인공호안','6B',6,103.0,'중','완료',33.439203,126.318972,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-23','금성리 해안','수직호안','1B',1,379.0,'하','완료',33.440483,126.319138,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-24','애월리 해안','수평암반','8A',8,902.0,'상','미조사',33.440185,126.320411,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-25','구엄리 해안','모래','3A',3,907.0,'하','진행중',33.443133,126.323377,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-26','곽지리 해안','수평암반','8A',8,604.0,'상','완료',33.444062,126.323384,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-27','구엄리 해안','투과성 인공호안','6B',6,577.0,'중','완료',33.445131,126.326146,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-28','신엄리 해안','자갈·왕자갈','6A',6,254.0,'중','미조사',33.445166,126.325345,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-29','애월리 해안','자갈·왕자갈','6A',6,495.0,'중','완료',33.446105,126.327010,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-30','애월리 해안','모래','3A',3,803.0,'하','완료',33.447632,126.328873,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-31','신엄리 해안','수직호안','1B',1,118.0,'하','완료',33.448311,126.331807,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-32','신엄리 해안','수직암반','1A',1,973.0,'하','완료',33.449413,126.333312,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-33','고내리 해안','모래','3A',3,934.0,'하','완료',33.450317,126.334152,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-34','고내리 해안','투과성 인공호안','6B',6,491.0,'중','미조사',33.448763,126.335429,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-35','하귀2리 해안','자갈·왕자갈','6A',6,243.0,'중','완료',33.452132,126.337834,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-36','하귀1리 해안','모래','3A',3,198.0,'하','완료',33.450474,126.337209,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-37','하귀2리 해안','자갈·왕자갈','6A',6,362.0,'중','진행중',33.452426,126.339474,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-38','구엄리 해안','자갈·왕자갈','6A',6,486.0,'중','완료',33.452472,126.341471,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-39','하귀1리 해안','수평암반','8A',8,847.0,'상','완료',33.453412,126.341823,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-40','신엄리 해안','자갈·왕자갈','6A',6,220.0,'중','완료',33.456672,126.342748,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-41','신엄리 해안','모래자갈혼합','5',5,608.0,'중','완료',33.456432,126.344522,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-42','구엄리 해안','모래자갈혼합','5',5,295.0,'중','미조사',33.457053,126.346531,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-43','금성리 해안','수직암반','1A',1,805.0,'하','완료',33.458559,126.346608,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-44','고내리 해안','모래','3A',3,406.0,'하','완료',33.457715,126.348714,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-45','애월리 해안','자갈·왕자갈','6A',6,448.0,'중','완료',33.460828,126.350941,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-46','곽지리 해안','수평암반','8A',8,185.0,'상','완료',33.460355,126.351187,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-47','하귀1리 해안','수평암반','8A',8,868.0,'상','완료',33.460845,126.353557,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-48','신엄리 해안','투과성 인공호안','6B',6,152.0,'중','진행중',33.462675,126.353493,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-49','고내리 해안','수직암반','1A',1,637.0,'하','완료',33.463098,126.356535,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-50','곽지리 해안','투과성 인공호안','6B',6,638.0,'중','미조사',33.465500,126.356705,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-51','하귀1리 해안','자갈·왕자갈','6A',6,529.0,'중','완료',33.465533,126.358038,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-52','신엄리 해안','수평암반','8A',8,426.0,'상','완료',33.466124,126.359927,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-53','신엄리 해안','자갈·왕자갈','6A',6,945.0,'중','완료',33.467982,126.359881,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-54','하귀1리 해안','수직암반','1A',1,342.0,'하','완료',33.468254,126.361305,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-55','구엄리 해안','수직호안','1B',1,869.0,'하','완료',33.468689,126.364557,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-56','곽지리 해안','수직호안','1B',1,759.0,'하','진행중',33.469056,126.365124,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-57','금성리 해안','모래자갈혼합','5',5,685.0,'중','완료',33.471999,126.365270,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-58','애월리 해안','투과성 인공호안','6B',6,434.0,'중','완료',33.472705,126.367493,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-59','곽지리 해안','투과성 인공호안','6B',6,202.0,'중','완료',33.471791,126.370440,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-60','애월리 해안','모래','3A',3,144.0,'하','미조사',33.473258,126.370632,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-61','곽지리 해안','모래','3A',3,393.0,'하','완료',33.473341,126.370496,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-62','고내리 해안','투과성 인공호안','6B',6,197.0,'중','완료',33.475273,126.372270,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-63','애월리 해안','수직호안','1B',1,253.0,'하','완료',33.477227,126.374103,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-64','곽지리 해안','투과성 인공호안','6B',6,989.0,'중','미조사',33.478046,126.376680,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-65','신엄리 해안','수평암반','8A',8,348.0,'상','완료',33.476718,126.377217,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-66','하귀2리 해안','자갈·왕자갈','6A',6,487.0,'중','완료',33.479500,126.377967,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-67','신엄리 해안','자갈·왕자갈','6A',6,457.0,'중','미조사',33.480249,126.380298,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-68','고내리 해안','자갈·왕자갈','6A',6,658.0,'중','완료',33.482237,126.380527,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-69','애월리 해안','수직암반','1A',1,814.0,'하','완료',33.482066,126.383114,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-70','곽지리 해안','모래','3A',3,274.0,'하','미조사',33.482066,126.383453,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-71','하귀1리 해안','모래자갈혼합','5',5,295.0,'중','미조사',33.483591,126.386891,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-72','애월리 해안','수평암반','8A',8,346.0,'상','완료',33.484387,126.387895,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-73','고내리 해안','수평암반','8A',8,158.0,'상','미조사',33.486937,126.388502,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-74','하귀2리 해안','모래자갈혼합','5',5,436.0,'중','완료',33.487742,126.389286,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-75','하귀1리 해안','모래자갈혼합','5',5,433.0,'중','완료',33.487664,126.391187,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-76','애월리 해안','자갈·왕자갈','6A',6,273.0,'중','완료',33.487727,126.390951,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-77','하귀2리 해안','수평암반','8A',8,527.0,'상','미조사',33.487825,126.395113,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-78','구엄리 해안','자갈·왕자갈','6A',6,545.0,'중','진행중',33.490270,126.395453,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-79','신엄리 해안','수직호안','1B',1,422.0,'하','완료',33.490115,126.395370,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-80','하귀1리 해안','모래','3A',3,628.0,'하','진행중',33.492219,126.398997,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-81','신엄리 해안','수직암반','1A',1,600.0,'하','완료',33.493094,126.398008,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-82','하귀2리 해안','수직암반','1A',1,682.0,'하','미조사',33.493749,126.399718,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-83','하귀2리 해안','자갈·왕자갈','6A',6,230.0,'중','완료',33.495155,126.401116,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-84','하귀1리 해안','모래','3A',3,964.0,'하','진행중',33.496829,126.403377,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-85','곽지리 해안','수직호안','1B',1,197.0,'하','미조사',33.496853,126.405369,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-86','신엄리 해안','수평암반','8A',8,625.0,'상','완료',33.495870,126.405011,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-87','금성리 해안','투과성 인공호안','6B',6,406.0,'중','완료',33.499599,126.408282,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-88','금성리 해안','투과성 인공호안','6B',6,190.0,'중','완료',33.497702,126.408022,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJAW'),'JJAW-89','고내리 해안','수직호안','1B',1,749.0,'하','완료',33.498740,126.409390,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJOD'),'JJOD-1','외도이동 해안','수직호안','1B',1,914.0,'하','완료',33.500381,126.415684,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJOD'),'JJOD-2','외도이동 해안','수평암반','8A',8,124.0,'상','완료',33.499819,126.415929,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJOD'),'JJOD-3','외도이동 해안','모래','3A',3,143.0,'하','완료',33.501497,126.418412,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJOD'),'JJOD-4','외도이동 해안','모래자갈혼합','5',5,934.0,'중','진행중',33.501420,126.420362,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJOD'),'JJOD-5','외도이동 해안','투과성 인공호안','6B',6,304.0,'중','완료',33.501333,126.421645,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJOD'),'JJOD-6','외도이동 해안','투과성 인공호안','6B',6,846.0,'중','진행중',33.503496,126.423680,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJOD'),'JJOD-7','외도이동 해안','모래자갈혼합','5',5,577.0,'중','미조사',33.503369,126.423617,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJOD'),'JJOD-8','외도이동 해안','수직암반','1A',1,373.0,'하','진행중',33.504829,126.426192,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJOD'),'JJOD-9','외도이동 해안','모래자갈혼합','5',5,395.0,'중','완료',33.503449,126.427491,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJOD'),'JJOD-10','외도이동 해안','수평암반','8A',8,793.0,'상','완료',33.506114,126.428859,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJOD'),'JJOD-11','외도이동 해안','모래자갈혼합','5',5,770.0,'중','완료',33.505082,126.432370,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJOD'),'JJOD-12','외도이동 해안','자갈·왕자갈','6A',6,127.0,'중','완료',33.505120,126.434121,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJOD'),'JJOD-13','외도이동 해안','수직호안','1B',1,850.0,'하','완료',33.507567,126.433933,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJOD'),'JJOD-14','외도이동 해안','모래','3A',3,843.0,'하','완료',33.507083,126.435653,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJOD'),'JJOD-15','외도이동 해안','자갈·왕자갈','6A',6,103.0,'중','완료',33.508946,126.437937,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJOD'),'JJOD-16','외도이동 해안','수직암반','1A',1,637.0,'하','진행중',33.509156,126.438818,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJOD'),'JJOD-17','외도이동 해안','모래자갈혼합','5',5,254.0,'중','완료',33.508350,126.442826,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJOD'),'JJOD-18','외도이동 해안','투과성 인공호안','6B',6,776.0,'중','완료',33.509996,126.442543,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJOD'),'JJOD-19','외도이동 해안','모래','3A',3,549.0,'하','미조사',33.510285,126.445184,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJND'),'JJND-1','내도동 해안','자갈·왕자갈','6A',6,596.0,'중','완료',33.502556,126.430562,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJND'),'JJND-2','내도동 해안','수직호안','1B',1,488.0,'하','미조사',33.502388,126.435494,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJND'),'JJND-3','내도동 해안','투과성 인공호안','6B',6,727.0,'중','미조사',33.503639,126.438713,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJND'),'JJND-4','내도동 해안','자갈·왕자갈','6A',6,823.0,'중','완료',33.504054,126.441349,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJND'),'JJND-5','내도동 해안','투과성 인공호안','6B',6,767.0,'중','완료',33.505544,126.442550,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJND'),'JJND-6','내도동 해안','수평암반','8A',8,655.0,'상','완료',33.507558,126.446205,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJND'),'JJND-7','내도동 해안','모래','3A',3,421.0,'하','미조사',33.506701,126.446934,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJIH'),'JJIH-1','이호일동 해안','모래','3A',3,836.0,'하','완료',33.495571,126.448011,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJIH'),'JJIH-2','이호일동 해안','모래자갈혼합','5',5,691.0,'중','진행중',33.495249,126.448471,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJIH'),'JJIH-3','이호일동 해안','자갈·왕자갈','6A',6,178.0,'중','완료',33.494950,126.451068,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJIH'),'JJIH-4','이호일동 해안','모래자갈혼합','5',5,608.0,'중','완료',33.497228,126.452164,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJIH'),'JJIH-5','이호일동 해안','수직호안','1B',1,513.0,'하','미조사',33.496139,126.452556,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJIH'),'JJIH-6','이호일동 해안','투과성 인공호안','6B',6,616.0,'중','미조사',33.496570,126.455660,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJIH'),'JJIH-7','이호일동 해안','수직암반','1A',1,298.0,'하','완료',33.498330,126.454862,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJIH'),'JJIH-8','이호일동 해안','수평암반','8A',8,165.0,'상','완료',33.497848,126.457150,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJIH'),'JJIH-9','이호일동 해안','수직호안','1B',1,568.0,'하','미조사',33.498931,126.459516,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJIH'),'JJIH-10','이호일동 해안','모래자갈혼합','5',5,688.0,'중','완료',33.500448,126.459584,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJIH'),'JJIH-11','이호일동 해안','모래','3A',3,220.0,'하','진행중',33.501292,126.461010,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJIH'),'JJIH-12','이호일동 해안','모래','3A',3,100.0,'하','진행중',33.501148,126.460443,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJIH'),'JJIH-13','이호일동 해안','모래','3A',3,243.0,'하','미조사',33.502443,126.464429,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJIH'),'JJIH-14','이호일동 해안','모래','3A',3,958.0,'하','완료',33.502157,126.465903,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJIH'),'JJIH-15','이호일동 해안','수직호안','1B',1,547.0,'하','미조사',33.500899,126.465951,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJIH'),'JJIH-16','이호일동 해안','모래','3A',3,179.0,'하','완료',33.503670,126.467909,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJIH'),'JJIH-17','이호일동 해안','자갈·왕자갈','6A',6,528.0,'중','완료',33.501941,126.469553,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJIH'),'JJIH-18','이호일동 해안','수직호안','1B',1,739.0,'하','완료',33.503734,126.469047,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJIH'),'JJIH-19','이호일동 해안','수평암반','8A',8,361.0,'상','완료',33.505327,126.471509,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJIH'),'JJIH-20','이호일동 해안','투과성 인공호안','6B',6,953.0,'중','완료',33.505326,126.470604,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJDD'),'JJDD-1','도두이동 해안','모래자갈혼합','5',5,709.0,'중','미조사',33.504915,126.479089,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJDD'),'JJDD-2','도두일동 해안','모래자갈혼합','5',5,549.0,'중','완료',33.504675,126.479841,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJDD'),'JJDD-3','도두일동 해안','수직암반','1A',1,110.0,'하','미조사',33.505696,126.480422,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJDD'),'JJDD-4','도두일동 해안','수직암반','1A',1,575.0,'하','완료',33.506693,126.482012,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJDD'),'JJDD-5','도두이동 해안','수직호안','1B',1,175.0,'하','진행중',33.508176,126.485152,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJDD'),'JJDD-6','도두일동 해안','모래','3A',3,985.0,'하','진행중',33.509397,126.484868,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJDD'),'JJDD-7','도두이동 해안','자갈·왕자갈','6A',6,731.0,'중','완료',33.508055,126.486631,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJDD'),'JJDD-8','도두일동 해안','수직암반','1A',1,427.0,'하','완료',33.508010,126.488516,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJDD'),'JJDD-9','도두일동 해안','모래자갈혼합','5',5,902.0,'중','완료',33.509894,126.491188,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJDD'),'JJDD-10','도두일동 해안','투과성 인공호안','6B',6,805.0,'중','완료',33.510365,126.492535,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJDD'),'JJDD-11','도두이동 해안','투과성 인공호안','6B',6,164.0,'중','진행중',33.510426,126.491614,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJDD'),'JJDD-12','도두이동 해안','투과성 인공호안','6B',6,912.0,'중','진행중',33.512263,126.493397,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJDD'),'JJDD-13','도두일동 해안','모래자갈혼합','5',5,289.0,'중','완료',33.511375,126.496388,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJDD'),'JJDD-14','도두일동 해안','모래','3A',3,554.0,'하','완료',33.513156,126.498086,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJDD'),'JJDD-15','도두일동 해안','모래','3A',3,442.0,'하','미조사',33.514954,126.499752,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJDD'),'JJDD-16','도두일동 해안','투과성 인공호안','6B',6,164.0,'중','미조사',33.514414,126.501104,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJDD'),'JJDD-17','도두일동 해안','자갈·왕자갈','6A',6,571.0,'중','완료',33.514911,126.500742,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJYD'),'JJYD-1','용담삼동 해안','자갈·왕자갈','6A',6,397.0,'중','완료',33.511278,126.506217,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJYD'),'JJYD-2','용담이동 해안','수평암반','8A',8,198.0,'상','완료',33.509965,126.505338,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJYD'),'JJYD-3','용담삼동 해안','모래','3A',3,351.0,'하','미조사',33.512441,126.509630,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJYD'),'JJYD-4','용담이동 해안','수직암반','1A',1,296.0,'하','미조사',33.512746,126.510934,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJYD'),'JJYD-5','용담이동 해안','모래','3A',3,983.0,'하','완료',33.511993,126.511811,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJYD'),'JJYD-6','용담삼동 해안','수평암반','8A',8,158.0,'상','완료',33.512781,126.513929,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJYD'),'JJYD-7','용담삼동 해안','수평암반','8A',8,842.0,'상','완료',33.514639,126.514309,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJYD'),'JJYD-8','용담일동 해안','모래자갈혼합','5',5,614.0,'중','완료',33.512960,126.516861,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJYD'),'JJYD-9','용담이동 해안','수직암반','1A',1,840.0,'하','진행중',33.513659,126.517337,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJYD'),'JJYD-10','용담이동 해안','수평암반','8A',8,161.0,'상','미조사',33.513951,126.521077,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJYD'),'JJYD-11','용담일동 해안','투과성 인공호안','6B',6,637.0,'중','완료',33.515120,126.520463,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJYD'),'JJYD-12','용담이동 해안','투과성 인공호안','6B',6,956.0,'중','완료',33.514931,126.523156,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJYD'),'JJYD-13','용담일동 해안','모래','3A',3,657.0,'하','완료',33.516927,126.526444,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJYD'),'JJYD-14','용담일동 해안','자갈·왕자갈','6A',6,279.0,'중','완료',33.517337,126.525740,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJYD'),'JJYD-15','용담일동 해안','모래자갈혼합','5',5,377.0,'중','완료',33.519158,126.527608,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJYD'),'JJYD-16','용담이동 해안','수직암반','1A',1,338.0,'하','완료',33.517344,126.530050,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJYD'),'JJYD-17','용담일동 해안','수평암반','8A',8,840.0,'상','완료',33.518367,126.531079,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJYD'),'JJYD-18','용담일동 해안','자갈·왕자갈','6A',6,685.0,'중','완료',33.520266,126.534681,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJYD'),'JJYD-19','용담이동 해안','수평암반','8A',8,585.0,'상','완료',33.520420,126.534415,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJSD'),'JJSD-1','삼도2동 해안','모래자갈혼합','5',5,357.0,'중','완료',33.511859,126.521169,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJSD'),'JJSD-2','삼도2동 해안','모래자갈혼합','5',5,916.0,'중','완료',33.517996,126.529368,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGI'),'JJGI-1','건입동 해안','모래','3A',3,741.0,'하','완료',33.513682,126.531426,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGI'),'JJGI-2','건입동 해안','투과성 인공호안','6B',6,411.0,'중','완료',33.515409,126.532409,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGI'),'JJGI-3','건입동 해안','모래','3A',3,753.0,'하','완료',33.515919,126.531895,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGI'),'JJGI-4','건입동 해안','모래자갈혼합','5',5,937.0,'중','미조사',33.515274,126.534586,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGI'),'JJGI-5','건입동 해안','수직호안','1B',1,310.0,'하','진행중',33.516339,126.534207,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGI'),'JJGI-6','건입동 해안','모래','3A',3,815.0,'하','진행중',33.517995,126.536508,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGI'),'JJGI-7','건입동 해안','모래자갈혼합','5',5,499.0,'중','완료',33.516032,126.536089,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGI'),'JJGI-8','건입동 해안','수평암반','8A',8,202.0,'상','완료',33.517871,126.539606,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGI'),'JJGI-9','건입동 해안','수평암반','8A',8,790.0,'상','완료',33.517928,126.538608,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGI'),'JJGI-10','건입동 해안','모래자갈혼합','5',5,301.0,'중','미조사',33.517519,126.541225,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGI'),'JJGI-11','건입동 해안','수직호안','1B',1,243.0,'하','완료',33.518278,126.541638,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGI'),'JJGI-12','건입동 해안','자갈·왕자갈','6A',6,415.0,'중','완료',33.519656,126.544420,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGI'),'JJGI-13','건입동 해안','수직암반','1A',1,326.0,'하','완료',33.519484,126.545498,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGI'),'JJGI-14','건입동 해안','수직호안','1B',1,203.0,'하','완료',33.520983,126.544591,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGI'),'JJGI-15','건입동 해안','자갈·왕자갈','6A',6,573.0,'중','완료',33.521095,126.546121,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGI'),'JJGI-16','건입동 해안','수직호안','1B',1,889.0,'하','완료',33.519657,126.548073,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGI'),'JJGI-17','건입동 해안','모래자갈혼합','5',5,810.0,'중','미조사',33.521758,126.549444,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGI'),'JJGI-18','건입동 해안','수평암반','8A',8,622.0,'상','미조사',33.522515,126.551002,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGI'),'JJGI-19','건입동 해안','자갈·왕자갈','6A',6,320.0,'중','완료',33.521047,126.551330,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGI'),'JJGI-20','건입동 해안','자갈·왕자갈','6A',6,883.0,'중','완료',33.522092,126.553594,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGI'),'JJGI-21','건입동 해안','자갈·왕자갈','6A',6,216.0,'중','완료',33.524323,126.554218,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGI'),'JJGI-22','건입동 해안','투과성 인공호안','6B',6,518.0,'중','완료',33.522806,126.555513,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGI'),'JJGI-23','건입동 해안','모래','3A',3,177.0,'하','미조사',33.522991,126.557619,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGI'),'JJGI-24','건입동 해안','투과성 인공호안','6B',6,531.0,'중','완료',33.523905,126.556371,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGI'),'JJGI-25','건입동 해안','투과성 인공호안','6B',6,534.0,'중','미조사',33.524372,126.557427,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGI'),'JJGI-26','건입동 해안','자갈·왕자갈','6A',6,433.0,'중','미조사',33.525181,126.560438,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHB'),'JJHB-1','화북일동 해안','수직암반','1A',1,791.0,'하','미조사',33.515860,126.553003,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHB'),'JJHB-2','화북일동 해안','모래자갈혼합','5',5,936.0,'중','완료',33.516882,126.553751,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHB'),'JJHB-3','화북일동 해안','수직암반','1A',1,312.0,'하','완료',33.515916,126.554423,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHB'),'JJHB-4','화북일동 해안','자갈·왕자갈','6A',6,530.0,'중','완료',33.517160,126.555380,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHB'),'JJHB-5','화북일동 해안','수직암반','1A',1,602.0,'하','완료',33.516157,126.556199,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHB'),'JJHB-6','화북일동 해안','모래자갈혼합','5',5,577.0,'중','완료',33.517326,126.559331,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHB'),'JJHB-7','화북일동 해안','수평암반','8A',8,154.0,'상','진행중',33.518863,126.560447,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHB'),'JJHB-8','화북일동 해안','수직암반','1A',1,121.0,'하','완료',33.517295,126.559441,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHB'),'JJHB-9','화북일동 해안','수평암반','8A',8,328.0,'상','완료',33.518066,126.561327,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHB'),'JJHB-10','화북일동 해안','수평암반','8A',8,471.0,'상','완료',33.520544,126.561836,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHB'),'JJHB-11','화북일동 해안','자갈·왕자갈','6A',6,826.0,'중','완료',33.519516,126.565000,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHB'),'JJHB-12','화북일동 해안','모래','3A',3,830.0,'하','완료',33.518587,126.566158,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHB'),'JJHB-13','화북일동 해안','수직암반','1A',1,440.0,'하','완료',33.519562,126.565792,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHB'),'JJHB-14','화북일동 해안','투과성 인공호안','6B',6,862.0,'중','완료',33.521681,126.567459,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHB'),'JJHB-15','화북일동 해안','모래자갈혼합','5',5,752.0,'중','완료',33.522308,126.568141,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHB'),'JJHB-16','화북일동 해안','모래','3A',3,748.0,'하','완료',33.521695,126.570205,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHB'),'JJHB-17','화북일동 해안','투과성 인공호안','6B',6,535.0,'중','완료',33.521098,126.571197,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHB'),'JJHB-18','화북일동 해안','모래','3A',3,777.0,'하','완료',33.521698,126.572418,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHB'),'JJHB-19','화북일동 해안','수직암반','1A',1,344.0,'하','미조사',33.522250,126.573648,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHB'),'JJHB-20','화북일동 해안','수직호안','1B',1,722.0,'하','완료',33.524726,126.574083,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHB'),'JJHB-21','화북일동 해안','모래자갈혼합','5',5,420.0,'중','미조사',33.522898,126.573494,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHB'),'JJHB-22','화북일동 해안','자갈·왕자갈','6A',6,947.0,'중','완료',33.525444,126.574705,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJHB'),'JJHB-23','화북일동 해안','수직호안','1B',1,408.0,'하','완료',33.525916,126.576143,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJYN'),'JJYN-1','삼양삼동 해안','투과성 인공호안','6B',6,833.0,'중','완료',33.515699,126.574426,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJYN'),'JJYN-2','삼양이동 해안','모래','3A',3,352.0,'하','진행중',33.516572,126.575717,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJYN'),'JJYN-3','삼양삼동 해안','투과성 인공호안','6B',6,730.0,'중','완료',33.515012,126.575344,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJYN'),'JJYN-4','삼양이동 해안','수직호안','1B',1,287.0,'하','진행중',33.515756,126.576890,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJYN'),'JJYN-5','삼양이동 해안','수직암반','1A',1,889.0,'하','완료',33.516100,126.577769,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJYN'),'JJYN-6','삼양삼동 해안','모래','3A',3,368.0,'하','완료',33.517058,126.580784,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJYN'),'JJYN-7','삼양이동 해안','자갈·왕자갈','6A',6,663.0,'중','미조사',33.518940,126.579726,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJYN'),'JJYN-8','삼양삼동 해안','자갈·왕자갈','6A',6,683.0,'중','완료',33.518465,126.581855,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJYN'),'JJYN-9','삼양일동 해안','수평암반','8A',8,169.0,'상','완료',33.518572,126.583135,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJYN'),'JJYN-10','삼양이동 해안','자갈·왕자갈','6A',6,424.0,'중','완료',33.520149,126.586009,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJYN'),'JJYN-11','삼양일동 해안','수직호안','1B',1,362.0,'하','완료',33.519425,126.586364,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJYN'),'JJYN-12','삼양일동 해안','모래자갈혼합','5',5,479.0,'중','완료',33.520446,126.587702,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJYN'),'JJYN-13','삼양이동 해안','수직호안','1B',1,150.0,'하','미조사',33.522204,126.590450,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJYN'),'JJYN-14','삼양삼동 해안','모래자갈혼합','5',5,769.0,'중','진행중',33.523576,126.589475,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJYN'),'JJYN-15','삼양이동 해안','수직호안','1B',1,789.0,'하','완료',33.521925,126.590349,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJYN'),'JJYN-16','삼양일동 해안','수직암반','1A',1,352.0,'하','완료',33.524653,126.591988,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJYN'),'JJYN-17','삼양이동 해안','수직호안','1B',1,403.0,'하','완료',33.524957,126.594312,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJYN'),'JJYN-18','삼양일동 해안','수직호안','1B',1,861.0,'하','완료',33.523069,126.595821,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJYN'),'JJYN-19','삼양이동 해안','모래','3A',3,527.0,'하','미조사',33.523827,126.597819,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJSY'),'JJSY-1','삼양일동 해안','수직암반','1A',1,738.0,'하','미조사',33.514308,126.577040,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJSY'),'JJSY-2','삼양일동 해안','투과성 인공호안','6B',6,799.0,'중','완료',33.515206,126.579404,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJSY'),'JJSY-3','삼양이동 해안','자갈·왕자갈','6A',6,486.0,'중','진행중',33.516697,126.580563,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJSY'),'JJSY-4','삼양이동 해안','수평암반','8A',8,254.0,'상','완료',33.515803,126.579734,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJSY'),'JJSY-5','삼양이동 해안','자갈·왕자갈','6A',6,365.0,'중','진행중',33.516080,126.582843,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJSY'),'JJSY-6','삼양이동 해안','모래','3A',3,173.0,'하','완료',33.516255,126.583797,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJSY'),'JJSY-7','삼양일동 해안','모래자갈혼합','5',5,447.0,'중','완료',33.516899,126.584137,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJSY'),'JJSY-8','삼양일동 해안','수직암반','1A',1,586.0,'하','완료',33.516608,126.586399,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJSY'),'JJSY-9','삼양일동 해안','자갈·왕자갈','6A',6,657.0,'중','완료',33.517649,126.587171,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJSY'),'JJSY-10','삼양이동 해안','수평암반','8A',8,755.0,'상','진행중',33.518259,126.588322,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJSY'),'JJSY-11','삼양일동 해안','수직호안','1B',1,696.0,'하','완료',33.518360,126.589233,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJSY'),'JJSY-12','삼양일동 해안','수직암반','1A',1,826.0,'하','진행중',33.518467,126.589012,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJSY'),'JJSY-13','삼양일동 해안','모래자갈혼합','5',5,727.0,'중','완료',33.521154,126.589094,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJSY'),'JJSY-14','삼양이동 해안','모래자갈혼합','5',5,524.0,'중','미조사',33.522039,126.590237,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJSY'),'JJSY-15','삼양일동 해안','수직호안','1B',1,618.0,'하','진행중',33.520840,126.593158,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJSY'),'JJSY-16','삼양일동 해안','수평암반','8A',8,751.0,'상','완료',33.521420,126.593837,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJSY'),'JJSY-17','삼양일동 해안','모래자갈혼합','5',5,813.0,'중','완료',33.521416,126.594325,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJSY'),'JJSY-18','삼양일동 해안','수평암반','8A',8,524.0,'상','완료',33.521533,126.594254,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJSY'),'JJSY-19','삼양이동 해안','수직호안','1B',1,992.0,'하','완료',33.521702,126.597385,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJSY'),'JJSY-20','삼양일동 해안','수직호안','1B',1,771.0,'하','완료',33.523858,126.598498,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJSY'),'JJSY-21','삼양이동 해안','모래','3A',3,653.0,'하','완료',33.524682,126.598982,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJSY'),'JJSY-22','삼양일동 해안','수평암반','8A',8,138.0,'상','완료',33.524092,126.599770,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJSY'),'JJSY-23','삼양일동 해안','수직암반','1A',1,394.0,'하','완료',33.525366,126.601191,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJSY'),'JJSY-24','삼양이동 해안','수직호안','1B',1,785.0,'하','완료',33.524470,126.602462,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-1','조천리 해안','수직호안','1B',1,212.0,'하','완료',33.518574,126.600992,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-2','신흥리 해안','투과성 인공호안','6B',6,420.0,'중','미조사',33.521522,126.601456,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-3','북촌리 해안','모래','3A',3,147.0,'하','완료',33.519303,126.602184,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-4','북촌리 해안','수직호안','1B',1,935.0,'하','완료',33.519884,126.602323,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-5','북촌리 해안','자갈·왕자갈','6A',6,132.0,'중','미조사',33.522403,126.603733,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-6','신촌리 해안','수직호안','1B',1,565.0,'하','미조사',33.521005,126.603217,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-7','함덕리 해안','수직암반','1A',1,303.0,'하','진행중',33.522304,126.606075,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-8','북촌리 해안','자갈·왕자갈','6A',6,917.0,'중','미조사',33.522855,126.606501,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-9','함덕리 해안','모래','3A',3,467.0,'하','완료',33.523545,126.605865,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-10','조천리 해안','수평암반','8A',8,214.0,'상','미조사',33.522723,126.608082,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-11','함덕리 해안','투과성 인공호안','6B',6,663.0,'중','미조사',33.523269,126.609395,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-12','신촌리 해안','투과성 인공호안','6B',6,442.0,'중','완료',33.524028,126.609647,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-13','북촌리 해안','자갈·왕자갈','6A',6,141.0,'중','진행중',33.523889,126.609305,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-14','함덕리 해안','모래','3A',3,639.0,'하','완료',33.525256,126.611329,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-15','조천리 해안','수평암반','8A',8,825.0,'상','완료',33.525022,126.613006,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-16','북촌리 해안','수평암반','8A',8,186.0,'상','미조사',33.525639,126.612675,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-17','조천리 해안','투과성 인공호안','6B',6,520.0,'중','완료',33.525975,126.614357,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-18','신흥리 해안','모래자갈혼합','5',5,955.0,'중','완료',33.524546,126.613889,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-19','조천리 해안','투과성 인공호안','6B',6,284.0,'중','완료',33.526079,126.615610,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-20','함덕리 해안','수직암반','1A',1,739.0,'하','완료',33.526919,126.615083,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-21','신촌리 해안','수평암반','8A',8,646.0,'상','완료',33.525584,126.615954,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-22','함덕리 해안','투과성 인공호안','6B',6,361.0,'중','진행중',33.525865,126.616667,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-23','북촌리 해안','모래','3A',3,859.0,'하','완료',33.526741,126.619997,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-24','조천리 해안','자갈·왕자갈','6A',6,942.0,'중','완료',33.527482,126.619964,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-25','북촌리 해안','모래','3A',3,777.0,'하','완료',33.526514,126.621334,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-26','신촌리 해안','모래','3A',3,119.0,'하','완료',33.526485,126.621719,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-27','조천리 해안','모래자갈혼합','5',5,541.0,'중','완료',33.526893,126.622331,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-28','함덕리 해안','투과성 인공호안','6B',6,383.0,'중','미조사',33.527129,126.621991,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-29','조천리 해안','수직암반','1A',1,625.0,'하','완료',33.527940,126.624777,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-30','함덕리 해안','모래','3A',3,580.0,'하','완료',33.530157,126.624570,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-31','신흥리 해안','모래','3A',3,618.0,'하','미조사',33.528217,126.624838,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-32','조천리 해안','모래','3A',3,344.0,'하','완료',33.529678,126.625232,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-33','조천리 해안','자갈·왕자갈','6A',6,956.0,'중','미조사',33.530172,126.627957,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-34','신촌리 해안','모래','3A',3,132.0,'하','완료',33.531699,126.627456,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-35','조천리 해안','수직호안','1B',1,757.0,'하','진행중',33.530225,126.629883,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-36','신촌리 해안','수평암반','8A',8,218.0,'상','완료',33.532563,126.629333,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-37','조천리 해안','수직호안','1B',1,251.0,'하','완료',33.530101,126.631074,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-38','신촌리 해안','수평암반','8A',8,941.0,'상','완료',33.531275,126.630719,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-39','조천리 해안','수직암반','1A',1,327.0,'하','미조사',33.530702,126.632430,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-40','북촌리 해안','수직암반','1A',1,527.0,'하','완료',33.533935,126.633297,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-41','신흥리 해안','자갈·왕자갈','6A',6,506.0,'중','미조사',33.533498,126.635143,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-42','함덕리 해안','수직암반','1A',1,875.0,'하','완료',33.532009,126.635910,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-43','조천리 해안','수직암반','1A',1,671.0,'하','미조사',33.532972,126.635763,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-44','함덕리 해안','수직호안','1B',1,255.0,'하','완료',33.534678,126.637227,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-45','조천리 해안','모래자갈혼합','5',5,733.0,'중','완료',33.535211,126.636571,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-46','북촌리 해안','수직호안','1B',1,572.0,'하','완료',33.534343,126.636915,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-47','함덕리 해안','모래','3A',3,136.0,'하','완료',33.535782,126.640521,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-48','북촌리 해안','모래','3A',3,275.0,'하','완료',33.534155,126.641037,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-49','북촌리 해안','투과성 인공호안','6B',6,615.0,'중','미조사',33.535391,126.639633,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-50','신촌리 해안','수직호안','1B',1,527.0,'하','진행중',33.534635,126.641166,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-51','북촌리 해안','수평암반','8A',8,925.0,'상','완료',33.534811,126.643824,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-52','신흥리 해안','투과성 인공호안','6B',6,389.0,'중','진행중',33.535745,126.643668,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-53','신촌리 해안','모래','3A',3,216.0,'하','미조사',33.537307,126.643621,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-54','신흥리 해안','모래자갈혼합','5',5,896.0,'중','완료',33.537055,126.644891,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-55','신흥리 해안','수직호안','1B',1,325.0,'하','진행중',33.538479,126.645382,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-56','북촌리 해안','수평암반','8A',8,237.0,'상','완료',33.538953,126.645467,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-57','신흥리 해안','수평암반','8A',8,299.0,'상','완료',33.538434,126.647214,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-58','신촌리 해안','모래자갈혼합','5',5,933.0,'중','진행중',33.537723,126.649254,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-59','함덕리 해안','수직호안','1B',1,956.0,'하','완료',33.538884,126.648930,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-60','함덕리 해안','수직호안','1B',1,220.0,'하','진행중',33.539859,126.650650,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-61','신촌리 해안','자갈·왕자갈','6A',6,192.0,'중','완료',33.539031,126.649826,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-62','조천리 해안','모래','3A',3,262.0,'하','미조사',33.538686,126.652138,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-63','조천리 해안','수직호안','1B',1,695.0,'하','미조사',33.539705,126.651707,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-64','신촌리 해안','수직호안','1B',1,776.0,'하','미조사',33.538803,126.654596,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-65','조천리 해안','자갈·왕자갈','6A',6,154.0,'중','진행중',33.539010,126.652982,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-66','함덕리 해안','모래','3A',3,461.0,'하','완료',33.541333,126.655338,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-67','신흥리 해안','투과성 인공호안','6B',6,680.0,'중','미조사',33.540574,126.657463,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-68','함덕리 해안','투과성 인공호안','6B',6,690.0,'중','완료',33.542703,126.657000,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-69','신흥리 해안','투과성 인공호안','6B',6,175.0,'중','완료',33.540271,126.657877,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-70','신흥리 해안','투과성 인공호안','6B',6,949.0,'중','진행중',33.542699,126.658568,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-71','신촌리 해안','투과성 인공호안','6B',6,864.0,'중','완료',33.540953,126.659075,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-72','신촌리 해안','수직호안','1B',1,277.0,'하','미조사',33.542176,126.659111,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-73','조천리 해안','모래자갈혼합','5',5,232.0,'중','완료',33.542378,126.662456,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-74','북촌리 해안','수평암반','8A',8,292.0,'상','완료',33.544224,126.661074,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-75','북촌리 해안','수직암반','1A',1,783.0,'하','미조사',33.542792,126.663517,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-76','신촌리 해안','수직암반','1A',1,845.0,'하','완료',33.544558,126.665059,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-77','조천리 해안','수평암반','8A',8,771.0,'상','진행중',33.544187,126.663706,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-78','신흥리 해안','투과성 인공호안','6B',6,102.0,'중','미조사',33.543578,126.665584,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-79','함덕리 해안','수직호안','1B',1,555.0,'하','미조사',33.544119,126.664930,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-80','신촌리 해안','모래자갈혼합','5',5,627.0,'중','진행중',33.545972,126.666715,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-81','함덕리 해안','수평암반','8A',8,724.0,'상','완료',33.545158,126.668713,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-82','조천리 해안','수직호안','1B',1,771.0,'하','완료',33.546378,126.669349,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-83','신흥리 해안','모래자갈혼합','5',5,531.0,'중','완료',33.546204,126.669814,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-84','신흥리 해안','수직호안','1B',1,122.0,'하','완료',33.545049,126.669670,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-85','신흥리 해안','모래자갈혼합','5',5,623.0,'중','완료',33.546622,126.670793,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-86','조천리 해안','모래자갈혼합','5',5,245.0,'중','진행중',33.547911,126.671466,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-87','조천리 해안','자갈·왕자갈','6A',6,536.0,'중','완료',33.546911,126.673383,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-88','함덕리 해안','투과성 인공호안','6B',6,117.0,'중','완료',33.548950,126.675059,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-89','조천리 해안','모래자갈혼합','5',5,216.0,'중','완료',33.546921,126.675950,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-90','신흥리 해안','모래','3A',3,922.0,'하','완료',33.547872,126.677196,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-91','북촌리 해안','투과성 인공호안','6B',6,696.0,'중','완료',33.547976,126.677517,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-92','신촌리 해안','수직암반','1A',1,443.0,'하','완료',33.550533,126.677171,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-93','북촌리 해안','모래','3A',3,198.0,'하','진행중',33.549909,126.677140,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-94','함덕리 해안','모래자갈혼합','5',5,156.0,'중','완료',33.548678,126.679686,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJJC'),'JJJC-95','신촌리 해안','수평암반','8A',8,670.0,'상','미조사',33.549808,126.681314,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-1','한동리 해안','수직호안','1B',1,703.0,'하','미조사',33.500114,126.680914,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-2','종달리 해안','수직암반','1A',1,407.0,'하','미조사',33.499410,126.681578,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-3','동복리 해안','모래','3A',3,259.0,'하','완료',33.499892,126.682252,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-4','종달리 해안','수평암반','8A',8,590.0,'상','진행중',33.502483,126.685473,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-5','한동리 해안','수평암반','8A',8,544.0,'상','미조사',33.502885,126.686902,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-6','평대리 해안','투과성 인공호안','6B',6,989.0,'중','완료',33.501438,126.686634,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-7','월정리 해안','모래','3A',3,211.0,'하','진행중',33.503474,126.686766,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-8','동복리 해안','모래자갈혼합','5',5,598.0,'중','완료',33.503730,126.689968,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-9','행원리 해안','수직암반','1A',1,430.0,'하','완료',33.503585,126.691917,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-10','상도리 해안','수직암반','1A',1,757.0,'하','완료',33.502720,126.692996,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-11','김녕리 해안','수직암반','1A',1,107.0,'하','완료',33.505240,126.694954,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-12','월정리 해안','수평암반','8A',8,760.0,'상','완료',33.503572,126.696359,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-13','한동리 해안','모래자갈혼합','5',5,531.0,'중','진행중',33.506225,126.697617,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-14','종달리 해안','수평암반','8A',8,114.0,'상','미조사',33.504883,126.697501,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-15','상도리 해안','자갈·왕자갈','6A',6,813.0,'중','완료',33.504664,126.697715,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-16','하도리 해안','수직암반','1A',1,915.0,'하','진행중',33.504887,126.701044,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-17','평대리 해안','자갈·왕자갈','6A',6,843.0,'중','진행중',33.505576,126.701596,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-18','동복리 해안','모래자갈혼합','5',5,259.0,'중','완료',33.506039,126.703269,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-19','종달리 해안','수직암반','1A',1,373.0,'하','완료',33.507629,126.705808,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-20','평대리 해안','투과성 인공호안','6B',6,128.0,'중','완료',33.507788,126.705366,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-21','월정리 해안','자갈·왕자갈','6A',6,820.0,'중','완료',33.509416,126.707083,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-22','김녕리 해안','수직암반','1A',1,206.0,'하','완료',33.507488,126.707554,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-23','한동리 해안','수평암반','8A',8,969.0,'상','완료',33.507919,126.711198,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-24','한동리 해안','모래','3A',3,138.0,'하','완료',33.509019,126.711720,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-25','상도리 해안','투과성 인공호안','6B',6,427.0,'중','진행중',33.508381,126.714271,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-26','월정리 해안','모래자갈혼합','5',5,874.0,'중','완료',33.510064,126.713960,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-27','월정리 해안','자갈·왕자갈','6A',6,820.0,'중','미조사',33.510206,126.714429,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-28','하도리 해안','모래자갈혼합','5',5,490.0,'중','완료',33.510344,126.715701,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-29','월정리 해안','모래','3A',3,775.0,'하','완료',33.512188,126.719356,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-30','월정리 해안','모래','3A',3,913.0,'하','완료',33.512969,126.720901,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-31','월정리 해안','수직암반','1A',1,412.0,'하','진행중',33.512944,126.722103,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-32','상도리 해안','모래','3A',3,941.0,'하','완료',33.513294,126.722944,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-33','동복리 해안','모래','3A',3,692.0,'하','미조사',33.514024,126.723872,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-34','월정리 해안','모래자갈혼합','5',5,448.0,'중','완료',33.512108,126.723838,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-35','월정리 해안','모래자갈혼합','5',5,611.0,'중','완료',33.515417,126.726946,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-36','평대리 해안','자갈·왕자갈','6A',6,654.0,'중','미조사',33.514881,126.729424,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-37','평대리 해안','수평암반','8A',8,860.0,'상','완료',33.513771,126.727918,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-38','평대리 해안','수평암반','8A',8,516.0,'상','진행중',33.515256,126.730372,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-39','평대리 해안','모래','3A',3,238.0,'하','완료',33.514363,126.731903,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-40','김녕리 해안','모래','3A',3,713.0,'하','진행중',33.516089,126.734288,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-41','평대리 해안','모래자갈혼합','5',5,149.0,'중','완료',33.515421,126.735361,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-42','월정리 해안','수평암반','8A',8,531.0,'상','완료',33.516953,126.735990,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-43','하도리 해안','수직암반','1A',1,755.0,'하','진행중',33.517143,126.737201,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-44','동복리 해안','수평암반','8A',8,390.0,'상','완료',33.517791,126.740361,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-45','하도리 해안','자갈·왕자갈','6A',6,601.0,'중','완료',33.517062,126.739864,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-46','상도리 해안','수직암반','1A',1,975.0,'하','진행중',33.516995,126.741991,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-47','상도리 해안','자갈·왕자갈','6A',6,767.0,'중','완료',33.520354,126.744496,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-48','종달리 해안','모래','3A',3,748.0,'하','완료',33.519691,126.743499,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-49','김녕리 해안','자갈·왕자갈','6A',6,218.0,'중','완료',33.520978,126.744410,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-50','동복리 해안','투과성 인공호안','6B',6,180.0,'중','완료',33.520353,126.748410,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-51','평대리 해안','투과성 인공호안','6B',6,489.0,'중','완료',33.519243,126.749216,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-52','월정리 해안','모래자갈혼합','5',5,822.0,'중','진행중',33.521672,126.750519,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-53','행원리 해안','모래','3A',3,517.0,'하','완료',33.521811,126.750403,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-54','월정리 해안','수평암반','8A',8,752.0,'상','완료',33.522603,126.751824,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-55','평대리 해안','모래','3A',3,418.0,'하','완료',33.523156,126.755062,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-56','한동리 해안','수직암반','1A',1,140.0,'하','완료',33.522503,126.755975,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-57','동복리 해안','투과성 인공호안','6B',6,414.0,'중','진행중',33.523877,126.757101,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-58','월정리 해안','수직암반','1A',1,209.0,'하','미조사',33.523222,126.756964,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-59','상도리 해안','수직암반','1A',1,234.0,'하','완료',33.524617,126.758026,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-60','김녕리 해안','자갈·왕자갈','6A',6,291.0,'중','완료',33.525048,126.760810,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-61','하도리 해안','투과성 인공호안','6B',6,733.0,'중','완료',33.525431,126.761481,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-62','행원리 해안','수직호안','1B',1,830.0,'하','완료',33.525426,126.764608,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-63','행원리 해안','자갈·왕자갈','6A',6,460.0,'중','완료',33.526299,126.765167,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-64','김녕리 해안','수평암반','8A',8,471.0,'상','완료',33.526261,126.766053,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-65','동복리 해안','수평암반','8A',8,958.0,'상','완료',33.526164,126.766804,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-66','한동리 해안','수직암반','1A',1,363.0,'하','완료',33.525770,126.769445,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-67','상도리 해안','투과성 인공호안','6B',6,570.0,'중','진행중',33.528595,126.771254,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-68','한동리 해안','수직암반','1A',1,966.0,'하','완료',33.528868,126.773043,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-69','종달리 해안','수평암반','8A',8,622.0,'상','완료',33.526926,126.773453,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-70','행원리 해안','자갈·왕자갈','6A',6,948.0,'중','미조사',33.528299,126.774483,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-71','김녕리 해안','수직암반','1A',1,417.0,'하','완료',33.530231,126.777286,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-72','종달리 해안','모래','3A',3,859.0,'하','완료',33.529969,126.776767,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-73','행원리 해안','모래자갈혼합','5',5,851.0,'중','완료',33.528973,126.779920,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-74','김녕리 해안','모래','3A',3,945.0,'하','완료',33.528838,126.780106,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-75','행원리 해안','수직호안','1B',1,394.0,'하','완료',33.529939,126.782559,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-76','하도리 해안','수직호안','1B',1,749.0,'하','진행중',33.531489,126.783278,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-77','한동리 해안','투과성 인공호안','6B',6,300.0,'중','완료',33.532077,126.783184,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-78','월정리 해안','수직암반','1A',1,830.0,'하','완료',33.532645,126.785794,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-79','종달리 해안','수직암반','1A',1,280.0,'하','미조사',33.530606,126.787019,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-80','월정리 해안','수직호안','1B',1,784.0,'하','완료',33.533181,126.786821,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-81','종달리 해안','수평암반','8A',8,229.0,'상','완료',33.533259,126.790645,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-82','종달리 해안','수직암반','1A',1,285.0,'하','미조사',33.534189,126.789768,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-83','종달리 해안','수평암반','8A',8,864.0,'상','완료',33.534687,126.790855,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-84','평대리 해안','수평암반','8A',8,778.0,'상','완료',33.535604,126.795084,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-85','월정리 해안','모래자갈혼합','5',5,267.0,'중','완료',33.535542,126.794792,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-86','동복리 해안','모래자갈혼합','5',5,886.0,'중','완료',33.533446,126.796553,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-87','하도리 해안','수직암반','1A',1,454.0,'하','완료',33.535279,126.797026,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-88','하도리 해안','자갈·왕자갈','6A',6,492.0,'중','진행중',33.535498,126.798169,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-89','한동리 해안','수직호안','1B',1,960.0,'하','완료',33.536231,126.800855,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-90','동복리 해안','모래자갈혼합','5',5,691.0,'중','완료',33.536640,126.801220,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-91','평대리 해안','자갈·왕자갈','6A',6,343.0,'중','완료',33.537346,126.802011,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-92','행원리 해안','수직암반','1A',1,408.0,'하','완료',33.537144,126.804806,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-93','종달리 해안','자갈·왕자갈','6A',6,938.0,'중','완료',33.536951,126.807516,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-94','한동리 해안','투과성 인공호안','6B',6,518.0,'중','완료',33.537036,126.807337,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-95','행원리 해안','모래자갈혼합','5',5,295.0,'중','진행중',33.538725,126.808440,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-96','종달리 해안','투과성 인공호안','6B',6,439.0,'중','완료',33.537873,126.809642,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-97','동복리 해안','모래자갈혼합','5',5,470.0,'중','완료',33.538692,126.810463,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-98','평대리 해안','모래자갈혼합','5',5,896.0,'중','완료',33.538365,126.812397,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-99','종달리 해안','자갈·왕자갈','6A',6,633.0,'중','완료',33.541746,126.813825,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-100','김녕리 해안','모래','3A',3,840.0,'하','진행중',33.541065,126.816585,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-101','한동리 해안','수평암반','8A',8,570.0,'상','완료',33.540793,126.818328,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-102','하도리 해안','수평암반','8A',8,607.0,'상','완료',33.542385,126.819071,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-103','김녕리 해안','수평암반','8A',8,368.0,'상','진행중',33.541559,126.821195,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-104','한동리 해안','수직호안','1B',1,721.0,'하','진행중',33.543190,126.820804,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-105','행원리 해안','수직암반','1A',1,400.0,'하','완료',33.543166,126.822690,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-106','한동리 해안','자갈·왕자갈','6A',6,931.0,'중','완료',33.541941,126.823698,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-107','상도리 해안','수평암반','8A',8,210.0,'상','진행중',33.542828,126.826650,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-108','상도리 해안','수평암반','8A',8,878.0,'상','완료',33.544031,126.827511,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-109','월정리 해안','수직호안','1B',1,591.0,'하','완료',33.543160,126.828942,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-110','행원리 해안','모래','3A',3,591.0,'하','완료',33.544841,126.828685,'["🏖 해수욕장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-111','행원리 해안','수직호안','1B',1,384.0,'하','진행중',33.546409,126.830478,'["🌿 보호구역"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-112','월정리 해안','수평암반','8A',8,531.0,'상','완료',33.545497,126.833402,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-113','월정리 해안','모래자갈혼합','5',5,226.0,'중','완료',33.547260,126.834640,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-114','동복리 해안','수평암반','8A',8,813.0,'상','완료',33.545219,126.835175,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-115','상도리 해안','수평암반','8A',8,356.0,'상','완료',33.546100,126.837308,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-116','월정리 해안','모래','3A',3,641.0,'하','완료',33.548666,126.837664,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-117','하도리 해안','자갈·왕자갈','6A',6,797.0,'중','완료',33.546595,126.838919,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-118','평대리 해안','수평암반','8A',8,716.0,'상','완료',33.547155,126.841203,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-119','평대리 해안','모래','3A',3,389.0,'하','완료',33.547474,126.840917,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-120','평대리 해안','모래자갈혼합','5',5,593.0,'중','진행중',33.549888,126.841944,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-121','김녕리 해안','모래','3A',3,582.0,'하','완료',33.548609,126.844546,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-122','월정리 해안','투과성 인공호안','6B',6,587.0,'중','완료',33.549017,126.846356,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-123','행원리 해안','수직호안','1B',1,218.0,'하','완료',33.548648,126.847909,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-124','한동리 해안','자갈·왕자갈','6A',6,719.0,'중','완료',33.550341,126.848405,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-125','상도리 해안','자갈·왕자갈','6A',6,730.0,'중','완료',33.549668,126.849421,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-126','종달리 해안','투과성 인공호안','6B',6,506.0,'중','미조사',33.552517,126.850556,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-127','월정리 해안','투과성 인공호안','6B',6,392.0,'중','완료',33.551410,126.851536,'["🦪 양식장"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-128','월정리 해안','자갈·왕자갈','6A',6,294.0,'중','미조사',33.553451,126.855444,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-129','행원리 해안','수평암반','8A',8,556.0,'상','완료',33.552324,126.854178,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-130','종달리 해안','수직호안','1B',1,742.0,'하','완료',33.552841,126.857782,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-131','김녕리 해안','투과성 인공호안','6B',6,120.0,'중','미조사',33.552888,126.857968,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-132','상도리 해안','수직호안','1B',1,357.0,'하','완료',33.555302,126.858974,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-133','행원리 해안','모래','3A',3,769.0,'하','완료',33.553972,126.859458,'["⛰ 해안절벽"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-134','한동리 해안','수직암반','1A',1,845.0,'하','진행중',33.554825,126.860719,'["🔧 인공구조물"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-135','상도리 해안','투과성 인공호안','6B',6,504.0,'중','완료',33.556041,126.864050,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-136','행원리 해안','수직암반','1A',1,167.0,'하','미조사',33.556155,126.865427,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-137','행원리 해안','수직암반','1A',1,815.0,'하','진행중',33.557293,126.864803,'["🌊 올레길"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-138','한동리 해안','수직호안','1B',1,556.0,'하','완료',33.557396,126.866650,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-139','상도리 해안','모래','3A',3,541.0,'하','완료',33.558010,126.870252,'["⛵ 항구"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-140','동복리 해안','수평암반','8A',8,979.0,'상','진행중',33.556295,126.869015,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-141','한동리 해안','자갈·왕자갈','6A',6,505.0,'중','미조사',33.556259,126.870347,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-142','행원리 해안','투과성 인공호안','6B',6,114.0,'중','완료',33.559277,126.872579,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-143','평대리 해안','자갈·왕자갈','6A',6,233.0,'중','진행중',33.558930,126.874914,'["🪸 산호"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-144','김녕리 해안','모래','3A',3,495.0,'하','진행중',33.559752,126.875705,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-145','종달리 해안','수평암반','8A',8,934.0,'상','완료',33.559070,126.876054,'["🏛 문화재"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-146','동복리 해안','모래자갈혼합','5',5,930.0,'중','완료',33.559072,126.877158,'["🐢 생태보전"]'); +INSERT INTO wing.CST_SECT (CST_SRVY_ZONE_SN,SECT_CD,SECT_NM,CST_TP_CD,ESI_CD,ESI_NUM,LEN_M,SNSTVT_CD,SRVY_STTS_CD,LAT,LNG,TAGS) VALUES ((SELECT CST_SRVY_ZONE_SN FROM wing.CST_SRVY_ZONE WHERE ZONE_CD='JJGJ'),'JJGJ-147','하도리 해안','수직암반','1A',1,556.0,'하','미조사',33.560678,126.878962,'["⛰ 해안절벽"]'); + + +-- ============================================================ +-- 4. 상세 데이터 UPDATE (16건) +-- ============================================================ + +UPDATE CST_SECT SET + SHORE_TP = '폐쇄형', + ACCESS_DC = '차량으로 접근 가능, 해안 뒤편에서 접근', + ACCESS_PT = '서귀포시 성산읍 시흥리 1270-1, 12-64', + SENSITIVE_INFO = '[{"t":"사회·경제적","v":"올레길1코스, 파래양식장"},{"t":"생물자원","v":"없음"}]', + CLEANUP_METHODS = '["수작업에 의한 제거","저압/고압세척","고온수 저압/고압세척","스팀세척"]', + END_CRITERIA = '["유류 쓰레기가 없어야 함","표면 접촉 시 기름이 묻어나지 않아야 함","표면 coat/stain 두께 유류 10% 미만","민감자원에 영향을 줄 수 있는 유막이 발생하지 않아야 함"]', + NOTES = '["유출유는 블록의 거친 표면에 쉽게 표착되고 블록 사이로 깊게 침투할 가능성이 높음","신선유 또는 액상일 때 고압세척 방제활동이 효과적","중유·풍화 기름은 수작업으로 긁어내거나 고온수 고압세척 이용"]' +WHERE SECT_CD = 'SGSS-1'; + +UPDATE CST_SECT SET + SHORE_TP = '폐쇄형', + ACCESS_DC = '차량으로 접근 가능, 해안 뒤편에서 접근', + ACCESS_PT = '서귀포시 성산읍 시흥리 1', + SENSITIVE_INFO = '[{"t":"사회·경제적","v":"숙박시설, 조가비박물관"},{"t":"생물자원","v":"없음"}]', + CLEANUP_METHODS = '["수작업에 의한 제거","흡착재를 이용한 회수/수거"]', + END_CRITERIA = '["유류 쓰레기가 없어야 함","표면 접촉 시 기름이 묻어나지 않아야 함","표면 coat/stain 두께 유류 10% 미만","타르볼 100m당 1개 미만"]', + NOTES = '["유출유는 해빈 전체에 표착될 가능성이 높음","하부 지역 유출유가 창조시에 상부로 이동 가능","포말대(upper swash zone)의 유류제거에 집중"]' +WHERE SECT_CD = 'SGSS-6'; + +UPDATE CST_SECT SET + SHORE_TP = '개방형', + ACCESS_DC = '도보로 접근 가능, 인근구획에서 접근', + ACCESS_PT = '서귀포시 성산읍 오조리 391', + SENSITIVE_INFO = '[{"t":"사회·경제적","v":"교육시설(성산고등학교)"},{"t":"생물자원","v":"없음"}]', + CLEANUP_METHODS = '["수작업에 의한 제거","흡착재를 이용한 회수/수거","저압/고압세척"]', + END_CRITERIA = '["유류 쓰레기가 없어야 함","표면 접촉 시 기름이 묻어나지 않아야 함","표면 coat/stain 두께 유류 30% 미만","민감자원에 영향을 줄 수 있는 유막이 발생하지 않아야 함"]', + NOTES = '["유출유는 물기 있는 암반 표면에는 표착되지 않고 틈새와 퇴적층을 침투","고조 시 접근 가능한 해안은 수작업으로 고농도 유출유 제거 용이"]' +WHERE SECT_CD = 'SGSS-10'; + +UPDATE CST_SECT SET + SHORE_TP = '폐쇄형', + ACCESS_DC = '차량으로 접근 가능, 해안 뒤편에서 접근', + ACCESS_PT = '서귀포시 표선면 표선리 464-1', + SENSITIVE_INFO = '[{"t":"사회·경제적","v":"표선해수욕장, 올레길3코스, 숙박시설, 민가"},{"t":"생물자원","v":"없음"}]', + CLEANUP_METHODS = '["수작업에 의한 제거","흡착재를 이용한 회수/수거"]', + END_CRITERIA = '["유류 쓰레기가 없어야 함","표면 접촉 시 기름이 묻어나지 않아야 함","표면 coat/stain 두께 유류 10% 미만","타르볼 100m당 1개 미만"]', + NOTES = '["유출유는 해빈 전체에 표착될 가능성이 높음","하부 지역 유출유가 창조시에 상부로 이동 가능","포말대의 유류제거에 집중"]' +WHERE SECT_CD = 'SGPS-6'; + +UPDATE CST_SECT SET + SHORE_TP = '개방형', + ACCESS_DC = '차량으로 접근 가능, 해안 뒤편에서 접근', + ACCESS_PT = '서귀포시 남원읍 태흥리 7', + SENSITIVE_INFO = '[{"t":"사회·경제적","v":"육상양식장"},{"t":"생물자원","v":"없음"}]', + CLEANUP_METHODS = '["수작업에 의한 제거","흡착재를 이용한 회수/수거","저압/고압세척"]', + END_CRITERIA = '["유류 쓰레기가 없어야 함","표면 접촉 시 기름이 묻어나지 않아야 함","표면 coat/stain 두께 유류 30% 미만","민감자원에 영향을 줄 수 있는 유막이 발생하지 않아야 함"]', + NOTES = '["유출유는 물기 있는 암반 표면에는 표착되지 않고 틈새와 퇴적층을 침투","고조 시 접근 가능한 해안은 수작업으로 고농도 유출유 제거 용이"]' +WHERE SECT_CD = 'SGNW-5'; + +UPDATE CST_SECT SET + SHORE_TP = '폐쇄형', + ACCESS_DC = '차량으로 접근 가능, 해안 뒤편에서 접근', + ACCESS_PT = '서귀포시 남원읍 태흥리 364-2', + SENSITIVE_INFO = '[{"t":"사회·경제적","v":"올레길4코스, 민가"},{"t":"생물자원","v":"없음"}]', + CLEANUP_METHODS = '["수작업에 의한 제거","흡착재를 이용한 회수/수거","저압세척","범람(저수세정, Flooding)"]', + END_CRITERIA = '["유류 쓰레기가 없어야 함","표면 접촉 시 기름이 묻어나지 않아야 함","표면 coat/stain 두께 유류 10% 미만","타르볼 100m당 1개 미만"]', + NOTES = '["유출유는 해빈 전체에 표착될 가능성이 높음","하부 지역 유출유가 창조시에 상부로 이동 가능"]' +WHERE SECT_CD = 'SGNW-12'; + +UPDATE CST_SECT SET + SHORE_TP = '개방형', + ACCESS_DC = '차량으로 접근 가능, 해안 뒤편에서 접근', + ACCESS_PT = '서귀포시 서귀동 758-5', + SENSITIVE_INFO = '[{"t":"사회·경제적","v":"서귀포항"},{"t":"생물자원","v":"없음"}]', + CLEANUP_METHODS = '["수작업에 의한 제거","저압/고압세척","고온수 저압/고압세척","스팀세척"]', + END_CRITERIA = '["유류 쓰레기가 없어야 함","표면 접촉 시 기름이 묻어나지 않아야 함","표면 coat/stain 두께 유류 10% 미만","민감자원에 영향을 줄 수 있는 유막이 발생하지 않아야 함"]', + NOTES = '["유출유는 블록의 거친 표면에 쉽게 표착되고 블록 사이로 깊게 침투할 가능성이 높음","신선유 또는 액상일 때 고압세척 방제활동이 효과적","중유·풍화 기름은 수작업으로 긁어내거나 고온수 고압세척 이용"]' +WHERE SECT_CD = 'SGTP-5'; + +UPDATE CST_SECT SET + SHORE_TP = '폐쇄형', + ACCESS_DC = '차량으로 접근 가능, 해안 뒤편에서 접근', + ACCESS_PT = '서귀포시 강정동 산1', + SENSITIVE_INFO = '[{"t":"사회·경제적","v":"강정항"},{"t":"생물자원","v":"없음"}]', + CLEANUP_METHODS = '["수작업에 의한 제거","저압/고압세척","고온수 저압/고압세척","스팀세척"]', + END_CRITERIA = '["유류 쓰레기가 없어야 함","표면 접촉 시 기름이 묻어나지 않아야 함","표면 coat/stain 두께 유류 10% 미만","민감자원에 영향을 줄 수 있는 유막이 발생하지 않아야 함"]', + NOTES = '["유출유는 블록의 거친 표면에 쉽게 표착되고 블록 사이로 깊게 침투할 가능성이 높음","신선유 또는 액상일 때 고압세척 방제활동이 효과적"]' +WHERE SECT_CD = 'SGGJ-5'; + +UPDATE CST_SECT SET + SHORE_TP = '폐쇄형', + ACCESS_DC = '차량으로 접근 가능, 해안 뒤편에서 접근', + ACCESS_PT = '서귀포시 안덕면 감산리 982-1', + SENSITIVE_INFO = '[{"t":"사회·경제적","v":"대평항"},{"t":"생물자원","v":"없음"}]', + CLEANUP_METHODS = '["수작업에 의한 제거","저압/고압세척","고온수 저압/고압세척","스팀세척"]', + END_CRITERIA = '["유류 쓰레기가 없어야 함","표면 접촉 시 기름이 묻어나지 않아야 함","표면 coat/stain 두께 유류 10% 미만","민감자원에 영향을 줄 수 있는 유막이 발생하지 않아야 함"]', + NOTES = '["유출유는 블록의 거친 표면에 쉽게 표착되고 블록 사이로 깊게 침투할 가능성이 높음","신선유 또는 액상일 때 고압세척 방제활동이 효과적","중유·풍화 기름은 수작업으로 긁어내거나 고온수 고압세척 이용"]' +WHERE SECT_CD = 'SGAD-5'; + +UPDATE CST_SECT SET + SHORE_TP = '폐쇄형', + ACCESS_DC = '차량으로 접근 가능, 해안 뒤편에서 접근', + ACCESS_PT = '서귀포시 안덕면 감산리 985', + SENSITIVE_INFO = '[{"t":"사회·경제적","v":"올레길8코스(해안로), 민가"},{"t":"생물자원","v":"없음"}]', + CLEANUP_METHODS = '["수작업에 의한 제거","흡착재를 이용한 회수/수거","저압세척","범람(저수세정, Flooding)","자갈세척"]', + END_CRITERIA = '["유류 쓰레기가 없어야 함","표면 접촉 시 기름이 묻어나지 않아야 함","표면 coat/stain 두께 유류 10% 미만","타르볼 100m당 1개 미만"]', + NOTES = '["파도가 덮치는 지점 상부에 고인기름은 신속히 제거","저압세척은 퇴적물로부터 표착유를 재부유시키며, 부유기름은 흡착재로 회수"]' +WHERE SECT_CD = 'SGAD-7'; + +UPDATE CST_SECT SET + SHORE_TP = '개방형', + ACCESS_DC = '차량으로 접근 가능, 해안 뒤편에서 접근', + ACCESS_PT = '서귀포시 대정읍 상모리 133', + SENSITIVE_INFO = '[{"t":"사회·경제적","v":"산이수동항"},{"t":"생물자원","v":"마라해안군립공원"}]', + CLEANUP_METHODS = '["수작업에 의한 제거","저압/고압세척","고온수 저압/고압세척","스팀세척"]', + END_CRITERIA = '["유류 쓰레기가 없어야 함","표면 접촉 시 기름이 묻어나지 않아야 함","표면 coat/stain 두께 유류 10% 미만","민감자원에 영향을 줄 수 있는 유막이 발생하지 않아야 함"]', + NOTES = '["유출유는 블록의 거친 표면에 쉽게 표착되고 블록 사이로 깊게 침투할 가능성이 높음","신선유 또는 액상일 때 고압세척 방제활동이 효과적","중유·풍화 기름은 수작업으로 긁어내거나 고온수 고압세척 이용"]' +WHERE SECT_CD = 'SGDJ-5'; + +UPDATE CST_SECT SET + SHORE_TP = '개방형', + ACCESS_DC = '도보로 접근 가능', + ACCESS_PT = '서귀포시 대정읍 상모리 179-3', + SENSITIVE_INFO = '[{"t":"사회·경제적","v":"송악산"},{"t":"생물자원","v":"마라해안군립공원"}]', + CLEANUP_METHODS = '["수작업에 의한 제거","흡착재를 이용한 회수/수거","퇴적물 갈기/파도세척"]', + END_CRITERIA = '["유류 쓰레기가 없어야 함","표면 접촉 시 기름이 묻어나지 않아야 함","표면 coat/stain 두께 유류 10% 미만","타르볼 100m당 1개 미만"]', + NOTES = '["유출유는 해빈 전체에 표착될 가능성이 높음","하부 지역 유출유가 창조시에 상부로 이동 가능","포말대의 유류제거에 집중"]' +WHERE SECT_CD = 'SGDJ-7'; + +UPDATE CST_SECT SET + SHORE_TP = '개방형', + ACCESS_DC = '선박을 이용하여 접근', + ACCESS_PT = '서귀포시 대정읍 상모리 179-3', + SENSITIVE_INFO = '[{"t":"사회·경제적","v":"송악산"},{"t":"생물자원","v":"마라해안군립공원"}]', + CLEANUP_METHODS = '["수작업에 의한 제거","흡착재를 이용한 회수/수거","저압/고압세척"]', + END_CRITERIA = '["유류 쓰레기가 없어야 함","표면 접촉 시 기름이 묻어나지 않아야 함","표면 coat/stain 두께 유류 20% 미만","민감자원에 영향을 줄 수 있는 유막이 발생하지 않아야 함"]', + NOTES = '["유출유는 물기 있는 암반 표면에는 표착되지 않고 틈새와 퇴적층을 침투","고조 시 접근 가능한 해안은 수작업으로 고농도 유출유 제거 용이"]' +WHERE SECT_CD = 'SGDJ-8'; + +UPDATE CST_SECT SET + SHORE_TP = '개방형', + ACCESS_DC = '차량으로 접근 가능, 해안 뒤편에서 접근', + ACCESS_PT = '제주시 한경면 고산리 3987', + SENSITIVE_INFO = '[{"t":"사회·경제적","v":"육상양식장(도로 주변 농사구역)"},{"t":"생물자원","v":"없음"}]', + CLEANUP_METHODS = '["수작업에 의한 제거","흡착재를 이용한 회수/수거","저압/고압세척"]', + END_CRITERIA = '["유류 쓰레기가 없어야 함","표면 접촉 시 기름이 묻어나지 않아야 함","표면 coat/stain 두께 유류 30% 미만","민감자원에 영향을 줄 수 있는 유막이 발생하지 않아야 함"]', + NOTES = '["유출유는 물기 있는 암반 표면에는 표착되지 않고 틈새와 퇴적층을 침투","고조 시 접근 가능한 해안은 수작업으로 고농도 유출유 제거 용이","부분적으로 모래와 암반이 형성되어 있음"]' +WHERE SECT_CD = 'JJHG-1'; + +UPDATE CST_SECT SET + SHORE_TP = '개방형', + ACCESS_DC = '차량으로 접근 가능, 소형선박 이용 방제작업 가능', + ACCESS_PT = '제주시 한경면 고산리 3616-10', + SENSITIVE_INFO = '[{"t":"사회·경제적","v":"차귀도항, 잠수함 매표소"},{"t":"생물자원","v":"없음"}]', + CLEANUP_METHODS = '["수작업(흡착제,걸레)에 의한 제거","저압/고압세척","고온수 저압/고압세척","스팀세척"]', + END_CRITERIA = '["유류 쓰레기가 없어야 함","표면 접촉 시 기름이 묻어나지 않아야 함","표면 coat/stain 두께 유류 10% 미만","민감자원에 영향을 줄 수 있는 유막이 발생하지 않아야 함"]', + NOTES = '["유출유는 블록의 거친 표면에 쉽게 표착되고 블록 사이로 깊게 침투할 가능성이 높음","신선유 또는 액상일 때 고압세척 방제활동이 효과적","중유·풍화 기름은 수작업으로 긁어내거나 고온수 고압세척 이용"]' +WHERE SECT_CD = 'JJHG-8'; + +UPDATE CST_SECT SET + SHORE_TP = '폐쇄형', + ACCESS_DC = '차량으로 접근 가능, 해안 뒤편에서 접근', + ACCESS_PT = '제주시 한림읍 월령리 3855', + SENSITIVE_INFO = '[{"t":"사회·경제적","v":"월령항, 숙박시설"},{"t":"생물자원","v":"없음"}]', + CLEANUP_METHODS = '["수작업에 의한 제거","흡착재를 이용한 회수/수거"]', + END_CRITERIA = '["유류 쓰레기가 없어야 함","표면 접촉 시 기름이 묻어나지 않아야 함","표면 coat/stain 두께 유류 10% 미만","타르볼 100m당 1개 미만"]', + NOTES = '["유출유는 해빈 전체에 표착될 가능성이 높음","하부 지역 유출유가 창조시에 상부로 이동 가능","포말대(upper swash zone)의 유류제거에 집중"]' +WHERE SECT_CD = 'JJHL-4'; + +UPDATE CST_SECT SET + SHORE_TP = '개방형', + ACCESS_DC = '차량으로 접근 가능, 해안 뒤편에서 접근', + ACCESS_PT = '제주시 애월읍 곽지리 3855', + SENSITIVE_INFO = '[{"t":"사회·경제적","v":"곽지해수욕장, 캠핑장"},{"t":"생물자원","v":"없음"}]', + CLEANUP_METHODS = '["수작업에 의한 제거","흡착재를 이용한 회수/수거","퇴적물 갈기/파도세척"]', + END_CRITERIA = '["유류 쓰레기가 없어야 함","표면 접촉 시 기름이 묻어나지 않아야 함","표면 coat/stain 두께 유류 10% 미만","타르볼 100m당 1개 미만"]', + NOTES = '["유출유는 해빈 전체에 표착될 가능성이 높음","하부 지역 유출유가 창조시에 상부로 이동 가능","포말대의 유류제거에 집중"]' +WHERE SECT_CD = 'JJAW-8'; + +UPDATE CST_SECT SET + SHORE_TP = '폐쇄형', + ACCESS_DC = '차량으로 접근 가능, 해안 뒤편에서 접근', + ACCESS_PT = '제주시 건입동 3855', + SENSITIVE_INFO = '[{"t":"사회·경제적","v":"제주항, 제주조선"},{"t":"생물자원","v":"없음"}]', + CLEANUP_METHODS = '["수작업에 의한 제거","저압/고압세척","고온수 저압/고압세척","스팀세척"]', + END_CRITERIA = '["유류 쓰레기가 없어야 함","표면 접촉 시 기름이 묻어나지 않아야 함","표면 coat/stain 두께 유류 10% 미만","민감자원에 영향을 줄 수 있는 유막이 발생하지 않아야 함"]', + NOTES = '["유출유는 호안의 거친 표면에 쉽게 표착될 가능성이 높음","신선유 또는 액상일 때 고압세척 방제활동이 효과적","중유·풍화 기름은 수작업으로 긁어내거나 고온수 고압세척 이용"]' +WHERE SECT_CD = 'JJGI-3'; + +UPDATE CST_SECT SET + SHORE_TP = '폐쇄형', + ACCESS_DC = '차량으로 접근 가능, 해안 뒤편에서 접근', + ACCESS_PT = '제주시 조천읍 신촌리 3855', + SENSITIVE_INFO = '[{"t":"사회·경제적","v":"정치망어장(전면 270m)"},{"t":"생물자원","v":"폐류 서식지"}]', + CLEANUP_METHODS = '["수작업에 의한 제거","흡착재를 이용한 회수/수거","저압세척","범람(저수세정, Flooding)","자갈세척"]', + END_CRITERIA = '["유류 쓰레기가 없어야 함","표면 접촉 시 기름이 묻어나지 않아야 함","표면 coat/stain 두께 유류 10% 미만","타르볼 100m당 1개 미만"]', + NOTES = '["파도가 덮치는 지점 상부에 고인기름은 신속히 제거","저압세척은 퇴적물로부터 표착유를 재부유시키며, 부유기름은 흡착재로 회수"]' +WHERE SECT_CD = 'JJJC-4'; + +UPDATE CST_SECT SET + SHORE_TP = '폐쇄형', + ACCESS_DC = '차량으로 접근 가능, 해안 뒤편에서 접근', + ACCESS_PT = '제주시 구좌읍 동복리 3855', + SENSITIVE_INFO = '[{"t":"사회·경제적","v":"접안시설"},{"t":"생물자원","v":"없음"}]', + CLEANUP_METHODS = '["수작업에 의한 제거","저압/고압세척","고온수 저압/고압세척","스팀세척"]', + END_CRITERIA = '["유류 쓰레기가 없어야 함","표면 접촉 시 기름이 묻어나지 않아야 함","표면 coat/stain 두께 유류 20% 미만","민감자원에 영향을 줄 수 있는 유막이 발생하지 않아야 함"]', + NOTES = '["유출유는 블록의 거친 표면에 쉽게 표착되고 블록 사이로 깊게 침투할 가능성이 높음","신선유 또는 액상일 때 고압세척 방제활동이 효과적","중유·풍화 기름은 수작업으로 긁어내거나 고온수 고압세척 이용"]' +WHERE SECT_CD = 'JJGJ-2'; + +UPDATE CST_SECT SET + SHORE_TP = '개방형', + ACCESS_DC = '차량으로 접근 가능, 해안 뒤편에서 접근', + ACCESS_PT = '제주시 구좌읍 동복리 3855', + SENSITIVE_INFO = '[{"t":"사회·경제적","v":"산책로, 민가"},{"t":"생물자원","v":"없음"}]', + CLEANUP_METHODS = '["수작업에 의한 제거","흡착재를 이용한 회수/수거","저압/고압세척"]', + END_CRITERIA = '["유류 쓰레기가 없어야 함","표면 접촉 시 기름이 묻어나지 않아야 함","표면 coat/stain 두께 유류 20% 미만","민감자원에 영향을 줄 수 있는 유막이 발생하지 않아야 함"]', + NOTES = '["유출유는 물기 있는 암반 표면에는 표착되지 않고 틈새와 퇴적층을 침투","고조 시 접근 가능한 해안은 수작업으로 고농도 유출유 제거 용이"]' +WHERE SECT_CD = 'JJGJ-3'; + +-- ============================================================ +-- 5. GEOMETRY 값 채우기 +-- ============================================================ +UPDATE CST_SRVY_ZONE SET GEOM = ST_SetSRID(ST_MakePoint(LNG_CENTER, LAT_CENTER), 4326) +WHERE LAT_CENTER IS NOT NULL AND LNG_CENTER IS NOT NULL AND GEOM IS NULL; + +UPDATE CST_SECT SET GEOM = ST_SetSRID(ST_MakePoint(LNG, LAT), 4326) +WHERE LAT IS NOT NULL AND LNG IS NOT NULL AND GEOM IS NULL; + +-- ============================================================ +-- 6. 인덱스 (일반 + 공간) +-- ============================================================ +CREATE INDEX IF NOT EXISTS IDX_CST_SECT_ZONE ON CST_SECT(CST_SRVY_ZONE_SN); +CREATE INDEX IF NOT EXISTS IDX_CST_SECT_STTS ON CST_SECT(SRVY_STTS_CD); +CREATE INDEX IF NOT EXISTS IDX_CST_SECT_ESI ON CST_SECT(ESI_NUM); +CREATE INDEX IF NOT EXISTS IDX_CST_SRVY_ZONE_GEOM ON CST_SRVY_ZONE USING GIST(GEOM); +CREATE INDEX IF NOT EXISTS IDX_CST_SECT_GEOM ON CST_SECT USING GIST(GEOM); diff --git a/database/migration/012_board_ext.sql b/database/migration/012_board_ext.sql new file mode 100644 index 0000000..9f07cf9 --- /dev/null +++ b/database/migration/012_board_ext.sql @@ -0,0 +1,51 @@ +-- ============================================================ +-- 012_board_ext.sql +-- MANUAL_FILE (해경매뉴얼) + BOARD_ATTACH (게시판 첨부파일) +-- ============================================================ + +-- 매뉴얼 파일 +CREATE TABLE IF NOT EXISTS MANUAL_FILE ( + MANUAL_SN SERIAL PRIMARY KEY, + CATG_NM VARCHAR(50), + TITLE VARCHAR(200) NOT NULL, + VERSION VARCHAR(20), + FILE_TP VARCHAR(20), + FILE_SZ VARCHAR(20), + FILE_PATH VARCHAR(500), + AUTHOR_NM VARCHAR(50), + DWNLD_CNT INTEGER DEFAULT 0, + USE_YN CHAR(1) DEFAULT 'Y', + REG_DTM TIMESTAMPTZ DEFAULT NOW(), + MDFCN_DTM TIMESTAMPTZ DEFAULT NOW() +); + +-- 게시판 첨부파일 +CREATE TABLE IF NOT EXISTS BOARD_ATTACH ( + ATTACH_SN SERIAL PRIMARY KEY, + POST_SN INTEGER NOT NULL REFERENCES BOARD_POST(POST_SN) ON DELETE CASCADE, + FILE_NM VARCHAR(200) NOT NULL, + ORGNL_NM VARCHAR(200), + FILE_PATH VARCHAR(500), + FILE_SZ INTEGER, + FILE_EXT VARCHAR(10), + SORT_ORD INTEGER DEFAULT 0, + REG_DTM TIMESTAMPTZ DEFAULT NOW() +); + +-- ============================================================ +-- MANUAL_FILE 시드 데이터 (12건) +-- ============================================================ + +INSERT INTO MANUAL_FILE (CATG_NM, TITLE, VERSION, FILE_TP, FILE_SZ, AUTHOR_NM, DWNLD_CNT, REG_DTM) VALUES +('방제매뉴얼', '해양오염방제 업무매뉴얼 (2026 개정판)', 'v4.2', 'PDF', '28.5 MB', '해양오염대응국', 1245, '2026-02-15'::timestamptz), +('방제매뉴얼', '해양오염 방제자원 운용 지침서', 'v3.1', 'PDF', '15.2 MB', '방제과', 892, '2026-01-20'::timestamptz), +('방제매뉴얼', '오일펜스 전개 · 회수 표준절차서', 'v2.8', 'PDF', '12.7 MB', '방제과', 1567, '2025-12-10'::timestamptz), +('대응매뉴얼', '해양오염사고 초동대응 매뉴얼', 'v5.0', 'PDF', '22.1 MB', '해양오염대응국', 2103, '2026-02-01'::timestamptz), +('대응매뉴얼', 'HNS 해양사고 대응 가이드라인', 'v2.3', 'PDF', '18.9 MB', '해양오염대응국', 734, '2025-11-15'::timestamptz), +('대응매뉴얼', '대량 유출유 방제 대응 체계 매뉴얼', 'v3.5', 'PDF', '31.4 MB', '방제과', 1089, '2025-10-20'::timestamptz), +('교육자료', '방제요원 교육훈련 교재 (기본과정)', 'v6.1', 'PDF', '45.3 MB', '교육훈련과', 567, '2026-01-10'::timestamptz), +('교육자료', '방제요원 교육훈련 교재 (심화과정)', 'v4.0', 'PDF', '52.8 MB', '교육훈련과', 423, '2025-12-05'::timestamptz), +('교육자료', '유류오염 식별 및 샘플링 실무 교재', 'v2.0', 'PDF', '9.6 MB', '교육훈련과', 312, '2025-09-18'::timestamptz), +('법령·규정', '해양환경관리법 시행규칙 (방제 관련)', '2026', 'PDF', '5.4 MB', '법무담당관', 645, '2026-02-10'::timestamptz), +('법령·규정', '해양오염방제 자재·약제 검정 기준', '2025', 'PDF', '3.8 MB', '법무담당관', 389, '2025-08-22'::timestamptz), +('법령·규정', '방제선·방제정 운용 및 관리 규정', '2026', 'PDF', '7.2 MB', '장비관리과', 478, '2026-01-05'::timestamptz); diff --git a/database/migration/013_hns_analysis.sql b/database/migration/013_hns_analysis.sql new file mode 100644 index 0000000..0a05240 --- /dev/null +++ b/database/migration/013_hns_analysis.sql @@ -0,0 +1,130 @@ +-- ============================================================ +-- 013_hns_analysis.sql +-- HNS 대기확산 분석 테이블 + 시드 데이터 +-- ============================================================ + +SET search_path TO wing, public; + +CREATE TABLE IF NOT EXISTS HNS_ANALYSIS ( + HNS_ANLYS_SN SERIAL PRIMARY KEY, + ACDNT_SN INTEGER REFERENCES ACDNT(ACDNT_SN), + ANLYS_NM VARCHAR(200) NOT NULL, + ACDNT_DTM TIMESTAMPTZ, + LOC_NM VARCHAR(200), + -- 위치 (표준: LON/LAT/GEOM) + LON NUMERIC(10,6), + LAT NUMERIC(9,6), + GEOM GEOMETRY(Point, 4326), + LOC_DC VARCHAR(100), + -- 물질 정보 + SBST_SN INTEGER, + SBST_NM VARCHAR(100), + UN_NO VARCHAR(10), + CAS_NO VARCHAR(20), + SPIL_QTY NUMERIC(10,2), + SPIL_UNIT_CD VARCHAR(10) DEFAULT 'KL', + SPIL_TP_CD VARCHAR(20), + FCST_HR INTEGER, + ALGO_CD VARCHAR(20), + CRIT_MDL_CD VARCHAR(10), + -- 기상 조건 + WIND_SPD NUMERIC(5,1), + WIND_DIR VARCHAR(10), + TEMP NUMERIC(4,1), + HUMID NUMERIC(4,1), + ATM_STBL_CD VARCHAR(10), + -- 실행 상태 + EXEC_STTS_CD VARCHAR(20) DEFAULT 'COMPLETED', + RISK_CD VARCHAR(20), + ANALYST_NM VARCHAR(50), + -- 결과 + RSLT_DATA JSONB, + USE_YN CHAR(1) DEFAULT 'Y', + REG_DTM TIMESTAMPTZ DEFAULT NOW(), + MDFCN_DTM TIMESTAMPTZ DEFAULT NOW(), + CONSTRAINT CK_HNS_STTS CHECK (EXEC_STTS_CD IN ('PENDING','RUNNING','COMPLETED','FAILED')) +); + +-- ============================================================ +-- HNS_ANALYSIS 시드 데이터 (8건 — 기존 mock 데이터 기반) +-- ============================================================ + +INSERT INTO HNS_ANALYSIS ( + ANLYS_NM, ACDNT_DTM, LOC_NM, LON, LAT, GEOM, LOC_DC, + SBST_NM, SPIL_QTY, SPIL_UNIT_CD, FCST_HR, ALGO_CD, CRIT_MDL_CD, + WIND_SPD, WIND_DIR, TEMP, HUMID, ATM_STBL_CD, + EXEC_STTS_CD, RISK_CD, ANALYST_NM, + RSLT_DATA, REG_DTM +) VALUES +( + '울산 온산항 톨루엔 누출', '2025-02-11 14:15'::timestamptz, + '부산항 신항', 129.067, 35.078, ST_SetSRID(ST_MakePoint(129.067, 35.078), 4326), '129.067 + 35.078', + '톨루엔 (Toluene)', 12.0, 'KL', 24, 'ALOHA', 'AEGL', + 5.2, 'SW', 18.5, 65, 'D', + 'COMPLETED', 'HIGH', '운영팀, 방재팀', + '{"aegl3": true, "aegl2": true, "aegl1": true, "damageRadius": "1.8 km", "zones": [{"level":"AEGL-3","radius":500},{"level":"AEGL-2","radius":1000},{"level":"AEGL-1","radius":1500}]}'::jsonb, + '2025-02-11 14:15'::timestamptz +), +( + '여수 엠프시아 누출', '2025-02-09 08:40'::timestamptz, + '여수항', 127.662, 34.740, ST_SetSRID(ST_MakePoint(127.662, 34.740), 4326), '127.662 + 34.740', + '벤젠 (Benzene)', 5.0, 'TON', 12, 'ALOHA', 'AEGL', + 4.1, 'NE', 12.3, 58, 'C', + 'COMPLETED', 'HIGH', '남해팀, 방재팀', + '{"aegl3": true, "aegl2": true, "aegl1": true, "damageRadius": "2.4 km", "zones": [{"level":"AEGL-3","radius":600},{"level":"AEGL-2","radius":1200},{"level":"AEGL-1","radius":1800}]}'::jsonb, + '2025-02-09 08:40'::timestamptz +), +( + '부산 수소 추진연 폭발', '2025-02-07 12:15'::timestamptz, + '부산항', 129.043, 35.097, ST_SetSRID(ST_MakePoint(129.043, 35.097), 4326), '129.043 + 35.097', + '수소 (Hydrogen)', 0.8, 'TON', 6, 'CAMEO', 'AEGL', + 6.5, 'W', 15.0, 55, 'D', + 'COMPLETED', 'CRITICAL', '남해팀, 방재팀', + '{"aegl3": true, "aegl2": true, "aegl1": true, "damageRadius": "0.22 km", "zones": [{"level":"AEGL-3","radius":100},{"level":"AEGL-2","radius":150},{"level":"AEGL-1","radius":220}]}'::jsonb, + '2025-02-07 12:15'::timestamptz +), +( + '인천항 메탄올 유출', '2025-02-03 16:50'::timestamptz, + '인천항', 126.598, 37.449, ST_SetSRID(ST_MakePoint(126.598, 37.449), 4326), '126.598 + 37.449', + '메탄올 (Methanol)', 8.5, 'KL', 24, 'ALOHA', 'AEGL', + 3.8, 'SE', 8.2, 72, 'E', + 'COMPLETED', 'MEDIUM', '중부팀, 방재팀', + '{"aegl3": true, "aegl2": true, "aegl1": true, "damageRadius": "1.2 km", "zones": [{"level":"AEGL-3","radius":300},{"level":"AEGL-2","radius":700},{"level":"AEGL-1","radius":1200}]}'::jsonb, + '2025-02-03 16:50'::timestamptz +), +( + '평택항 LPG 누출', '2025-01-28 09:20'::timestamptz, + '평택항', 126.822, 36.969, ST_SetSRID(ST_MakePoint(126.822, 36.969), 4326), '126.822 + 36.969', + 'LPG', 3.2, 'TON', 12, 'CAMEO', 'AEGL', + 4.5, 'N', 5.5, 68, 'D', + 'COMPLETED', 'MEDIUM', '중부팀, 방재팀', + '{"aegl3": true, "aegl2": true, "aegl1": true, "damageRadius": "0.95 km", "zones": [{"level":"AEGL-3","radius":250},{"level":"AEGL-2","radius":550},{"level":"AEGL-1","radius":950}]}'::jsonb, + '2025-01-28 09:20'::timestamptz +), +( + '광양항 벤젠 누출', '2025-01-22 11:30'::timestamptz, + '광양항', 127.736, 34.930, ST_SetSRID(ST_MakePoint(127.736, 34.930), 4326), '127.736 + 34.930', + '벤젠 (Benzene)', 6.0, 'KL', 24, 'ALOHA', 'AEGL', + 3.2, 'S', 10.1, 60, 'C', + 'COMPLETED', 'LOW', '남해팀, 방재팀', + '{"aegl3": true, "aegl2": true, "aegl1": true, "damageRadius": "1.5 km", "zones": [{"level":"AEGL-3","radius":400},{"level":"AEGL-2","radius":800},{"level":"AEGL-1","radius":1500}]}'::jsonb, + '2025-01-22 11:30'::timestamptz +), +( + '목포항 염소스가 유출', '2025-01-15 14:10'::timestamptz, + '서구항', 126.392, 34.793, ST_SetSRID(ST_MakePoint(126.392, 34.793), 4326), '126.392 + 34.793', + '염소 (Chlorine)', 2.0, 'TON', 12, 'CAMEO', 'AEGL', + 5.0, 'NW', 7.5, 62, 'D', + 'COMPLETED', 'LOW', '서해팀, 방재팀', + '{"aegl3": true, "aegl2": true, "aegl1": true, "damageRadius": "1.0 km", "zones": [{"level":"AEGL-3","radius":300},{"level":"AEGL-2","radius":600},{"level":"AEGL-1","radius":1000}]}'::jsonb, + '2025-01-15 14:10'::timestamptz +), +( + '제주 에탄올링 탱크 파열', '2025-01-08 07:55'::timestamptz, + '제주항', 126.528, 33.519, ST_SetSRID(ST_MakePoint(126.528, 33.519), 4326), '126.528 + 33.519', + '에탄올 (Ethanol)', 1.5, 'TON', 6, 'CAMEO', 'AEGL', + 6.8, 'NE', 12.0, 55, 'C', + 'COMPLETED', 'LOW', '제주팀, 일대팀', + '{"aegl3": true, "aegl2": true, "aegl1": true, "damageRadius": "0.8 km", "zones": [{"level":"AEGL-3","radius":200},{"level":"AEGL-2","radius":450},{"level":"AEGL-1","radius":800}]}'::jsonb, + '2025-01-08 07:55'::timestamptz +); diff --git a/database/migration/014_prediction.sql b/database/migration/014_prediction.sql new file mode 100644 index 0000000..d4a99f6 --- /dev/null +++ b/database/migration/014_prediction.sql @@ -0,0 +1,111 @@ +-- 014_prediction.sql: BACKTRACK + VESSEL_INFO + BOOM_LINE 테이블 +-- Phase 4 Round 3: Prediction 탭 Mock→API 전환 + +SET search_path TO wing, public; + +-- ============================================================ +-- 사고 선박 정보 (VESSEL_INFO) +-- ============================================================ +CREATE TABLE IF NOT EXISTS VESSEL_INFO ( + VESSEL_INFO_SN SERIAL PRIMARY KEY, + ACDNT_SN INTEGER NOT NULL REFERENCES ACDNT(ACDNT_SN) ON DELETE CASCADE, + IMO_NO VARCHAR(10), + MMSI_NO VARCHAR(10), + VESSEL_NM VARCHAR(100), + VESSEL_TP VARCHAR(30), + LOA_M NUMERIC(6,1), + BREADTH_M NUMERIC(5,1), + DRAFT_M NUMERIC(5,1), + GT NUMERIC(10,0), + DWT NUMERIC(10,0), + BUILT_YR SMALLINT, + FLAG_CD VARCHAR(5), + CALLSIGN VARCHAR(10), + ENGINE_DC VARCHAR(100), + INSURANCE_DATA JSONB, + REG_DTM TIMESTAMPTZ DEFAULT NOW() +); + +CREATE INDEX IF NOT EXISTS idx_vessel_acdnt ON VESSEL_INFO(ACDNT_SN); + +-- ============================================================ +-- 역추적 분석 (BACKTRACK) +-- ============================================================ +CREATE TABLE IF NOT EXISTS BACKTRACK ( + BACKTRACK_SN SERIAL PRIMARY KEY, + ACDNT_SN INTEGER NOT NULL REFERENCES ACDNT(ACDNT_SN) ON DELETE CASCADE, + EST_SPIL_DTM TIMESTAMPTZ, + ANLYS_RANGE VARCHAR(20), + LON NUMERIC(10,6), + LAT NUMERIC(9,6), + GEOM GEOMETRY(Point, 4326), + LOC_DC VARCHAR(100), + SRCH_RADIUS_NM NUMERIC(5,1), + TOTAL_VESSELS INTEGER, + EXEC_STTS_CD VARCHAR(20) DEFAULT 'PENDING', + RSLT_DATA JSONB, + USE_YN CHAR(1) DEFAULT 'Y', + REG_DTM TIMESTAMPTZ DEFAULT NOW(), + CONSTRAINT CK_BACKTRACK_STTS CHECK (EXEC_STTS_CD IN ('PENDING','RUNNING','COMPLETED','FAILED')) +); + +CREATE INDEX IF NOT EXISTS idx_backtrack_acdnt ON BACKTRACK(ACDNT_SN); +CREATE INDEX IF NOT EXISTS idx_backtrack_geom ON BACKTRACK USING GIST(GEOM); + +-- ============================================================ +-- 오일펜스 배치 (BOOM_LINE) +-- ============================================================ +CREATE TABLE IF NOT EXISTS BOOM_LINE ( + BOOM_LINE_SN SERIAL PRIMARY KEY, + ACDNT_SN INTEGER NOT NULL REFERENCES ACDNT(ACDNT_SN) ON DELETE CASCADE, + BOOM_NM VARCHAR(100), + PRIORITY_ORD INTEGER DEFAULT 0, + GEOM GEOMETRY(LineString, 4326), + LENGTH_M NUMERIC(8,1), + EFFICIENCY_PCT NUMERIC(5,1), + DEPLOY_DTM TIMESTAMPTZ, + STTS_CD VARCHAR(20) DEFAULT 'PLANNED', + USE_YN CHAR(1) DEFAULT 'Y', + REG_DTM TIMESTAMPTZ DEFAULT NOW(), + CONSTRAINT CK_BOOM_STTS CHECK (STTS_CD IN ('PLANNED','DEPLOYED','RETRIEVED')) +); + +CREATE INDEX IF NOT EXISTS idx_boom_acdnt ON BOOM_LINE(ACDNT_SN); +CREATE INDEX IF NOT EXISTS idx_boom_geom ON BOOM_LINE USING GIST(GEOM); + +-- ============================================================ +-- 시드 데이터 — 여수 유조선 충돌 사고(ACDNT_SN=1) 기준 +-- ============================================================ + +-- 선박 정보 +INSERT INTO VESSEL_INFO (ACDNT_SN, IMO_NO, MMSI_NO, VESSEL_NM, VESSEL_TP, LOA_M, BREADTH_M, DRAFT_M, GT, DWT, BUILT_YR, FLAG_CD, CALLSIGN, ENGINE_DC, INSURANCE_DATA) +VALUES +(1, '9412856', '440123456', 'ORIENTAL GLORY', '유조선', 183.0, 32.2, 11.2, 29876, 46823, 2009, 'KR', 'HLOG7', 'MAN B&W 6S50MC-C', '[{"type":"P&I","insurer":"한국P&I클럽","value":"500M","currency":"USD"},{"type":"H&M","insurer":"삼성화재해상","value":"89.77M","currency":"SDR"},{"type":"CLC","insurer":"삼성화재해상","value":"89.77M","currency":"SDR"}]'::jsonb), +(1, '9538721', '413987654', 'HAI FENG 168', '벌크선', 225.0, 32.3, 14.5, 43210, 82150, 2012, 'CN', 'BQHR3', 'MAN B&W 7S50MC', '[]'::jsonb); + +-- 역추적 결과 +INSERT INTO BACKTRACK (ACDNT_SN, EST_SPIL_DTM, ANLYS_RANGE, LON, LAT, GEOM, LOC_DC, SRCH_RADIUS_NM, TOTAL_VESSELS, EXEC_STTS_CD, RSLT_DATA) +VALUES ( + 1, + '2025-02-18 06:30:00+09', + '±12시간', + 127.6845, 34.7312, + ST_SetSRID(ST_MakePoint(127.6845, 34.7312), 4326), + '127.6845 + 34.7312', + 10.0, + 47, + 'COMPLETED', + '{ + "vessels": [ + {"rank":1,"name":"ORIENTAL GLORY","imo":"9412856","type":"유조선","flag":"🇰🇷","flagCountry":"대한민국","probability":96.7,"closestTime":"06:28","closestDistance":0.02,"speedChange":"급감속","aisStatus":"충돌신호","description":"06:28 HAI FENG 168과 충돌 → 06:30 No.1P 탱크 파공 → 벙커C유 유출 개시.","color":"#ef4444"}, + {"rank":2,"name":"HAI FENG 168","imo":"9538721","type":"벌크선","flag":"🇨🇳","flagCountry":"중국","probability":23.4,"closestTime":"06:28","closestDistance":0.02,"speedChange":"급감속","aisStatus":"미확인","description":"충돌 당사선. 구상선수 손상으로 연료유탱크 미세 누유 가능성.","color":"#f97316"}, + {"rank":3,"name":"DONG JIN STAR","imo":"9287403","type":"케미컬탱커","flag":"🇰🇷","flagCountry":"대한민국","probability":4.1,"closestTime":"05:45","closestDistance":1.8,"speedChange":"정상","aisStatus":"정상","description":"","color":"#64788c"} + ], + "replayShips": [ + {"vesselName":"ORIENTAL GLORY","color":"#ef4444","path":[{"lat":34.82,"lon":127.58},{"lat":34.80,"lon":127.60},{"lat":34.78,"lon":127.62},{"lat":34.76,"lon":127.64},{"lat":34.75,"lon":127.66},{"lat":34.74,"lon":127.67},{"lat":34.73,"lon":127.68},{"lat":34.7312,"lon":127.6845},{"lat":34.7312,"lon":127.6845}],"speedLabels":["8.3 kts · 215°","8.3 kts · 215°","8.3 kts · 215°","8.3 kts · 215°","8.3 kts · 215°","8.3 kts · 215°","2.1 kts · 215°","0.2 kts · 정지","0.2 kts · 정지"]}, + {"vesselName":"HAI FENG 168","color":"#f97316","path":[{"lat":34.64,"lon":127.78},{"lat":34.66,"lon":127.76},{"lat":34.68,"lon":127.74},{"lat":34.70,"lon":127.72},{"lat":34.71,"lon":127.71},{"lat":34.72,"lon":127.70},{"lat":34.73,"lon":127.69},{"lat":34.7312,"lon":127.6845},{"lat":34.7315,"lon":127.6840}],"speedLabels":["11.2 kts · 038°","11.2 kts · 038°","11.2 kts · 038°","11.2 kts · 038°","11.2 kts · 038°","11.2 kts · 038°","3.4 kts · 038°","0.5 kts · 정지","0.5 kts · 정지"]}, + {"vesselName":"DONG JIN STAR","color":"#64788c","path":[{"lat":34.82,"lon":127.52},{"lat":34.80,"lon":127.53},{"lat":34.78,"lon":127.54},{"lat":34.76,"lon":127.55},{"lat":34.74,"lon":127.56},{"lat":34.72,"lon":127.57},{"lat":34.70,"lon":127.58},{"lat":34.68,"lon":127.59},{"lat":34.66,"lon":127.60}],"speedLabels":["10.5 kts · 180°","10.5 kts · 180°","10.5 kts · 180°","10.5 kts · 180°","10.5 kts · 180°","10.5 kts · 180°","10.5 kts · 180°","10.5 kts · 180°","10.5 kts · 180°"]} + ], + "collisionEvent": {"position":{"lat":34.7312,"lon":127.6845},"timeLabel":"06:28 충돌","progressPercent":75} + }'::jsonb +); diff --git a/database/migration/015_aerial.sql b/database/migration/015_aerial.sql new file mode 100644 index 0000000..db37731 --- /dev/null +++ b/database/migration/015_aerial.sql @@ -0,0 +1,128 @@ +-- ============================================================ +-- 015: 항공 방제 테이블 생성 + 시드 데이터 +-- AERIAL_MEDIA (15건), CCTV_CAMERA (12건), SAT_REQUEST (7건) +-- ============================================================ + +SET search_path TO wing, public; + +-- ============================================================ +-- 1. AERIAL_MEDIA — 항공·위성 미디어 메타정보 +-- ============================================================ +CREATE TABLE IF NOT EXISTS AERIAL_MEDIA ( + AERIAL_MEDIA_SN SERIAL PRIMARY KEY, + ACDNT_SN INTEGER REFERENCES ACDNT(ACDNT_SN), + FILE_NM VARCHAR(200) NOT NULL, + ORGNL_NM VARCHAR(200), + FILE_PATH VARCHAR(500), + LON NUMERIC(10,6), + LAT NUMERIC(9,6), + GEOM GEOMETRY(Point, 4326), + LOC_DC VARCHAR(100), + EQUIP_TP_CD VARCHAR(20), + EQUIP_NM VARCHAR(50), + MEDIA_TP_CD VARCHAR(20), + TAKNG_DTM TIMESTAMPTZ, + FILE_SZ VARCHAR(20), + RESOLUTION VARCHAR(30), + USE_YN CHAR(1) DEFAULT 'Y', + REG_DTM TIMESTAMPTZ DEFAULT NOW() +); +CREATE INDEX IF NOT EXISTS idx_aerial_media_acdnt ON AERIAL_MEDIA(ACDNT_SN); +CREATE INDEX IF NOT EXISTS idx_aerial_media_geom ON AERIAL_MEDIA USING GIST(GEOM); + +-- ============================================================ +-- 2. CCTV_CAMERA — CCTV 카메라 정보 +-- ============================================================ +CREATE TABLE IF NOT EXISTS CCTV_CAMERA ( + CCTV_SN SERIAL PRIMARY KEY, + CAMERA_NM VARCHAR(100) NOT NULL, + REGION_NM VARCHAR(20), + LON NUMERIC(10,6), + LAT NUMERIC(9,6), + GEOM GEOMETRY(Point, 4326), + LOC_DC VARCHAR(200), + COORD_DC VARCHAR(50), + STTS_CD VARCHAR(20) DEFAULT 'LIVE', + PTZ_YN CHAR(1) DEFAULT 'N', + SOURCE_NM VARCHAR(50), + STREAM_URL VARCHAR(500), + USE_YN CHAR(1) DEFAULT 'Y', + REG_DTM TIMESTAMPTZ DEFAULT NOW() +); +CREATE INDEX IF NOT EXISTS idx_cctv_geom ON CCTV_CAMERA USING GIST(GEOM); + +-- ============================================================ +-- 3. SAT_REQUEST — 위성 촬영 요청 +-- ============================================================ +CREATE TABLE IF NOT EXISTS SAT_REQUEST ( + SAT_REQ_SN SERIAL PRIMARY KEY, + REQ_CD VARCHAR(20) NOT NULL UNIQUE, + ACDNT_SN INTEGER REFERENCES ACDNT(ACDNT_SN), + LON NUMERIC(10,6), + LAT NUMERIC(9,6), + GEOM GEOMETRY(Point, 4326), + ZONE_DC VARCHAR(200), + COORD_DC VARCHAR(50), + ZONE_AREA_KM2 NUMERIC(8,2), + SAT_NM VARCHAR(50), + PROVIDER_NM VARCHAR(50), + RESOLUTION VARCHAR(20), + PURPOSE_DC VARCHAR(200), + REQSTR_NM VARCHAR(50), + REQ_DTM TIMESTAMPTZ, + EXPECTED_RCV_DTM TIMESTAMPTZ, + STTS_CD VARCHAR(20) DEFAULT 'PENDING', + USE_YN CHAR(1) DEFAULT 'Y', + REG_DTM TIMESTAMPTZ DEFAULT NOW(), + CONSTRAINT CK_SAT_STTS CHECK (STTS_CD IN ('PENDING','SHOOTING','COMPLETED','CANCELLED')) +); +CREATE INDEX IF NOT EXISTS idx_sat_req_geom ON SAT_REQUEST USING GIST(GEOM); + +-- ============================================================ +-- 4. AERIAL_MEDIA 시드 데이터 (15건) +-- ============================================================ +INSERT INTO AERIAL_MEDIA (ACDNT_SN, FILE_NM, ORGNL_NM, LON, LAT, GEOM, LOC_DC, EQUIP_TP_CD, EQUIP_NM, MEDIA_TP_CD, TAKNG_DTM, FILE_SZ, RESOLUTION) VALUES +(1, '여수항_드론_001.jpg', '여수항_드론_001.jpg', 127.6845, 34.7312, ST_SetSRID(ST_MakePoint(127.6845::float, 34.7312::float), 4326), '127.6845 + 34.7312', 'drone', 'DJI M300', '사진', '2025-02-18 07:30:00+09', '12.4 MB', '5472×3648'), +(1, '여수항_드론_002.jpg', '여수항_드론_002.jpg', 127.6850, 34.7315, ST_SetSRID(ST_MakePoint(127.6850::float, 34.7315::float), 4326), '127.685 + 34.7315', 'drone', 'DJI M300', '사진', '2025-02-18 08:15:00+09', '11.8 MB', '5472×3648'), +(1, '여수항_열화상_001.tif', '여수항_열화상_001.tif', 127.6845, 34.7312, ST_SetSRID(ST_MakePoint(127.6845::float, 34.7312::float), 4326), '127.6845 + 34.7312', 'drone', 'DJI M300 IR', '적외선', '2025-02-18 07:45:00+09', '45.2 MB', '640×512'), +(1, '여수항_드론_003.jpg', '여수항_드론_003.jpg', 127.6860, 34.7300, ST_SetSRID(ST_MakePoint(127.6860::float, 34.7300::float), 4326), '127.686 + 34.73', 'drone', 'DJI M300', '사진', '2025-02-18 10:30:00+09', '13.1 MB', '5472×3648'), +(1, '여수항_영상_001.mp4', '여수항_영상_001.mp4', 127.6845, 34.7312, ST_SetSRID(ST_MakePoint(127.6845::float, 34.7312::float), 4326), '127.6845 + 34.7312', 'drone', 'DJI M300', '영상', '2025-02-18 09:00:00+09', '1.2 GB', '4K 30fps'), +(1, '여수항_드론_004.jpg', '여수항_드론_004.jpg', 127.6870, 34.7290, ST_SetSRID(ST_MakePoint(127.6870::float, 34.7290::float), 4326), '127.687 + 34.729', 'drone', 'DJI Mavic 3E', '사진', '2025-02-18 11:20:00+09', '8.7 MB', '5280×3956'), +(1, '여수항_드론_005.jpg', '여수항_드론_005.jpg', 127.6855, 34.7295, ST_SetSRID(ST_MakePoint(127.6855::float, 34.7295::float), 4326), '127.6855 + 34.7295', 'drone', 'DJI Mavic 3E', '사진', '2025-02-18 11:35:00+09', '9.1 MB', '5280×3956'), +(1, '여수항_드론_006.jpg', '여수항_드론_006.jpg', 127.6840, 34.7320, ST_SetSRID(ST_MakePoint(127.6840::float, 34.7320::float), 4326), '127.684 + 34.732', 'drone', 'DJI M300', '사진', '2025-02-18 14:00:00+09', '14.2 MB', '5472×3648'), +(1, '여수항_항공_001.jpg', '여수항_항공_001.jpg', 127.6850, 34.7310, ST_SetSRID(ST_MakePoint(127.6850::float, 34.7310::float), 4326), '127.685 + 34.731', 'plane', 'CN-235', '사진', '2025-02-18 09:30:00+09', '28.5 MB', '8256×5504'), +(1, '여수항_항공_002.jpg', '여수항_항공_002.jpg', 127.6860, 34.7305, ST_SetSRID(ST_MakePoint(127.6860::float, 34.7305::float), 4326), '127.686 + 34.7305', 'plane', 'CN-235', '사진', '2025-02-18 10:00:00+09', '26.3 MB', '8256×5504'), +(1, '여수항_항공영상_001.mp4', '여수항_항공영상_001.mp4', 127.6845, 34.7312, ST_SetSRID(ST_MakePoint(127.6845::float, 34.7312::float), 4326), '127.6845 + 34.7312', 'plane', 'B737 해감', '영상', '2025-02-18 11:00:00+09', '3.8 GB', '4K 60fps'), +(1, '여수항_위성_001.tif', '여수항_위성_001.tif', 127.6845, 34.7312, ST_SetSRID(ST_MakePoint(127.6845::float, 34.7312::float), 4326), '127.6845 + 34.7312', 'satellite', 'KOMPSAT-3A', '가시광', '2025-02-18 10:45:00+09', '156 MB', '0.5m GSD'), +(1, '여수항_SAR_001.tif', '여수항_SAR_001.tif', 127.6845, 34.7312, ST_SetSRID(ST_MakePoint(127.6845::float, 34.7312::float), 4326), '127.6845 + 34.7312', 'satellite', 'Sentinel-1', 'SAR', '2025-02-18 18:30:00+09', '234 MB', '10m'), +(2, '통영항_드론_001.jpg', '통영항_드론_001.jpg', 128.4331, 34.8342, ST_SetSRID(ST_MakePoint(128.4331::float, 34.8342::float), 4326), '128.4331 + 34.8342', 'drone', 'DJI M300', '사진', '2025-02-08 15:00:00+09', '11.5 MB', '5472×3648'), +(3, '군산항_드론_001.jpg', '군산항_드론_001.jpg', 126.5650, 35.9838, ST_SetSRID(ST_MakePoint(126.5650::float, 35.9838::float), 4326), '126.565 + 35.9838', 'drone', 'DJI Mavic 3E', '사진', '2025-02-09 10:00:00+09', '8.9 MB', '5280×3956'); + +-- ============================================================ +-- 5. CCTV_CAMERA 시드 데이터 (12건) +-- ============================================================ +INSERT INTO CCTV_CAMERA (CAMERA_NM, REGION_NM, LON, LAT, GEOM, LOC_DC, COORD_DC, STTS_CD, PTZ_YN, SOURCE_NM) VALUES +('서귀포항 동측', '제주', 126.57, 33.24, ST_SetSRID(ST_MakePoint(126.57::float, 33.24::float), 4326), '제주 서귀포시 서귀동', '33.24°N 126.57°E', 'LIVE', 'Y', 'TAGO'), +('제주항 외항', '제주', 126.53, 33.52, ST_SetSRID(ST_MakePoint(126.53::float, 33.52::float), 4326), '제주 제주시 건입동', '33.52°N 126.53°E', 'LIVE', 'Y', 'TAGO'), +('성산포항', '제주', 126.93, 33.46, ST_SetSRID(ST_MakePoint(126.93::float, 33.46::float), 4326), '제주 서귀포시 성산읍', '33.46°N 126.93°E', 'LIVE', 'N', 'KBS'), +('한림항', '제주', 126.27, 33.41, ST_SetSRID(ST_MakePoint(126.27::float, 33.41::float), 4326), '제주 제주시 한림읍', '33.41°N 126.27°E', 'LIVE', 'N', 'TAGO'), +('여수 돌산대교', '남해', 127.75, 34.74, ST_SetSRID(ST_MakePoint(127.75::float, 34.74::float), 4326), '전남 여수시 돌산읍', '34.74°N 127.75°E', 'LIVE', 'Y', 'KBS'), +('통영 해상공원', '남해', 128.42, 34.84, ST_SetSRID(ST_MakePoint(128.42::float, 34.84::float), 4326), '경남 통영시 동호동', '34.84°N 128.42°E', 'LIVE', 'N', 'TAGO'), +('거제 장승포항', '남해', 128.69, 34.87, ST_SetSRID(ST_MakePoint(128.69::float, 34.87::float), 4326), '경남 거제시 장승포동', '34.87°N 128.69°E', 'OFFLINE', 'N', 'TAGO'), +('목포 영산강', '서해', 126.39, 34.79, ST_SetSRID(ST_MakePoint(126.39::float, 34.79::float), 4326), '전남 목포시 산정동', '34.79°N 126.39°E', 'LIVE', 'Y', 'KBS'), +('인천 송도', '서해', 126.64, 37.38, ST_SetSRID(ST_MakePoint(126.64::float, 37.38::float), 4326), '인천 연수구 송도동', '37.38°N 126.64°E', 'LIVE', 'N', 'TAGO'), +('태안 만리포', '서해', 126.14, 36.79, ST_SetSRID(ST_MakePoint(126.14::float, 36.79::float), 4326), '충남 태안군 소원면', '36.79°N 126.14°E', 'LIVE', 'N', 'TAGO'), +('포항 영일대', '동해', 129.38, 36.06, ST_SetSRID(ST_MakePoint(129.38::float, 36.06::float), 4326), '경북 포항시 북구', '36.06°N 129.38°E', 'LIVE', 'Y', 'KBS'), +('울산 대왕암', '동해', 129.43, 35.49, ST_SetSRID(ST_MakePoint(129.43::float, 35.49::float), 4326), '울산 동구 일산동', '35.49°N 129.43°E', 'LIVE', 'N', 'TAGO'); + +-- ============================================================ +-- 6. SAT_REQUEST 시드 데이터 (7건) +-- ============================================================ +INSERT INTO SAT_REQUEST (REQ_CD, ACDNT_SN, LON, LAT, GEOM, ZONE_DC, COORD_DC, ZONE_AREA_KM2, SAT_NM, PROVIDER_NM, RESOLUTION, PURPOSE_DC, REQSTR_NM, REQ_DTM, EXPECTED_RCV_DTM, STTS_CD) VALUES +('SAT-007', 1, 127.6845, 34.7312, ST_SetSRID(ST_MakePoint(127.6845::float, 34.7312::float), 4326), '여수 돌산 해상 (유출 중심)', '34.73°N 127.68°E', 25.0, 'KOMPSAT-3A', 'KARI', '0.5m', '유출유 확산 현황 촬영', '방제과 김해양', '2025-02-18 06:45:00+09', '2025-02-18 10:45:00+09', 'SHOOTING'), +('SAT-006', 1, 127.7200, 34.6800, ST_SetSRID(ST_MakePoint(127.7200::float, 34.6800::float), 4326), '여수 남방 확산 예측 구역', '34.68°N 127.72°E', 40.0, 'Sentinel-2', 'ESA Copernicus', '10m', '광역 확산 현황 파악', '방제과 이현정', '2025-02-18 07:00:00+09', '2025-02-18 18:30:00+09', 'PENDING'), +('SAT-005', 1, 127.6500, 34.7500, ST_SetSRID(ST_MakePoint(127.6500::float, 34.7500::float), 4326), '여수 돌산 북측', '34.75°N 127.65°E', 15.0, 'KOMPSAT-3A', 'KARI', '0.5m', '연안 부착 유류 감지', '방제과 김해양', '2025-02-17 09:00:00+09', '2025-02-17 14:00:00+09', 'COMPLETED'), +('SAT-004', 2, 128.4331, 34.8342, ST_SetSRID(ST_MakePoint(128.4331::float, 34.8342::float), 4326), '통영항 동방 해역', '34.83°N 128.43°E', 20.0, 'KOMPSAT-5', 'KARI', '1m SAR', '야간 유막 탐지', '통영지 박정수', '2025-02-08 15:00:00+09', '2025-02-09 03:00:00+09', 'COMPLETED'), +('SAT-003', 3, 126.5650, 35.9838, ST_SetSRID(ST_MakePoint(126.5650::float, 35.9838::float), 4326), '군산항 내항', '35.98°N 126.57°E', 10.0, 'KOMPSAT-3A', 'KARI', '0.5m', '송유관 파열 지점 정밀 촬영', '군산지 최영호', '2025-02-09 10:00:00+09', '2025-02-09 13:30:00+09', 'COMPLETED'), +('SAT-002', 1, 127.6845, 34.7312, ST_SetSRID(ST_MakePoint(127.6845::float, 34.7312::float), 4326), '여수 돌산 해상 (2차)', '34.73°N 127.68°E', 25.0, 'WorldView-3', 'DigitalGlobe', '0.3m', '고해상도 유막 두께 분석', '방제과 김해양', '2025-02-18 08:30:00+09', '2025-02-19 06:00:00+09', 'PENDING'), +('SAT-001', 1, 127.7500, 34.6500, ST_SetSRID(ST_MakePoint(127.7500::float, 34.6500::float), 4326), '여수 남방 광역', '34.65°N 127.75°E', 100.0, 'Sentinel-1', 'ESA Copernicus', '10m SAR', '광역 SAR 유막 탐지', '방제과 이현정', '2025-02-18 09:00:00+09', '2025-02-18 21:00:00+09', 'PENDING'); diff --git a/database/migration/016_rescue.sql b/database/migration/016_rescue.sql new file mode 100644 index 0000000..5e8bd3c --- /dev/null +++ b/database/migration/016_rescue.sql @@ -0,0 +1,182 @@ +-- ============================================================ +-- 016_rescue.sql — 구조 시나리오(Rescue) 탭 테이블 + 초기 데이터 +-- RESCUE_OPS (5건), RESCUE_SCENARIO (5건) +-- ============================================================ + +SET search_path TO wing, public; + +-- ============================================================ +-- 1. RESCUE_OPS — 구조 작전 정보 +-- ============================================================ +CREATE TABLE IF NOT EXISTS RESCUE_OPS ( + RESCUE_OPS_SN SERIAL PRIMARY KEY, + ACDNT_SN INTEGER REFERENCES ACDNT(ACDNT_SN), + OPS_CD VARCHAR(20) NOT NULL UNIQUE, + ACDNT_TP_CD VARCHAR(20), + VESSEL_NM VARCHAR(100), + COMMANDER_NM VARCHAR(50), + LON NUMERIC(10,6), + LAT NUMERIC(9,6), + GEOM GEOMETRY(Point, 4326), + LOC_DC VARCHAR(100), + DEPTH_M NUMERIC(6,1), + CURRENT_DC VARCHAR(50), + GM_M NUMERIC(5,2), + LIST_DEG NUMERIC(5,1), + TRIM_M NUMERIC(5,2), + BUOYANCY_PCT NUMERIC(5,1), + OIL_RATE_LPM NUMERIC(8,1), + BM_RATIO_PCT NUMERIC(5,1), + TOTAL_CREW INTEGER, + SURVIVORS INTEGER, + MISSING INTEGER, + HYDRO_DATA JSONB, + GMDSS_DATA JSONB, + STTS_CD VARCHAR(20) DEFAULT 'ACTIVE', + USE_YN CHAR(1) DEFAULT 'Y', + REG_DTM TIMESTAMPTZ DEFAULT NOW(), + MDFCN_DTM TIMESTAMPTZ DEFAULT NOW() +); +CREATE INDEX IF NOT EXISTS idx_rescue_ops_acdnt ON RESCUE_OPS(ACDNT_SN); +CREATE INDEX IF NOT EXISTS idx_rescue_ops_geom ON RESCUE_OPS USING GIST(GEOM); + +-- ============================================================ +-- 2. RESCUE_SCENARIO — 시나리오 타임스텝 +-- ============================================================ +CREATE TABLE IF NOT EXISTS RESCUE_SCENARIO ( + SCENARIO_SN SERIAL PRIMARY KEY, + RESCUE_OPS_SN INTEGER NOT NULL REFERENCES RESCUE_OPS(RESCUE_OPS_SN) ON DELETE CASCADE, + TIME_STEP VARCHAR(10) NOT NULL, + SCENARIO_DTM TIMESTAMPTZ, + SVRT_CD VARCHAR(20), + GM_M NUMERIC(5,2), + LIST_DEG NUMERIC(5,1), + TRIM_M NUMERIC(5,2), + BUOYANCY_PCT NUMERIC(5,1), + OIL_RATE_LPM NUMERIC(8,1), + BM_RATIO_PCT NUMERIC(5,1), + DESCRIPTION TEXT, + COMPARTMENTS JSONB, + ASSESSMENT JSONB, + ACTIONS JSONB, + SORT_ORD INTEGER DEFAULT 0, + REG_DTM TIMESTAMPTZ DEFAULT NOW() +); +CREATE INDEX IF NOT EXISTS idx_rescue_scenario_ops ON RESCUE_SCENARIO(RESCUE_OPS_SN); + +-- ============================================================ +-- 3. RESCUE_OPS 시드 데이터 (5건) +-- ============================================================ +INSERT INTO RESCUE_OPS ( + ACDNT_SN, OPS_CD, ACDNT_TP_CD, VESSEL_NM, COMMANDER_NM, + LON, LAT, GEOM, LOC_DC, DEPTH_M, CURRENT_DC, + GM_M, LIST_DEG, TRIM_M, BUOYANCY_PCT, OIL_RATE_LPM, BM_RATIO_PCT, + TOTAL_CREW, SURVIVORS, MISSING, + HYDRO_DATA, GMDSS_DATA, + STTS_CD, USE_YN +) VALUES +( + 1, 'RSC-2026-001', 'collision', 'M/V SEA GUARDIAN', NULL, + 126.25, 37.467, + ST_SetSRID(ST_MakePoint(126.25::float, 37.467::float), 4326), + '37°28''N, 126°15''E', 25.0, '2.5kn NE', + 0.8, 15.0, 2.5, 30.0, 100.0, 92.0, + 20, 15, 5, + '{"displacement":"8,420t","draft":"5.8m","kg":"6.2m","km":"6.9m","tpc":"18.5","mtc":"195"}', + '{"mmsi":"440234567","dscAlert":"VHF Ch.16 자동발신"}', + 'ACTIVE', 'Y' +), +( + 2, 'RSC-2026-002', 'grounding', 'M/V OCEAN BREEZE', NULL, + 128.62, 35.09, + ST_SetSRID(ST_MakePoint(128.62::float, 35.09::float), 4326), + '35°05''N, 128°37''E', 12.0, '1.8kn SW', + 0.3, 22.0, 4.8, 15.0, 250.0, 78.0, + 18, 18, 0, + NULL, NULL, + 'ACTIVE', 'Y' +), +( + 3, 'RSC-2026-003', 'flooding', 'F/V DONG JIN', NULL, + 129.08, 35.15, + ST_SetSRID(ST_MakePoint(129.08::float, 35.15::float), 4326), + '35°09''N, 129°05''E', 30.0, '3.0kn N', + 0.5, 8.0, 1.5, 45.0, 50.0, 85.0, + 8, 7, 1, + NULL, NULL, + 'ACTIVE', 'Y' +), +( + 4, 'RSC-2025-045', 'capsizing', 'M/V PACIFIC STAR', NULL, + 126.57, 33.24, + ST_SetSRID(ST_MakePoint(126.57::float, 33.24::float), 4326), + '33°14''N, 126°34''E', 45.0, '2.0kn SE', + 0.1, 35.0, 6.0, 10.0, 300.0, 65.0, + 25, 20, 5, + NULL, NULL, + 'RESOLVED', 'Y' +), +( + 5, 'RSC-2025-040', 'turning', 'M/V GOLDEN WAVE', NULL, + 127.68, 34.73, + ST_SetSRID(ST_MakePoint(127.68::float, 34.73::float), 4326), + '34°44''N, 127°41''E', 18.0, '1.5kn W', + 1.2, 5.0, 0.8, 65.0, 20.0, 95.0, + 12, 12, 0, + NULL, NULL, + 'RESOLVED', 'Y' +); + +-- ============================================================ +-- 4. RESCUE_SCENARIO 시드 데이터 (5건, RESCUE_OPS_SN=1 기준) +-- ============================================================ +INSERT INTO RESCUE_SCENARIO ( + RESCUE_OPS_SN, TIME_STEP, SCENARIO_DTM, SVRT_CD, + GM_M, LIST_DEG, TRIM_M, BUOYANCY_PCT, OIL_RATE_LPM, BM_RATIO_PCT, + DESCRIPTION, COMPARTMENTS, ASSESSMENT, ACTIONS, SORT_ORD +) VALUES +( + 1, 'T+0h', '2024-10-27 10:30:00+09', 'CRITICAL', + 0.8, 15.0, 2.5, 30.0, 100.0, 92.0, + '좌현 35° 충돌로 No.1P 화물탱크 파공, 벙커C유 유출 개시. 좌현 경사 15°, GM 위험수준.', + '[{"name":"#1 FP Tank","status":"FLOODED","color":"var(--red)"},{"name":"#1 Port Tank","status":"BREACHED","color":"var(--red)"},{"name":"#2 Port Tank","status":"RISK","color":"var(--orange)"},{"name":"Engine Room","status":"INTACT","color":"var(--green)"},{"name":"#3 Stbd Tank","status":"INTACT","color":"var(--green)"}]', + '[{"label":"복원력","value":"위험 (GM < 1.0m)","color":"var(--red)"},{"label":"유출 위험","value":"활발 유출중","color":"var(--red)"},{"label":"선체 강도","value":"BM 92% (경계)","color":"var(--orange)"},{"label":"승선인원","value":"15/20 확인, 5명 수색중","color":"var(--red)"}]', + '[{"time":"10:30","text":"충돌 발생, VHF Ch.16 조난 통보","color":"var(--red)"},{"time":"10:35","text":"해경 3009함 출동 지시","color":"var(--orange)"},{"time":"10:42","text":"인근 선박 구조 활동 개시","color":"var(--cyan)"},{"time":"10:50","text":"유출유 방제선 배치 요청","color":"var(--orange)"}]', + 1 +), +( + 1, 'T+2h', '2024-10-27 12:30:00+09', 'HIGH', + 0.6, 18.0, 3.2, 25.0, 150.0, 88.0, + '침수 확대로 경사 증가, 유출량 증가 추세. 긴급 이초 작업 검토 필요.', + '[{"name":"#1 FP Tank","status":"FLOODED","color":"var(--red)"},{"name":"#1 Port Tank","status":"FLOODED","color":"var(--red)"},{"name":"#2 Port Tank","status":"FLOODED","color":"var(--red)"},{"name":"Engine Room","status":"RISK","color":"var(--orange)"},{"name":"#3 Stbd Tank","status":"INTACT","color":"var(--green)"}]', + '[{"label":"복원력","value":"위험 (GM 0.6m)","color":"var(--red)"},{"label":"유출 위험","value":"증가 추세","color":"var(--red)"},{"label":"선체 강도","value":"BM 88%","color":"var(--orange)"},{"label":"승선인원","value":"전원 퇴선 완료","color":"var(--green)"}]', + '[{"time":"12:00","text":"2차 침수 확인 (#2 PT)","color":"var(--red)"},{"time":"12:15","text":"긴급 이초 작업 개시","color":"var(--orange)"},{"time":"12:20","text":"오일펜스 1차 전개 완료","color":"var(--cyan)"},{"time":"12:30","text":"항공기 유출유 촬영 요청","color":"var(--cyan)"}]', + 2 +), +( + 1, 'T+6h', '2024-10-27 16:30:00+09', 'HIGH', + 0.4, 12.0, 2.8, 35.0, 80.0, 90.0, + '평형수 이동으로 경사 일부 복원. 유출률 감소 추세.', + '[{"name":"#1 FP Tank","status":"FLOODED","color":"var(--red)"},{"name":"#1 Port Tank","status":"FLOODED","color":"var(--red)"},{"name":"#2 Port Tank","status":"FLOODED","color":"var(--red)"},{"name":"Engine Room","status":"RISK","color":"var(--orange)"},{"name":"#3 Stbd Tank","status":"RISK","color":"var(--orange)"}]', + '[{"label":"복원력","value":"개선 추세 (GM 0.4m)","color":"var(--orange)"},{"label":"유출 위험","value":"감소 추세","color":"var(--orange)"},{"label":"선체 강도","value":"BM 90%","color":"var(--orange)"},{"label":"구조 상황","value":"구조 작전 진행중","color":"var(--cyan)"}]', + '[{"time":"14:00","text":"평형수 이동 작업 개시","color":"var(--cyan)"},{"time":"15:00","text":"해상크레인 도착","color":"var(--cyan)"},{"time":"15:30","text":"잔류유 이적 작업 개시","color":"var(--orange)"},{"time":"16:30","text":"예인준비 완료","color":"var(--green)"}]', + 3 +), +( + 1, 'T+12h', '2024-10-27 22:30:00+09', 'MEDIUM', + 0.6, 8.0, 1.5, 50.0, 30.0, 94.0, + '예인 작업 진행중, 선체 안정화 확인. 유출 대부분 차단.', + '[{"name":"#1 FP Tank","status":"FLOODED","color":"var(--red)"},{"name":"#1 Port Tank","status":"FLOODED","color":"var(--red)"},{"name":"#2 Port Tank","status":"SEALED","color":"var(--orange)"},{"name":"Engine Room","status":"INTACT","color":"var(--green)"},{"name":"#3 Stbd Tank","status":"INTACT","color":"var(--green)"}]', + '[{"label":"복원력","value":"안정 (GM 0.6m)","color":"var(--orange)"},{"label":"유출 위험","value":"대부분 차단","color":"var(--green)"},{"label":"선체 강도","value":"BM 94%","color":"var(--green)"},{"label":"예인 상태","value":"목포항 예인 진행중","color":"var(--cyan)"}]', + '[{"time":"18:00","text":"예인 개시 (목포항 방향)","color":"var(--cyan)"},{"time":"19:00","text":"유출유 차단 확인","color":"var(--green)"},{"time":"20:00","text":"야간 감시 체제 전환","color":"var(--orange)"},{"time":"22:30","text":"예인 50% 진행","color":"var(--cyan)"}]', + 4 +), +( + 1, 'T+24h', '2024-10-28 10:30:00+09', 'RESOLVED', + 1.2, 3.0, 0.5, 75.0, 5.0, 98.0, + '목포항 도착, 선체 안정. 잔류유 이적 완료.', + '[{"name":"#1 FP Tank","status":"SEALED","color":"var(--orange)"},{"name":"#1 Port Tank","status":"SEALED","color":"var(--orange)"},{"name":"#2 Port Tank","status":"SEALED","color":"var(--orange)"},{"name":"Engine Room","status":"INTACT","color":"var(--green)"},{"name":"#3 Stbd Tank","status":"INTACT","color":"var(--green)"}]', + '[{"label":"복원력","value":"안전 (GM 1.2m)","color":"var(--green)"},{"label":"유출 위험","value":"차단 완료","color":"var(--green)"},{"label":"선체 강도","value":"BM 98% 정상","color":"var(--green)"},{"label":"예인 상태","value":"목포항 접안 완료","color":"var(--green)"}]', + '[{"time":"06:00","text":"목포항 접근","color":"var(--cyan)"},{"time":"08:00","text":"도선사 승선, 접안 개시","color":"var(--cyan)"},{"time":"09:30","text":"접안 완료","color":"var(--green)"},{"time":"10:30","text":"잔류유 이적 완료, 상황 종료","color":"var(--green)"}]', + 5 +); diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 7059d68..66dce36 100755 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -6,6 +6,7 @@ import { LoginPage } from '@common/components/auth/LoginPage' import { registerMainTabSwitcher } from '@common/hooks/useSubMenu' import { useAuthStore } from '@common/store/authStore' import { useMenuStore } from '@common/store/menuStore' +import { API_BASE_URL } from '@common/services/api' import { OilSpillView } from '@tabs/prediction' import { ReportsView } from '@tabs/reports' import { HNSView } from '@tabs/hns' @@ -46,8 +47,7 @@ function App() { [JSON.stringify({ action: 'TAB_VIEW', detail: activeMainTab })], { type: 'text/plain' } ) - const apiBase = import.meta.env.VITE_API_URL || 'http://localhost:3001/api' - navigator.sendBeacon(`${apiBase}/audit/log`, blob) + navigator.sendBeacon(`${API_BASE_URL}/audit/log`, blob) }, [activeMainTab, isAuthenticated]) // 세션 확인 중 스플래시 diff --git a/frontend/src/common/mock/backtrackMockData.ts b/frontend/src/common/mock/backtrackMockData.ts deleted file mode 100755 index 668cd3f..0000000 --- a/frontend/src/common/mock/backtrackMockData.ts +++ /dev/null @@ -1,126 +0,0 @@ -import type { BacktrackConditions, BacktrackVessel, ReplayShip, CollisionEvent } from '@common/types/backtrack' - -export const MOCK_CONDITIONS: BacktrackConditions = { - estimatedSpillTime: '02-10 06:30', - analysisRange: '±12시간', - searchRadius: '10 NM', - spillLocation: { lat: 34.7312, lon: 127.6845 }, - totalVessels: 47, -} - -export const MOCK_VESSELS: BacktrackVessel[] = [ - { - rank: 1, - name: 'ORIENTAL GLORY', - imo: '9412856', - type: '유조선', - flag: '🇰🇷', - flagCountry: '대한민국', - probability: 96.7, - closestTime: '06:28', - closestDistance: 0.02, - speedChange: '급감속', - aisStatus: '충돌신호', - description: '06:28 HAI FENG 168과 충돌 → 06:30 No.1P 탱크 파공 → 벙커C유 유출 개시. AIS 충돌경보 발신, 속력 8.3kts→0.2kts 급감속.', - color: '#ef4444', - }, - { - rank: 2, - name: 'HAI FENG 168', - imo: '9538721', - type: '벌크선', - flag: '🇨🇳', - flagCountry: '중국', - probability: 23.4, - closestTime: '06:28', - closestDistance: 0.02, - speedChange: '급감속', - aisStatus: '미확인', - description: '충돌 당사선. 구상선수 손상으로 연료유탱크 미세 누유 가능성. 자체 연료(벙커C) 1,200톤 적재.', - color: '#f97316', - }, - { - rank: 3, - name: 'DONG JIN STAR', - imo: '9287403', - type: '케미컬탱커', - flag: '🇰🇷', - flagCountry: '대한민국', - probability: 4.1, - closestTime: '05:45', - closestDistance: 1.8, - speedChange: '정상', - aisStatus: '정상', - description: '', - color: '#64788c', - }, -] - -export const MOCK_REPLAY_SHIPS: ReplayShip[] = [ - { - vesselName: 'ORIENTAL GLORY', - color: '#ef4444', - path: [ - { lat: 34.82, lon: 127.58 }, - { lat: 34.80, lon: 127.60 }, - { lat: 34.78, lon: 127.62 }, - { lat: 34.76, lon: 127.64 }, - { lat: 34.75, lon: 127.66 }, - { lat: 34.74, lon: 127.67 }, - { lat: 34.73, lon: 127.68 }, - { lat: 34.7312, lon: 127.6845 }, - { lat: 34.7312, lon: 127.6845 }, - ], - speedLabels: [ - '8.3 kts · 215°', '8.3 kts · 215°', '8.3 kts · 215°', - '8.3 kts · 215°', '8.3 kts · 215°', '8.3 kts · 215°', - '2.1 kts · 215°', '0.2 kts · 정지', '0.2 kts · 정지', - ], - }, - { - vesselName: 'HAI FENG 168', - color: '#f97316', - path: [ - { lat: 34.64, lon: 127.78 }, - { lat: 34.66, lon: 127.76 }, - { lat: 34.68, lon: 127.74 }, - { lat: 34.70, lon: 127.72 }, - { lat: 34.71, lon: 127.71 }, - { lat: 34.72, lon: 127.70 }, - { lat: 34.73, lon: 127.69 }, - { lat: 34.7312, lon: 127.6845 }, - { lat: 34.7315, lon: 127.6840 }, - ], - speedLabels: [ - '11.2 kts · 038°', '11.2 kts · 038°', '11.2 kts · 038°', - '11.2 kts · 038°', '11.2 kts · 038°', '11.2 kts · 038°', - '3.4 kts · 038°', '0.5 kts · 정지', '0.5 kts · 정지', - ], - }, - { - vesselName: 'DONG JIN STAR', - color: '#64788c', - path: [ - { lat: 34.82, lon: 127.52 }, - { lat: 34.80, lon: 127.53 }, - { lat: 34.78, lon: 127.54 }, - { lat: 34.76, lon: 127.55 }, - { lat: 34.74, lon: 127.56 }, - { lat: 34.72, lon: 127.57 }, - { lat: 34.70, lon: 127.58 }, - { lat: 34.68, lon: 127.59 }, - { lat: 34.66, lon: 127.60 }, - ], - speedLabels: [ - '10.5 kts · 180°', '10.5 kts · 180°', '10.5 kts · 180°', - '10.5 kts · 180°', '10.5 kts · 180°', '10.5 kts · 180°', - '10.5 kts · 180°', '10.5 kts · 180°', '10.5 kts · 180°', - ], - }, -] - -export const MOCK_COLLISION: CollisionEvent = { - position: { lat: 34.7312, lon: 127.6845 }, - timeLabel: '06:28 충돌', - progressPercent: 75, -} diff --git a/frontend/src/tabs/aerial/components/CctvView.tsx b/frontend/src/tabs/aerial/components/CctvView.tsx index bb6802b..3061509 100644 --- a/frontend/src/tabs/aerial/components/CctvView.tsx +++ b/frontend/src/tabs/aerial/components/CctvView.tsx @@ -1,30 +1,6 @@ -import { useState } from 'react' - -interface CctvCamera { - id: number - name: string - region: '제주' | '남해' | '서해' | '동해' - location: string - coord: string - status: 'live' | 'offline' - ptz: boolean - source: string -} - -const cctvCameras: CctvCamera[] = [ - { id: 1, name: '서귀포항 동측', region: '제주', location: '제주 서귀포시 서귀동', coord: '33.24°N 126.57°E', status: 'live', ptz: true, source: 'TAGO' }, - { id: 2, name: '제주항 입구', region: '제주', location: '제주 제주시 건입동', coord: '33.52°N 126.53°E', status: 'live', ptz: true, source: 'TAGO' }, - { id: 3, name: '성산포항', region: '제주', location: '제주 서귀포시 성산읍', coord: '33.46°N 126.93°E', status: 'live', ptz: false, source: 'TAGO' }, - { id: 4, name: '모슬포항', region: '제주', location: '제주 서귀포시 대정읍', coord: '33.21°N 126.25°E', status: 'live', ptz: false, source: 'KBS' }, - { id: 5, name: '여수 신항', region: '남해', location: '전남 여수시 웅천동', coord: '34.73°N 127.68°E', status: 'live', ptz: true, source: 'TAGO' }, - { id: 6, name: '통영항', region: '남해', location: '경남 통영시 항남동', coord: '34.84°N 128.43°E', status: 'live', ptz: true, source: 'TAGO' }, - { id: 7, name: '부산 감천항', region: '남해', location: '부산 서구 암남동', coord: '35.08°N 129.01°E', status: 'live', ptz: false, source: 'KBS' }, - { id: 8, name: '목포 내항', region: '서해', location: '전남 목포시 항동', coord: '34.79°N 126.38°E', status: 'live', ptz: true, source: 'TAGO' }, - { id: 9, name: '군산 외항', region: '서해', location: '전북 군산시 소룡동', coord: '35.97°N 126.72°E', status: 'live', ptz: false, source: 'TAGO' }, - { id: 10, name: '인천항 연안', region: '서해', location: '인천 중구 항동', coord: '37.45°N 126.60°E', status: 'offline', ptz: false, source: 'KBS' }, - { id: 11, name: '동해항', region: '동해', location: '강원 동해시 송정동', coord: '37.52°N 129.12°E', status: 'live', ptz: true, source: 'TAGO' }, - { id: 12, name: '포항 영일만', region: '동해', location: '경북 포항시 남구', coord: '36.02°N 129.38°E', status: 'live', ptz: false, source: 'TAGO' }, -] +import { useState, useCallback, useEffect } from 'react' +import { fetchCctvCameras } from '../services/aerialApi' +import type { CctvCameraItem } from '../services/aerialApi' const cctvFavorites = [ { name: '서귀포항 동측', reason: '유출 사고 인접' }, @@ -33,28 +9,46 @@ const cctvFavorites = [ ] export function CctvView() { + const [cameras, setCameras] = useState([]) + const [loading, setLoading] = useState(true) const [searchTerm, setSearchTerm] = useState('') const [regionFilter, setRegionFilter] = useState('전체') - const [selectedCamera, setSelectedCamera] = useState(null) + const [selectedCamera, setSelectedCamera] = useState(null) const [gridMode, setGridMode] = useState(1) - const [activeCells, setActiveCells] = useState([]) + const [activeCells, setActiveCells] = useState([]) + + const loadData = useCallback(async () => { + setLoading(true) + try { + const items = await fetchCctvCameras() + setCameras(items) + } catch (err) { + console.error('[aerial] CCTV 목록 조회 실패:', err) + } finally { + setLoading(false) + } + }, []) + + useEffect(() => { + loadData() + }, [loadData]) const regions = ['전체', '제주', '남해', '서해', '동해'] const regionIcons: Record = { '전체': '', '제주': '🌊', '남해': '⚓', '서해': '🐟', '동해': '🌅' } - const filtered = cctvCameras.filter(c => { - if (regionFilter !== '전체' && c.region !== regionFilter) return false - if (searchTerm && !c.name.includes(searchTerm) && !c.location.includes(searchTerm)) return false + const filtered = cameras.filter(c => { + if (regionFilter !== '전체' && c.regionNm !== regionFilter) return false + if (searchTerm && !c.cameraNm.includes(searchTerm) && !(c.locDc ?? '').includes(searchTerm)) return false return true }) - const handleSelectCamera = (cam: CctvCamera) => { + const handleSelectCamera = (cam: CctvCameraItem) => { setSelectedCamera(cam) if (gridMode === 1) { setActiveCells([cam]) } else { setActiveCells(prev => { - if (prev.length < gridMode && !prev.find(c => c.id === cam.id)) return [...prev, cam] + if (prev.length < gridMode && !prev.find(c => c.cctvSn === cam.cctvSn)) return [...prev, cam] return prev }) } @@ -114,31 +108,33 @@ export function CctvView() { {/* 카메라 목록 */}
- {filtered.map(cam => ( + {loading ? ( +
불러오는 중...
+ ) : filtered.map(cam => (
handleSelectCamera(cam)} className="flex items-center gap-2.5 px-3.5 py-2.5 border-b cursor-pointer transition-colors" style={{ borderColor: 'rgba(255,255,255,.04)', - background: selectedCamera?.id === cam.id ? 'rgba(6,182,212,.08)' : 'transparent', + background: selectedCamera?.cctvSn === cam.cctvSn ? 'rgba(6,182,212,.08)' : 'transparent', }} >
📹
-
+
-
{cam.name}
-
{cam.location}
+
{cam.cameraNm}
+
{cam.locDc ?? ''}
- {cam.status === 'live' ? ( + {cam.sttsCd === 'LIVE' ? ( LIVE ) : ( OFF )} - {cam.ptz && PTZ} + {cam.ptzYn === 'Y' && PTZ}
))} @@ -151,9 +147,9 @@ export function CctvView() {
- {selectedCamera ? `📹 ${selectedCamera.name}` : '📹 카메라를 선택하세요'} + {selectedCamera ? `📹 ${selectedCamera.cameraNm}` : '📹 카메라를 선택하세요'}
- {selectedCamera?.status === 'live' && ( + {selectedCamera?.sttsCd === 'LIVE' && (
LIVE
@@ -161,7 +157,7 @@ export function CctvView() {
{/* PTZ 컨트롤 */} - {selectedCamera?.ptz && ( + {selectedCamera?.ptzYn === 'Y' && (
PTZ {['◀', '▲', '▼', '▶'].map((d, i) => ( @@ -213,11 +209,11 @@ export function CctvView() {
📹
- {cam.name} + {cam.cameraNm} ● REC
- {cam.coord} · {cam.source} + {cam.coordDc ?? ''} · {cam.sourceNm ?? ''}
CCTV 스트리밍 영역 @@ -233,9 +229,9 @@ export function CctvView() { {/* 하단 정보 바 */}
-
선택: {selectedCamera?.name ?? '–'}
-
위치: {selectedCamera?.location ?? '–'}
-
좌표: {selectedCamera?.coord ?? '–'}
+
선택: {selectedCamera?.cameraNm ?? '–'}
+
위치: {selectedCamera?.locDc ?? '–'}
+
좌표: {selectedCamera?.coordDc ?? '–'}
API: 국립해양조사원 TAGO 해양 CCTV
@@ -275,13 +271,13 @@ export function CctvView() { {selectedCamera ? (
{[ - ['카메라명', selectedCamera.name], - ['지역', selectedCamera.region], - ['위치', selectedCamera.location], - ['좌표', selectedCamera.coord], - ['상태', selectedCamera.status === 'live' ? '● 송출중' : '● 오프라인'], - ['PTZ', selectedCamera.ptz ? '지원' : '미지원'], - ['출처', selectedCamera.source], + ['카메라명', selectedCamera.cameraNm], + ['지역', selectedCamera.regionNm], + ['위치', selectedCamera.locDc ?? '—'], + ['좌표', selectedCamera.coordDc ?? '—'], + ['상태', selectedCamera.sttsCd === 'LIVE' ? '● 송출중' : '● 오프라인'], + ['PTZ', selectedCamera.ptzYn === 'Y' ? '지원' : '미지원'], + ['출처', selectedCamera.sourceNm ?? '—'], ].map(([k, v], i) => (
{k} diff --git a/frontend/src/tabs/aerial/components/MediaManagement.tsx b/frontend/src/tabs/aerial/components/MediaManagement.tsx index 9f0b9b8..e5d9940 100644 --- a/frontend/src/tabs/aerial/components/MediaManagement.tsx +++ b/frontend/src/tabs/aerial/components/MediaManagement.tsx @@ -1,38 +1,15 @@ -import { useState, useRef, useEffect } from 'react' +import { useState, useCallback, useRef, useEffect } from 'react' +import { fetchAerialMedia } from '../services/aerialApi' +import type { AerialMediaItem } from '../services/aerialApi' -// ── Types & Mock Data ── +// ── Helpers ── -interface MediaFile { - id: number - incident: string - location: string - filename: string - equipment: string - equipType: 'drone' | 'plane' | 'satellite' - mediaType: '사진' | '영상' | '적외선' | 'SAR' | '가시광' | '광학' - datetime: string - size: string - resolution: string +function formatDtm(dtm: string | null): string { + if (!dtm) return '—' + const d = new Date(dtm) + return d.toISOString().slice(0, 16).replace('T', ' ') } -const mediaFiles: MediaFile[] = [ - { id: 1, incident: '여수 유조선 충돌', location: '34.73°N, 127.68°E', filename: '여수항_드론_001.jpg', equipment: 'DJI M300', equipType: 'drone', mediaType: '사진', datetime: '2026-01-18 15:20', size: '12.4 MB', resolution: '5472×3648' }, - { id: 2, incident: '여수 유조선 충돌', location: '34.73°N, 127.68°E', filename: '여수항_드론_002.jpg', equipment: 'DJI M300', equipType: 'drone', mediaType: '사진', datetime: '2026-01-18 15:21', size: '11.8 MB', resolution: '5472×3648' }, - { id: 3, incident: '여수 유조선 충돌', location: '34.73°N, 127.68°E', filename: '여수항_드론_003.jpg', equipment: 'DJI M300', equipType: 'drone', mediaType: '사진', datetime: '2026-01-18 15:22', size: '13.1 MB', resolution: '5472×3648' }, - { id: 4, incident: '여수 유조선 충돌', location: '34.73°N, 127.68°E', filename: '여수항_드론_004.jpg', equipment: 'DJI M300', equipType: 'drone', mediaType: '사진', datetime: '2026-01-18 15:23', size: '12.9 MB', resolution: '5472×3648' }, - { id: 5, incident: '여수 유조선 충돌', location: '34.73°N, 127.68°E', filename: '여수항_드론_005.jpg', equipment: 'Mavic3', equipType: 'drone', mediaType: '사진', datetime: '2026-01-18 15:24', size: '11.5 MB', resolution: '5472×3648' }, - { id: 6, incident: '여수 유조선 충돌', location: '34.73°N, 127.68°E', filename: '여수항_드론_006.jpg', equipment: 'Mavic3', equipType: 'drone', mediaType: '사진', datetime: '2026-01-18 15:25', size: '13.3 MB', resolution: '5472×3648' }, - { id: 7, incident: '여수 유조선 충돌', location: '34.73°N, 127.68°E', filename: '여수항_드론영상_01.mp4', equipment: 'DJI M300', equipType: 'drone', mediaType: '영상', datetime: '2026-01-18 15:30', size: '842 MB', resolution: '4K 30fps' }, - { id: 8, incident: '여수 유조선 충돌', location: '34.73°N, 127.68°E', filename: '여수항_드론영상_02.mp4', equipment: 'Mavic3', equipType: 'drone', mediaType: '영상', datetime: '2026-01-18 16:00', size: '624 MB', resolution: '4K 30fps' }, - { id: 9, incident: '여수 유조선 충돌', location: '34.73°N, 127.68°E', filename: '여수항_항공_광역_01.tif', equipment: 'CN-235', equipType: 'plane', mediaType: '적외선', datetime: '2026-01-18 14:00', size: '156 MB', resolution: '8192×6144' }, - { id: 10, incident: '여수 유조선 충돌', location: '34.73°N, 127.68°E', filename: '여수항_항공_광역_02.tif', equipment: 'CN-235', equipType: 'plane', mediaType: '가시광', datetime: '2026-01-18 14:10', size: '148 MB', resolution: '8192×6144' }, - { id: 11, incident: '여수 유조선 충돌', location: '34.73°N, 127.68°E', filename: '여수항_항공영상_01.mp4', equipment: 'B-512', equipType: 'plane', mediaType: '영상', datetime: '2026-01-18 14:30', size: '1.2 GB', resolution: 'FHD 60fps' }, - { id: 12, incident: '여수 유조선 충돌', location: '34.73°N, 127.68°E', filename: 'Sentinel1_SAR_20260118.tif', equipment: 'Sentinel-1', equipType: 'satellite', mediaType: 'SAR', datetime: '2026-01-18 10:00', size: '420 MB', resolution: '10m/px' }, - { id: 13, incident: '여수 유조선 충돌', location: '34.73°N, 127.68°E', filename: 'KompSat5_여수_20260118.tif', equipment: '다목적5호', equipType: 'satellite', mediaType: 'SAR', datetime: '2026-01-18 11:00', size: '380 MB', resolution: '1m/px' }, - { id: 14, incident: '통영 해역 기름오염', location: '34.85°N, 128.43°E', filename: '통영_드론_001.jpg', equipment: 'Mavic3', equipType: 'drone', mediaType: '사진', datetime: '2026-01-18 09:30', size: '10.2 MB', resolution: '5472×3648' }, - { id: 15, incident: '군산항 인근 오염', location: '35.97°N, 126.72°E', filename: '군산_항공촬영_01.tif', equipment: 'B-512', equipType: 'plane', mediaType: '가시광', datetime: '2026-01-18 13:00', size: '132 MB', resolution: '8192×6144' }, -] - const equipIcon = (t: string) => t === 'drone' ? '🛸' : t === 'plane' ? '✈' : '🛰' const equipTagCls = (t: string) => @@ -63,6 +40,8 @@ const FilterBtn = ({ label, active, onClick }: { label: string; active: boolean; // ── Component ── export function MediaManagement() { + const [mediaItems, setMediaItems] = useState([]) + const [loading, setLoading] = useState(true) const [selectedIds, setSelectedIds] = useState>(new Set()) const [equipFilter, setEquipFilter] = useState('all') const [typeFilter, setTypeFilter] = useState>(new Set()) @@ -71,6 +50,22 @@ export function MediaManagement() { const [showUpload, setShowUpload] = useState(false) const modalRef = useRef(null) + const loadData = useCallback(async () => { + setLoading(true) + try { + const items = await fetchAerialMedia() + setMediaItems(items) + } catch (err) { + console.error('[aerial] 미디어 목록 조회 실패:', err) + } finally { + setLoading(false) + } + }, []) + + useEffect(() => { + loadData() + }, [loadData]) + useEffect(() => { const handler = (e: MouseEvent) => { if (modalRef.current && !modalRef.current.contains(e.target as Node)) { @@ -81,22 +76,22 @@ export function MediaManagement() { return () => document.removeEventListener('mousedown', handler) }, [showUpload]) - const filtered = mediaFiles.filter(f => { - if (equipFilter !== 'all' && f.equipType !== equipFilter) return false + const filtered = mediaItems.filter(f => { + if (equipFilter !== 'all' && f.equipTpCd !== equipFilter) return false if (typeFilter.size > 0) { - const isPhoto = !['영상'].includes(f.mediaType) - const isVideo = f.mediaType === '영상' + const isPhoto = f.mediaTpCd !== '영상' + const isVideo = f.mediaTpCd === '영상' if (typeFilter.has('photo') && !isPhoto) return false if (typeFilter.has('video') && !isVideo) return false } - if (searchTerm && !f.filename.toLowerCase().includes(searchTerm.toLowerCase())) return false + if (searchTerm && !f.fileNm.toLowerCase().includes(searchTerm.toLowerCase())) return false return true }) const sorted = [...filtered].sort((a, b) => { - if (sortBy === 'name') return a.filename.localeCompare(b.filename) - if (sortBy === 'size') return parseFloat(b.size) - parseFloat(a.size) - return b.datetime.localeCompare(a.datetime) + if (sortBy === 'name') return a.fileNm.localeCompare(b.fileNm) + if (sortBy === 'size') return parseFloat(b.fileSz ?? '0') - parseFloat(a.fileSz ?? '0') + return (b.takngDtm ?? '').localeCompare(a.takngDtm ?? '') }) const toggleId = (id: number) => { @@ -111,7 +106,7 @@ export function MediaManagement() { if (selectedIds.size === sorted.length) { setSelectedIds(new Set()) } else { - setSelectedIds(new Set(sorted.map(f => f.id))) + setSelectedIds(new Set(sorted.map(f => f.aerialMediaSn))) } } @@ -123,9 +118,9 @@ export function MediaManagement() { }) } - const droneCount = mediaFiles.filter(f => f.equipType === 'drone').length - const planeCount = mediaFiles.filter(f => f.equipType === 'plane').length - const satCount = mediaFiles.filter(f => f.equipType === 'satellite').length + const droneCount = mediaItems.filter(f => f.equipTpCd === 'drone').length + const planeCount = mediaItems.filter(f => f.equipTpCd === 'plane').length + const satCount = mediaItems.filter(f => f.equipTpCd === 'satellite').length return (
@@ -165,11 +160,11 @@ export function MediaManagement() { {/* Summary Stats */}
{[ - { icon: '📸', value: String(mediaFiles.length), label: '총 파일', color: 'text-primary-cyan' }, - { icon: '🛸', value: String(droneCount), label: '드론', color: 'text-text-1' }, - { icon: '✈', value: String(planeCount), label: '유인항공기', color: 'text-text-1' }, - { icon: '🛰', value: String(satCount), label: '위성', color: 'text-text-1' }, - { icon: '💾', value: '3.8 GB', label: '총 용량', color: 'text-text-1' }, + { icon: '📸', value: loading ? '…' : String(mediaItems.length), label: '총 파일', color: 'text-primary-cyan' }, + { icon: '🛸', value: loading ? '…' : String(droneCount), label: '드론', color: 'text-text-1' }, + { icon: '✈', value: loading ? '…' : String(planeCount), label: '유인항공기', color: 'text-text-1' }, + { icon: '🛰', value: loading ? '…' : String(satCount), label: '위성', color: 'text-text-1' }, + { icon: '💾', value: '—', label: '총 용량', color: 'text-text-1' }, ].map((s, i) => (
{s.icon} @@ -221,39 +216,43 @@ export function MediaManagement() { - {sorted.map(f => ( + {loading ? ( + + 불러오는 중... + + ) : sorted.map(f => ( toggleId(f.id)} + key={f.aerialMediaSn} + onClick={() => toggleId(f.aerialMediaSn)} className={`border-b border-border/50 cursor-pointer transition-colors hover:bg-[rgba(255,255,255,0.02)] ${ - selectedIds.has(f.id) ? 'bg-[rgba(6,182,212,0.06)]' : '' + selectedIds.has(f.aerialMediaSn) ? 'bg-[rgba(6,182,212,0.06)]' : '' }`} > e.stopPropagation()}> toggleId(f.id)} + checked={selectedIds.has(f.aerialMediaSn)} + onChange={() => toggleId(f.aerialMediaSn)} className="accent-primary-blue" /> - {equipIcon(f.equipType)} - {f.incident} - {f.location} - {f.filename} + {equipIcon(f.equipTpCd)} + {f.acdntSn != null ? String(f.acdntSn) : '—'} + {f.locDc ?? '—'} + {f.fileNm} - - {f.equipment} + + {f.equipNm} - - {f.mediaType === '영상' ? '🎬' : '📷'} {f.mediaType} + + {f.mediaTpCd === '영상' ? '🎬' : '📷'} {f.mediaTpCd} - {f.datetime} - {f.size} - {f.resolution} + {formatDtm(f.takngDtm)} + {f.fileSz ?? '—'} + {f.resolution ?? '—'} e.stopPropagation()}> -
- {file.author} - {file.uploadDate} + {file.authorNm} + {new Date(file.regDtm).toLocaleDateString('ko-KR')}
- ⬇ {file.downloads} + ⬇ {file.dwnldCnt} -
+ )} - {filteredManuals.length === 0 && ( + {!manualLoading && filteredManuals.length === 0 && (
📘

검색 결과가 없습니다.

@@ -422,10 +433,10 @@ export function BoardView() { input.type = 'file' input.accept = '.pdf,.doc,.docx,.hwp,.xlsx' input.onchange = (ev) => { - const file = (ev.target as HTMLInputElement).files?.[0] - if (file) { - const sizeMB = (file.size / (1024 * 1024)).toFixed(1) - setUploadForm(prev => ({ ...prev, fileName: file.name, fileSize: `${sizeMB} MB` })) + const f = (ev.target as HTMLInputElement).files?.[0] + if (f) { + const sizeMB = (f.size / (1024 * 1024)).toFixed(1) + setUploadForm(prev => ({ ...prev, fileName: f.name, fileSize: `${sizeMB} MB` })) } } input.click() @@ -455,37 +466,35 @@ export function BoardView() { style={{ padding: '8px 20px', borderRadius: 6, fontSize: 12, fontWeight: 600, background: 'var(--bg3)', border: '1px solid var(--bd)', color: 'var(--t3)', fontFamily: 'var(--fK)', cursor: 'pointer' }}> 취소 -
{/* Right Panel */} - {activeSubTab === 'analysis' && setRecalcModalOpen(true)} onOpenReport={() => { setReportGenCategory(0); navigateToTab('reports', 'generate') }} />} + {activeSubTab === 'analysis' && setRecalcModalOpen(true)} onOpenReport={() => { setReportGenCategory(0); navigateToTab('reports', 'generate') }} detail={analysisDetail} />} {/* 재계산 모달 */} setBacktrackModalOpen(false)} phase={backtrackPhase} - conditions={MOCK_CONDITIONS} + conditions={backtrackConditions} vessels={backtrackVessels} onRunAnalysis={handleRunBacktrackAnalysis} onStartReplay={handleStartReplay} diff --git a/frontend/src/tabs/prediction/components/RightPanel.tsx b/frontend/src/tabs/prediction/components/RightPanel.tsx index d21d661..853bd2f 100755 --- a/frontend/src/tabs/prediction/components/RightPanel.tsx +++ b/frontend/src/tabs/prediction/components/RightPanel.tsx @@ -1,6 +1,11 @@ import { useState } from 'react' +import type { PredictionDetail } from '../services/predictionApi' -export function RightPanel({ onOpenBacktrack, onOpenRecalc, onOpenReport }: { onOpenBacktrack?: () => void; onOpenRecalc?: () => void; onOpenReport?: () => void }) { +export function RightPanel({ onOpenBacktrack, onOpenRecalc, onOpenReport, detail }: { onOpenBacktrack?: () => void; onOpenRecalc?: () => void; onOpenReport?: () => void; detail?: PredictionDetail | null }) { + const vessel = detail?.vessels?.[0] + const vessel2 = detail?.vessels?.[1] + const spill = detail?.spill + const insurance = vessel?.insuranceData as Array<{ type: string; insurer: string; value: string; currency: string }> | null const [shipExpanded, setShipExpanded] = useState(false) const [insuranceExpanded, setInsuranceExpanded] = useState(false) @@ -38,7 +43,7 @@ export function RightPanel({ onOpenBacktrack, onOpenRecalc, onOpenReport }: { on {/* 오염 종합 상황 */}
- + @@ -98,35 +103,37 @@ export function RightPanel({ onOpenBacktrack, onOpenRecalc, onOpenReport }: { on fontSize: '15px' }}>🚢
-
ORIENTAL GLORY
-
IMO 9412856 · MMSI 440123456 · 유조선
+
{vessel?.vesselNm || '—'}
+
IMO {vessel?.imoNo || '—'} · {vessel?.vesselTp || '—'}
사고
{/* 제원 */}
- - - + + +
- - - - - - + + + + + +
{/* 충돌 상대 */} + {vessel2 && (
-
⚠ 충돌 상대: HAI FENG 168
+
⚠ 충돌 상대: {vessel2.vesselNm}
- 🇨🇳 중국 벌크선 52,340GT · 좌현 35° 충돌 · No.1P 파공 1.2m×0.8m + {vessel2.flagCd} {vessel2.vesselTp} {vessel2.gt ? `${vessel2.gt.toLocaleString()}GT` : ''}
+ )}
@@ -137,48 +144,30 @@ export function RightPanel({ onOpenBacktrack, onOpenRecalc, onOpenReport }: { on onToggle={() => setInsuranceExpanded(!insuranceExpanded)} >
-
- - - -
- - {/* 선체보험 */} - - - {/* 화물보험 */} - - - {/* 유류오염배상 */} - + {insurance && insurance.length > 0 ? ( + <> + {insurance.filter(ins => ins.type === 'P&I').map((ins, i) => ( + + ))} + {insurance.filter(ins => ins.type === 'H&M').map((ins, i) => ( + + ))} + {insurance.filter(ins => ins.type === 'CLC').map((ins, i) => ( + + ))} + + ) : ( +
보험 정보가 없습니다.
+ )}
diff --git a/frontend/src/tabs/prediction/services/predictionApi.ts b/frontend/src/tabs/prediction/services/predictionApi.ts new file mode 100644 index 0000000..fcd0d65 --- /dev/null +++ b/frontend/src/tabs/prediction/services/predictionApi.ts @@ -0,0 +1,117 @@ +import { api } from '@common/services/api'; + +export interface PredictionAnalysis { + acdntSn: number; + acdntNm: string; + occurredAt: string; + analysisDate: string; + requestor: string; + duration: string; + oilType: string; + volume: number | null; + location: string; + lat: number | null; + lon: number | null; + kospsStatus: string; + poseidonStatus: string; + opendriftStatus: string; + backtrackStatus: string; + analyst: string; + officeName: string; +} + +export interface PredictionDetail { + acdnt: { + acdntSn: number; + acdntNm: string; + occurredAt: string; + lat: number | null; + lon: number | null; + location: string; + analyst: string; + officeName: string; + }; + spill: { + oilType: string; + volume: number | null; + unit: string; + fcstHr: number | null; + } | null; + vessels: Array<{ + vesselInfoSn: number; + imoNo: string; + vesselNm: string; + vesselTp: string; + loaM: number | null; + breadthM: number | null; + draftM: number | null; + gt: number | null; + dwt: number | null; + builtYr: number | null; + flagCd: string; + callsign: string; + engineDc: string; + insuranceData: unknown; + }>; + weather: Array<{ + obsDtm: string; + locNm: string; + temp: string; + weatherDc: string; + wind: string; + wave: string; + humid: string; + vis: string; + sst: string; + }>; +} + +export interface BacktrackResult { + backtrackSn: number; + acdntSn: number; + estSpilDtm: string | null; + anlysRange: string | null; + lon: number | null; + lat: number | null; + srchRadiusNm: number | null; + totalVessels: number | null; + execSttsCd: string; + rsltData: Record | null; +} + +export const fetchPredictionAnalyses = async (params?: { + search?: string; +}): Promise => { + const response = await api.get('/prediction/analyses', { params }); + return response.data; +}; + +export const fetchPredictionDetail = async (acdntSn: number): Promise => { + const response = await api.get(`/prediction/analyses/${acdntSn}`); + return response.data; +}; + +export const fetchBacktrack = async (sn: number): Promise => { + const response = await api.get(`/prediction/backtrack/${sn}`); + return response.data; +}; + +export const fetchBacktrackByAcdnt = async ( + acdntSn: number, +): Promise => { + const response = await api.get('/prediction/backtrack', { + params: { acdntSn }, + }); + return response.data.length > 0 ? response.data[0] : null; +}; + +export const createBacktrack = async (input: { + acdntSn: number; + lon: number; + lat: number; + srchRadiusNm?: number; + anlysRange?: string; +}): Promise<{ backtrackSn: number }> => { + const response = await api.post<{ backtrackSn: number }>('/prediction/backtrack', input); + return response.data; +}; diff --git a/frontend/src/tabs/rescue/components/RescueScenarioView.tsx b/frontend/src/tabs/rescue/components/RescueScenarioView.tsx index 20d05e2..0d781e7 100755 --- a/frontend/src/tabs/rescue/components/RescueScenarioView.tsx +++ b/frontend/src/tabs/rescue/components/RescueScenarioView.tsx @@ -1,4 +1,6 @@ -import { useState, useRef } from 'react' +import { useState, useEffect, useCallback, useRef } from 'react' +import { fetchRescueOps, fetchRescueScenarios } from '../services/rescueApi' +import type { RescueOpsItem, RescueScenarioItem } from '../services/rescueApi' /* ─── Types ─── */ type Severity = 'CRITICAL' | 'HIGH' | 'MEDIUM' | 'RESOLVED' @@ -29,151 +31,6 @@ const SEV_STYLE: Record RESOLVED: { bg: 'rgba(34,197,94,0.15)', color: '#22c55e', label: 'RESOLVED' }, } -/* ─── 사고 목록 ─── */ -const INCIDENTS = [ - 'RSC-2024-0127 · M/V SEA GUARDIAN (충돌/좌초)', - 'RSC-2024-0125 · M/V PACIFIC STAR (기관 고장)', - 'RSC-2024-0118 · F/V DONG JIN (침수/전복위험)', -] - -/* ─── Mock 시나리오 데이터 ─── */ -const MOCK_SCENARIOS: RescueScenario[] = [ - { - id: 'S-01', name: '사고 발생 직후', severity: 'CRITICAL', - timeStep: 'T+0h', datetime: '2024.10.27 10:30 KST', - gm: '0.8', list: '15', trim: '2.5', buoyancy: 30, oilRate: '100 L/min', bmRatio: '92%', - description: '선수 #1·좌현 #3 침수. 복원력 급격 저하. 전복 위험 경고.', - compartments: [ - { name: '선수 #1 Hold', status: '완전 침수 (100%)', color: 'var(--red)' }, - { name: '좌현 #3 DB Tank', status: '완전 침수 (100%)', color: 'var(--red)' }, - { name: '기관실 하부', status: '일부 침수 (30%)', color: 'var(--orange)' }, - { name: '우현 #2 DB Tank', status: '정상', color: 'var(--green)' }, - { name: '선미 Void', status: '정상', color: 'var(--green)' }, - ], - assessment: [ - { label: '전복 위험', value: 'CRITICAL — GM 0.8m 미만', color: 'var(--red)' }, - { label: '침몰 위험', value: 'HIGH — 잔존부력 30%', color: 'var(--orange)' }, - { label: '구조적 파손', value: 'MEDIUM — BM 92% 한계 근접', color: 'var(--yellow)' }, - { label: '유류오염', value: 'HIGH — 100 L/min 유출 중', color: 'var(--orange)' }, - ], - actions: [ - { time: '10:30', text: 'SOS 발신, 해경 통보', color: 'var(--red)' }, - { time: '10:35', text: '구조헬기(B-703) 출동 명령', color: 'var(--orange)' }, - { time: '10:40', text: '전 승조원 구명조끼 착용 지시', color: 'var(--yellow)' }, - { time: '10:45', text: '비상배수펌프 가동', color: 'var(--cyan)' }, - ], - }, - { - id: 'S-02', name: '침수 확대 단계', severity: 'CRITICAL', - timeStep: 'T+2h', datetime: '2024.10.27 12:30 KST', - gm: '0.4', list: '22', trim: '3.8', buoyancy: 18, oilRate: '180 L/min', bmRatio: '105%', - description: 'DB탱크 추가 침수. GM 0.4m 하락. 전복 임박 경고.', - compartments: [ - { name: '선수 #1 Hold', status: '완전 침수 (100%)', color: 'var(--red)' }, - { name: '좌현 #3 DB Tank', status: '완전 침수 (100%)', color: 'var(--red)' }, - { name: '기관실 하부', status: '대부분 침수 (70%)', color: 'var(--red)' }, - { name: '우현 #2 DB Tank', status: '일부 침수 (40%)', color: 'var(--orange)' }, - { name: '선미 Void', status: '정상', color: 'var(--green)' }, - ], - assessment: [ - { label: '전복 위험', value: 'CRITICAL — GM 0.4m, 전복 임박', color: 'var(--red)' }, - { label: '침몰 위험', value: 'CRITICAL — 잔존부력 18%', color: 'var(--red)' }, - { label: '구조적 파손', value: 'HIGH — BM 105% 초과', color: 'var(--red)' }, - { label: '유류오염', value: 'CRITICAL — 180 L/min 유출', color: 'var(--red)' }, - ], - actions: [ - { time: '11:00', text: '밸러스트 이동 시도 (우현→좌현)', color: 'var(--cyan)' }, - { time: '11:30', text: '예인선 2척 출동 요청', color: 'var(--orange)' }, - { time: '12:00', text: '승조원 부분 퇴선 실시', color: 'var(--red)' }, - { time: '12:20', text: '비상배수 추가 투입', color: 'var(--cyan)' }, - ], - }, - { - id: 'S-03', name: '응급조치 적용', severity: 'HIGH', - timeStep: 'T+6h', datetime: '2024.10.27 16:30 KST', - gm: '1.1', list: '12', trim: '2.0', buoyancy: 35, oilRate: '60 L/min', bmRatio: '78%', - description: '밸러스트 이동+배출 완료. 임시 패치 적용. GM 부분 회복.', - compartments: [ - { name: '선수 #1 Hold', status: '침수 유지 (90%)', color: 'var(--red)' }, - { name: '좌현 #3 DB Tank', status: '배수 진행 (60%)', color: 'var(--orange)' }, - { name: '기관실 하부', status: '배수 진행 (40%)', color: 'var(--orange)' }, - { name: '우현 #2 DB Tank', status: '밸러스트 주입 (80%)', color: 'var(--cyan)' }, - { name: '선미 Void', status: '정상', color: 'var(--green)' }, - ], - assessment: [ - { label: '전복 위험', value: 'MEDIUM — GM 1.1m 부분 회복', color: 'var(--yellow)' }, - { label: '침몰 위험', value: 'HIGH — 잔존부력 35%', color: 'var(--orange)' }, - { label: '구조적 파손', value: 'LOW — BM 78% 안정', color: 'var(--green)' }, - { label: '유류오염', value: 'MEDIUM — 60 L/min', color: 'var(--yellow)' }, - ], - actions: [ - { time: '13:00', text: '밸러스트 이동 완료 (좌현 경사 보정)', color: 'var(--green)' }, - { time: '14:00', text: '임시 패치(수중 용접) 적용', color: 'var(--cyan)' }, - { time: '15:00', text: '오일펜스 전개 완료', color: 'var(--orange)' }, - { time: '16:00', text: '배수 펌프 풀가동 → GM 회복', color: 'var(--green)' }, - ], - }, - { - id: 'S-04', name: '예인 개시', severity: 'MEDIUM', - timeStep: 'T+12h', datetime: '2024.10.27 22:30 KST', - gm: '1.2', list: '8', trim: '1.5', buoyancy: 40, oilRate: '25 L/min', bmRatio: '68%', - description: '예인선 2척 도착. 예인 줄 연결 완료. 3kn 속도로 예인 개시.', - compartments: [ - { name: '선수 #1 Hold', status: '침수 유지 (85%)', color: 'var(--red)' }, - { name: '좌현 #3 DB Tank', status: '배수 완료 (20%)', color: 'var(--yellow)' }, - { name: '기관실 하부', status: '배수 완료 (15%)', color: 'var(--green)' }, - { name: '우현 #2 DB Tank', status: '밸러스트 (80%)', color: 'var(--cyan)' }, - { name: '선미 Void', status: '정상', color: 'var(--green)' }, - ], - assessment: [ - { label: '전복 위험', value: 'LOW — GM 1.2m 안정', color: 'var(--green)' }, - { label: '침몰 위험', value: 'MEDIUM — 잔존부력 40%', color: 'var(--yellow)' }, - { label: '구조적 파손', value: 'LOW — BM 68% 안정', color: 'var(--green)' }, - { label: '유류오염', value: 'LOW — 25 L/min (감소 추세)', color: 'var(--green)' }, - ], - actions: [ - { time: '20:00', text: '예인선 2척 현장 도착', color: 'var(--cyan)' }, - { time: '21:00', text: '예인 줄 연결 완료', color: 'var(--green)' }, - { time: '22:00', text: '3kn 속도 예인 개시', color: 'var(--green)' }, - { time: '22:30', text: '야간 항해등 점등, 경계 유지', color: 'var(--yellow)' }, - ], - }, - { - id: 'S-05', name: '항만 입항·구난 완료', severity: 'RESOLVED', - timeStep: 'T+24h', datetime: '2024.10.28 10:30 KST', - gm: '1.5', list: '3', trim: '0.8', buoyancy: 55, oilRate: '0 L/min', bmRatio: '52%', - description: '인천항 안벽 접안 완료. 실종자 전원 구조. 구난 작전 종료.', - compartments: [ - { name: '선수 #1 Hold', status: '배수 진행 (50%)', color: 'var(--orange)' }, - { name: '좌현 #3 DB Tank', status: '배수 완료 (5%)', color: 'var(--green)' }, - { name: '기관실 하부', status: '배수 완료 (0%)', color: 'var(--green)' }, - { name: '우현 #2 DB Tank', status: '정상', color: 'var(--green)' }, - { name: '선미 Void', status: '정상', color: 'var(--green)' }, - ], - assessment: [ - { label: '전복 위험', value: 'RESOLVED — GM 1.5m 안정', color: 'var(--green)' }, - { label: '침몰 위험', value: 'RESOLVED — 잔존부력 55%', color: 'var(--green)' }, - { label: '구조적 파손', value: 'RESOLVED — 접안 완료', color: 'var(--green)' }, - { label: '유류오염', value: 'RESOLVED — 유출 차단', color: 'var(--green)' }, - ], - actions: [ - { time: '06:00', text: '인천항 진입 허가', color: 'var(--green)' }, - { time: '08:00', text: '도선사 승선', color: 'var(--cyan)' }, - { time: '09:30', text: '안벽 접안 완료', color: 'var(--green)' }, - { time: '10:30', text: '실종자 전원 구조 확인 — 작전 종료', color: 'var(--green)' }, - ], - }, -] - -/* ─── Chart Data ─── */ -const CHART_DATA = [ - { id: 'S-01', label: 'T+0h', gm: 0.8, list: 15, buoy: 30, oil: 100, bm: 92, severity: 'CRITICAL' as Severity }, - { id: 'S-02', label: 'T+2h', gm: 0.4, list: 22, buoy: 18, oil: 180, bm: 105, severity: 'CRITICAL' as Severity }, - { id: 'S-03', label: 'T+6h', gm: 1.1, list: 12, buoy: 35, oil: 60, bm: 78, severity: 'HIGH' as Severity }, - { id: 'S-04', label: 'T+12h', gm: 1.2, list: 8, buoy: 40, oil: 25, bm: 68, severity: 'MEDIUM' as Severity }, - { id: 'S-05', label: 'T+24h', gm: 1.5, list: 3, buoy: 55, oil: 0, bm: 52, severity: 'RESOLVED' as Severity }, -] - const SEV_COLOR: Record = { CRITICAL: '#f87171', HIGH: '#fb923c', MEDIUM: '#fbbf24', RESOLVED: '#22c55e' } /* ─── Color helpers ─── */ @@ -182,19 +39,118 @@ function listColor(v: number) { return v > 20 ? 'var(--red)' : v > 10 ? 'var(--y function buoyColor(v: number) { return v < 30 ? 'var(--red)' : v < 50 ? 'var(--yellow)' : 'var(--green)' } function oilColor(v: number) { return v > 100 ? 'var(--red)' : v > 30 ? 'var(--orange)' : v > 0 ? 'var(--yellow)' : 'var(--green)' } +/* ─── API 시나리오 → 로컬 타입 변환 ─── */ +function toRescueScenario(s: RescueScenarioItem, i: number): RescueScenario { + return { + id: `S-${String(i + 1).padStart(2, '0')}`, + name: s.description?.split('.')[0] ?? s.timeStep, + severity: s.svrtCd as Severity, + timeStep: s.timeStep, + datetime: s.scenarioDtm + ? new Date(s.scenarioDtm).toLocaleString('ko-KR', { + year: 'numeric', + month: '2-digit', + day: '2-digit', + hour: '2-digit', + minute: '2-digit', + }) + ' KST' + : '—', + gm: String(s.gmM ?? 0), + list: String(s.listDeg ?? 0), + trim: String(s.trimM ?? 0), + buoyancy: s.buoyancyPct ?? 0, + oilRate: s.oilRateLpm != null ? `${s.oilRateLpm} L/min` : '— L/min', + bmRatio: s.bmRatioPct != null ? `${s.bmRatioPct}%` : '—%', + description: s.description ?? '', + compartments: s.compartments ?? [], + assessment: s.assessment ?? [], + actions: s.actions ?? [], + } +} + +/* ─── ChartData 타입 ─── */ +interface ChartDataItem { + id: string + label: string + gm: number + list: number + buoy: number + oil: number + bm: number + severity: Severity +} + /* ═══════════════════════════════════════════════════════════════════ RescueScenarioView ═══════════════════════════════════════════════════════════════════ */ export function RescueScenarioView() { + const [ops, setOps] = useState([]) + const [apiScenarios, setApiScenarios] = useState([]) + const [loading, setLoading] = useState(true) const [selectedIncident, setSelectedIncident] = useState(0) - const [scenarios] = useState(MOCK_SCENARIOS) - const [checked, setChecked] = useState>(new Set(['S-01', 'S-02', 'S-03', 'S-04', 'S-05'])) - const [selectedId, setSelectedId] = useState('S-01') + const [checked, setChecked] = useState>(new Set()) + const [selectedId, setSelectedId] = useState('') const [sortBy, setSortBy] = useState<'time' | 'risk'>('time') const [detailView, setDetailView] = useState(0) const [newScnModalOpen, setNewScnModalOpen] = useState(false) - const selected = scenarios.find(s => s.id === selectedId)! + const loadScenarios = useCallback(async (opsSn: number) => { + setLoading(true) + try { + const items = await fetchRescueScenarios(opsSn) + setApiScenarios(items) + } catch (err) { + console.error('[rescue] 시나리오 조회 실패:', err) + } finally { + setLoading(false) + } + }, []) + + const loadOps = useCallback(async () => { + try { + const items = await fetchRescueOps() + setOps(items) + if (items.length > 0) { + loadScenarios(items[0].rescueOpsSn) + } else { + setLoading(false) + } + } catch (err) { + console.error('[rescue] 구난 작전 목록 조회 실패:', err) + setLoading(false) + } + }, [loadScenarios]) + + useEffect(() => { loadOps() }, [loadOps]) + + useEffect(() => { + if (ops.length > 0 && ops[selectedIncident]) { + loadScenarios(ops[selectedIncident].rescueOpsSn) + } + }, [selectedIncident, ops, loadScenarios]) + + /* API 시나리오 → 로컬 타입 변환 */ + const scenarios: RescueScenario[] = apiScenarios.map(toRescueScenario) + + /* checked / selectedId: apiScenarios 변경 시 초기화 */ + useEffect(() => { + setChecked(new Set(scenarios.map(s => s.id))) + if (scenarios.length > 0) setSelectedId(scenarios[0].id) + }, [apiScenarios]) // eslint-disable-line react-hooks/exhaustive-deps + + /* chartData: scenarios에서 파생 */ + const chartData: ChartDataItem[] = scenarios.map(s => ({ + id: s.id, + label: s.timeStep, + gm: parseFloat(s.gm), + list: parseFloat(s.list), + buoy: s.buoyancy, + oil: parseFloat(s.oilRate), + bm: parseFloat(s.bmRatio), + severity: s.severity, + })) + + const selected = scenarios.find(s => s.id === selectedId) const sorted = [...scenarios].sort((a, b) => { if (sortBy === 'risk') { @@ -225,7 +181,7 @@ export function RescueScenarioView() {
@@ -248,6 +204,9 @@ export function RescueScenarioView() { {/* Card list */}
+ {loading && scenarios.length === 0 && ( +
시나리오 로딩 중...
+ )} {sorted.map(sc => { const isSel = selectedId === sc.id const sev = SEV_STYLE[sc.severity] @@ -383,7 +342,7 @@ export function RescueScenarioView() { )} {/* ─── VIEW 1: 비교 차트 ─── */} - {detailView === 1 && } + {detailView === 1 && } {/* ─── VIEW 2: 지도 오버레이 ─── */} {detailView === 2 && ( @@ -393,7 +352,7 @@ export function RescueScenarioView() {
GIS 기반 시나리오 비교
선택된 시나리오의 침수 구역을 지도 위에 오버레이하여 비교합니다.
- {MOCK_SCENARIOS.map(sc => ( + {scenarios.map(sc => (
{sc.id} {sc.name} @@ -411,13 +370,13 @@ export function RescueScenarioView() {
{/* ═══ 신규 시나리오 모달 ═══ */} - {newScnModalOpen && setNewScnModalOpen(false)} />} + {newScnModalOpen && setNewScnModalOpen(false)} />}
) } /* ═══ 신규 시나리오 생성 모달 ═══ */ -function NewScenarioModal({ onClose }: { onClose: () => void }) { +function NewScenarioModal({ ops, onClose }: { ops: RescueOpsItem[]; onClose: () => void }) { const overlayRef = useRef(null) const [submitting, setSubmitting] = useState(false) const [done, setDone] = useState(false) @@ -471,7 +430,7 @@ function NewScenarioModal({ onClose }: { onClose: () => void }) {
@@ -725,10 +684,18 @@ function NewScenarioModal({ onClose }: { onClose: () => void }) { } /* ═══ 비교 차트 컴포넌트 ═══ */ -function ScenarioComparison() { +function ScenarioComparison({ chartData }: { chartData: ChartDataItem[] }) { const W = 480, H = 180, PX = 50, PY = 20 const pw = W - PX * 2, ph = H - PY * 2 - const xStep = pw / (CHART_DATA.length - 1) + const xStep = chartData.length > 1 ? pw / (chartData.length - 1) : pw + + if (chartData.length === 0) { + return ( +
+ 비교할 시나리오 데이터가 없습니다. +
+ ) + } return (
@@ -745,10 +712,10 @@ function ScenarioComparison() { GM=1.0 위험 {/* Area */} - `${PX + i * xStep},${PY + ph - (d.gm / 2.0) * ph}`).join(' ')} ${PX + (CHART_DATA.length - 1) * xStep},${PY + ph}`} fill="rgba(6,182,212,.08)" /> + `${PX + i * xStep},${PY + ph - (d.gm / 2.0) * ph}`).join(' ')} ${PX + (chartData.length - 1) * xStep},${PY + ph}`} fill="rgba(6,182,212,.08)" /> {/* Line + dots */} - `${PX + i * xStep},${PY + ph - (d.gm / 2.0) * ph}`).join(' ')} fill="none" stroke="var(--cyan)" strokeWidth={2} /> - {CHART_DATA.map((d, i) => ( + `${PX + i * xStep},${PY + ph - (d.gm / 2.0) * ph}`).join(' ')} fill="none" stroke="var(--cyan)" strokeWidth={2} /> + {chartData.map((d, i) => ( {d.label} @@ -769,8 +736,8 @@ function ScenarioComparison() { return {v} })} - `${PX + i * xStep},${PY + ph - (d.list / 25) * ph}`).join(' ')} fill="none" stroke="var(--orange)" strokeWidth={2} /> - {CHART_DATA.map((d, i) => ( + `${PX + i * xStep},${PY + ph - (d.list / 25) * ph}`).join(' ')} fill="none" stroke="var(--orange)" strokeWidth={2} /> + {chartData.map((d, i) => ( {d.label} @@ -787,7 +754,7 @@ function ScenarioComparison() { const y = PY + ph - (v / 200) * ph return {v} })} - {CHART_DATA.map((d, i) => { + {chartData.map((d, i) => { const barW = xStep * 0.5 const barH = (d.oil / 200) * ph return ( @@ -809,23 +776,23 @@ function ScenarioComparison() { 지표 - {CHART_DATA.map(d => ( + {chartData.map(d => ( {d.id}
{d.label} ))} {[ - { label: 'GM (m)', key: 'gm', fmt: (d: typeof CHART_DATA[0]) => d.gm.toFixed(1), clr: (d: typeof CHART_DATA[0]) => gmColor(d.gm) }, - { label: '횡경사 (°)', key: 'list', fmt: (d: typeof CHART_DATA[0]) => `${d.list}°`, clr: (d: typeof CHART_DATA[0]) => listColor(d.list) }, - { label: '잔존부력 (%)', key: 'buoy', fmt: (d: typeof CHART_DATA[0]) => `${d.buoy}%`, clr: (d: typeof CHART_DATA[0]) => buoyColor(d.buoy) }, - { label: '유출률 (L/min)', key: 'oil', fmt: (d: typeof CHART_DATA[0]) => `${d.oil}`, clr: (d: typeof CHART_DATA[0]) => oilColor(d.oil) }, - { label: 'BM 비율 (%)', key: 'bm', fmt: (d: typeof CHART_DATA[0]) => `${d.bm}%`, clr: (d: typeof CHART_DATA[0]) => d.bm > 100 ? 'var(--red)' : d.bm > 85 ? 'var(--orange)' : 'var(--green)' }, - { label: '위험 등급', key: 'sev', fmt: (d: typeof CHART_DATA[0]) => d.severity, clr: (d: typeof CHART_DATA[0]) => SEV_COLOR[d.severity] }, + { label: 'GM (m)', key: 'gm', fmt: (d: ChartDataItem) => d.gm.toFixed(1), clr: (d: ChartDataItem) => gmColor(d.gm) }, + { label: '횡경사 (°)', key: 'list', fmt: (d: ChartDataItem) => `${d.list}°`, clr: (d: ChartDataItem) => listColor(d.list) }, + { label: '잔존부력 (%)', key: 'buoy', fmt: (d: ChartDataItem) => `${d.buoy}%`, clr: (d: ChartDataItem) => buoyColor(d.buoy) }, + { label: '유출률 (L/min)', key: 'oil', fmt: (d: ChartDataItem) => `${d.oil}`, clr: (d: ChartDataItem) => oilColor(d.oil) }, + { label: 'BM 비율 (%)', key: 'bm', fmt: (d: ChartDataItem) => `${d.bm}%`, clr: (d: ChartDataItem) => d.bm > 100 ? 'var(--red)' : d.bm > 85 ? 'var(--orange)' : 'var(--green)' }, + { label: '위험 등급', key: 'sev', fmt: (d: ChartDataItem) => d.severity, clr: (d: ChartDataItem) => SEV_COLOR[d.severity] }, ].map(row => ( {row.label} - {CHART_DATA.map(d => ( + {chartData.map(d => ( {row.fmt(d)} ))} diff --git a/frontend/src/tabs/rescue/components/RescueView.tsx b/frontend/src/tabs/rescue/components/RescueView.tsx index 2f890f2..7cc033f 100755 --- a/frontend/src/tabs/rescue/components/RescueView.tsx +++ b/frontend/src/tabs/rescue/components/RescueView.tsx @@ -1,7 +1,9 @@ -import { useState, useEffect } from 'react' +import { useState, useEffect, useCallback } from 'react' import { useSubMenu } from '@common/hooks/useSubMenu' import { RescueTheoryView } from './RescueTheoryView' import { RescueScenarioView } from './RescueScenarioView' +import { fetchRescueOps } from '../services/rescueApi' +import type { RescueOpsItem } from '../services/rescueApi' /* ─── Types ─── */ type AccidentType = 'collision' | 'grounding' | 'turning' | 'capsizing' | 'sharpTurn' | 'flooding' | 'sinking' @@ -812,26 +814,66 @@ function MetricCard({ label, value, unit, color, sub, subColor }: { /* ─── 긴급구난 목록 탭 ─── */ function RescueListView() { - const listData = [ - { status: '대응중', statusColor: 'var(--red)', no: 'RSC-2026-001', vessel: 'M/V SEA GUARDIAN', type: '충돌/좌초', date: '2026-02-17 10:30', location: '37°28\'N 126°15\'E', crew: '15/20' }, - { status: '대응중', statusColor: 'var(--orange)', no: 'RSC-2026-002', vessel: 'M/V EASTERN GLORY', type: '침수/전복', date: '2026-02-15 14:20', location: '35°05\'N 129°02\'E', crew: '22/28' }, - { status: '종료', statusColor: 'var(--green)', no: 'RSC-2025-048', vessel: 'M/V PACIFIC WAVE', type: '충돌', date: '2025-12-03 08:15', location: '34°45\'N 128°30\'E', crew: '18/18' }, - { status: '종료', statusColor: 'var(--green)', no: 'RSC-2025-047', vessel: 'M/V HARMONY', type: '좌초', date: '2025-11-20 22:40', location: '36°12\'N 126°50\'E', crew: '25/25' }, - { status: '종료', statusColor: 'var(--green)', no: 'RSC-2025-046', vessel: 'M/V GRAND FORTUNE', type: '침몰', date: '2025-10-08 05:30', location: '33°30\'N 127°15\'E', crew: '10/22' }, - ] + const [opsList, setOpsList] = useState([]) + const [loading, setLoading] = useState(true) + const [searchTerm, setSearchTerm] = useState('') + + const loadOps = useCallback(async () => { + setLoading(true) + try { + const items = await fetchRescueOps({ search: searchTerm || undefined }) + setOpsList(items) + } catch (err) { + console.error('[rescue] 구난 작전 목록 조회 실패:', err) + } finally { + setLoading(false) + } + }, [searchTerm]) + + useEffect(() => { + loadOps() + }, [loadOps]) + + const getStatusLabel = (sttsCd: string) => { + switch (sttsCd) { + case 'ACTIVE': return { label: '대응중', color: 'var(--red)' } + case 'STANDBY': return { label: '대기', color: 'var(--orange)' } + case 'COMPLETED': return { label: '종료', color: 'var(--green)' } + default: return { label: sttsCd, color: 'var(--t3)' } + } + } + + const getTypeLabel = (tpCd: string) => { + const map: Record = { + collision: '충돌', grounding: '좌초', turning: '선회', + capsizing: '전복', sharpTurn: '급선회', flooding: '침수', sinking: '침몰', + } + return map[tpCd] ?? tpCd + } return (
긴급구난 사고 목록
- + setSearchTerm(e.target.value)} + className="px-3 py-1.5 bg-bg-0 border border-border rounded-md text-text-2 font-korean text-[11px] w-[200px] outline-none focus:border-[var(--cyan)]" + />
+ {loading ? ( +
로딩 중...
+ ) : opsList.length === 0 ? ( +
구난 작전 데이터가 없습니다.
+ ) : ( @@ -841,23 +883,27 @@ function RescueListView() { - {listData.map((r, i) => ( - - - - - - - - - - ))} + {opsList.map((r) => { + const status = getStatusLabel(r.sttsCd) + return ( + + + + + + + + + + ) + })}
- {r.status} - {r.no}{r.vessel}{r.type}{r.date}{r.location}{r.crew}
+ {status.label} + {r.opsCd}{r.vesselNm}{getTypeLabel(r.acdntTpCd)}{r.regDtm ? new Date(r.regDtm).toLocaleString('ko-KR') : '—'}{r.locDc ?? '—'}{r.survivors ?? 0}/{r.totalCrew ?? 0}
+ )}
) diff --git a/frontend/src/tabs/rescue/services/rescueApi.ts b/frontend/src/tabs/rescue/services/rescueApi.ts new file mode 100644 index 0000000..b48bf5e --- /dev/null +++ b/frontend/src/tabs/rescue/services/rescueApi.ts @@ -0,0 +1,72 @@ +import { api } from '@common/services/api'; + +// ============================================================ +// 구조 시나리오 API +// ============================================================ + +// === RESCUE_OPS === +export interface RescueOpsItem { + rescueOpsSn: number; + acdntSn: number | null; + opsCd: string; + acdntTpCd: string; + vesselNm: string; + commanderNm: string | null; + lon: number | null; + lat: number | null; + locDc: string | null; + depthM: number | null; + currentDc: string | null; + gmM: number | null; + listDeg: number | null; + trimM: number | null; + buoyancyPct: number | null; + oilRateLpm: number | null; + bmRatioPct: number | null; + totalCrew: number | null; + survivors: number | null; + missing: number | null; + hydroData: Record | null; + gmdssData: Record | null; + sttsCd: string; + regDtm: string; +} + +// === RESCUE_SCENARIO === +export interface RescueScenarioItem { + scenarioSn: number; + rescueOpsSn: number; + timeStep: string; + scenarioDtm: string | null; + svrtCd: string; // CRITICAL/HIGH/MEDIUM/RESOLVED + gmM: number | null; + listDeg: number | null; + trimM: number | null; + buoyancyPct: number | null; + oilRateLpm: number | null; + bmRatioPct: number | null; + description: string | null; + compartments: Array<{ name: string; status: string; color: string }> | null; + assessment: Array<{ label: string; value: string; color: string }> | null; + actions: Array<{ time: string; text: string; color: string }> | null; + sortOrd: number; +} + +export async function fetchRescueOps(params?: { + sttsCd?: string; + acdntTpCd?: string; + search?: string; +}): Promise { + const response = await api.get('/rescue/ops', { params }); + return response.data; +} + +export async function fetchRescueOpsDetail(sn: number): Promise { + const response = await api.get(`/rescue/ops/${sn}`); + return response.data; +} + +export async function fetchRescueScenarios(rescueOpsSn: number): Promise { + const response = await api.get(`/rescue/ops/${rescueOpsSn}/scenarios`); + return response.data; +} diff --git a/frontend/src/tabs/scat/components/PreScatView.tsx b/frontend/src/tabs/scat/components/PreScatView.tsx index 6c390af..a85cef1 100755 --- a/frontend/src/tabs/scat/components/PreScatView.tsx +++ b/frontend/src/tabs/scat/components/PreScatView.tsx @@ -1,56 +1,120 @@ -import { useState, useCallback } from 'react' -import type { ScatSegment, ScatDetail } from './scatTypes' -import { allSegments, scatDetailData } from './scatConstants' -import ScatLeftPanel from './ScatLeftPanel' -import ScatMap from './ScatMap' -import ScatTimeline from './ScatTimeline' -import ScatPopup from './ScatPopup' +import { useState, useCallback, useEffect } from 'react'; +import type { ScatSegment, ScatDetail } from './scatTypes'; +import { fetchSections, fetchSectionDetail, fetchZones } from '../services/scatApi'; +import type { ApiZoneItem } from '../services/scatApi'; +import ScatLeftPanel from './ScatLeftPanel'; +import ScatMap from './ScatMap'; +import ScatTimeline from './ScatTimeline'; +import ScatPopup from './ScatPopup'; // ═══ Main PreScatView ═══ export function PreScatView() { - const [selectedSeg, setSelectedSeg] = useState(allSegments[0]) - const [jurisdictionFilter, setJurisdictionFilter] = useState('전체 (제주도)') - const [areaFilter, setAreaFilter] = useState('전체') - const [phaseFilter, setPhaseFilter] = useState('Pre-SCAT (사전조사)') - const [statusFilter, setStatusFilter] = useState('전체') - const [searchTerm, setSearchTerm] = useState('') - const [popupData, setPopupData] = useState(null) - const [timelineIdx, setTimelineIdx] = useState(6) + const [segments, setSegments] = useState([]); + const [zones, setZones] = useState([]); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + const [selectedSeg, setSelectedSeg] = useState(null); + const [jurisdictionFilter, setJurisdictionFilter] = useState('전체 (제주도)'); + const [areaFilter, setAreaFilter] = useState('전체'); + const [phaseFilter, setPhaseFilter] = useState('Pre-SCAT (사전조사)'); + const [statusFilter, setStatusFilter] = useState('전체'); + const [searchTerm, setSearchTerm] = useState(''); + const [popupData, setPopupData] = useState(null); + const [timelineIdx, setTimelineIdx] = useState(6); + + // API에서 구역 및 구간 데이터 로딩 + useEffect(() => { + let cancelled = false; + + async function loadData() { + try { + setLoading(true); + const [zonesData, sectionsData] = await Promise.all([fetchZones(), fetchSections()]); + if (cancelled) return; + setZones(zonesData); + setSegments(sectionsData); + if (sectionsData.length > 0) { + setSelectedSeg(sectionsData[0]); + } + } catch (err) { + console.error('[SCAT] 데이터 로딩 오류:', err); + if (!cancelled) setError('데이터를 불러오지 못했습니다.'); + } finally { + if (!cancelled) setLoading(false); + } + } + + loadData(); + return () => { + cancelled = true; + }; + }, []); // 관할 기반 세그먼트 필터링 - const segments = allSegments.filter(s => { - if (jurisdictionFilter === '서귀포해양경비안전서') return s.jurisdiction === '서귀포' - if (jurisdictionFilter === '제주해양경비안전서') return s.jurisdiction === '제주' - return true // 전체 - }) + const filteredSegments = segments.filter((s) => { + if (jurisdictionFilter === '서귀포해양경비안전서') return s.jurisdiction === '서귀포'; + if (jurisdictionFilter === '제주해양경비안전서') return s.jurisdiction === '제주'; + return true; // 전체 + }); - const handleOpenPopup = useCallback((idx: number) => { - setPopupData(scatDetailData[idx] || scatDetailData[0]) - }, []) + const handleOpenPopup = useCallback(async (sn: number) => { + try { + const detail = await fetchSectionDetail(sn); + setPopupData(detail); + } catch (err) { + console.error('[SCAT] 상세 데이터 로딩 오류:', err); + } + }, []); const handleClosePopup = useCallback(() => { - setPopupData(null) - }, []) + setPopupData(null); + }, []); - const handleTimelineSeek = useCallback((idx: number) => { - if (idx === -1) { - // advance signal from play - setTimelineIdx(prev => { - const next = (prev + 1) % Math.min(segments.length, 12) - if (segments[next]) setSelectedSeg(segments[next]) - return next - }) - } else { - setTimelineIdx(idx) - if (segments[idx]) setSelectedSeg(segments[idx]) - } - }, [segments]) + const handleTimelineSeek = useCallback( + (idx: number) => { + if (idx === -1) { + // advance signal from play + setTimelineIdx((prev) => { + const next = (prev + 1) % Math.min(filteredSegments.length, 12); + if (filteredSegments[next]) setSelectedSeg(filteredSegments[next]); + return next; + }); + } else { + setTimelineIdx(idx); + if (filteredSegments[idx]) setSelectedSeg(filteredSegments[idx]); + } + }, + [filteredSegments], + ); + + if (error) { + return ( +
+
{error}
+ +
+ ); + } + + if (loading || !selectedSeg) { + return ( +
+
SCAT 데이터 로딩 중...
+
+ ); + } return (
@@ -84,5 +148,5 @@ export function PreScatView() { )}
- ) + ); } diff --git a/frontend/src/tabs/scat/components/ScatLeftPanel.tsx b/frontend/src/tabs/scat/components/ScatLeftPanel.tsx index ac8e83b..9abf2ab 100644 --- a/frontend/src/tabs/scat/components/ScatLeftPanel.tsx +++ b/frontend/src/tabs/scat/components/ScatLeftPanel.tsx @@ -1,25 +1,28 @@ -import type { ScatSegment } from './scatTypes' -import { esiColor, sensColor, statusColor, esiLevel, scatAreas, scatDetailData } from './scatConstants' +import type { ScatSegment } from './scatTypes'; +import type { ApiZoneItem } from '../services/scatApi'; +import { esiColor, sensColor, statusColor, esiLevel } from './scatConstants'; interface ScatLeftPanelProps { - segments: ScatSegment[] - selectedSeg: ScatSegment - onSelectSeg: (s: ScatSegment) => void - onOpenPopup: (idx: number) => void - jurisdictionFilter: string - onJurisdictionChange: (v: string) => void - areaFilter: string - onAreaChange: (v: string) => void - phaseFilter: string - onPhaseChange: (v: string) => void - statusFilter: string - onStatusChange: (v: string) => void - searchTerm: string - onSearchChange: (v: string) => void + segments: ScatSegment[]; + zones: ApiZoneItem[]; + selectedSeg: ScatSegment; + onSelectSeg: (s: ScatSegment) => void; + onOpenPopup: (sn: number) => void; + jurisdictionFilter: string; + onJurisdictionChange: (v: string) => void; + areaFilter: string; + onAreaChange: (v: string) => void; + phaseFilter: string; + onPhaseChange: (v: string) => void; + statusFilter: string; + onStatusChange: (v: string) => void; + searchTerm: string; + onSearchChange: (v: string) => void; } function ScatLeftPanel({ segments, + zones, selectedSeg, onSelectSeg, onOpenPopup, @@ -34,12 +37,18 @@ function ScatLeftPanel({ searchTerm, onSearchChange, }: ScatLeftPanelProps) { - const filtered = segments.filter(s => { - if (areaFilter !== '전체' && !s.area.includes(areaFilter.replace('서귀포시 ', '').replace('제주시 ', '').replace(' 해안', ''))) return false - if (statusFilter !== '전체' && s.status !== statusFilter) return false - if (searchTerm && !s.code.includes(searchTerm) && !s.name.includes(searchTerm)) return false - return true - }) + const filtered = segments.filter((s) => { + if ( + areaFilter !== '전체' && + !s.area.includes( + areaFilter.replace('서귀포시 ', '').replace('제주시 ', '').replace(' 해안', ''), + ) + ) + return false; + if (statusFilter !== '전체' && s.status !== statusFilter) return false; + if (searchTerm && !s.code.includes(searchTerm) && !s.name.includes(searchTerm)) return false; + return true; + }); return (
@@ -51,8 +60,14 @@ function ScatLeftPanel({
- - onJurisdictionChange(e.target.value)} + className="prd-i w-full" + > @@ -60,18 +75,32 @@ function ScatLeftPanel({
- - onAreaChange(e.target.value)} + className="prd-i w-full" + > - {scatAreas.map(a => ( - + {zones.map((z) => ( + ))}
- - onPhaseChange(e.target.value)} + className="prd-i w-full" + > @@ -83,10 +112,14 @@ function ScatLeftPanel({ type="text" placeholder="🔍 구간 검색..." value={searchTerm} - onChange={e => onSearchChange(e.target.value)} + onChange={(e) => onSearchChange(e.target.value)} className="prd-i flex-1" /> - onStatusChange(e.target.value)} + className="prd-i w-[70px]" + > @@ -102,54 +135,83 @@ function ScatLeftPanel({ 해안 구간 목록 - 총 {filtered.length}개 구간 + + 총 {filtered.length}개 구간 +
- {filtered.map(seg => { - const lvl = esiLevel(seg.esiNum) - const borderColor = lvl === 'h' ? 'border-l-status-red' : lvl === 'm' ? 'border-l-status-orange' : 'border-l-status-green' - const isSelected = selectedSeg.id === seg.id + {filtered.map((seg) => { + const lvl = esiLevel(seg.esiNum); + const borderColor = + lvl === 'h' + ? 'border-l-status-red' + : lvl === 'm' + ? 'border-l-status-orange' + : 'border-l-status-green'; + const isSelected = selectedSeg.id === seg.id; return (
{ onSelectSeg(seg); onOpenPopup(seg.id % scatDetailData.length) }} + onClick={() => { + onSelectSeg(seg); + onOpenPopup(seg.id); + }} className={`bg-bg-3 border border-border rounded-sm p-2.5 px-3 cursor-pointer transition-all border-l-4 ${borderColor} ${ - isSelected ? 'border-status-green bg-[rgba(34,197,94,0.05)]' : 'hover:border-border-light hover:bg-bg-hover' + isSelected + ? 'border-status-green bg-[rgba(34,197,94,0.05)]' + : 'hover:border-border-light hover:bg-bg-hover' }`} >
📍 {seg.code} {seg.area} - + ESI {seg.esi}
유형 - {seg.type} + + {seg.type} +
길이 - {seg.length} + + {seg.length} +
민감 - {seg.sensitivity} + + {seg.sensitivity} +
현황 - {seg.status} + + {seg.status} +
- ) + ); })}
- ) + ); } -export default ScatLeftPanel +export default ScatLeftPanel; diff --git a/frontend/src/tabs/scat/components/scatConstants.ts b/frontend/src/tabs/scat/components/scatConstants.ts index 74bd73b..142a9bc 100644 --- a/frontend/src/tabs/scat/components/scatConstants.ts +++ b/frontend/src/tabs/scat/components/scatConstants.ts @@ -1,387 +1,104 @@ -import type { ScatSegment, ScatDetail } from './scatTypes' - // ═══ ESI 색상 ═══ export const esiColor = (n: number): string => { - if (n >= 10) return '#991b1b' - if (n >= 9) return '#b91c1c' - if (n >= 8) return '#dc2626' - if (n >= 7) return '#ef4444' - if (n >= 6) return '#f97316' - if (n >= 5) return '#fb923c' - if (n >= 4) return '#facc15' - if (n >= 3) return '#a3e635' - if (n >= 2) return '#22c55e' - return '#4ade80' -} + if (n >= 10) return '#991b1b'; + if (n >= 9) return '#b91c1c'; + if (n >= 8) return '#dc2626'; + if (n >= 7) return '#ef4444'; + if (n >= 6) return '#f97316'; + if (n >= 5) return '#fb923c'; + if (n >= 4) return '#facc15'; + if (n >= 3) return '#a3e635'; + if (n >= 2) return '#22c55e'; + return '#4ade80'; +}; -export const sensColor: Record = { '최상': 'var(--red)', '상': 'var(--red)', '중': 'var(--orange)', '하': 'var(--green)' } -export const statusColor: Record = { '완료': 'var(--green)', '진행중': 'var(--orange)', '미조사': 'var(--t3)' } -export const esiLevel = (n: number) => n >= 8 ? 'h' : n >= 5 ? 'm' : 'l' +export const sensColor: Record = { + 최상: 'var(--red)', + 상: 'var(--red)', + 중: 'var(--orange)', + 하: 'var(--green)', +}; +export const statusColor: Record = { + 완료: 'var(--green)', + 진행중: 'var(--orange)', + 미조사: 'var(--t3)', +}; +export const esiLevel = (n: number) => (n >= 8 ? 'h' : n >= 5 ? 'm' : 'l'); -// ═══ Mock Data ═══ +// ═══ 제주도 해안선 좌표 (시계방향) ═══ -// --- 서귀포시 (서귀포해양경비안전서 관할) --- -export const sgAreas = [ - { area: '성산읍', code: 'SGSS', cnt: 99, villages: ['시흥리', '오조리', '성산리', '고성리', '온평리', '신산리', '삼달리', '신풍리', '신천리'], jurisdiction: '서귀포' }, - { area: '표선면', code: 'SGPS', cnt: 41, villages: ['하천리', '표선리', '세화리'], jurisdiction: '서귀포' }, - { area: '남원읍', code: 'SGNW', cnt: 73, villages: ['신흥리', '태흥리', '남원리', '위미리', '신례리'], jurisdiction: '서귀포' }, - { area: '하효동·보목동', code: 'SGHY', cnt: 8, villages: ['하효동', '보목동'], jurisdiction: '서귀포' }, - { area: '토평동·동흥동', code: 'SGTP', cnt: 12, villages: ['토평동', '동흥동'], jurisdiction: '서귀포' }, - { area: '서귀동·서홍동', code: 'SGSG', cnt: 20, villages: ['서귀동', '서홍동'], jurisdiction: '서귀포' }, - { area: '호근동·법환동', code: 'SGHG', cnt: 6, villages: ['호근동', '서호동', '법환동'], jurisdiction: '서귀포' }, - { area: '강정동', code: 'SGGJ', cnt: 21, villages: ['강정동'], jurisdiction: '서귀포' }, - { area: '월평동·대포동', code: 'SGWP', cnt: 4, villages: ['월평동', '하원동', '대포동'], jurisdiction: '서귀포' }, - { area: '중문동', code: 'SGJM', cnt: 8, villages: ['중문동'], jurisdiction: '서귀포' }, - { area: '색달동·하예동', code: 'SGSE', cnt: 8, villages: ['색달동', '하예동'], jurisdiction: '서귀포' }, - { area: '안덕면', code: 'SGAD', cnt: 38, villages: ['감산리', '사계리', '덕수리', '창천리', '대평리', '화순리'], jurisdiction: '서귀포' }, - { area: '대정읍', code: 'SGDJ', cnt: 79, villages: ['상모리', '하모리', '영락리', '인성리', '보성리', '무릉리', '신도리'], jurisdiction: '서귀포' }, -] -// --- 제주시 (제주해양경비안전서 관할) --- -export const jjAreas = [ - { area: '한경면', code: 'JJHG', cnt: 81, villages: ['고산리', '금등리', '두모리', '신창리', '용수리', '판포리'], jurisdiction: '제주' }, - { area: '한림읍', code: 'JJHL', cnt: 87, villages: ['귀덕리', '금능리', '수원리', '옹포리', '월령리', '한림리', '한수리', '협재리'], jurisdiction: '제주' }, - { area: '애월읍', code: 'JJAW', cnt: 89, villages: ['고내리', '곽지리', '구엄리', '금성리', '신엄리', '애월리', '하귀1리', '하귀2리'], jurisdiction: '제주' }, - { area: '외도이동', code: 'JJOD', cnt: 19, villages: ['외도이동'], jurisdiction: '제주' }, - { area: '내도동', code: 'JJND', cnt: 7, villages: ['내도동'], jurisdiction: '제주' }, - { area: '이호일동', code: 'JJIH', cnt: 20, villages: ['이호일동'], jurisdiction: '제주' }, - { area: '도두동', code: 'JJDD', cnt: 17, villages: ['도두일동', '도두이동'], jurisdiction: '제주' }, - { area: '용담동', code: 'JJYD', cnt: 19, villages: ['용담삼동', '용담이동', '용담일동'], jurisdiction: '제주' }, - { area: '삼도이동', code: 'JJSD', cnt: 2, villages: ['삼도2동'], jurisdiction: '제주' }, - { area: '건입동', code: 'JJGI', cnt: 26, villages: ['건입동'], jurisdiction: '제주' }, - { area: '화북일동', code: 'JJHB', cnt: 23, villages: ['화북일동'], jurisdiction: '제주' }, - { area: '삼양삼동', code: 'JJYN', cnt: 19, villages: ['삼양삼동', '삼양이동', '삼양일동'], jurisdiction: '제주' }, - { area: '삼양일동', code: 'JJSY', cnt: 24, villages: ['삼양이동', '삼양일동'], jurisdiction: '제주' }, - { area: '조천읍', code: 'JJJC', cnt: 95, villages: ['북촌리', '신촌리', '신흥리', '조천리', '함덕리'], jurisdiction: '제주' }, - { area: '구좌읍', code: 'JJGJ', cnt: 147, villages: ['김녕리', '동복리', '상도리', '월정리', '종달리', '평대리', '하도리', '한동리', '행원리'], jurisdiction: '제주' }, -] -export const scatAreas = [...sgAreas, ...jjAreas] - -export const scatSubstrates = ['투과성 인공호안', '수직호안', '모래', '모래자갈혼합', '자갈·왕자갈', '수평암반', '수직암반'] -export const substrateESI: Record = { - '투과성 인공호안': { esi: '6B', n: 6 }, '수직호안': { esi: '1B', n: 1 }, - '모래': { esi: '3A', n: 3 }, '모래자갈혼합': { esi: '5', n: 5 }, - '자갈·왕자갈': { esi: '6A', n: 6 }, '수평암반': { esi: '8A', n: 8 }, '수직암반': { esi: '1A', n: 1 }, -} -export const scatTagSets = [['🦪 양식장'], ['🏖 해수욕장'], ['⛵ 항구'], ['🪸 산호'], ['🌿 보호구역'], ['🐢 생태보전'], ['🏛 문화재'], ['⛰ 해안절벽'], ['🔧 인공구조물'], ['🌊 올레길']] -const sensFromESI = (n: number): ScatSegment['sensitivity'] => n >= 9 ? '최상' : n >= 7 ? '상' : n >= 5 ? '중' : '하' -const statusArr: ScatSegment['status'][] = ['완료', '완료', '완료', '완료', '진행중', '미조사'] - -// 지역별 좌표 범위 (제주도 전체 해안) -export const areaCoords: Record = { - // 서귀포시 (남부 해안) - SGSS: { latC: 33.39, lngC: 126.89, latR: 0.07, lngR: 0.05 }, - SGPS: { latC: 33.33, lngC: 126.81, latR: 0.03, lngR: 0.04 }, - SGNW: { latC: 33.26, lngC: 126.63, latR: 0.02, lngR: 0.05 }, - SGHY: { latC: 33.245, lngC: 126.59, latR: 0.005, lngR: 0.02 }, - SGTP: { latC: 33.245, lngC: 126.555, latR: 0.005, lngR: 0.015 }, - SGSG: { latC: 33.245, lngC: 126.53, latR: 0.005, lngR: 0.015 }, - SGHG: { latC: 33.245, lngC: 126.50, latR: 0.005, lngR: 0.02 }, - SGGJ: { latC: 33.245, lngC: 126.45, latR: 0.005, lngR: 0.03 }, - SGWP: { latC: 33.245, lngC: 126.40, latR: 0.005, lngR: 0.02 }, - SGJM: { latC: 33.245, lngC: 126.37, latR: 0.005, lngR: 0.015 }, - SGSE: { latC: 33.245, lngC: 126.34, latR: 0.005, lngR: 0.015 }, - SGAD: { latC: 33.24, lngC: 126.29, latR: 0.01, lngR: 0.035 }, - SGDJ: { latC: 33.25, lngC: 126.21, latR: 0.035, lngR: 0.05 }, - // 제주시 (북부 해안) - JJHG: { latC: 33.31, lngC: 126.19, latR: 0.04, lngR: 0.04 }, - JJHL: { latC: 33.39, lngC: 126.26, latR: 0.04, lngR: 0.05 }, - JJAW: { latC: 33.46, lngC: 126.35, latR: 0.04, lngR: 0.06 }, - JJOD: { latC: 33.505, lngC: 126.43, latR: 0.005, lngR: 0.015 }, - JJND: { latC: 33.505, lngC: 126.44, latR: 0.003, lngR: 0.008 }, - JJIH: { latC: 33.50, lngC: 126.46, latR: 0.005, lngR: 0.012 }, - JJDD: { latC: 33.51, lngC: 126.49, latR: 0.005, lngR: 0.012 }, - JJYD: { latC: 33.515, lngC: 126.52, latR: 0.005, lngR: 0.015 }, - JJSD: { latC: 33.515, lngC: 126.525, latR: 0.003, lngR: 0.005 }, - JJGI: { latC: 33.52, lngC: 126.545, latR: 0.005, lngR: 0.015 }, - JJHB: { latC: 33.52, lngC: 126.565, latR: 0.005, lngR: 0.012 }, - JJYN: { latC: 33.52, lngC: 126.585, latR: 0.005, lngR: 0.012 }, - JJSY: { latC: 33.52, lngC: 126.59, latR: 0.005, lngR: 0.012 }, - JJJC: { latC: 33.535, lngC: 126.64, latR: 0.015, lngR: 0.04 }, - JJGJ: { latC: 33.53, lngC: 126.78, latR: 0.03, lngR: 0.10 }, -} - -// 제주도 전체 해안선 좌표 (시계방향: 대정읍→서귀포→성산→조천→구좌→한경) export const jejuCoastCoords: [number, number][] = [ // 서부 (대정읍~한경면) - [33.2800, 126.1600], [33.2600, 126.1800], [33.2400, 126.2000], + [33.28, 126.16], + [33.26, 126.18], + [33.24, 126.2], // 남부 (서귀포시 해안: 대정→안덕→중문→강정→서귀→남원→표선→성산) - [33.2300, 126.2300], [33.2350, 126.2600], [33.2400, 126.2900], [33.2450, 126.3200], - [33.2470, 126.3500], [33.2460, 126.3700], [33.2450, 126.4000], [33.2440, 126.4300], - [33.2430, 126.4600], [33.2420, 126.4900], [33.2410, 126.5100], [33.2400, 126.5300], - [33.2400, 126.5500], [33.2410, 126.5700], [33.2430, 126.5900], [33.2450, 126.6200], - [33.2500, 126.6600], [33.2600, 126.7000], [33.2800, 126.7400], [33.3100, 126.7800], - [33.3300, 126.8200], [33.3600, 126.8400], [33.3900, 126.8600], [33.4200, 126.8800], - [33.4400, 126.9000], [33.4530, 126.9100], [33.4580, 126.9200], [33.4610, 126.9310], + [33.23, 126.23], + [33.235, 126.26], + [33.24, 126.29], + [33.245, 126.32], + [33.247, 126.35], + [33.246, 126.37], + [33.245, 126.4], + [33.244, 126.43], + [33.243, 126.46], + [33.242, 126.49], + [33.241, 126.51], + [33.24, 126.53], + [33.24, 126.55], + [33.241, 126.57], + [33.243, 126.59], + [33.245, 126.62], + [33.25, 126.66], + [33.26, 126.7], + [33.28, 126.74], + [33.31, 126.78], + [33.33, 126.82], + [33.36, 126.84], + [33.39, 126.86], + [33.42, 126.88], + [33.44, 126.9], + [33.453, 126.91], + [33.458, 126.92], + [33.461, 126.931], // 동부 (성산~구좌) - [33.4700, 126.9200], [33.4900, 126.9100], [33.5100, 126.8700], - [33.5200, 126.8500], [33.5350, 126.8200], [33.5450, 126.7900], + [33.47, 126.92], + [33.49, 126.91], + [33.51, 126.87], + [33.52, 126.85], + [33.535, 126.82], + [33.545, 126.79], // 북부 (제주시 해안: 구좌→조천→건입→이호→애월→한림→한경) - [33.5500, 126.7600], [33.5500, 126.7300], [33.5450, 126.7000], - [33.5400, 126.6800], [33.5350, 126.6600], [33.5300, 126.6400], [33.5250, 126.6200], - [33.5200, 126.6000], [33.5200, 126.5800], [33.5200, 126.5600], [33.5180, 126.5400], - [33.5160, 126.5200], [33.5140, 126.5000], [33.5120, 126.4800], [33.5100, 126.4600], - [33.5050, 126.4400], [33.5000, 126.4200], [33.4950, 126.4000], [33.4850, 126.3800], - [33.4700, 126.3500], [33.4550, 126.3300], [33.4400, 126.3100], [33.4200, 126.2900], - [33.4000, 126.2700], [33.3800, 126.2500], [33.3600, 126.2350], [33.3400, 126.2200], - [33.3200, 126.2050], [33.3100, 126.1900], [33.3000, 126.1750], [33.2930, 126.1620], -] - -function seededRandom(seed: number) { - const x = Math.sin(seed) * 10000 - return x - Math.floor(x) -} - -const generateSegments = (): ScatSegment[] => { - const segs: ScatSegment[] = [] - let idx = 0 - scatAreas.forEach(a => { - const ac = areaCoords[a.code] - for (let i = 0; i < a.cnt; i++) { - const seed = idx * 137 + 42 - const village = a.villages[Math.floor(seededRandom(seed) * a.villages.length)] - const substrate = scatSubstrates[Math.floor(seededRandom(seed + 1) * scatSubstrates.length)] - const { esi: esiStr, n: esiNum } = substrateESI[substrate] - const lengthM = Math.floor(seededRandom(seed + 3) * 900) + 100 - // 지역 좌표 범위 내 분포 - const progress = a.cnt > 1 ? i / (a.cnt - 1) : 0.5 - const lat = ac.latC + (progress - 0.5) * ac.latR * 2 + (seededRandom(seed + 6) - 0.5) * 0.003 - const lng = ac.lngC + (progress - 0.5) * ac.lngR * 2 + (seededRandom(seed + 7) - 0.5) * 0.003 - segs.push({ - id: idx, - code: `${a.code}-${i + 1}`, - area: a.area, - name: `${village} 해안`, - type: substrate, - esi: esiStr, - esiNum, - length: `${lengthM.toLocaleString()}.0 m`, - lengthM, - sensitivity: sensFromESI(esiNum), - status: statusArr[Math.floor(seededRandom(seed + 5) * statusArr.length)], - lat, lng, - tags: scatTagSets[Math.floor(seededRandom(seed + 8) * scatTagSets.length)], - jurisdiction: a.jurisdiction, - }) - idx++ - } - }) - return segs -} - -export const allSegments = generateSegments() - -export const scatDetailData: ScatDetail[] = [ - // ═══ 서귀포시 (남부 해안) ═══ - // SGSS-1: 성산읍 시흥리 — 투과성 인공호안 - { - code: 'SGSS-1', name: '서귀포시 성산읍 시흥리', esi: '6B', esiColor: '#f97316', lat: 33.4610, lng: 126.9310, - type: '폐쇄형', substrate: '투과성 인공호안', length: '846.4m', sensitivity: '중', status: '완료', - access: '차량으로 접근 가능, 해안 뒤편에서 접근', accessPt: '서귀포시 성산읍 시흥리 1270-1, 12-64', - sensitive: [{ t: '사회·경제적', v: '올레길1코스, 파래양식장' }, { t: '생물자원', v: '없음' }], - cleanup: ['수작업에 의한 제거', '저압/고압세척', '고온수 저압/고압세척', '스팀세척'], - endCriteria: ['유류 쓰레기가 없어야 함', '표면 접촉 시 기름이 묻어나지 않아야 함', '표면 coat/stain 두께 유류 10% 미만', '민감자원에 영향을 줄 수 있는 유막이 발생하지 않아야 함'], - notes: ['유출유는 블록의 거친 표면에 쉽게 표착되고 블록 사이로 깊게 침투할 가능성이 높음', '신선유 또는 액상일 때 고압세척 방제활동이 효과적', '중유·풍화 기름은 수작업으로 긁어내거나 고온수 고압세척 이용'], - }, - // SGSS-6: 성산읍 시흥리 — 모래 - { - code: 'SGSS-6', name: '서귀포시 성산읍 시흥리', esi: '3A', esiColor: '#a3e635', lat: 33.4580, lng: 126.9200, - type: '폐쇄형', substrate: '모래', length: '131.3m', sensitivity: '하', status: '완료', - access: '차량으로 접근 가능, 해안 뒤편에서 접근', accessPt: '서귀포시 성산읍 시흥리 1', - sensitive: [{ t: '사회·경제적', v: '숙박시설, 조가비박물관' }, { t: '생물자원', v: '없음' }], - cleanup: ['수작업에 의한 제거', '흡착재를 이용한 회수/수거'], - endCriteria: ['유류 쓰레기가 없어야 함', '표면 접촉 시 기름이 묻어나지 않아야 함', '표면 coat/stain 두께 유류 10% 미만', '타르볼 100m당 1개 미만'], - notes: ['유출유는 해빈 전체에 표착될 가능성이 높음', '하부 지역 유출유가 창조시에 상부로 이동 가능', '포말대(upper swash zone)의 유류제거에 집중'], - }, - // SGSS-10: 성산읍 오조리 — 수평암반 - { - code: 'SGSS-10', name: '서귀포시 성산읍 오조리', esi: '8A', esiColor: '#dc2626', lat: 33.4500, lng: 126.9050, - type: '개방형', substrate: '수평암반', length: '433.6m', sensitivity: '상', status: '완료', - access: '도보로 접근 가능, 인근구획에서 접근', accessPt: '서귀포시 성산읍 오조리 391', - sensitive: [{ t: '사회·경제적', v: '교육시설(성산고등학교)' }, { t: '생물자원', v: '없음' }], - cleanup: ['수작업에 의한 제거', '흡착재를 이용한 회수/수거', '저압/고압세척'], - endCriteria: ['유류 쓰레기가 없어야 함', '표면 접촉 시 기름이 묻어나지 않아야 함', '표면 coat/stain 두께 유류 30% 미만', '민감자원에 영향을 줄 수 있는 유막이 발생하지 않아야 함'], - notes: ['유출유는 물기 있는 암반 표면에는 표착되지 않고 틈새와 퇴적층을 침투', '고조 시 접근 가능한 해안은 수작업으로 고농도 유출유 제거 용이'], - }, - // SGPS-6: 표선면 표선리 — 모래 (표선해수욕장) - { - code: 'SGPS-6', name: '서귀포시 표선면 표선리', esi: '3A', esiColor: '#a3e635', lat: 33.3270, lng: 126.8320, - type: '폐쇄형', substrate: '모래', length: '827.9m', sensitivity: '하', status: '완료', - access: '차량으로 접근 가능, 해안 뒤편에서 접근', accessPt: '서귀포시 표선면 표선리 464-1', - sensitive: [{ t: '사회·경제적', v: '표선해수욕장, 올레길3코스, 숙박시설, 민가' }, { t: '생물자원', v: '없음' }], - cleanup: ['수작업에 의한 제거', '흡착재를 이용한 회수/수거'], - endCriteria: ['유류 쓰레기가 없어야 함', '표면 접촉 시 기름이 묻어나지 않아야 함', '표면 coat/stain 두께 유류 10% 미만', '타르볼 100m당 1개 미만'], - notes: ['유출유는 해빈 전체에 표착될 가능성이 높음', '하부 지역 유출유가 창조시에 상부로 이동 가능', '포말대의 유류제거에 집중'], - }, - // SGNW-5: 남원읍 태흥리 — 수평암반 - { - code: 'SGNW-5', name: '서귀포시 남원읍 태흥리', esi: '8A', esiColor: '#dc2626', lat: 33.2510, lng: 126.6650, - type: '개방형', substrate: '수평암반', length: '432.8m', sensitivity: '상', status: '완료', - access: '차량으로 접근 가능, 해안 뒤편에서 접근', accessPt: '서귀포시 남원읍 태흥리 7', - sensitive: [{ t: '사회·경제적', v: '육상양식장' }, { t: '생물자원', v: '없음' }], - cleanup: ['수작업에 의한 제거', '흡착재를 이용한 회수/수거', '저압/고압세척'], - endCriteria: ['유류 쓰레기가 없어야 함', '표면 접촉 시 기름이 묻어나지 않아야 함', '표면 coat/stain 두께 유류 30% 미만', '민감자원에 영향을 줄 수 있는 유막이 발생하지 않아야 함'], - notes: ['유출유는 물기 있는 암반 표면에는 표착되지 않고 틈새와 퇴적층을 침투', '고조 시 접근 가능한 해안은 수작업으로 고농도 유출유 제거 용이'], - }, - // SGNW-12: 남원읍 태흥리 — 모래자갈혼합 - { - code: 'SGNW-12', name: '서귀포시 남원읍 태흥리', esi: '5', esiColor: '#fb923c', lat: 33.2480, lng: 126.6400, - type: '폐쇄형', substrate: '모래자갈혼합', length: '237.3m', sensitivity: '중', status: '진행중', - access: '차량으로 접근 가능, 해안 뒤편에서 접근', accessPt: '서귀포시 남원읍 태흥리 364-2', - sensitive: [{ t: '사회·경제적', v: '올레길4코스, 민가' }, { t: '생물자원', v: '없음' }], - cleanup: ['수작업에 의한 제거', '흡착재를 이용한 회수/수거', '저압세척', '범람(저수세정, Flooding)'], - endCriteria: ['유류 쓰레기가 없어야 함', '표면 접촉 시 기름이 묻어나지 않아야 함', '표면 coat/stain 두께 유류 10% 미만', '타르볼 100m당 1개 미만'], - notes: ['유출유는 해빈 전체에 표착될 가능성이 높음', '하부 지역 유출유가 창조시에 상부로 이동 가능'], - }, - // SGTP-5: 서귀동 — 투과성 인공호안 (서귀포항) - { - code: 'SGTP-5', name: '서귀포시 서귀동', esi: '6B', esiColor: '#f97316', lat: 33.2400, lng: 126.5550, - type: '개방형', substrate: '투과성 인공호안', length: '701.6m', sensitivity: '중', status: '완료', - access: '차량으로 접근 가능, 해안 뒤편에서 접근', accessPt: '서귀포시 서귀동 758-5', - sensitive: [{ t: '사회·경제적', v: '서귀포항' }, { t: '생물자원', v: '없음' }], - cleanup: ['수작업에 의한 제거', '저압/고압세척', '고온수 저압/고압세척', '스팀세척'], - endCriteria: ['유류 쓰레기가 없어야 함', '표면 접촉 시 기름이 묻어나지 않아야 함', '표면 coat/stain 두께 유류 10% 미만', '민감자원에 영향을 줄 수 있는 유막이 발생하지 않아야 함'], - notes: ['유출유는 블록의 거친 표면에 쉽게 표착되고 블록 사이로 깊게 침투할 가능성이 높음', '신선유 또는 액상일 때 고압세척 방제활동이 효과적', '중유·풍화 기름은 수작업으로 긁어내거나 고온수 고압세척 이용'], - }, - // SGGJ-5: 강정동 — 수직호안 - { - code: 'SGGJ-5', name: '서귀포시 강정동', esi: '1B', esiColor: '#4ade80', lat: 33.2430, lng: 126.4500, - type: '폐쇄형', substrate: '수직호안', length: '380.0m', sensitivity: '하', status: '완료', - access: '차량으로 접근 가능, 해안 뒤편에서 접근', accessPt: '서귀포시 강정동 산1', - sensitive: [{ t: '사회·경제적', v: '강정항' }, { t: '생물자원', v: '없음' }], - cleanup: ['수작업에 의한 제거', '저압/고압세척', '고온수 저압/고압세척', '스팀세척'], - endCriteria: ['유류 쓰레기가 없어야 함', '표면 접촉 시 기름이 묻어나지 않아야 함', '표면 coat/stain 두께 유류 10% 미만', '민감자원에 영향을 줄 수 있는 유막이 발생하지 않아야 함'], - notes: ['유출유는 블록의 거친 표면에 쉽게 표착되고 블록 사이로 깊게 침투할 가능성이 높음', '신선유 또는 액상일 때 고압세척 방제활동이 효과적'], - }, - // SGAD-5: 안덕면 감산리 — 수직호안 (대평항) - { - code: 'SGAD-5', name: '서귀포시 안덕면 감산리', esi: '1B', esiColor: '#4ade80', lat: 33.2400, lng: 126.2950, - type: '폐쇄형', substrate: '수직호안', length: '246.9m', sensitivity: '하', status: '완료', - access: '차량으로 접근 가능, 해안 뒤편에서 접근', accessPt: '서귀포시 안덕면 감산리 982-1', - sensitive: [{ t: '사회·경제적', v: '대평항' }, { t: '생물자원', v: '없음' }], - cleanup: ['수작업에 의한 제거', '저압/고압세척', '고온수 저압/고압세척', '스팀세척'], - endCriteria: ['유류 쓰레기가 없어야 함', '표면 접촉 시 기름이 묻어나지 않아야 함', '표면 coat/stain 두께 유류 10% 미만', '민감자원에 영향을 줄 수 있는 유막이 발생하지 않아야 함'], - notes: ['유출유는 블록의 거친 표면에 쉽게 표착되고 블록 사이로 깊게 침투할 가능성이 높음', '신선유 또는 액상일 때 고압세척 방제활동이 효과적', '중유·풍화 기름은 수작업으로 긁어내거나 고온수 고압세척 이용'], - }, - // SGAD-7: 안덕면 감산리 — 자갈·왕자갈 - { - code: 'SGAD-7', name: '서귀포시 안덕면 감산리', esi: '6A', esiColor: '#f97316', lat: 33.2380, lng: 126.2850, - type: '폐쇄형', substrate: '자갈·왕자갈', length: '154.2m', sensitivity: '중', status: '진행중', - access: '차량으로 접근 가능, 해안 뒤편에서 접근', accessPt: '서귀포시 안덕면 감산리 985', - sensitive: [{ t: '사회·경제적', v: '올레길8코스(해안로), 민가' }, { t: '생물자원', v: '없음' }], - cleanup: ['수작업에 의한 제거', '흡착재를 이용한 회수/수거', '저압세척', '범람(저수세정, Flooding)', '자갈세척'], - endCriteria: ['유류 쓰레기가 없어야 함', '표면 접촉 시 기름이 묻어나지 않아야 함', '표면 coat/stain 두께 유류 10% 미만', '타르볼 100m당 1개 미만'], - notes: ['파도가 덮치는 지점 상부에 고인기름은 신속히 제거', '저압세척은 퇴적물로부터 표착유를 재부유시키며, 부유기름은 흡착재로 회수'], - }, - // SGDJ-5: 대정읍 상모리 — 수직호안 (산이수동항) - { - code: 'SGDJ-5', name: '서귀포시 대정읍 상모리', esi: '1B', esiColor: '#4ade80', lat: 33.2300, lng: 126.2350, - type: '개방형', substrate: '수직호안', length: '202.0m', sensitivity: '하', status: '완료', - access: '차량으로 접근 가능, 해안 뒤편에서 접근', accessPt: '서귀포시 대정읍 상모리 133', - sensitive: [{ t: '사회·경제적', v: '산이수동항' }, { t: '생물자원', v: '마라해안군립공원' }], - cleanup: ['수작업에 의한 제거', '저압/고압세척', '고온수 저압/고압세척', '스팀세척'], - endCriteria: ['유류 쓰레기가 없어야 함', '표면 접촉 시 기름이 묻어나지 않아야 함', '표면 coat/stain 두께 유류 10% 미만', '민감자원에 영향을 줄 수 있는 유막이 발생하지 않아야 함'], - notes: ['유출유는 블록의 거친 표면에 쉽게 표착되고 블록 사이로 깊게 침투할 가능성이 높음', '신선유 또는 액상일 때 고압세척 방제활동이 효과적', '중유·풍화 기름은 수작업으로 긁어내거나 고온수 고압세척 이용'], - }, - // SGDJ-7: 대정읍 상모리 — 모래 (송악산) - { - code: 'SGDJ-7', name: '서귀포시 대정읍 상모리', esi: '3A', esiColor: '#a3e635', lat: 33.2280, lng: 126.2280, - type: '개방형', substrate: '모래', length: '179.6m', sensitivity: '하', status: '미조사', - access: '도보로 접근 가능', accessPt: '서귀포시 대정읍 상모리 179-3', - sensitive: [{ t: '사회·경제적', v: '송악산' }, { t: '생물자원', v: '마라해안군립공원' }], - cleanup: ['수작업에 의한 제거', '흡착재를 이용한 회수/수거', '퇴적물 갈기/파도세척'], - endCriteria: ['유류 쓰레기가 없어야 함', '표면 접촉 시 기름이 묻어나지 않아야 함', '표면 coat/stain 두께 유류 10% 미만', '타르볼 100m당 1개 미만'], - notes: ['유출유는 해빈 전체에 표착될 가능성이 높음', '하부 지역 유출유가 창조시에 상부로 이동 가능', '포말대의 유류제거에 집중'], - }, - // SGDJ-8: 대정읍 상모리 — 수직암반 (송악산) - { - code: 'SGDJ-8', name: '서귀포시 대정읍 상모리', esi: '1A', esiColor: '#4ade80', lat: 33.2260, lng: 126.2200, - type: '개방형', substrate: '수직암반', length: '585.1m', sensitivity: '하', status: '완료', - access: '선박을 이용하여 접근', accessPt: '서귀포시 대정읍 상모리 179-3', - sensitive: [{ t: '사회·경제적', v: '송악산' }, { t: '생물자원', v: '마라해안군립공원' }], - cleanup: ['수작업에 의한 제거', '흡착재를 이용한 회수/수거', '저압/고압세척'], - endCriteria: ['유류 쓰레기가 없어야 함', '표면 접촉 시 기름이 묻어나지 않아야 함', '표면 coat/stain 두께 유류 20% 미만', '민감자원에 영향을 줄 수 있는 유막이 발생하지 않아야 함'], - notes: ['유출유는 물기 있는 암반 표면에는 표착되지 않고 틈새와 퇴적층을 침투', '고조 시 접근 가능한 해안은 수작업으로 고농도 유출유 제거 용이'], - }, - // ═══ 제주시 (북부 해안) ═══ - // JJHG-1: 한경면 고산리 — 수평암반 - { - code: 'JJHG-1', name: '제주시 한경면 고산리', esi: '8A', esiColor: '#dc2626', lat: 33.2930, lng: 126.1620, - type: '개방형', substrate: '수평암반', length: '306.0m', sensitivity: '상', status: '완료', - access: '차량으로 접근 가능, 해안 뒤편에서 접근', accessPt: '제주시 한경면 고산리 3987', - sensitive: [{ t: '사회·경제적', v: '육상양식장(도로 주변 농사구역)' }, { t: '생물자원', v: '없음' }], - cleanup: ['수작업에 의한 제거', '흡착재를 이용한 회수/수거', '저압/고압세척'], - endCriteria: ['유류 쓰레기가 없어야 함', '표면 접촉 시 기름이 묻어나지 않아야 함', '표면 coat/stain 두께 유류 30% 미만', '민감자원에 영향을 줄 수 있는 유막이 발생하지 않아야 함'], - notes: ['유출유는 물기 있는 암반 표면에는 표착되지 않고 틈새와 퇴적층을 침투', '고조 시 접근 가능한 해안은 수작업으로 고농도 유출유 제거 용이', '부분적으로 모래와 암반이 형성되어 있음'], - }, - // JJHG-8: 한경면 고산리 — 투과성 인공호안 (차귀도항) - { - code: 'JJHG-8', name: '제주시 한경면 고산리', esi: '6B', esiColor: '#f97316', lat: 33.3100, lng: 126.1750, - type: '개방형', substrate: '투과성 인공호안', length: '201.8m', sensitivity: '중', status: '완료', - access: '차량으로 접근 가능, 소형선박 이용 방제작업 가능', accessPt: '제주시 한경면 고산리 3616-10', - sensitive: [{ t: '사회·경제적', v: '차귀도항, 잠수함 매표소' }, { t: '생물자원', v: '없음' }], - cleanup: ['수작업(흡착제,걸레)에 의한 제거', '저압/고압세척', '고온수 저압/고압세척', '스팀세척'], - endCriteria: ['유류 쓰레기가 없어야 함', '표면 접촉 시 기름이 묻어나지 않아야 함', '표면 coat/stain 두께 유류 10% 미만', '민감자원에 영향을 줄 수 있는 유막이 발생하지 않아야 함'], - notes: ['유출유는 블록의 거친 표면에 쉽게 표착되고 블록 사이로 깊게 침투할 가능성이 높음', '신선유 또는 액상일 때 고압세척 방제활동이 효과적', '중유·풍화 기름은 수작업으로 긁어내거나 고온수 고압세척 이용'], - }, - // JJHL-4: 한림읍 월령리 — 모래 - { - code: 'JJHL-4', name: '제주시 한림읍 월령리', esi: '3A', esiColor: '#a3e635', lat: 33.3900, lng: 126.2400, - type: '폐쇄형', substrate: '모래', length: '100.2m', sensitivity: '하', status: '완료', - access: '차량으로 접근 가능, 해안 뒤편에서 접근', accessPt: '제주시 한림읍 월령리 3855', - sensitive: [{ t: '사회·경제적', v: '월령항, 숙박시설' }, { t: '생물자원', v: '없음' }], - cleanup: ['수작업에 의한 제거', '흡착재를 이용한 회수/수거'], - endCriteria: ['유류 쓰레기가 없어야 함', '표면 접촉 시 기름이 묻어나지 않아야 함', '표면 coat/stain 두께 유류 10% 미만', '타르볼 100m당 1개 미만'], - notes: ['유출유는 해빈 전체에 표착될 가능성이 높음', '하부 지역 유출유가 창조시에 상부로 이동 가능', '포말대(upper swash zone)의 유류제거에 집중'], - }, - // JJAW-8: 애월읍 곽지리 — 모래 (곽지해수욕장) - { - code: 'JJAW-8', name: '제주시 애월읍 곽지리', esi: '3A', esiColor: '#a3e635', lat: 33.4700, lng: 126.3400, - type: '개방형', substrate: '모래', length: '573.6m', sensitivity: '하', status: '완료', - access: '차량으로 접근 가능, 해안 뒤편에서 접근', accessPt: '제주시 애월읍 곽지리 3855', - sensitive: [{ t: '사회·경제적', v: '곽지해수욕장, 캠핑장' }, { t: '생물자원', v: '없음' }], - cleanup: ['수작업에 의한 제거', '흡착재를 이용한 회수/수거', '퇴적물 갈기/파도세척'], - endCriteria: ['유류 쓰레기가 없어야 함', '표면 접촉 시 기름이 묻어나지 않아야 함', '표면 coat/stain 두께 유류 10% 미만', '타르볼 100m당 1개 미만'], - notes: ['유출유는 해빈 전체에 표착될 가능성이 높음', '하부 지역 유출유가 창조시에 상부로 이동 가능', '포말대의 유류제거에 집중'], - }, - // JJGI-3: 건입동 — 수직호안 (제주항) - { - code: 'JJGI-3', name: '제주시 건입동', esi: '1B', esiColor: '#4ade80', lat: 33.5200, lng: 126.5450, - type: '폐쇄형', substrate: '수직호안', length: '365.8m', sensitivity: '하', status: '완료', - access: '차량으로 접근 가능, 해안 뒤편에서 접근', accessPt: '제주시 건입동 3855', - sensitive: [{ t: '사회·경제적', v: '제주항, 제주조선' }, { t: '생물자원', v: '없음' }], - cleanup: ['수작업에 의한 제거', '저압/고압세척', '고온수 저압/고압세척', '스팀세척'], - endCriteria: ['유류 쓰레기가 없어야 함', '표면 접촉 시 기름이 묻어나지 않아야 함', '표면 coat/stain 두께 유류 10% 미만', '민감자원에 영향을 줄 수 있는 유막이 발생하지 않아야 함'], - notes: ['유출유는 호안의 거친 표면에 쉽게 표착될 가능성이 높음', '신선유 또는 액상일 때 고압세척 방제활동이 효과적', '중유·풍화 기름은 수작업으로 긁어내거나 고온수 고압세척 이용'], - }, - // JJJC-4: 조천읍 신촌리 — 자갈·왕자갈 - { - code: 'JJJC-4', name: '제주시 조천읍 신촌리', esi: '6A', esiColor: '#f97316', lat: 33.5380, lng: 126.6400, - type: '폐쇄형', substrate: '자갈·왕자갈', length: '360.4m', sensitivity: '중', status: '진행중', - access: '차량으로 접근 가능, 해안 뒤편에서 접근', accessPt: '제주시 조천읍 신촌리 3855', - sensitive: [{ t: '사회·경제적', v: '정치망어장(전면 270m)' }, { t: '생물자원', v: '폐류 서식지' }], - cleanup: ['수작업에 의한 제거', '흡착재를 이용한 회수/수거', '저압세척', '범람(저수세정, Flooding)', '자갈세척'], - endCriteria: ['유류 쓰레기가 없어야 함', '표면 접촉 시 기름이 묻어나지 않아야 함', '표면 coat/stain 두께 유류 10% 미만', '타르볼 100m당 1개 미만'], - notes: ['파도가 덮치는 지점 상부에 고인기름은 신속히 제거', '저압세척은 퇴적물로부터 표착유를 재부유시키며, 부유기름은 흡착재로 회수'], - }, - // JJGJ-2: 구좌읍 동복리 — 투과성 인공호안 - { - code: 'JJGJ-2', name: '제주시 구좌읍 동복리', esi: '6B', esiColor: '#f97316', lat: 33.5500, lng: 126.7300, - type: '폐쇄형', substrate: '투과성 인공호안', length: '219.2m', sensitivity: '중', status: '완료', - access: '차량으로 접근 가능, 해안 뒤편에서 접근', accessPt: '제주시 구좌읍 동복리 3855', - sensitive: [{ t: '사회·경제적', v: '접안시설' }, { t: '생물자원', v: '없음' }], - cleanup: ['수작업에 의한 제거', '저압/고압세척', '고온수 저압/고압세척', '스팀세척'], - endCriteria: ['유류 쓰레기가 없어야 함', '표면 접촉 시 기름이 묻어나지 않아야 함', '표면 coat/stain 두께 유류 20% 미만', '민감자원에 영향을 줄 수 있는 유막이 발생하지 않아야 함'], - notes: ['유출유는 블록의 거친 표면에 쉽게 표착되고 블록 사이로 깊게 침투할 가능성이 높음', '신선유 또는 액상일 때 고압세척 방제활동이 효과적', '중유·풍화 기름은 수작업으로 긁어내거나 고온수 고압세척 이용'], - }, - // JJGJ-3: 구좌읍 동복리 — 수평암반 - { - code: 'JJGJ-3', name: '제주시 구좌읍 동복리', esi: '8A', esiColor: '#dc2626', lat: 33.5480, lng: 126.7350, - type: '개방형', substrate: '수평암반', length: '197.4m', sensitivity: '상', status: '미조사', - access: '차량으로 접근 가능, 해안 뒤편에서 접근', accessPt: '제주시 구좌읍 동복리 3855', - sensitive: [{ t: '사회·경제적', v: '산책로, 민가' }, { t: '생물자원', v: '없음' }], - cleanup: ['수작업에 의한 제거', '흡착재를 이용한 회수/수거', '저압/고압세척'], - endCriteria: ['유류 쓰레기가 없어야 함', '표면 접촉 시 기름이 묻어나지 않아야 함', '표면 coat/stain 두께 유류 20% 미만', '민감자원에 영향을 줄 수 있는 유막이 발생하지 않아야 함'], - notes: ['유출유는 물기 있는 암반 표면에는 표착되지 않고 틈새와 퇴적층을 침투', '고조 시 접근 가능한 해안은 수작업으로 고농도 유출유 제거 용이'], - }, -] + [33.55, 126.76], + [33.55, 126.73], + [33.545, 126.7], + [33.54, 126.68], + [33.535, 126.66], + [33.53, 126.64], + [33.525, 126.62], + [33.52, 126.6], + [33.52, 126.58], + [33.52, 126.56], + [33.518, 126.54], + [33.516, 126.52], + [33.514, 126.5], + [33.512, 126.48], + [33.51, 126.46], + [33.505, 126.44], + [33.5, 126.42], + [33.495, 126.4], + [33.485, 126.38], + [33.47, 126.35], + [33.455, 126.33], + [33.44, 126.31], + [33.42, 126.29], + [33.4, 126.27], + [33.38, 126.25], + [33.36, 126.235], + [33.34, 126.22], + [33.32, 126.205], + [33.31, 126.19], + [33.3, 126.175], + [33.293, 126.162], +]; diff --git a/frontend/src/tabs/scat/services/scatApi.ts b/frontend/src/tabs/scat/services/scatApi.ts new file mode 100644 index 0000000..00f17c8 --- /dev/null +++ b/frontend/src/tabs/scat/services/scatApi.ts @@ -0,0 +1,135 @@ +import { api } from '@common/services/api'; +import type { ScatSegment, ScatDetail } from '../components/scatTypes'; +import { esiColor } from '../components/scatConstants'; + +// ============================================================ +// 백엔드 API 응답 타입 +// ============================================================ + +export interface ApiZoneItem { + cstSrvyZoneSn: number; + zoneCd: string; + zoneNm: string; + jrsdNm: string; + sectCnt: number; + latCenter: number; + lngCenter: number; + latRange: number; + lngRange: number; +} + +export interface ApiSectionListItem { + cstSectSn: number; + sectCd: string; + sectNm: string; + cstTpCd: string; + esiCd: string; + esiNum: number; + lenM: number; + snstvtCd: string; + srvySttsCd: string; + lat: number; + lng: number; + tags: string[]; + zoneCd: string; + zoneNm: string; + jrsdNm: string; +} + +export interface ApiSectionDetail extends ApiSectionListItem { + geomJson: Record | null; + shoreTp: string | null; + accessDc: string | null; + accessPt: string | null; + sensitiveInfo: { t: string; v: string }[]; + cleanupMethods: string[]; + endCriteria: string[]; + notes: string[]; +} + +// ============================================================ +// 프론트 호환 변환 함수 +// ============================================================ + +const sensFromESI = (n: number): ScatSegment['sensitivity'] => + n >= 9 ? '최상' : n >= 7 ? '상' : n >= 5 ? '중' : '하'; + +function toScatSegment(item: ApiSectionListItem): ScatSegment { + const lengthM = Number(item.lenM) || 0; + return { + id: item.cstSectSn, + code: item.sectCd, + area: item.zoneNm, + name: item.sectNm, + type: item.cstTpCd, + esi: item.esiCd, + esiNum: item.esiNum, + length: `${lengthM.toLocaleString()}.0 m`, + lengthM, + sensitivity: (item.snstvtCd as ScatSegment['sensitivity']) || sensFromESI(item.esiNum), + status: (item.srvySttsCd as ScatSegment['status']) || '미조사', + lat: item.lat, + lng: item.lng, + tags: item.tags ?? [], + jurisdiction: item.jrsdNm, + }; +} + +function toScatDetail(item: ApiSectionDetail): ScatDetail { + const lengthM = Number(item.lenM) || 0; + return { + code: item.sectCd, + name: item.sectNm, + esi: item.esiCd, + esiColor: esiColor(item.esiNum), + lat: item.lat, + lng: item.lng, + type: item.shoreTp ?? item.cstTpCd, + substrate: item.cstTpCd, + length: `${lengthM.toLocaleString()}.0 m`, + sensitivity: item.snstvtCd, + status: item.srvySttsCd, + access: item.accessDc ?? '', + accessPt: item.accessPt ?? '', + sensitive: item.sensitiveInfo ?? [], + cleanup: item.cleanupMethods ?? [], + endCriteria: item.endCriteria ?? [], + notes: item.notes ?? [], + }; +} + +// ============================================================ +// API 호출 함수 +// ============================================================ + +export async function fetchZones(): Promise { + const { data } = await api.get('/scat/zones'); + return data; +} + +export interface SectionFilters { + zone?: string; + status?: string; + sensitivity?: string; + jurisdiction?: string; + search?: string; +} + +export async function fetchSections(filters?: SectionFilters): Promise { + const params = new URLSearchParams(); + if (filters?.zone) params.set('zone', filters.zone); + if (filters?.status) params.set('status', filters.status); + if (filters?.sensitivity) params.set('sensitivity', filters.sensitivity); + if (filters?.jurisdiction) params.set('jurisdiction', filters.jurisdiction); + if (filters?.search) params.set('search', filters.search); + + const query = params.toString(); + const url = query ? `/scat/sections?${query}` : '/scat/sections'; + const { data } = await api.get(url); + return data.map(toScatSegment); +} + +export async function fetchSectionDetail(sn: number): Promise { + const { data } = await api.get(`/scat/sections/${sn}`); + return toScatDetail(data); +}