分享

Google Map API应用例子源代码(已修正) - 李华顺的博客 - 博客园

 古罗 2007-09-22

Google Map API应用例子源代码


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

Jquery.GoogleMap.js源代码内容

/*
-- GoogleMap操作类
-- 作者:李华顺
-- 官方网站:http://www.
-- 我的博客:http://huacn.cnblogs.com
-- 演示地址:http://www./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.
-- 我的博客:
http://huacn.cnblogs.com
-- 演示地址:
http://www./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./TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www./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&v=2&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>

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多