我需要做的很简单 - 我有一个内容类型,其CCK字段名为Number(令人惊讶的是,它包含一个十进制数),这个内容类型也有一个位置(每个节点总是1个位置)。现在我需要在GMap上显示来自CCK字段编号的数字,而不是典型的GMap标记,如下所示:
知道怎么做吗?我简要介绍了GMap模块中包含的标记管理器,我可以创建自己的标记管理器,但我唯一不知道的是如何将节点数据(CCK字段内容)传递到标记管理器。
非常感谢任何帮助。
答案 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,则需要:
sequence
行,以数字顺序保留条目(即在101.png和110.png之间添加105.png) ,drush cc all
是您的朋友)。您可能遇到的问题
根据我的经验,标记序列在GMap中有一个错误,描述为here和here。由于这个错误,只使用序列中的一个项目。
测试此问题的一种简单方法是使用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>