如何在Drupal上创建GMap标记管理器?

时间:2011-08-30 13:24:26

标签: drupal google-maps-markers markermanager drupal-gmap

我需要做的很简单 - 我有一个内容类型,其CCK字段名为Number(令人惊讶的是,它包含一个十进制数),这个内容类型也有一个位置(每个节点总是1个位置)。现在我需要在GMap上显示来自CCK字段编号的数字,而不是典型的GMap标记,如下所示:

  

http://cl.ly/2Y3T3J2B2X1M2w2d0u2n

知道怎么做吗?我简要介绍了GMap模块中包含的标记管理器,我可以创建自己的标记管理器,但我唯一不知道的是如何将节点数据(CCK字段内容)传递到标记管理器。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

在下面的示例中,我假设您的数字为100,101,110,200。这个简单的示例序列允许我说明解决方案的所有方面。

您可以利用GMap支持sequences of custom markers的事实。

因此,您可以创建一个自定义标记文件夹,并在该文件夹中创建一个如下所示的.ini文件:

; Defaults
[defaults]
; Note: An empty shadow property will break IE.
; Leave it commented out if you aren't supplying an image.
;shadow = ""
anchorX = 16
anchorY = 51
infoX = 24
infoY = 4

; Marker sets
[numbermarkers]
name = "Number markers"
sequence = "100.png,101.png,110.png,200.png"

; Files

然后为100.png,101.png等创建关联的PNG文件(您可以使用其他图像类型)。按GMap设置页面上的 Regenerate 按钮使其重新读取ini文件,以便显示新的标记类型。

在您的GMap设置中,选择您的标记类型为“数字标记”(或您在ini文件中使用的任何名称)。

现在,按顺序将标记应用于您的数字类型,因此请确保您按照该十进制数对数字进行排序(例如,如果您使用视图,则在视图设置中)你提到的领域。

由于您的节点按数字顺序添加到地图中,并且标记序列中的图像也按数字顺序排列,您应该会发现每个节点都有正确的标记!

以后更新新号码

例如,如果要添加数字105,则需要:

  1. 创建关联的PNG
  2. 更新ini文件 - 将105.png添加到sequence行,以数字顺序保留条目(即在101.png和110.png之间添加105.png) ,
  3. 按下GMap设置页面上的 Regenerate 按钮,让它重新读取ini文件。
  4. 您可能还需要清除标准的Drupal缓存(drush cc all是您的朋友)。
  5. 您可能遇到的问题

    根据我的经验,标记序列在GMap中有一个错误,描述为herehere。由于这个错误,只使用序列中的一个项目。

    测试此问题的一种简单方法是使用GMap内置的“周”标记类型,并检查它们是否全部显示为“Sun”!

    我通过使用以下代码创建自定义模块来解决这个问题:

    function mymodule_gmap($op, &$map)
    {
        if ($op == 'pre_theme_map') {
            if (($map != null) && (array_key_exists('markers', $map)))
            {
                for ($count = 0; $count < sizeof($map['markers']); $count++) {
                    $map['markers'][$count]['offset'] = strval($count);
                }
            }
        }
    }
    

    这会手动设置“偏移”字段以确保其正确。

    您可以调整此代码,使添加新数字的过程更简单,但我不确定 - 我会让您去调查!

    标记文件夹

    我建议您在自己的模块中创建自定义标记,而不是将它们放入GMap的目录中,因为将它们添加到GMap会使升级更加困难。

    有关如何执行此操作的详细信息,请参阅:

答案 1 :(得分:0)

可能你应该借助imageMagick动态创建标记并将其附加到节点?

答案 2 :(得分:0)

虽然在gmap模块中可能有一个直接的解决方案(我想这就是你所指的),我使用的解决方案遇到类似的问题是从Drupal获取字段值(7)(经度和纬度)然后使用Googles javascript API放置自定义标记。

编辑位置和gmap模块有点太费时间了。

自定义标记可以通过google API的addMarker函数添加:http://code.google.com/apis/maps/documentation/javascript/overlays.html#ComplexIcons

示例代码如下所示:

    <?php
    drupal_add_js('http://maps.googleapis.com/maps/api/js?sensor=false');

    $locationID = $node->field_mylocationField_location['und'][0]['lid'] ; 
    $theLocation = location_load_location($locationID);


     drupal_add_js('jQuery(document).ready(function(){                   
               initialize();
               });', 'inline');

    ?>

    <script type="text/javascript">
function initialize() {
var latlng = new google.maps.LatLng(<?php print($theLocation['latitude']) ?>, <?php   print($theLocation['longitude'])?>);
var myOptions = {
  zoom: 12,
  center: latlng,
  mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map_canvas"),
    myOptions);

 }

 </script>