2010.02.23——google map api----五岳剑派 拖拽的标注
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML ><HEAD><TITLE>五岳剑派</TITLE>
<script type="text/javascript" src="http://ditu.google.cn/maps?file=api&v=2&key=abcdefg&sensor=true_or_false"></script>
<SCRIPT type="text/javascript">
//<![CDATA[
// Copyright 2007 Google Inc.
// All Rights Reserved.
/**
* 这个例子演示了 Google 地图 API 的以下功能:
* * 可拖拽的标注
* * 自定义标注的图标
* * 计算地理距离
* * 事件处理(单击)
* * 消息提示窗口(气泡窗口)
* * 和文档模型(DOM)交互
*
* @author haogang
*/
var targets = [
{'name':'东岳泰山', 'pt':[36.207715, 117.144470], 'icon':'images/red'},
{'name':'西岳华山', 'pt':[34.525793, 110.048676], 'icon':'images/blue'},
{'name':'南岳衡山', 'pt':[27.293689, 112.806244], 'icon':'images/yellow'},
{'name':'北岳恒山', 'pt':[39.607804, 113.656311], 'icon':'images/purple'},
{'name':'中岳嵩山', 'pt':[34.523389, 113.005028], 'icon':'images/green'}
];
var markers = []; // 给用户拖拽的标注
var targetMarkers = []; // 显示正确答案的标注
var showAnswer = true; // 当前的视图模式(解题模式,答案模式)
var map; // 全局的 Google Map 控件
var error = 100; // 判断正误时允许的误差,以公里为单位
/**
* 在表格里显示图例,帮助用户了解不同标注的含义
*/
function loadTableItems() {
for (i = 0; i < targets.length; i++) {
document.write('<tr><td><img src="' + targets[i]['icon']
+ '.png"/> ' + targets[i]['name'] + '</td></tr>');
}
}
/**
* 在“解题模式”和“答案模式”间切换,同时也更改切换按钮的标签
*/
function switchMarkers() {
showAnswer = !showAnswer;
// 先清除掉当前的所有标注
map.clearOverlays();
// 再根据当前模式加入对应的标注
for (i = 0; i < targets.length; i++) {
map.addOverlay(showAnswer ? targetMarkers[i] : markers[i]);
}
var switcher = document.getElementById('switcher');
switcher.value = showAnswer ? '隐藏答案' : '显示答案';
}
/**
* 为气泡提示窗口创建 DOM 对象,包括地点的名称和简要描述
* @param {Number} i 该地点在 targets 数组中的下标
*/
function createInfoWindow(i) {
// 从网页的隐藏部分载入该地点的描述性文字
var targetDescs = document.getElementById('targetDescs');
var desc = targetDescs.getElementsByTagName('div')[i].innerHTML;
// 为气泡提示窗口创建动态 DOM 对象,这里我们用 DIV 标签
var div = document.createElement('div');
div.innerHTML = '<div style="font-size: 9pt; width:300px"><b>'
+ targets[i]['name'] + '</b><br/>' + desc + '</div>';
// 当用户关闭气泡时 Google Map API 会自动释放该对象
return div;
}
/**
* 本函数为每个地点创建两个标注:一个给用户拖拽,另一个显示标准答案
* @param {Number} i 该地点在 targets 数组中的下标
*/
function createMarker(i) {
// 先创建给用户拖拽的标注:一开始它们依次排列在地图的左上角
// 下一行代码演示了如何将 map 控件的像素坐标转化为经纬度
var initPt = map.fromContainerPixelToLatLng(new GPoint((i + 1) * 30, 50));
var ico = new GIcon(G_DEFAULT_ICON, targets[i]['icon'] + '.png');
// 参数 draggable: true 表示可拖拽
markers.push(new GMarker(initPt, { draggable: true, icon: ico }));
// 再创建正确答案的标注:将它们放在正确的位置上,而且是不可拖拽的
var targetPt = new GLatLng(targets[i]['pt'][0], targets[i]['pt'][1]);
var marker = new GMarker(targetPt, { icon: new GIcon(ico) });
targetMarkers.push(marker);
// 为正确答案标注添加事件处理函数:用户单击它时会弹出气泡提示
GEvent.addListener(marker, 'click',
function() {
marker.openInfoWindow(createInfoWindow(i));
}
);
}
/**
* 比较用户的答案和正确答案,并给用户打分
*/
function judge() {
var correct = 0;
for (i = 0; i < targets.length; i++) {
// 获得对应的两个坐标,并求出它们的距离 dist (以米为单位)
var target = new GLatLng(targets[i]['pt'][0], targets[i]['pt'][1]);
var marker = markers[i].getPoint();
var dist = target.distanceFrom(marker);
// 根据误差判断正误,并根据正误将标注的图标切换为“勾”或“差”
if (dist > error * 1000) {
markers[i].getIcon().image = targets[i]['icon'] + '_cross.png';
} else {
markers[i].getIcon().image = targets[i]['icon'] + '_tick.png';
correct++;
}
}
// 计算得分(正确率)
var score = document.getElementById('score');
score.innerHTML = correct * 100 / targets.length;
// 保证切换到“解题模式”,用户才能看到图标的变化,从而知道哪些错了
if (showAnswer) {
switchMarkers();
} else {
// 刷新地图:必须重新添加标注,才能反映图标的变化
for (i = 0; i < targets.length; i++) {
map.removeOverlay(markers[i]);
map.addOverlay(markers[i]);
}
}
}
/**
* 创建地图控件,以及两组标注
*/
function load() {
if (GBrowserIsCompatible()) {
map = new GMap2(document.getElementById('map'));
// 将视图移到中国
map.setCenter(new GLatLng(37, 107), 4);
// 为 targets 数组中的每个地点,创建两个标注
for (i = 0; i < targets.length; i++) {
createMarker(i);
}
// 进入“解题模式”
switchMarkers();
}
}
//]]>
</SCRIPT>
<META content="MSHTML 6.00.3790.4357" name="GENERATOR"></HEAD>
<BODY onload="load()" onunload="GUnload()">
<TABLE width="100%">
<TBODY>
<TR>
<TD style="WIDTH: 700px">
<DIV id="map" style="WIDTH: 700px; HEIGHT: 500px"></DIV></TD>
<TD vAlign="top"><B>请在地图中标出以下位置:</B><BR>
<HR>
<TABLE id="targetList" width="100%">
<TBODY>
<SCRIPT
type="text/javascript">
loadTableItems();
</SCRIPT>
</TBODY></TABLE>
<HR>
<INPUT onclick="judge()" type="button" value="评判"> <INPUT id="switcher" onclick="switchMarkers()" type="button" value="switcher">
<HR>
<B>得分:<SPAN id="score" style="COLOR: red"></SPAN></B> </TD></TR></TBODY></TABLE>
<DIV id="targetDescs" style="DISPLAY: none">
<DIV>位于山东省泰安县境的泰山,又称“岱宗”、“岱”即大山,“岱”为长辈,意即:泰山是中国大山的长辈。泰山雄踞于山东省中部,海拔1545米。 </DIV>
<DIV>西岳华山位于西安市东120公里处的华阴县城南,海拔2200米,以奇险峻秀著称,素称“天下奇险第一山”,也是著名的道教圣地之一。 </DIV>
<DIV>衡山又称南岳,位于湖南省衡山县,山势雄伟,绵延数百公里。七十二峰中以祝融、天柱、芙蓉、紫盖、石 五峰最有名。最高峰为祝融峰,海拔1290米。
</DIV>
<DIV>五岳中以北岳恒山最高,位于山西省浑源县城南四公里处,绵延150余公里。主峰天峰领海拔2017米。高耸入云,给人以顶天立地之感。 </DIV>
<DIV>中岳嵩山,位于河南省登峰县境,因地处中原,古称“中岳”。其主峰峻极峰海拔1584米。 山峰多寺也多,有“上有七十二峰、下有七十寺”之说。
</DIV></DIV></BODY></HTML>
分享到:
相关推荐
赠送jar包:jakarta.validation-api-2.0.1.jar; 赠送原API文档:jakarta.validation-api-2.0.1-javadoc.jar; 赠送源代码:jakarta.validation-api-2.0.1-sources.jar; 赠送Maven依赖信息文件:jakarta.validation...
赠送jar包:mapstruct-jdk8-1.2.0.Final.jar; 赠送原API文档:mapstruct-jdk8-1.2.0.Final-javadoc.jar; 赠送源代码:mapstruct-jdk8-1.2.0.Final-sources.jar; 赠送Maven依赖信息文件:mapstruct-jdk8-1.2.0....
1,安装说明.txt ——————————安装手册 2,jdk-170.tar.gz ——————————JDK1.7deb包 3,switch_java.sh -------------------------java其它版本切换 4,check_java.sh———————————版本...
**谷歌地图API详解** 谷歌地图API(Google Maps API)是谷歌提供的一项强大的服务,允许开发者在自己的网站或应用中嵌入交互式地图功能。通过这个API,你可以自定义地图显示的内容,添加标记、路径、信息窗口,甚至...
赠送jar包:javax.annotation-api-1.3.2.jar; 赠送原API文档:javax.annotation-api-1.3.2-javadoc.jar; 赠送源代码:javax.annotation-api-1.3.2-sources.jar; 赠送Maven依赖信息文件:javax.annotation-api-...
《API-MS-WIN-CORE-HEAP-L2-1-0.DLL:64位系统的核心内存管理组件解析》 在Windows操作系统中,DLL(Dynamic Link Library)文件扮演着至关重要的角色,它们包含了可被多个程序共享的代码和数据。"api-ms-win-core-...
《api-ms-win-core-heap-l2-1-0.dll:操作系统核心堆管理库解析》 在Windows操作系统中,`api-ms-win-core-heap-l2-1-0.dll`是一个至关重要的动态链接库文件,它是系统核心堆管理的一部分,用于32位和64位系统。该...
步骤一: ... 下载【X86】版,安装时出现已经有同类型在运行,打开软件管家发现已经有2017版的,卸载...将api-ms-win-downlevel-shlwapi-l1-1-0.dll拷贝到C:\Windows\System32和C:\Windows\SysWOW64. 'import cv2' 成功
赠送jar包:jakarta.websocket-api-1.1.2.jar; 赠送原API文档:jakarta.websocket-api-1.1.2-javadoc.jar; 赠送源代码:jakarta.websocket-api-1.1.2-sources.jar; 赠送Maven依赖信息文件:jakarta.websocket-api...
赠送jar包:avalon-framework-api-4.3.1.jar; 赠送原API文档:avalon-framework-api-4.3.1-javadoc.jar; 赠送源代码:avalon-framework-api-4.3.1-sources.jar; 赠送Maven依赖信息文件:avalon-framework-api-...
赠送jar包:jjwt-api-0.11.2.jar; 赠送原API文档:jjwt-api-0.11.2-javadoc.jar; 赠送源代码:jjwt-api-0.11.2-sources.jar; 赠送Maven依赖信息文件:jjwt-api-0.11.2.pom; 包含翻译后的API文档:jjwt-api-...
2020.4.11-措施项目——模板工程量计算规则
基于因子分析的我国A股上市...争力评价——以医药企业为例_张澳.caj
赠送jar包:jboss-annotations-api_1.3_spec-2.0.1.Final.jar; 赠送原API文档:jboss-annotations-api_1.3_spec-2.0.1.Final-javadoc.jar; 赠送源代码:jboss-annotations-api_1.3_spec-2.0.1.Final-sources.jar;...
赠送jar包:javax.ws.rs-api-2.0.1.jar; 赠送原API文档:javax.ws.rs-api-2.0.1-javadoc.jar; 赠送源代码:javax.ws.rs-api-2.0.1-sources.jar; 赠送Maven依赖信息文件:javax.ws.rs-api-2.0.1.pom; 包含翻译后...
hibernate-jpa-2.1-api-1.0.0.final-sources.jar 源码 hibernate-jpa-2.1-api-1.0.0.final-sources.jar 源码
包含翻译后的API文档:lettuce-core-5.0.5.RELEASE-javadoc-API文档-中文(简体)版.zip; Maven坐标:io.lettuce:lettuce-core:5.0.5.RELEASE; 标签:core、lettuce、jar包、java、API文档、中文版; 使用方法:解压...
包含翻译后的API文档:netty-codec-mqtt-4.1.74.Final-javadoc-API文档-中文(简体)版.zip; Maven坐标:io.netty:netty-codec-mqtt:4.1.74.Final; 标签:netty、codec、mqtt、中文文档、jar包、java; 使用方法:...
微信小程序——新闻客户端(截图+源码).zip 微信小程序——新闻客户端(截图+源码).zip 微信小程序——新闻客户端(截图+源码).zip 微信小程序——新闻客户端(截图+源码).zip 微信小程序——新闻客户端(截图+...
微信小程序——新浪读书(截图+源码).zip 微信小程序——新浪读书(截图+源码).zip 微信小程序——新浪读书(截图+源码).zip 微信小程序——新浪读书(截图+源码).zip 微信小程序——新浪读书(截图+源码).zip ...