以编程方式生成Google地图标记(API v3)

时间:2010-06-21 20:20:09

标签: google-maps google-maps-api-3 google-maps-markers

是否可以在Google中以编程方式生成标记?例如,我有一个服务和位置数据库,我想使用PHP在Google Map上绘制。

使用Maps API v3,我创建了一个地图并使用标记和信息窗口精确绘制了服务,但我真正想做的是生成数字(1,2,3,4 ...等)默认标记气泡基于它们从DB检索的顺序。另外,我想根据数据库中的服务类型以编程方式更改标记图标的颜色。

我正在使用PHP,因此不知道是否有脚本可以执行此操作,但我曾希望Google通过API提供此自定义标记生成。

3 个答案:

答案 0 :(得分:5)

Maps API要求您使用图像(而不是任意DIV)来显示标记,因此您需要渲染图像服务器端。

执行此操作的一种简单方法是使用Google Charts API呈现标记图标: http://code.google.com/apis/chart/docs/gallery/dynamic_icons.html#pins

示例输出: alt text

生成:https://chart.apis.google.com/chart?chst=d_map_pin_letter&chld=C|FF0000|000000

答案 1 :(得分:4)

让PHP吐出javascript代码。

这是一个方便的javascript函数,我写的是添加一个带有窗口关联的标记。

function add_marker(opts, place) {
  var marker = new google.maps.Marker(opts);
  marker.place_id = place.id;
  markers[place.id] = marker;
  var infowindow = new google.maps.InfoWindow({
    content: place.details
  });

  infowindows[place.id] = infowindow;

  google.maps.event.addListener(marker, 'click', function() {
    infowindows[marker.place_id].open(map,marker);
  });

 }

所以在声明在某些javascripty的地方之后,你会得到一些可能类似的PHP(假设你的地图是一个全局的'map'):

<script type="text/javascript">
  <?php 
  $count = 0;
  foreach ($rowset as $row): ?>
  add_marker({
        position: new google.maps.LatLng(<?php echo $row->lat ?>, <?php echo $row->lng ?>),
        title:<?php echo $row->title ?>,
        map:map
    }, { id:'<?php echo $count ?>', details:'<?php echo $row->details ?>' });
  <?php 
  $count++;
  endforeach; ?>
</script>

我没有测试任何这个,也不知道数据是什么样的,但是这个方法应该适用于你想要的东西。我不是100%确定自定义标记生成的意思,因为听起来你已经这样做了,而不是通过PHP。

答案 2 :(得分:0)

我不确定是否有其他人遇到过这个问题,但是我无法循环地理编码来绘制我的观点,Google甚至认为这是滥用他们的服务。所以我的方法是将lat / long坐标地理编码并存储在用户输入阶段而不是显示阶段,从而减轻了它对Google施加的带宽压力。

我不确定这是否会有所帮助,但它可能会帮助您预先编码和存储这些标记图像,而不是动态执行。因为它与您选择的答案一致,您依靠谷歌在您的页面加载时生成这些图像,也许您可​​能希望通过在不同阶段运行此代码并将输出与坐标一起存储来加速您的服务你的PHP数据库。

干杯,