0

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

http://cl.ly/2Y3T3J2B2X1M2w2d0u2n

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

任何帮助都感激不尽。

4

3 回答 3

1

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

您可以利用 GMap 支持自定义标记序列这一事实。

因此,您可以创建一个自定义标记文件夹,并在该文件夹中创建一个如下所示的 .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是您的朋友)。

您可能会遇到的问题

根据我的经验,标记序列在 GMap 中有一个错误,在此处此处进行了描述。由于此错误,仅使用了序列中的一项。

测试这个问题的一个简单方法是使用 GMap 内置的“星期”标记类型,并检查它们是否都显示为“太阳”!

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

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 会使升级更加困难。

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

于 2013-05-23T11:45:44.140 回答
0

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

编辑 location 和 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>
于 2011-08-30T20:40:34.647 回答
0

可能您应该在 imageMagick 的帮助下动态创建标记并将其附加到节点?

于 2011-08-30T15:16:19.970 回答