1. 问题的提出:
从所周知,Google map 提供的API有其自身的Ajax实现,如果要将Google Map API 嵌入到Asp.net Ajax 扩展的网页如何实现Google Map API 与Asp.net Ajax 客户端扩展库协调是必须考虑的问题。
2. 本文的目的:
将Google Map 嵌入到一个Asp.net Ajax Enabled 的网页中,利用Asp.net Ajax客户端扩展库 Sys.Net.WebRequest 对象,从服务器请求XML数据,并将XML数据显示在 Google Map 的 OverLay 上。
3. 实现方法:
利用Asp.net Ajax客户端扩展库创建一个名为 GoogleMap.Map 对象。并将Google Map初始化已经撤销对象处理封装在这个对象中。
4 .客户端代码:
<script type="text/javascript">
//<![CDATA[
Type.registerNamespace("GoogleMap");
GoogleMap.Map = function(element)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
GoogleMap.Map.initializeBase(this, [element]);
this._mapCanvas = element;
this._map = null;
this._infoTimeElement = null;
this._updateElement = null;
this._url = null;
}
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
GoogleMap.Map.prototype =
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
initialize : function()
{
GoogleMap.Map.callBaseMethod(this, 'initialize');
this._map = new GMap2(this._mapCanvas);
this._map.addControl(new GLargeMapControl());
this._map.setCenter(new GLatLng(29.47921866, 121.86541563), 12);
this._map.setMapType(G_HYBRID_MAP);
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
$addHandlers(this._updateElement,
{'click': this.update}, this);
},
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
dispose : function()
{
$clearHandlers(this._updateElement);
GUnload();
this._map = null;
GoogleMap.Map.callBaseMethod(this, 'dispose');
},
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
update: function()
{
var webRequest = new Sys.Net.WebRequest();
webRequest.set_url(this._url);
webRequest.add_completed(Function.createCallback(this.onSuccessedXML, this));
webRequest.invoke();
},
onSuccessedXML : function(executor, eventArgs, context)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
context._map.clearOverlays();
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(executor.get_responseAvailable())
{
var xml = executor.get_xml();
var markers = xml.documentElement.getElementsByTagName('marker');
context._infoTimeElement.innerHTML = markers[0].getAttribute('t');
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
for(var i=1; i<markers.length; i++)
{
var point = new GLatLng(parseFloat(markers[i].getAttribute('lat')), parseFloat(markers[i].getAttribute('lng')));
var text = new Sys.StringBuilder(markers[i].getAttribute('name'));
text.append('<br />');
text.append( markers[i].getAttribute('txt'));
text.append('<br />');
text.append( markers[i].getAttribute('txt1'));
text.append('<br />');
text.append( markers[i].getAttribute('txt2'));
context._map.addOverlay(context.createMarker(point, text.toString()));
}
}
},
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
createMarker : function(point, text)
{
var defaultIcon = new GIcon(G_DEFAULT_ICON);
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
var m = new GMarker(point,
{icon:defaultIcon});
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
GEvent.addListener(m, 'click', function()
{ m.openInfoWindowHtml(text); });
return m;
},
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
get_infoTimeElement : function()
{
return this._infoTimeElement;
},
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
set_infoTimeElement : function(value)
{
this._infoTimeElement = value;
},
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
get_updateElement : function()
{
return this._updateElement;
},
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
set_updateElement : function(value)
{
this._updateElement = value;
},
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
get_url : function()
{
return this._url;
},
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
set_url : function(value)
{
this._url = value;
}
}
GoogleMap.Map.registerClass('GoogleMap.Map', Sys.UI.Control);
Sys.Application.add_init(pageInit);
function pageInit()
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
$create(GoogleMap.Map,
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{ 'updateElement': $get('refreshInfo'), 'infoTimeElement' : $get('ctl00_Content_pageInfo_LabelInfoTime'), 'url' : 'GMapBus.ashx'},
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{},
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{},
$get('pageContent'));
}
//]]>
</script>
![](/Images/OutliningIndicators/None.gif)
![](/images/cnblogs_com/protorock/132060/r_GoogleMap.JPG)