Google Map API应用例子源代码


最近项目需要做一个地图的功能,上面要加上一些地标,以方便用户使用,所以今天花时间看了看Google API搞了好一会儿,终于做到满足自已的功能要求了,发布出来给需要的朋友看看。
其实GoogleMap API还是比较好用的,慢慢看GoogleMap API的帮助都可以做出来,我这里主要介绍的是怎么将地标存放起来,再读出来。不然只是一个地图在哪儿没有什么意义。
我这里是用XML来存放的,存下来的数据还是比较简单,你可以根据自已的需要做一些修改就可以了,也可以换成数据库来存放。

Jquery.GoogleMap.js源代码内容

/*
-- GoogleMap操作类
-- 作者:李华顺
-- 官方网站:http://www.wathon.com
-- 我的博客:http://huacn.cnblogs.com
-- 演示地址:http://www.wathon.com/opensource/js/GoogleMap/Default.aspx
-- 使用请保存署名
*/

//创建GoogleMap
//
panelMap - 显示地图的对象区域
//
showScale - 是否显示改变大小的控件 true false
//
showLargeControl - 是否显示切换控件  true false
//
showTypeControl - 是否显示切换显示类型的按钮
//
showZoom - 是否显示左下角的小地图
//
zoomSize - 视觉距离
var clickListener ;
var GoogleMapCreate = function(panelMap,showScale,showLargeControl,showTypeControl,showZoom,zoomSize){
    myMap 
= new GMap2(panelMap);
    
if(showLargeControl)
    {
        myMap.addControl(
new GLargeMapControl());        
    }
    
else
    {
         myMap.addControl(
new GSmallMapControl());  
    }
    
    
    
if(showTypeControl)
    {
        myMap.addControl(
new GMapTypeControl());
    }
    
    
    
if(showScale)
    {
        myMap.addControl(
new GScaleControl());
    }
    
    
if(showZoom)
    {
        myMap.addControl(
new GOverviewMapControl());
    }
    
    myMap.enableDoubleClickZoom();
    myMap.enableContinuousZoom();
    
    myMap.setCenter(
new GLatLng(39.917116.397), zoomSize,G_SATELLITE_MAP);
    
return myMap;
};


//添加事件
var GoogleMapAddEvent = function(myMap,eventName,fun){
    clickListener 
= GEvent.addListener(myMap,eventName,fun);
};

//去除事件
var GoogleMapRemoveEvent = function(myMap,eventName){
    GEvent.removeListener(clickListener);
};


//在指定坐标上显示tip提示
var GoogleMapShowTip = function(myMap,point,text){
    myMap.openInfoWindow(point,document.createTextNode(text));
};


//在指定坐标上加入地标
var GoogleMapNewMarker = function(myMap,point){
    
var marker = new GMarker(point);
    myMap.addOverlay(marker);
    
return marker;
};

//根据坐标点取得X坐标
var GoogleMapPointX = function(point){
    
return point.lat();
};

//根据坐标点取得Y坐标
var GoogleMapPointY = function(point){
    
return point.lng();
};

服务端部分的源代码内容

/*
-- GoogleMap操作类
-- 作者:李华顺
-- 官方网站:
http://www.wathon.com
-- 我的博客:
http://huacn.cnblogs.com
-- 演示地址:
http://www.wathon.com/opensource/js/GoogleMap/Default.aspx
-- 使用请保存署名
*/


using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml;


namespace GoogleMap
{
    
public partial class _Default : System.Web.UI.Page
    {
        
protected string mapName = "";
        
protected string mapAreaX = "";
        
protected string mapAreaY = "";
        
protected void Page_Load(object sender, EventArgs e)
        {
            initPage();
        }

        
public void initPage()
        {
            AreaList myArea 
= new AreaList(Server.MapPath("App_Data\\"));

            
if (Request["type"== "savearea")
            {
                Response.ContentType 
= "text/xml";
                Response.ContentEncoding 
= System.Text.Encoding.UTF8;

                
//保存地标
                string strName = Request["name"];
                
string strAreaX = Request["x"];
                
string strAreaY = Request["y"];

                myArea.AppendNew(strName, strAreaX, strAreaY);


                WriteResult(Request[
"name"]);

                Response.End();
            }

            System.Xml.XmlNodeList myNodes 
= myArea.GetAreaList();
            
for (int i = 0; i < myNodes.Count; i++)
            {
                
if (i > 0)
                {
                    mapName 
+= ",";
                    mapAreaX 
+= ",";
                    mapAreaY 
+= ",";
                }

                mapName 
+= "'" + myNodes[i].SelectSingleNode("name").InnerText + "'";
                mapAreaX 
+= "'" + myNodes[i].SelectSingleNode("x").InnerText + "'";
                mapAreaY 
+= "'" + myNodes[i].SelectSingleNode("y").InnerText + "'";


            }

        }

        
private void WriteResult(string strValue)
        {
            
string strContent = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
            strContent 
+= "<result>" + strValue + "</result>";
            Response.Write(strContent);
            Response.End();
        }
    }

    
/// <summary>
    
/// AreaList 的摘要说明
    
/// </summary>
    public class AreaList
    {
        XmlDocument xmlControl 
= new XmlDocument();
        
string strFileName = "\\MapArea.xml";

        
public AreaList(string appPath)
        {
            strFileName 
= appPath + strFileName;
            
if (!System.IO.File.Exists(strFileName))
            {
                CreateAreaListFile();
            }


            xmlControl.Load(strFileName);
        }

        
private void CreateAreaListFile()
        {
            xmlControl.LoadXml(
"<?xml version=\"1.0\" encoding=\"utf-8\" ?><list></list>");
            xmlControl.Save(strFileName);
        }

        
public void AppendNew(string strName, string strX, string strY)
        {
            XmlNode xmlNodeLast 
= xmlControl.SelectSingleNode("//list");
            
string strXml = "<name>" + makeCDATA(strName) + "</name><x>" + makeCDATA(strX) + "</x><y>" + makeCDATA(strY) + "</y>";
            XmlNode xmlNode 
= xmlControl.CreateNode(XmlNodeType.Element, "item""");
            xmlNode.InnerXml 
= strXml;
            xmlNodeLast.AppendChild(xmlNode);
            xmlControl.Save(strFileName);
        }

        
/// <summary>
        
/// 取得旧的列表
        
/// name,area
        
/// 地标名,坐标
        
/// </summary>
        
/// <returns></returns>
        public System.Xml.XmlNodeList GetAreaList()
        {
            System.Xml.XmlDocument xmlDoc 
= new System.Xml.XmlDocument();
            xmlDoc.Load(strFileName);

            System.Xml.XmlNodeList myNodes 
= xmlDoc.SelectNodes("//list//item");
            
return myNodes;
        }

        
private string makeCDATA(string strValue)
        {
            
return "<![CDATA[" + strValue + "]]>";
        }
    }
}

HTML部分的源代码内容

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="GoogleMap._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    
<title>GoogleMap例子</title>    
    
<script type="text/javascript" src="scripts/jquery.js"></script>
    
<script type="text/javascript" src="scripts/jquery.interface.js"></script>
    
<script type="text/javascript" src="scripts/jquery.xml.js"></script>
    
<script type="text/javascript" src="scripts/jquery.corner.js"></script>
    
<script type="text/javascript" src="scripts/jquery.googlemap.js"></script>
    
<script type="text/javascript" src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAAC-ble-vmy_g7-Qvem5P86xS0EUK71C1jmG2AnVsYTJQQEVD0-RQfglPje0X6A_y2FM1T2dU6BPVKQg"></script>
    
<style type="text/css">
        body
{
            font-size
:12px;
            font-family
:宋体;
            text-align
:center;
        
}
        
        #layer 
{ margin:20px auto; text-align:left; width:800px;}
        .toolbar,.arealist 
{ background:#F5F5F5;border:1px solid #F0F0F0; padding:5px; margin-bottom:8px;}
        
        #panelMap 
{width:800px; height:450px;}
        
        .window 
{ }
    
</style>
    
<script type="text/javascript">
        
var myMap;
        
var MapName = [<%=mapName %>];
        
var MapAreaX = [<%=mapAreaX %>];
        
var MapAreaY = [<%=mapAreaY %>];
        
var zoomSize = 5;
        
        
        $(document).ready(
function(){
            myMap 
= GoogleMapCreate(document.getElementById("panelMap"),true,true,true,true,zoomSize);
            
            
//给“添加”按钮的click放入事件
            $('#lblAddArea').click(function() {
                
//$('div#info').show('slow');
                GoogleMapAddEvent(myMap, "click"function(marker, point) {
                    GoogleMapNewMarker(myMap,point);
                    
var areaName = prompt("请输入地标名称:","");
                    
var x = GoogleMapPointX(point);
                    
var y = GoogleMapPointY(point);
                    $.ajax({
                        url:
"default.aspx?type=savearea&x="+x+"&y="+y+"&name="+areaName,
                        type:
"post",
                        success:
function(xmlData){
                            GoogleMapShowTip(myMap,point,GetNodeValue(xmlData.selectSingleNode(
"result")));                            
                        }
                    });
                    GoogleMapRemoveEvent(myMap,
"click");
                });
            });
            
            
//读旧的地标
            writeAreaList();
            
            
//开启自动切换地标
            //autoSelectMarker();
        });
        
        
//创建地标到地图上
        var setMapArea = function(tip,x,y){
            
var point = new GLatLng(x,y,zoomSize);
            
            
var myMarker = GoogleMapNewMarker(myMap,point);
            GEvent.addListener(myMarker, 
"click"function() {
                GoogleMapShowTip(myMap,point,tip);
            });
            
            
        };
        
        
//生成地标
        var writeAreaList = function(){
            
var areaList = $("div.arealist");
            
            
for(var i=0; i<MapName.length;i++)
            {
                
var tip = MapName[i];              
                
var x = MapAreaX[i];
                
var y = MapAreaY[i];
                areaList.append(
"<a href=\"javascript:selectMarker('" + tip + "'," + x + "," + y + ");\">"+tip+"</a> ");
                setMapArea(tip,x,y);
            }
        };      
        
        
//选择一个地标
        var selectMarker = function(tip,x,y){    
            
var point = new GLatLng(x,y);
                    
            myMap.panTo(point,zoomSize);
            GoogleMapShowTip(myMap,point,tip);
        };
        
        
//自动在几个地标上切换的事件
        var currentMarkerID = 0;
        
var autoSelectMarker = function(){
            
            
if(currentMarkerID == MapName.length)
            {                     
                currentMarkerID 
= 0;
            }
            
            
var tip = MapName[currentMarkerID];              
            
var x = MapAreaX[currentMarkerID];
            
var y = MapAreaY[currentMarkerID];
            selectMarker(tip,x,y);
            currentMarkerID 
++;
            
            setTimeout(autoSelectMarker,
4000);
        }; 
                
    
</script>    
</head>
<body onunload="GUnload()">
    
<form id="form1" runat="server">
    
<div id="layer">
        
<div class="toolbar">
            
<href="javascript:;" id="lblAddArea">添加地标</a>
        
</div>
        
<div class="arealist">
            
        
</div>
        
<div id="panelMap">
        
        
</div>
    
</div>
    
</form>
</body>
</html>

GoogleMap API应用例子源代码:http://files.cnblogs.com/huacn/GoogleMap.zip
posted on 2007-08-10 23:33 李华顺 阅读(4752) 评论(21)  编辑 收藏 所属分类: Javascript & Ajax.NET

  回复  引用  查看    
2007-08-11 01:08 | sinoese      
不错
  回复  引用  查看    
2007-08-11 09:36 | 桂圆      
正好要看下 GOOGLE 的地图API
学习啦
  回复  引用    
2007-08-11 09:41 | ygl [未注册用户]
好东西
  回复  引用  查看    
2007-08-11 12:28 | 李华顺      
晕,怎么加上这么多Null,看看
  回复  引用  查看    
2007-08-13 10:27 | 针式个人知识库管理      
一看就不错,待以后细看!
  回复  引用    
2007-08-17 13:31 | bwrobert [未注册用户]
怎么下载的代码很少?
  回复  引用  查看    
2007-08-17 17:31 | 李华顺      
@bwrobert
没明白你的意义
本来就这么少呀?要多少?
  回复  引用    
2007-08-17 21:51 | feng [未注册用户]
use the ditu not map
  回复  引用    
2007-08-23 21:05 | LOOK [未注册用户]
怎么不能添加中文的地标呢,奇怪!
  回复  引用  查看    
2007-08-24 00:27 | 李华顺      
@LOOK
编码有些问题,本地都OK的,等有空的时候修改一下,多半是XML的问题
  回复  引用    
2007-08-24 15:24 | bwrobert [未注册用户]
要是用JAVA实现的就好了!最近在弄这个呢!一头的雾水.

  回复  引用    
2007-08-24 15:54 | bwrobert [未注册用户]
至少少了GMaps类哦!代码不全啊!
  回复  引用    
2007-08-27 11:58 | TOM [未注册用户]
望楼主尽快完善存在的问题啊!呵
  回复  引用  查看    
2007-08-27 22:11 | 李华顺      
@TOM
编码的问题已解决,原因在于HTML页面上没有写
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
这一句,大家可以下载了
  回复  引用    
2007-09-02 14:58 | 地球爱好者 [未注册用户]
能否弄个php的在线提交地标并且加入说明的代码?谢谢!
  回复  引用    
2007-11-27 18:14 | lwl [未注册用户]
现在浏览有问题,希望博主看一下

  回复  引用  查看    
2007-12-03 14:59 | David Qiu      
牛人, 你是牛人!
  回复  引用    
2008-02-18 09:21 | TSWL [未注册用户]
能否打包一下,发我EMAIL一份.演示和地址都无法打开.万分感谢
  回复  引用  查看    
2008-02-18 09:35 | 李华顺      
--引用--------------------------------------------------
TSWL: 能否打包一下,发我EMAIL一份.演示和地址都无法打开.万分感谢
--------------------------------------------------------
地址已修正
  回复  引用    
2008-07-23 10:31 | 谢谢你 [未注册用户]
很感谢!!!能否认识认识交流交流
  回复  引用  查看    
2008-09-22 22:57 | 蜡笔小王      
非常感谢.正在开发物流方面的项目,正好在用这部分.

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-02-18 09:34 编辑过


相关链接: