You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义经纬度的Leaflet地图无法渲染问题求助

问题:Leaflet地图无法渲染但ISS坐标正常显示

我正在使用Where the ISS at API获取国际空间站(ISS)的当前经纬度值,服务端请求代码如下:

app.get("/coordinates", async (req,res) =>{
    try{
    const result = await axios.get(API_URL);
    const latitude = result.data.latitude;
    const longitude = result.data.longitude;
    res.render("index.ejs", ({latitude: latitude, longitude: longitude}))
    } catch (error) {
        res.status(404).send(error.message);
        
    }
})

我的EJS模板代码如下:

<!-- leaflet css  -->
    <link rel="stylesheet" href="https://unpkg.com/leaflet@1.7.1/dist/leaflet.css" />

</head>

<body>
    <div id="map"></div>
    <p >ISS Latitude: <span id="data-latitude"><%= latitude %></span> </p>
    <p >ISS Longitude: <span id="data-longitude"> <%= longitude %></span></p>

    <!-- leaflet js  -->
    <script src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js"></script>
    <!-- Your custom JavaScript file -->
    <script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>

    <script src="/js/main.js"></script>
</body>

</html>

客户端JavaScript代码如下:

const mapElement = document.getElementById('map');
const latitude = parseFloat(document.getElementById("data-latitude").textContent);
const longitude = parseFloat(document.getElementById("data-longitude").textContent);

// Map initialization with predetermined coordinates
var map = L.map(mapElement).setView([latitude, longitude], 8);

// osm layer
var osm = L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
    attribution: '&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
});
osm.addTo(map);

// Marker at predetermined coordinates
var marker = L.marker([latitude, longitude]).addTo(map);

在本地主机加载该路由时,坐标能正常显示,但Leaflet地图始终无法渲染,请求帮忙排查问题原因。


排查与解决方法
  • 地图容器缺少宽高样式(最常见原因)
    Leaflet地图需要渲染在有明确尺寸的容器内,默认情况下<div id="map"></div>的高度为0,所以看不到地图。你需要给这个容器添加CSS样式:
#map {
  height: 400px; /* 设置合适的高度,比如400px */
  width: 100%; /* 宽度可以设为100%或者固定值 */
}

可以把这段样式放在EJS模板的<head>标签内的<style>标签里,或者引入外部CSS文件。

  • 验证坐标有效性
    虽然坐标能显示,但可以确认一下latitude和longitude是否是合法的数值(纬度范围是-90到90,经度范围是-180到180)。可以在main.js里添加console.log(latitude, longitude)来查看控制台输出的数值是否正常。

  • 确认脚本加载顺序
    你的脚本加载顺序没问题:先加载Leaflet的CSS,再加载Leaflet的JS,最后加载自定义的main.js,这个顺序是Leaflet初始化的正确顺序,无需调整。


内容的提问来源于stack exchange,提问作者Shahmir Khan Niazi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 09:28:15