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

如何通过Google Maps API将Ajax获取的图片替代Marker显示在指定坐标(无需InfoWindow)

用自定义图片替代Google Maps Marker(无需InfoWindow)

嘿,这个需求其实很好实现!Google Maps JavaScript API 本身就支持直接给 Marker 设置自定义图标,完全不需要借助 InfoWindow 来展示图片。我结合你的数据给你写个具体的实现方案:

首先先修正下你提供的 Ajax 数据格式(原格式有点小问题,改成可遍历的结构会更方便):

const restaurants = [
  { latlng: ["40.7143528","-74.0059731"], link: "restaurant1.jpg" },
  { latlng: ["40.82148067","-74.35135579"], link: "restaurant2.jpg" }
];

接下来,核心就是在创建 Marker 时,通过 icon 配置项直接指定你的餐厅图片作为 Marker 图标,而不是用默认的红色标记。这里可以设置图片的尺寸、锚点(确保图片精准定位在坐标上):

// 先初始化地图(假设你已经有了map实例)
function initMap() {
  const map = new google.maps.Map(document.getElementById("map"), {
    zoom: 10,
    center: { lat: 40.7831, lng: -74.0057 } // 纽约区域中心,可根据需求调整
  });

  // 遍历餐厅数据创建自定义Marker
  restaurants.forEach(rest => {
    const latLng = new google.maps.LatLng(parseFloat(rest.latlng[0]), parseFloat(rest.latlng[1]));
    
    const customMarker = new google.maps.Marker({
      position: latLng,
      map: map,
      // 重点:设置自定义图标
      icon: {
        url: rest.link, // 你的餐厅图片地址
        scaledSize: new google.maps.Size(50, 50), // 图片显示的尺寸(宽高,单位px)
        anchor: new google.maps.Point(25, 25) // 锚点:图片的中心位置对应坐标点,避免偏移
        // 如果希望图片底部中点对应坐标,anchor可以设为new google.maps.Point(25,50)
      }
    });
  });
}

关键说明:

  • scaledSize:用来控制图片显示的大小,避免原图过大撑满地图。可以根据你的图片实际尺寸调整数值。
  • anchor:这个很重要!默认情况下Marker的锚点是图标底部中心,如果你的图片是不规则形状或者你想让坐标点对应图片的某个位置,一定要设置这个参数。比如上面的例子把锚点设为图片中心(25,25),这样坐标点就会精准落在图片中间。
  • 跨域问题:如果你的图片是来自其他域名的资源,要确保服务器配置了CORS允许访问,否则地图可能加载不出来图片。

这样一来,每个餐厅的坐标上就会直接显示你指定的图片,完全替代默认Marker,不需要点击或者InfoWindow啦!

内容的提问来源于stack exchange,提问作者Bruno Pigatto

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:51:16