|
|
2#

楼主 |
发表于 2010-2-27 14:13:25
|
只看该作者

定制地图:
你可以使用自定义的标记和阴影。有两个工具可以帮助你创建这些图标—— 地图标记 和 阴影。你也可以使用HTML和CSS来定义气球提示。
加入多个标记并分组
我们可以标记多个地点,并可以把它们根据我们的需要分组。这样一来,我们可以通过不同的标记图标来显示地点的不同属性,比如:酒店,车站等。要做到这样,我们只需要使用一个XML文件,一个简单的XML文件如下所示:
01.<markers>
02.<marker
03. name="标题"
04. label="这是一个标签"
05. desc="气球提示的描述"
06. lat="37.97167" lng="23.72581"
07. type="标签的种类,如 Bridge"
08. address="地址信息"
09. icona="图标"
10./>
11.</markers>
你可以在这个XML文件中加入多个地点信息。有一件事你需要小心的是,当出现一一些特定字符时(比如单引号,双引号,“#@$<>”等),你需要使用HTML的转义。
使用这XML的脚本如下:
1.<script src="http://gmaps-utility-library.googlecode.com/svn/trunk/labeledmarker/release/src/labeledmarker.js" type="text/javascript"></script>
当然,你需要设置一些参数:
01.var iconRed = new GIcon();
02.iconRed.image = '../img/marker-red.png';
03.iconRed.shadow = '';
04.iconRed.iconSize = new GSize(32, 32);
05.iconRed.shadowSize = new GSize(22, 20);
06.iconRed.iconAnchor = new GPoint(16, 16);
07.iconRed.infoWindowAnchor = new GPoint(5, 1);
08.var customIcons = [];
09.
10.customIcons["ancient"] = iconRed;
11.var markerGroups = { "ancient": []};
上面,我们给customIcons 的“ancient”属性设置成了iconRed ,于是我们应该在我们的XML文件中使用类型(ancient) ,如果我们把这个XML文件命名为: markers.xml,那么,我们的代码如下:
01.GDownloadUrl("markers.xml", function(data) { //We tell Google Maps to load our file
02. var xml = GXml.parse(data);
03. var markers = xml.documentElement.getElementsByTagName("marker"); //and read markers
04. for (var i = 0; i < markers.length; i++) {
05. var name = markers.getAttribute("name"); //From here down we assign variables.
06. var label = markers.getAttribute("label");
07. var desc = markers.getAttribute("desc");
08. var address = markers.getAttribute("address");
09. var type = markers.getAttribute("type");
10. var icona = markers.getAttribute("icona");
11. var point = new GlatLng(parseFloat(markers.getAttribute("lat")), //and we set the lat-long
12. parseFloat(markers.getAttribute("lng")));
13. var marker = createMarker(point, name, label, desc, address, type, icona);
14. map.addOverlay(marker);
15. }
16. });
17.}
18.}
19.
20.function createMarker(point, name, label, desc, address, type, icona) {
21. var marker = new LabeledMarker(point, {icon: customIcons[type], labelText: label, labelOffset: new GSize(-6, -8)})
22.};
要分组标记,你需要下面的代码:
1. markerGroups[type].push(marker);
2. var html = "<img src=" + icona + " height=150 border=0 /><br><br><span><b>"+ name + "</b><br/>" +
3. desc + "<br/><b>Address:</b> " + address + "<br/><br/><span>";
4. GEvent.addListener(marker, 'click', function() {
5. marker.openInfoWindowHtml(html);
6. });
7. return marker;
8.}
要使用不同的图标,你可以使用相同的方法。
01.var iconRed = new GIcon();
02.iconRed.image = '../img/marker-red.png';
03.iconRed.shadow = '';
04.iconRed.iconSize = new GSize(32, 32);
05.iconRed.shadowSize = new GSize(22, 20);
06.iconRed.iconAnchor = new GPoint(16, 16);
07.iconRed.infoWindowAnchor = new GPoint(5, 1);
08.
09.var iconGreen = new GIcon();
10.iconGreen.image = '../img/marker-green.png';
11.iconGreen.shadow = '';
12.iconGreen.iconSize = new GSize(32, 32);
13.iconGreen.shadowSize = new GSize(22, 20);
14.iconGreen.iconAnchor = new GPoint(16, 16);
15.iconGreen.infoWindowAnchor = new GPoint(5, 1);
16.
17.var iconBrown = new GIcon();
18.iconBrown.image = '../img/marker-brown.png';
19.iconBrown.shadow = '';
20.iconBrown.iconSize = new GSize(32, 32);
21.iconBrown.shadowSize = new GSize(22, 20);
22.iconBrown.iconAnchor = new GPoint(16, 16);
23.iconBrown.infoWindowAnchor = new GPoint(5, 1);
24.
25.var customIcons = [];
26.
27.customIcons["hotel"] = iconRed;
28.customIcons["bridge"] = iconGreen;
29.customIcons["hill"] = iconBrown;
30.var markerGroups = { "hotel": [], "bridge": [], "hill": []};
所以,如果我们在XML 文件中设置了不同的种类,如:hotel,bridge 和 hill,我们也应该需要不同的颜色和图标。
过滤显示标记
我们还可以让我们的标记更友好一些。我们可以让用户决定是否显示标记,这样的话,地图上的标记就不会太多,也会根据用户的需求来显示相当的标记。我们可以使用几个按钮,复选框,或是链接来完成这个事情。要做到这个事,你需要在“map.addMapType(G_SATELLITE_3D_MAP); ”后面加入下面的代码:
1.document.getElementById("hotelCheckbox").checked = true;
2.document.getElementById("bridgeCheckbox").checked = true;
3.document.getElementById("hillCheckbox").checked = true;
4.document.getElementById("labelsCheckbox").checked = true;
然后再加入下面的这些 JavaScript 的代码:
01.function toggleGroup(type) {
02. for (var i = 0; i < markerGroups[type].length; i++) {
03. var marker = markerGroups[type];
04. if (marker.isHidden()) {
05. marker.show();
06. } else {
07. marker.hide();
08. }
09. }
10.}
11.
12.function toggleLabels() {
13. var showLabels = document.getElementById("labelsCheckbox").checked;
14. for (groupName in markerGroups) {
15. for (var i = 0; i < markerGroups[groupName].length; i++) {
16. var marker = markerGroups[groupName];
17. marker.setLabelVisibility(showLabels);
18. }
19. }
20.}
21.
22.function hideAll() {
23. var boxes = document.getElementsByName("mark");
24. for(var i = 0; i < boxes.length; i++) {
25. if(boxes.checked) {
26. boxes.checked = false;
27. switchLayer(false, layers.obj);
28. chosen.push(i);
29. }
30. }
31.}
32.
33.function checkChecked() {
34. var boxes = document.getElementsByName("mark");
35. for(var i = 0; i < boxes.length; i++) {
36. if(boxes.checked) return true;
37. }
38. return false;
39.}
最后一件事是加如几个checkbox :
1.<input type="hidden" id="labelsCheckbox" onclick="toggleLabels()" checked=”checked” />
2.<label for=”hotelCheckbox”>Hotels</label><input type="checkbox" id="hotelCheckbox" onclick="toggleGroup('hotel')" checked=”checked” />
3.<label for=”bridgeCheckbox”>Bridges</label><input type="checkbox" id="bridgeCheckbox" onclick="toggleGroup('bridge')" checked=”checked” />
我们 Google Maps 就绪了,这篇文章讲述了Google Map API中你应该知道的。希望这篇文章对你有帮助。 |
|