Google Map的Web Part

google 提供了许多的API,其中最为人所知的应该就是Google Map的API了,你只需要到google的网站上申请一个Key,就可以在你的页面上实现了Google API,并可以通过Google提供的大量的API来完成一些很有趣的事情。实际上在MOSS使用Google Map API是一件很容易的事情,你只需要有一个Key就可以了根本就不需要再去写一个webpart,还要完成客户端的调用。MOSS上有个webpart叫做Conent Editor的webpart,在这个webpart上,你可以直接写Html的源代码,也就是可以写javascript的代码,你只需要在配置这个webpart的view source code的窗口里写入很少的javasxript就可以实现了。webpart就稍微麻烦了一点。其实也不是很难,还是直接上代码吧,大家一看就知道了。

 

using System;
using System.Runtime.InteropServices;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Serialization;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.WebPartPages;

namespace GoogleMapDemo
{
    [Guid(
"003ce99b-6a77-4fe3-921d-0f183cde4db0")]
    
public class GoogleMapDemo : System.Web.UI.WebControls.WebParts.WebPart
    
{
        
private const string script1key = "script1key";
        
private const string script1 = "<script src=\"http://maps.google.com/maps?file=api&amp;v=2&amp;key=Here is your key\" language=javascript></script>";
        private const string script2key="string2key";
        
private const string script2 = "<script language=javascript> function load() {alert('hello'); if (GBrowserIsCompatible()) {var map = new GMap2(document.getElementById('map'));map.setCenter(new GLatLng(37.4419, -122.1419), 13);map.addControl(new GLargeMapControl());}}</script>";

        
private const string script3key = "script3key";
        
private const string script3 = "<script language=javascript>load();</script>";



        
public GoogleMapDemo()
        
{
            
this.PreRender += new EventHandler(GoogleMapDemo_PreRender);
        }


        
void GoogleMapDemo_PreRender(object sender, EventArgs e)
        
{
            
if (!Page.IsClientScriptBlockRegistered(script1key))
                Page.RegisterClientScriptBlock(script1key, script1);

            
if (!Page.IsClientScriptBlockRegistered(script2key))
                Page.RegisterClientScriptBlock(script1key, script2);

            
if (!Page.IsClientScriptBlockRegistered(script3key))
                Page.RegisterClientScriptBlock(script1key, script3);
        }


        
protected override void CreateChildControls()
        
{
            
base.CreateChildControls();

        }

        
protected override void Render(HtmlTextWriter writer)
        
{
            writer.Write(
"<div id='map' style=\"width: 900px; height: 300px\"></div>");
            writer.Write(
"<script language=javascript> function load() {if (GBrowserIsCompatible()) {var map = new GMap2(document.getElementById(\"map\")); map.setCenter(new GLatLng(37.4419, -122.1419), 13);map.addControl(new GLargeMapControl());}}</script>");//这一句是我在debug的时候加上去的,可以去掉试试,不过我没试。
            writer.Write("<script language=javascript>load();</script>");

        }

    }

}

这里使用了Page.IsClientScriptBlockRegistered和Page.RegisterClientScriptBlock分别来判断一段代码是否有注册和注册一点客户端代码。这两个函数已经过时了,现在应该是Page.ClientScript.IsClientScriptBlockRegistered,我懒,就没有该过来了。在webpart上调用客户端代码有两种情况,一个是直接注册一段代码,就像上面写的script2,另外一种是注册某个地方,也许是服务器或是本地上的一个js文件或是service,就像script1一样。

 

posted @ 2008-07-29 14:43  jdxyw  阅读(943)  评论(1编辑  收藏  举报