如何把在线地图Google Maps API整合到网站中去?
四、加入多个标记并分组
我们可以标记多个地点,并可以把它们根据我们的需要分组。这样一来,我们可以通过不同的标记图标来显示地点的不同属性,比如:酒店,车站等。要做到这样,我们只需要使用一个XML文件,一个简单的XML文件如下所示:
<markers> <marker name="标题" label="这是一个标签" desc="气球提示的描述" lat="37.97167" lng="23.72581" type="标签的种类,如 Bridge" address="地址信息" icona="图标" /> </markers>
你可以在这个XML文件中加入多个地点信息。有一件事你需要小心的是,当出现一一些特定字符时(比如单引号,双引号,“#@$<>”等),你需要使用HTML的转义。
使用这XML的脚本如下:
<script src="http://gmaps-utility-library.googlecode.com/svn/trunk/labeledmarker/release/src/labeledmarker.js" type="text/javascript"></script>
当然,你需要设置一些参数:
var iconRed = new GIcon();
iconRed.image = '../img/marker-red.png';
iconRed.shadow = '';
iconRed.iconSize = new GSize(32, 32);
iconRed.shadowSize = new GSize(22, 20);
iconRed.iconAnchor = new GPoint(16, 16);
iconRed.infoWindowAnchor = new GPoint(5, 1);
var customIcons = [];
customIcons["ancient"] = iconRed;
var markerGroups = { "ancient": []};
上面,我们给customIcons 的“ancient”属性设置成了iconRed ,于是我们应该在我们的XML文件中使用类型(ancient) ,如果我们把这个XML文件命名为: markers.xml,那么,我们的代码如下:
GDownloadUrl("markers.xml", function(data) { //We tell Google Maps to load our file
var xml = GXml.parse(data);
var markers = xml.documentElement.getElementsByTagName("marker"); //and read markers
for (var i = 0; i < markers.length; i++) {
var name = markers[i].getAttribute("name"); //From here down we assign variables.
var label = markers[i].getAttribute("label");
var desc = markers[i].getAttribute("desc");
var address = markers[i].getAttribute("address");
var type = markers[i].getAttribute("type");
var icona = markers[i].getAttribute("icona");
var point = new GlatLng(parseFloat(markers[i].getAttribute("lat")), //and we set the lat-long
parseFloat(markers[i].getAttribute("lng")));
var marker = createMarker(point, name, label, desc, address, type, icona);
map.addOverlay(marker);
}
});
}
}
function createMarker(point, name, label, desc, address, type, icona) {
var marker = new LabeledMarker(point, {icon: customIcons[type], labelText: label, labelOffset: new GSize(-6, -8)})
};
要分组标记,你需要下面的代码:
markerGroups[type].push(marker);
var html = "<img src=" + icona + " height=150 border=0 /><br><br><span><b>"+ name + "</b><br/>" +
desc + "<br/><b>Address:</b> " + address + "<br/><br/><span>";
GEvent.addListener(marker, 'click', function() {
marker.openInfoWindowHtml(html);
});
return marker;
}
要使用不同的图标,你可以使用相同的方法。
var iconRed = new GIcon();
iconRed.image = '../img/marker-red.png';
iconRed.shadow = '';
iconRed.iconSize = new GSize(32, 32);
iconRed.shadowSize = new GSize(22, 20);
iconRed.iconAnchor = new GPoint(16, 16);
iconRed.infoWindowAnchor = new GPoint(5, 1);
var iconGreen = new GIcon();
iconGreen.image = '../img/marker-green.png';
iconGreen.shadow = '';
iconGreen.iconSize = new GSize(32, 32);
iconGreen.shadowSize = new GSize(22, 20);
iconGreen.iconAnchor = new GPoint(16, 16);
iconGreen.infoWindowAnchor = new GPoint(5, 1);
var iconBrown = new GIcon();
iconBrown.image = '../img/marker-brown.png';
iconBrown.shadow = '';
iconBrown.iconSize = new GSize(32, 32);
iconBrown.shadowSize = new GSize(22, 20);
iconBrown.iconAnchor = new GPoint(16, 16);
iconBrown.infoWindowAnchor = new GPoint(5, 1);
var customIcons = [];
customIcons["hotel"] = iconRed;
customIcons["bridge"] = iconGreen;
customIcons["hill"] = iconBrown;
var markerGroups = { "hotel": [], "bridge": [], "hill": []};
所以,如果我们在XML 文件中设置了不同的种类,如:hotel,bridge 和 hill,我们也应该需要不同的颜色和图标。
五、过滤显示标记
我们还可以让我们的标记更友好一些。我们可以让用户决定是否显示标记,这样的话,地图上的标记就不会太多,也会根据用户的需求来显示相当的标记。我们可以使用几个按钮,复选框,或是链接来完成这个事情。要做到这个事,你需要在“map.addMapType(G_SATELLITE_3D_MAP); ”后面加入下面的代码:
document.getElementById("hotelCheckbox").checked = true;
document.getElementById("bridgeCheckbox").checked = true;
document.getElementById("hillCheckbox").checked = true;
document.getElementById("labelsCheckbox").checked = true;
然后再加入下面的这些 JavaScript 的代码:
function toggleGroup(type) {
for (var i = 0; i < markerGroups[type].length; i++) {
var marker = markerGroups[type][i];
if (marker.isHidden()) {
marker.show();
} else {
marker.hide();
}
}
}
function toggleLabels() {
var showLabels = document.getElementById("labelsCheckbox").checked;
for (groupName in markerGroups) {
for (var i = 0; i < markerGroups[groupName].length; i++) {
var marker = markerGroups[groupName][i];
marker.setLabelVisibility(showLabels);
}
}
}
function hideAll() {
var boxes = document.getElementsByName("mark");
for(var i = 0; i < boxes.length; i++) {
if(boxes[i].checked) {
boxes[i].checked = false;
switchLayer(false, layers[i].obj);
chosen.push(i);
}
}
}
function checkChecked() {
var boxes = document.getElementsByName("mark");
for(var i = 0; i < boxes.length; i++) {
if(boxes[i].checked) return true;
}
return false;
}
最后一件事是加如几个checkbox :
<input type="hidden" id="labelsCheckbox" onclick="toggleLabels()" checked=”checked” />
<label for=”hotelCheckbox”>Hotels</label><input type="checkbox" id="hotelCheckbox" onclick="toggleGroup('hotel')" checked=”checked” />
<label for=”bridgeCheckbox”>Bridges</label><input type="checkbox" id="bridgeCheckbox" onclick="toggleGroup('bridge')" checked=”checked” />
我们 Google Maps 就绪了,这篇文章讲述了Google Map API中你应该知道的。希望这篇文章对你有帮助。
- 栏目搜索>>分类导航
-
Flash幻灯
jQuery幻灯
JS幻灯
Flash相册
jQuery相册
图片特效
导航菜单
广告代码
在线客服
表单按钮
其它特效
-
HTML
CSS
JavaScript
Dreamweaver
Fireworks
设计分享
- 建站教程 网站运营 实用工具 网页模板 网页素材
-
CSS酷站
网上购物
设计团队
设计博客
-
- 教程排行榜
- 20款华丽酷炫的jQuery图片相册插件
- 新手教程:10个jQuery特效讲解
- 如何处理JS的'null'为空或不是对象
- 分享10款精美的焦点幻灯和图片特效jQuery插件
- 多款提高网页表格(table)操作易用性的jQuery插件
- 打造完美的jQuery网页进度条(LOADING)
- 20款超酷的基于jQuery的幻灯和表单插件(附...
- 如何把在线地图Google Maps API整合到网站中去?
- jQuery 1.4.1 中文帮助文档速查表(附CHM文件下载)
- 最新的jQuery 1.4官方文档中文翻译版
- 零起步学习如何写jQuery框架
- 基于JQuery的上传插件Uploadify使用方法详解
- jQuery的鼠标事件实例教程
- lazyload:基于jQuery框架实现图片异步加载
- 多个增强Web设计界面的Javascript脚本代码
- JS代码的window.location属性详解
- 下载排行榜
- jQuery图片特效代码 带缩略图和文字标题简...
- 仿淘宝商城天猫首页jQuery多格焦点幻灯图特...
- 仿QQ商城焦点图jquery幻灯特效代码
- 宽屏flash+xml焦点幻灯图特效代码
- 效果媲美flash的jQuery幻灯代码支持多种切换效果
- 3D立体效果的flash+xml照片墙相册展示代码
- 带标题和数字导航的JS焦点幻灯特效代码
- 31款简单实用的CSS+JS下拉菜单脚本
- 漂亮的jquery+Lightbox灯箱效果图片展示特效代码
- 基于mootools有7种效果的Gallery(画廊)幻灯相册代码
- 超酷HTML5图片特效代码支持全屏显示
- 漂亮的jquery画廊相册特效支持缩略图和键盘...
- 可自动展开和折叠收起的QQ在线客服代码
- 半透明立体质感的宽屏flash+xml焦点幻灯代码
- 基于jQuery的首页自动收缩全屏广告代码
- 超酷3D摩天轮flash+xml幻灯相册特效源码
