{"id":186,"date":"2026-07-06T17:54:20","date_gmt":"2026-07-06T09:54:20","guid":{"rendered":"https:\/\/m.meeting2026.cn\/?page_id=186"},"modified":"2026-08-07T22:54:21","modified_gmt":"2026-08-07T14:54:21","slug":"%e4%bc%9a%e5%9c%ba%e4%ba%a4%e9%80%9a-%e4%b8%ad%e5%8d%8e%e9%a2%84%e9%98%b2%e5%8c%bb%e5%ad%a6%e4%bc%9a%e7%8e%af%e5%a2%83%e5%8d%ab%e7%94%9f%e5%88%86%e4%bc%9a-2026%e5%b9%b4%e5%ad%a6%e6%9c%af%e4%bc%9a","status":"publish","type":"page","link":"https:\/\/m.meeting2026.cn\/?page_id=186","title":{"rendered":"\u4f1a\u573a\u4ea4\u901a-\u4e2d\u534e\u9884\u9632\u533b\u5b66\u4f1a\u73af\u5883\u536b\u751f\u5206\u4f1a  2026\u5e74\u5b66\u672f\u4f1a\u8bae"},"content":{"rendered":"<style>.kb-row-layout-id186_6b8e23-4e > .kt-row-column-wrap{align-content:start;}:where(.kb-row-layout-id186_6b8e23-4e > .kt-row-column-wrap) > .wp-block-kadence-column{justify-content:start;}.kb-row-layout-id186_6b8e23-4e > .kt-row-column-wrap{column-gap:var(--global-kb-gap-md, 2rem);row-gap:var(--global-kb-gap-md, 2rem);grid-template-columns:minmax(0, 1fr);}.kb-row-layout-id186_6b8e23-4e > .kt-row-layout-overlay{opacity:0.30;}@media all and (max-width: 1024px){.kb-row-layout-id186_6b8e23-4e > .kt-row-column-wrap{grid-template-columns:minmax(0, 1fr);}}@media all and (max-width: 767px){.kb-row-layout-id186_6b8e23-4e > .kt-row-column-wrap{grid-template-columns:minmax(0, 1fr);}}<\/style><div class=\"kb-row-layout-wrap kb-row-layout-id186_6b8e23-4e alignnone wp-block-kadence-rowlayout\"><div class=\"kt-row-column-wrap kt-has-1-columns kt-row-layout-equal kt-tab-layout-inherit kt-mobile-layout-row kt-row-valign-top\">\n<style>.kadence-column186_6557b4-02 > .kt-inside-inner-col,.kadence-column186_6557b4-02 > .kt-inside-inner-col:before{border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-right-radius:0px;border-bottom-left-radius:0px;}.kadence-column186_6557b4-02 > .kt-inside-inner-col{column-gap:var(--global-kb-gap-sm, 1rem);}.kadence-column186_6557b4-02 > .kt-inside-inner-col{flex-direction:column;}.kadence-column186_6557b4-02 > .kt-inside-inner-col > .aligncenter{width:100%;}.kadence-column186_6557b4-02 > .kt-inside-inner-col:before{opacity:0.3;}.kadence-column186_6557b4-02{position:relative;}@media all and (max-width: 1024px){.kadence-column186_6557b4-02 > .kt-inside-inner-col{flex-direction:column;justify-content:center;}}@media all and (max-width: 767px){.kadence-column186_6557b4-02 > .kt-inside-inner-col{flex-direction:column;justify-content:center;}}<\/style>\n<div class=\"wp-block-kadence-column kadence-column186_6557b4-02\"><div class=\"kt-inside-inner-col\"><style>.kb-image186_72753f-0b:not(.kb-image-is-ratio-size) .kb-img, .kb-image186_72753f-0b.kb-image-is-ratio-size{padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.kb-image186_72753f-0b .kb-image-has-overlay:after{opacity:0.3;border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-right-radius:0px;border-bottom-left-radius:0px;}.kb-image186_72753f-0b img.kb-img, .kb-image186_72753f-0b .kb-img img{border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-right-radius:0px;border-bottom-left-radius:0px;}<\/style>\n<figure class=\"wp-block-kadence-image kb-image186_72753f-0b size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/m.meeting2026.cn\/wp-content\/uploads\/2026\/08\/4a6c2fc84c7381788a949a3792b92ebc-1024x576.webp\" alt=\"\" class=\"kb-img wp-image-374\" srcset=\"https:\/\/m.meeting2026.cn\/wp-content\/uploads\/2026\/08\/4a6c2fc84c7381788a949a3792b92ebc-1024x576.webp 1024w, https:\/\/m.meeting2026.cn\/wp-content\/uploads\/2026\/08\/4a6c2fc84c7381788a949a3792b92ebc-300x169.webp 300w, https:\/\/m.meeting2026.cn\/wp-content\/uploads\/2026\/08\/4a6c2fc84c7381788a949a3792b92ebc-768x432.webp 768w, https:\/\/m.meeting2026.cn\/wp-content\/uploads\/2026\/08\/4a6c2fc84c7381788a949a3792b92ebc-1536x864.webp 1536w, https:\/\/m.meeting2026.cn\/wp-content\/uploads\/2026\/08\/4a6c2fc84c7381788a949a3792b92ebc.webp 1800w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div><\/div>\n\n<\/div><\/div>\n\n<style>.kb-row-layout-id186_d52b1e-ab > .kt-row-column-wrap{align-content:start;}:where(.kb-row-layout-id186_d52b1e-ab > .kt-row-column-wrap) > .wp-block-kadence-column{justify-content:start;}.kb-row-layout-id186_d52b1e-ab > .kt-row-column-wrap{column-gap:var(--global-kb-gap-md, 2rem);row-gap:var(--global-kb-gap-md, 2rem);padding-top:var(--global-kb-spacing-sm, 1.5rem);padding-right:var(--global-kb-spacing-xxs, 0.5rem);padding-bottom:var(--global-kb-spacing-sm, 1.5rem);padding-left:var(--global-kb-spacing-xxs, 0.5rem);grid-template-columns:minmax(0, 1fr);}.kb-row-layout-id186_d52b1e-ab > .kt-row-layout-overlay{opacity:0.30;}@media all and (max-width: 1024px){.kb-row-layout-id186_d52b1e-ab > .kt-row-column-wrap{grid-template-columns:minmax(0, 1fr);}}@media all and (max-width: 767px){.kb-row-layout-id186_d52b1e-ab > .kt-row-column-wrap{grid-template-columns:minmax(0, 1fr);}}<\/style><div class=\"kb-row-layout-wrap kb-row-layout-id186_d52b1e-ab alignnone wp-block-kadence-rowlayout\"><div class=\"kt-row-column-wrap kt-has-1-columns kt-row-layout-equal kt-tab-layout-inherit kt-mobile-layout-row kt-row-valign-top\">\n<style>.kadence-column186_4cf32d-47 > .kt-inside-inner-col{padding-left:0px;}.kadence-column186_4cf32d-47 > .kt-inside-inner-col,.kadence-column186_4cf32d-47 > .kt-inside-inner-col:before{border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-right-radius:0px;border-bottom-left-radius:0px;}.kadence-column186_4cf32d-47 > .kt-inside-inner-col{column-gap:var(--global-kb-gap-sm, 1rem);}.kadence-column186_4cf32d-47 > .kt-inside-inner-col{flex-direction:column;}.kadence-column186_4cf32d-47 > .kt-inside-inner-col > .aligncenter{width:100%;}.kadence-column186_4cf32d-47 > .kt-inside-inner-col:before{opacity:0.3;}.kadence-column186_4cf32d-47{position:relative;}@media all and (max-width: 1024px){.kadence-column186_4cf32d-47 > .kt-inside-inner-col{flex-direction:column;justify-content:center;}}@media all and (max-width: 767px){.kadence-column186_4cf32d-47 > .kt-inside-inner-col{flex-direction:column;justify-content:center;}}<\/style>\n<div class=\"wp-block-kadence-column kadence-column186_4cf32d-47\"><div class=\"kt-inside-inner-col\"><style>.wp-block-kadence-advancedgallery .kb-gallery-type-masonry.kb-gallery-id-186_df24f1-00{margin:-5px;}.kb-gallery-type-masonry.kb-gallery-id-186_df24f1-00 .kadence-blocks-gallery-item{padding:5px;}.kb-gallery-id-186_df24f1-00 .kadence-blocks-gallery-item .kb-gal-image-radius, .kb-gallery-id-186_df24f1-00 .kb-slide-item .kb-gal-image-radius img{border-radius:0px 0px 0px 0px;;}<\/style><div class=\"kb-gallery-wrap-id-186_df24f1-00 alignnone wp-block-kadence-advancedgallery\"><ul class=\"kb-gallery-ul kb-gallery-non-static kb-gallery-type-masonry kb-masonry-init kb-gallery-id-186_df24f1-00 kb-gallery-caption-style-bottom-hover kb-gallery-filter-none kb-gallery-magnific-init\" data-image-filter=\"none\" data-item-selector=\".kadence-blocks-gallery-item\" data-lightbox-caption=\"true\" data-columns-xxl=\"1\" data-columns-xl=\"1\" data-columns-md=\"1\" data-columns-sm=\"1\" data-columns-xs=\"1\" data-columns-ss=\"1\"><li class=\"kadence-blocks-gallery-item\"><div class=\"kadence-blocks-gallery-item-inner\"><figure class=\"kb-gallery-figure kb-gallery-item-has-link kadence-blocks-gallery-item-hide-caption\"><a href=\"https:\/\/m.meeting2026.cn\/wp-content\/uploads\/2026\/07\/\u622a\u5c4f2026-04-10-19.54.58.webp\" class=\"kb-gallery-item-link\"   role=\"button\" aria-haspopup=\"dialog\"><div class=\"kb-gal-image-radius\" style=\"max-width:1870px;\"><div class=\"kb-gallery-image-contain kadence-blocks-gallery-intrinsic\" style=\"padding-bottom:55%;\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/m.meeting2026.cn\/wp-content\/uploads\/2026\/07\/\u622a\u5c4f2026-04-10-19.54.58.webp\" width=\"1870\" height=\"1030\" alt=\"\" data-full-image=\"https:\/\/m.meeting2026.cn\/wp-content\/uploads\/2026\/07\/\u622a\u5c4f2026-04-10-19.54.58.webp\" data-light-image=\"https:\/\/m.meeting2026.cn\/wp-content\/uploads\/2026\/07\/\u622a\u5c4f2026-04-10-19.54.58.webp\" data-id=\"188\" class=\"wp-image-188\" srcset=\"https:\/\/m.meeting2026.cn\/wp-content\/uploads\/2026\/07\/\u622a\u5c4f2026-04-10-19.54.58.webp 1870w, https:\/\/m.meeting2026.cn\/wp-content\/uploads\/2026\/07\/\u622a\u5c4f2026-04-10-19.54.58-300x165.webp 300w, https:\/\/m.meeting2026.cn\/wp-content\/uploads\/2026\/07\/\u622a\u5c4f2026-04-10-19.54.58-1024x564.webp 1024w, https:\/\/m.meeting2026.cn\/wp-content\/uploads\/2026\/07\/\u622a\u5c4f2026-04-10-19.54.58-768x423.webp 768w, https:\/\/m.meeting2026.cn\/wp-content\/uploads\/2026\/07\/\u622a\u5c4f2026-04-10-19.54.58-1536x846.webp 1536w\" sizes=\"auto, (max-width: 1870px) 100vw, 1870px\" \/><\/div><\/div><\/a><\/figure><\/div><\/li><\/ul><\/div>\n\n\n<meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n    <title>\u5929\u5730\u56fe &#8211; \u9a7e\u8f66\u8def\u7ebf\u89c4\u5212<\/title>\n    <style>\n        * { margin: 0; padding: 0; box-sizing: border-box; }\n        .map-wrapper { width: 100%; max-width: 100%; margin: 0 auto; }\n        #map-container { width: 100%; height: 200px; border-radius: 16px; box-shadow: 0 4px 12px rgba(0,0,0,0.1); overflow: hidden; margin-bottom: 20px; background: #e9ecef; position: relative; }\n        .map-loading { text-align: center; padding: 50px; color: #999; background: #e9ecef; height: 100%; display: flex; align-items: center; justify-content: center; flex-direction: column; gap: 10px; }\n        .map-loading .spinner { width: 40px; height: 40px; border: 3px solid #e0e0e0; border-top-color: #1e88e5; border-radius: 50%; animation: spin 1s linear infinite; margin-bottom: 10px; }\n        @keyframes spin { to { transform: rotate(360deg); } }\n        .address-panel { background: white; border-radius: 16px; padding: 16px; box-shadow: 0 2px 8px rgba(0,0,0,0.05); margin-top: 20px; }\n        .address-title { font-size: 16px; font-weight: 600; color: #1f2f3a; margin-bottom: 12px; padding-bottom: 8px; border-bottom: 2px solid #e9ecef; display: flex; align-items: center; gap: 8px; }\n        .address-group { margin-bottom: 15px; }\n        .group-title { font-size: 14px; font-weight: 600; color: #666; margin: 8px 0 10px 0; padding-left: 4px; border-left: 3px solid #1e88e5; }\n        .address-list { display: flex; flex-wrap: wrap; gap: 12px; }\n        .address-btn { \n            background: #f8f9fa; \n            border: 1px solid #e2e6ea; \n            border-radius: 40px; \n            padding: 10px 24px; \n            font-size: 14px; \n            font-weight: 500; \n            color: #2c3e50; \n            cursor: pointer; \n            transition: all 0.25s ease; \n            display: inline-flex; \n            align-items: center; \n            gap: 8px;\n            white-space: nowrap;\n        }\n        .address-btn:hover { background: #e9ecef; transform: translateY(-1px); }\n        .address-btn.active { background: #1e88e5; border-color: #1e88e5; color: white; }\n        .route-info { margin-top: 16px; padding: 12px 16px; border-radius: 12px; font-size: 13px; transition: all 0.2s; max-height: 400px; overflow-y: auto; }\n        .route-info.success { background: #e8f5e9; border-left: 4px solid #4caf50; color: #2e7d32; }\n        .route-info.error { background: #ffebee; border-left: 4px solid #f44336; color: #c62828; }\n        .route-info.loading { background: #fff3e0; border-left: 4px solid #ff9800; color: #e65100; }\n        .route-info.warning { background: #fff9e0; border-left: 4px solid #ff9800; color: #e65100; }\n        .destination-info { background: #e3f2fd; padding: 12px 15px; border-radius: 12px; margin-bottom: 15px; display: flex; align-items: center; gap: 10px; font-size: 14px; flex-wrap: wrap; }\n        .destination-info strong { color: #1e88e5; font-size: 16px; }\n        .debug-info { display: none; }\n        .time-highlight { font-size: 28px; font-weight: bold; color: #1e88e5; margin: 0 8px; }\n        .route-time-container { text-align: center; padding: 15px 0; }\n        .route-time-label { font-size: 14px; color: #666; }\n        .info-tip { background: #e3f2fd; padding: 8px 12px; border-radius: 8px; margin-top: 10px; font-size: 12px; color: #1e88e5; text-align: center; }\n        @media (max-width: 768px) { .address-btn { padding: 8px 16px; font-size: 12px; } .time-highlight { font-size: 22px; } }\n        .custom-marker { background: transparent !important; border: none !important; }\n        .marker-label { display: inline-block; white-space: nowrap; padding: 6px 14px; border-radius: 25px; font-size: 12px; font-weight: bold; box-shadow: 0 2px 6px rgba(0,0,0,0.2); transition: transform 0.2s; }\n        .marker-label:hover { transform: scale(1.05); }\n        .start-label { background: #f5a623; color: white; }\n        .end-label { background: #1e88e5; color: white; }\n    <\/style>\n\n\n<div class=\"map-wrapper\">\n    <div id=\"map-container\">\n        <div class=\"map-loading\">\n            <div class=\"spinner\"><\/div>\n            <div>\u5730\u56fe\u52a0\u8f7d\u4e2d\uff0c\u8bf7\u7a0d\u5019&#8230;<\/div>\n        <\/div>\n    <\/div>\n    <div class=\"address-panel\">\n        <div class=\"destination-info\">\n            <span>\ud83c\udfe8<\/span>\n            <span><strong>\u76ee\u7684\u5730\uff1a\u9547\u6c5f\u5146\u548c\u7687\u51a0\u5047\u65e5\u9152\u5e97<\/strong><\/span>\n            <span style=\"font-size:12px;\">\u9547\u6c5f\u5e02\u4eac\u53e3\u533a\u957f\u6c5f\u8def27\u53f7<\/span>\n        <\/div>\n        \n        <div class=\"address-title\">\n            <span>\ud83d\udccd \u9009\u62e9\u60a8\u7684\u51fa\u53d1\u5730<\/span>\n            <span style=\"font-size:12px;font-weight:normal;\">\u70b9\u51fb\u4e0b\u65b9\u5730\u70b9\u67e5\u770b\u9a7e\u8f66\u8def\u7ebf\u89c4\u5212<\/span>\n        <\/div>\n        \n        <div class=\"address-group\">\n            <div class=\"group-title\">\u2708\ufe0f \u673a \u573a<\/div>\n            <div class=\"address-list\" id=\"airport-list\"><\/div>\n        <\/div>\n        \n        <div class=\"address-group\">\n            <div class=\"group-title\">\ud83d\ude86 \u706b\u8f66\u7ad9<\/div>\n            <div class=\"address-list\" id=\"station-list\"><\/div>\n        <\/div>\n        \n        <div id=\"route-info\" class=\"route-info loading\">\u23f3 \u8bf7\u9009\u62e9\u51fa\u53d1\u5730\u67e5\u770b\u8def\u7ebf\u89c4\u5212<\/div>\n        \n        <div class=\"debug-info\" id=\"debug-info\"><\/div>\n    <\/div>\n<\/div>\n\n<script>\n(function() {\n    const TDT_KEY = '6e0b5f28ff5f917765f14d20d6ec27fd';\n    \n    const DESTINATION = { \n        name: \"\u9547\u6c5f\u5146\u548c\u7687\u51a0\u5047\u65e5\u9152\u5e97\", \n        lng: 119.445457, \n        lat: 32.208059 \n    };\n    \n    \/\/ \u673a\u573a\u5217\u8868\n    const AIRPORT_LIST = [\n        { name: \"\u5357\u4eac\u7984\u53e3\u56fd\u9645\u673a\u573a\", lng: 118.877449, lat: 31.742732, \n          estimated: { distance: 85, duration: 75, route: \"G42\u6caa\u84c9\u9ad8\u901f \u2192 G4011\u626c\u6ea7\u9ad8\u901f\" } },\n        { name: \"\u5e38\u5dde\u5954\u725b\u56fd\u9645\u673a\u573a\", lng: 119.706898, lat: 31.912322,\n          estimated: { distance: 75, duration: 65, route: \"G42\u6caa\u84c9\u9ad8\u901f \u2192 \u9547\u6c5f\u652f\u7ebf\" } },\n        { name: \"\u626c\u5dde\u6cf0\u5dde\u56fd\u9645\u673a\u573a\", lng: 119.660557, lat: 32.557611,\n          estimated: { distance: 70, duration: 60, route: \"S28\u542f\u626c\u9ad8\u901f \u2192 G4011\u626c\u6ea7\u9ad8\u901f \u2192 \u6da6\u626c\u5927\u6865\" } }\n    ];\n    \n    const STATION_LIST = [\n        { name: \"\u9547\u6c5f\u7ad9\", lng: 119.433420, lat: 32.196481,\n          estimated: { distance: 4.5, duration: 12, route: \"\u4e2d\u5c71\u897f\u8def \u2192 \u957f\u6c5f\u8def\" } },\n        { name: \"\u9547\u6c5f\u4e1c\u7ad9\", lng: 119.500237, lat: 32.158924,\n          estimated: { distance: 6.8, duration: 18, route: \"\u667a\u6167\u5927\u9053 \u2192 \u91d1\u6da6\u5927\u9053 \u2192 \u4e01\u536f\u6865\u8def\" } },\n        { name: \"\u9547\u6c5f\u5357\u7ad9\", lng: 119.392093, lat: 32.178596,\n          estimated: { distance: 5.2, duration: 15, route: \"\u67a3\u6797\u8def \u2192 \u5357\u5f90\u5927\u9053 \u2192 \u957f\u6c5f\u8def\" } }\n    ];\n    \n    let map = null;\n    let currentMarker = null;\n    let destMarker = null;\n    let currentPolyline = null;\n    let isMapReady = false;\n    \n    function updateRouteInfo(content, type, errorDetail = '') {\n        const div = document.getElementById('route-info');\n        if (div) {\n            let finalContent = content;\n            if (errorDetail) {\n                finalContent += `<div class=\"error-detail\">${errorDetail}<\/div>`;\n            }\n            div.innerHTML = finalContent;\n            div.className = `route-info ${type}`;\n        }\n    }\n    \n    function clearRoute() {\n        if (currentPolyline && map) {\n            map.removeLayer(currentPolyline);\n            currentPolyline = null;\n        }\n    }\n    \n    function parsePolylineToLatLng(polylineStr) {\n        if (!polylineStr || polylineStr === '') return [];\n        const points = [];\n        const coords = polylineStr.split(';');\n        for (let i = 0; i < coords.length; i++) {\n            const coord = coords[i].trim();\n            if (coord) {\n                const parts = coord.split(',');\n                if (parts.length === 2) {\n                    points.push([parseFloat(parts[1]), parseFloat(parts[0])]);\n                }\n            }\n        }\n        return points;\n    }\n    \n    function drawPolyline(points, color, weight) {\n        if (!points || points.length < 2 || !map) return null;\n        const polyline = L.polyline(points, { color: color, weight: weight, opacity: 0.9 }).addTo(map);\n        currentPolyline = polyline;\n        return polyline;\n    }\n    \n    function drawStraightLine(origin, destination, color, weight) {\n        const points = [[origin.lat, origin.lng], [destination.lat, destination.lng]];\n        const polyline = L.polyline(points, { color: color, weight: weight, opacity: 0.7, dashArray: '5, 10' }).addTo(map);\n        currentPolyline = polyline;\n        return polyline;\n    }\n    \n    function formatDuration(minutes) {\n        if (!minutes || isNaN(minutes) || minutes <= 0) return '\u8ba1\u7b97\u4e2d';\n        if (minutes < 60) return `${Math.round(minutes)}\u5206\u949f`;\n        const hours = Math.floor(minutes \/ 60);\n        const mins = Math.round(minutes % 60);\n        return mins === 0 ? `${hours}\u5c0f\u65f6` : `${hours}\u5c0f\u65f6${mins}\u5206\u949f`;\n    }\n    \n    \/\/ \u521b\u5efa\u6a2a\u5411\u663e\u793a\u7684\u5730\u56fe\u6807\u8bb0\n    function createMarker(lat, lng, name, type) {\n        const isStart = type === 'start';\n        const bgColor = isStart ? '#f5a623' : '#1e88e5';\n        const icon = isStart ? '\ud83d\udea9' : '\ud83c\udfe8';\n        const labelText = `${icon} ${name}`;\n        \n        const customIcon = L.divIcon({\n            className: 'custom-marker',\n            html: `<div class=\"marker-label ${isStart ? 'start-label' : 'end-label'}\" style=\"background: ${bgColor}; color: white; padding: 6px 14px; border-radius: 25px; font-size: 12px; font-weight: bold; white-space: nowrap; box-shadow: 0 2px 6px rgba(0,0,0,0.2);\">${labelText}<\/div>`,\n            iconSize: [null, null],\n            popupAnchor: [0, -20]\n        });\n        \n        return L.marker([lat, lng], { icon: customIcon });\n    }\n    \n    function planWithEstimate(origin, destination) {\n        const est = origin.estimated || {\n            distance: 70,\n            duration: 65,\n            route: \"\u9ad8\u901f\u516c\u8def \u2192 \u9547\u6c5f\u5e02\u533a\"\n        };\n        \n        const durationMin = est.duration;\n        const durationText = formatDuration(durationMin);\n        \n        drawStraightLine(origin, destination, '#f5a623', 4);\n        \n        const tipHtml = '<div class=\"info-tip\">\ud83d\udca1 \u63d0\u793a\uff1a\u6b64\u4e3a\u4f30\u7b97\u8def\u7ebf\uff0c\u5b9e\u9645\u8bf7\u4ee5\u5bfc\u822a\u4e3a\u51c6<\/div>';\n        \n        updateRouteInfo(`\n            <div class=\"route-time-container\">\n                <span class=\"route-time-label\">\u9884\u8ba1\u8017\u65f6<\/span>\n                <span class=\"time-highlight\">${durationText}<\/span>\n            <\/div>\n            ${tipHtml}\n        `, 'success');\n        \n        return true;\n    }\n    \n    async function planDriveRoute(origin, destination) {\n        const startCoord = `${origin.lng},${origin.lat}`;\n        const endCoord = `${destination.lng},${destination.lat}`;\n        \n        const postData = {\n            orig: startCoord,\n            dest: endCoord,\n            style: \"0\"\n        };\n        const postStr = JSON.stringify(postData);\n        const url = `https:\/\/api.tianditu.gov.cn\/drive?postStr=${encodeURIComponent(postStr)}&type=search&tk=${TDT_KEY}`;\n        \n        updateRouteInfo(`\ud83d\ude97 \u6b63\u5728\u89c4\u5212\u8def\u7ebf...`, 'loading');\n        \n        try {\n            const response = await fetch(url);\n            const xmlText = await response.text();\n            \n            if (xmlText.includes('<error>')) {\n                return planWithEstimate(origin, destination);\n            }\n            \n            const parser = new DOMParser();\n            const xmlDoc = parser.parseFromString(xmlText, \"text\/xml\");\n            \n            const durationEl = xmlDoc.getElementsByTagName(\"duration\")[0];\n            const routelatlonEl = xmlDoc.getElementsByTagName(\"routelatlon\")[0];\n            \n            const routelatlon = routelatlonEl ? routelatlonEl.textContent : '';\n            \n            if (!routelatlon || routelatlon === '') {\n                return planWithEstimate(origin, destination);\n            }\n            \n            const points = parsePolylineToLatLng(routelatlon);\n            if (points.length < 2) {\n                return planWithEstimate(origin, destination);\n            }\n            \n            clearRoute();\n            drawPolyline(points, '#3b82f6', 5);\n            \n            const duration = durationEl ? parseFloat(durationEl.textContent) : 0;\n            const durationText = formatDuration(duration \/ 60);\n            \n            updateRouteInfo(`\n                <div class=\"route-time-container\">\n                    <span class=\"route-time-label\">\u9884\u8ba1\u8017\u65f6<\/span>\n                    <span class=\"time-highlight\">${durationText}<\/span>\n                <\/div>\n            `, 'success');\n            \n            const bounds = L.latLngBounds(points);\n            map.fitBounds(bounds, { padding: [50, 50] });\n            return true;\n            \n        } catch (error) {\n            return planWithEstimate(origin, destination);\n        }\n    }\n    \n    function selectAddressAndRoute(origin) {\n        if (!map || !isMapReady) {\n            setTimeout(() => selectAddressAndRoute(origin), 500);\n            return;\n        }\n        \n        clearRoute();\n        \n        if (currentMarker) map.removeLayer(currentMarker);\n        if (destMarker) map.removeLayer(destMarker);\n        \n        currentMarker = createMarker(origin.lat, origin.lng, origin.name, 'start');\n        currentMarker.addTo(map);\n        \n        destMarker = createMarker(DESTINATION.lat, DESTINATION.lng, DESTINATION.name, 'end');\n        destMarker.addTo(map);\n        \n        const bounds = L.latLngBounds([origin.lat, origin.lng], [DESTINATION.lat, DESTINATION.lng]);\n        map.fitBounds(bounds, { padding: [100, 100] });\n        \n        planDriveRoute(origin, DESTINATION);\n    }\n    \n    function renderButtons() {\n        const airportDiv = document.getElementById('airport-list');\n        if (airportDiv) {\n            airportDiv.innerHTML = '';\n            AIRPORT_LIST.forEach(addr => {\n                const btn = document.createElement('button');\n                btn.innerHTML = `\u2708\ufe0f ${addr.name}`;\n                btn.className = 'address-btn';\n                btn.onclick = () => {\n                    document.querySelectorAll('.address-btn').forEach(b => b.classList.remove('active'));\n                    btn.classList.add('active');\n                    selectAddressAndRoute(addr);\n                };\n                airportDiv.appendChild(btn);\n            });\n        }\n        \n        const stationDiv = document.getElementById('station-list');\n        if (stationDiv) {\n            stationDiv.innerHTML = '';\n            STATION_LIST.forEach(addr => {\n                const btn = document.createElement('button');\n                btn.innerHTML = `\ud83d\ude86 ${addr.name}`;\n                btn.className = 'address-btn';\n                btn.onclick = () => {\n                    document.querySelectorAll('.address-btn').forEach(b => b.classList.remove('active'));\n                    btn.classList.add('active');\n                    selectAddressAndRoute(addr);\n                };\n                stationDiv.appendChild(btn);\n            });\n        }\n        \n        setTimeout(() => {\n            const firstBtn = document.querySelector('#station-list .address-btn');\n            if (firstBtn) {\n                firstBtn.classList.add('active');\n                selectAddressAndRoute(STATION_LIST[0]);\n            }\n        }, 1000);\n    }\n    \n    function createMap() {\n        const container = document.getElementById('map-container');\n        if (!container) return;\n        \n        try {\n            const tileLayer = L.tileLayer('https:\/\/t{s}.tianditu.gov.cn\/vec_w\/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=vec&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=' + TDT_KEY, {\n                subdomains: ['0', '1', '2', '3', '4', '5', '6', '7'],\n                attribution: '\u5929\u5730\u56fe',\n                maxZoom: 18\n            });\n            \n            const annotLayer = L.tileLayer('https:\/\/t{s}.tianditu.gov.cn\/cva_w\/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cva&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=' + TDT_KEY, {\n                subdomains: ['0', '1', '2', '3', '4', '5', '6', '7']\n            });\n            \n            map = L.map('map-container', { \n                center: [DESTINATION.lat, DESTINATION.lng], \n                zoom: 10,\n                layers: [tileLayer, annotLayer]\n            });\n            \n            L.control.scale().addTo(map);\n            \n            map.on('load', () => {\n                const loadingDiv = container.querySelector('.map-loading');\n                if (loadingDiv) loadingDiv.style.display = 'none';\n            });\n            \n            setTimeout(() => {\n                const loadingDiv = container.querySelector('.map-loading');\n                if (loadingDiv) loadingDiv.style.display = 'none';\n            }, 2000);\n            \n            isMapReady = true;\n            renderButtons();\n            \n        } catch (error) {\n            console.log('\u5730\u56fe\u521b\u5efa\u5931\u8d25:', error);\n        }\n    }\n    \n    function initMap() {\n        if (typeof L === 'undefined') {\n            const link = document.createElement('link');\n            link.rel = 'stylesheet';\n            link.href = 'https:\/\/unpkg.com\/leaflet@1.9.4\/dist\/leaflet.css';\n            document.head.appendChild(link);\n            \n            const script = document.createElement('script');\n            script.src = 'https:\/\/unpkg.com\/leaflet@1.9.4\/dist\/leaflet.js';\n            script.onload = () => {\n                createMap();\n            };\n            document.head.appendChild(script);\n            return;\n        }\n        createMap();\n    }\n    \n    initMap();\n})();\n<\/script>\n<\/div><\/div>\n\n<\/div><\/div>\n\n<style>.wp-block-kadence-advancedbtn.kb-btns186_1cc69e-1d{gap:var(--global-kb-gap-xs, 0.5rem );justify-content:center;align-items:center;}.kt-btns186_1cc69e-1d .kt-button{font-weight:normal;font-style:normal;}.kt-btns186_1cc69e-1d .kt-btn-wrap-0{margin-right:5px;}.wp-block-kadence-advancedbtn.kt-btns186_1cc69e-1d .kt-btn-wrap-0 .kt-button{color:#555555;border-color:#555555;}.wp-block-kadence-advancedbtn.kt-btns186_1cc69e-1d .kt-btn-wrap-0 .kt-button:hover, .wp-block-kadence-advancedbtn.kt-btns186_1cc69e-1d .kt-btn-wrap-0 .kt-button:focus{color:#ffffff;border-color:#444444;}.wp-block-kadence-advancedbtn.kt-btns186_1cc69e-1d .kt-btn-wrap-0 .kt-button::before{display:none;}.wp-block-kadence-advancedbtn.kt-btns186_1cc69e-1d .kt-btn-wrap-0 .kt-button:hover, .wp-block-kadence-advancedbtn.kt-btns186_1cc69e-1d .kt-btn-wrap-0 .kt-button:focus{background:#444444;}<\/style>\n<div class=\"wp-block-kadence-advancedbtn kb-buttons-wrap kb-btns186_1cc69e-1d\"><style>.wp-block-kadence-advancedbtn .kb-btn186_e5ddbb-f9.kb-button, ul.menu .wp-block-kadence-advancedbtn .kb-btn186_e5ddbb-f9.kb-button{width:120px;}.wp-block-kadence-advancedbtn .kb-btn186_e5ddbb-f9.kb-button{background:#0e7ef1;border-top-left-radius:20px;border-top-right-radius:20px;border-bottom-right-radius:20px;border-bottom-left-radius:20px;}<\/style><a class=\"kb-button kt-button button kb-btn186_e5ddbb-f9 kt-btn-size-standard kt-btn-width-type-fixed kb-btn-global-fill kt-btn-has-text-true kt-btn-has-svg-true wp-block-kadence-singlebtn\" href=\"https:\/\/m.meeting2026.cn\/?page_id=151\"><span class=\"kt-btn-inner-text\">\u8fd4\u56de<\/span><span class=\"kb-svg-icon-wrap kb-svg-icon-fe_skipBack kt-btn-icon-side-right\"><svg viewBox=\"0 0 24 24\"  fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"  aria-hidden=\"true\"><polygon points=\"19 20 9 12 19 4 19 20\"\/><line x1=\"5\" y1=\"19\" x2=\"5\" y2=\"5\"\/><\/svg><\/span><\/a><\/div>\n\n\n<style>.wp-block-kadence-spacer.kt-block-spacer-186_a50673-5d .kt-block-spacer{height:29px;}.wp-block-kadence-spacer.kt-block-spacer-186_a50673-5d .kt-divider{border-top-width:1px;height:1px;border-top-color:#eee;width:80%;border-top-style:solid;}<\/style>\n<div class=\"wp-block-kadence-spacer aligncenter kt-block-spacer-186_a50673-5d\"><div class=\"kt-block-spacer kt-block-spacer-halign-center\"><\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u5929\u5730\u56fe &#8211; \u9a7e\u8f66\u8def\u7ebf\u89c4\u5212 \u5730\u56fe\u52a0\u8f7d\u4e2d\uff0c\u8bf7\u7a0d\u5019&#8230; \ud83c\udfe8 \u76ee\u7684\u5730\uff1a\u9547\u6c5f\u5146\u548c\u7687\u51a0\u5047\u65e5\u9152\u5e97 \u9547\u6c5f&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_kadence_starter_templates_imported_post":false,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"class_list":["post-186","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/m.meeting2026.cn\/index.php?rest_route=\/wp\/v2\/pages\/186","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/m.meeting2026.cn\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/m.meeting2026.cn\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/m.meeting2026.cn\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/m.meeting2026.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=186"}],"version-history":[{"count":13,"href":"https:\/\/m.meeting2026.cn\/index.php?rest_route=\/wp\/v2\/pages\/186\/revisions"}],"predecessor-version":[{"id":505,"href":"https:\/\/m.meeting2026.cn\/index.php?rest_route=\/wp\/v2\/pages\/186\/revisions\/505"}],"wp:attachment":[{"href":"https:\/\/m.meeting2026.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=186"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}