Skip to main content
Glama
main.js6.86 kB
let map = null; let apiKey = null; let ws = null; let sessionId = null; // 从 URL 参数获取 sessionid function getSessionIdFromUrl() { const urlParams = new URLSearchParams(window.location.search); return urlParams.get('sessionid'); } // 从 URL 参数获取 API 密钥 function getApiKeyFromUrl() { const urlParams = new URLSearchParams(window.location.search); return urlParams.get('apikey'); } // 初始化地图 function initMap() { // 动态加载高德地图API const script = document.createElement('script'); script.src = `https://webapi.amap.com/maps?v=2.0&key=${apiKey}&plugin=AMap.Driving,AMap.Riding,AMap.Walking`; script.onload = function() { // 创建地图实例 map = new AMap.Map("container", { resizeEnable: true, center: [116.397428, 39.90923], zoom: 13 }); console.log('地图初始化完成'); showStatus('地图初始化完成'); }; script.onerror = function() { alert('地图加载失败,请检查API Key'); }; document.head.appendChild(script); } // 显示状态信息 function showStatus(message) { const status = document.getElementById('status'); status.textContent = message; status.style.display = 'block'; setTimeout(() => { status.style.display = 'none'; }, 3000); } // 转换导航点为高德地图格式 function convertNavigationPoint(point) { if (point.lng !== null && point.lat !== null) { // 经纬度格式 return new AMap.LngLat(point.lng, point.lat); } else if (point.keyword) { // 关键字格式 return point.city ? {keyword: point.keyword, city: point.city} : point.keyword; } throw new Error('无效的导航点格式'); } // 执行导航 function performNavigation(points, policy = 0, navType = 'driving') { if (!map) { throw new Error('地图未初始化'); } if (!points || points.length < 2) { throw new Error('至少需要2个导航点'); } // 根据导航类型选择对应的插件 let pluginName = "AMap.Driving"; let navigationOptions = { policy: policy, map: map, panel: "panel" }; switch (navType) { case 'driving': pluginName = "AMap.Driving"; break; case 'riding': pluginName = "AMap.Riding"; // 骑行导航不需要 policy 参数 navigationOptions = { map: map, panel: "panel" }; break; case 'walking': pluginName = "AMap.Walking"; // 步行导航不需要 policy 参数 navigationOptions = { map: map, panel: "panel" }; break; default: throw new Error(`不支持的导航类型: ${navType}`); } // 使用插件方式创建导航 AMap.plugin(pluginName, function () { let navigation; switch (navType) { case 'driving': navigation = new AMap.Driving(navigationOptions); break; case 'riding': navigation = new AMap.Riding(navigationOptions); break; case 'walking': navigation = new AMap.Walking(navigationOptions); break; } try { // 转换所有导航点 const convertedPoints = points.map(point => convertNavigationPoint(point)); // 多个点,使用途径点模式 navigation.search(convertedPoints, function(status, result) { handleNavigationResult(status, result, points.length, navType); }); } catch (error) { console.error('导航点转换失败:', error); showStatus('导航点转换失败: ' + error.message); } }); } // 处理导航结果 function handleNavigationResult(status, result, pointCount, navType = 'driving') { const navTypeNames = { 'driving': '驾车', 'riding': '骑行', 'walking': '步行' }; const navTypeName = navTypeNames[navType] || navType; if (status === 'complete') { console.log(`${navTypeName}导航路线规划完成`); showStatus(`${navTypeName}导航路线规划完成(${pointCount}个点)`); } else { console.error(`${navTypeName}导航路线规划失败:`, result); showStatus(`${navTypeName}导航路线规划失败`); } } // 处理导航命令 function handleNavigationCommand(command) { try { if (command.points && command.points.length > 0) { performNavigation( command.points, command.policy || 0, command.nav_type || 'driving' ); } else { console.error('导航命令缺少点位信息'); showStatus('导航命令缺少点位信息'); } } catch (error) { console.error('导航执行失败:', error); showStatus('导航执行失败: ' + error.message); } } // 初始化 WebSocket 连接 function initWebSocket() { if (!sessionId) { showStatus('缺少 sessionid 参数'); return; } // 构建 WebSocket URL const wsUrl = `ws://localhost:8000/ws/${sessionId}`; ws = new WebSocket(wsUrl); ws.onopen = function(event) { console.log('WebSocket 连接已建立'); showStatus('已连接到导航服务'); }; ws.onmessage = function(event) { try { const data = JSON.parse(event.data); if (data.type === 'navigation' && data.command) { handleNavigationCommand(data.command); } } catch (error) { console.error('处理 WebSocket 消息失败:', error); } }; ws.onclose = function(event) { console.log('WebSocket 连接已关闭'); showStatus('与导航服务的连接已断开'); // 尝试重新连接 setTimeout(initWebSocket, 5000); }; ws.onerror = function(error) { console.error('WebSocket 错误:', error); showStatus('WebSocket 连接错误'); }; } // 页面加载完成后初始化 window.onload = function() { // 获取 sessionid 和 apiKey sessionId = getSessionIdFromUrl(); apiKey = getApiKeyFromUrl(); if (!sessionId) { showStatus('错误:缺少 sessionid 参数'); return; } // 初始化地图 initMap(); // 初始化 WebSocket 连接 initWebSocket(); }; // 页面关闭时关闭 WebSocket 连接 window.onbeforeunload = function() { if (ws) { ws.close(); } };

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Zhangtiande/AMapMCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server