我有一个 ac# wpf 项目,它使用 webbrowser 控件来托管谷歌地图。请注意,这不是一个 asp 项目。
如果我在初始化例程期间添加标记,它们会起作用。如果我稍后使用 InvokeScript 从 c# 调用相同的例程,则它不起作用。
我希望有一个页面,我的 c# 代码可以根据需要通过调用各种 javascript 函数来添加/删除/更新标记。
我不擅长 javascript,我怀疑有一些我不理解的关键。
相关部分:
<script type="text/javascript" src="http://maps.google.com.mx/maps/api/js?sensor=false&language="es""></script>
<script type="text/javascript">
var markersArray = [];
var gmap;
function initialize() {
var latlng = new google.maps.LatLng([GLAT], [GLONG]);
var myOptions = {
zoom: [ZOOM],
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
gmap = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
[MARKERLOCATIONS]
}
function AddMarker(Latitude, Longitude, Description) {
var latlng = new google.maps.LatLng(Latitude, Longitude);
var marker = new MarkerWithLabel({
position: latlng,
map: gmap,
title: Description,
labelContent: "1",
labelAnchor: new google.maps.Point(7, 30),
labelClass: "labels",
labelInBackground: false
});
</script>
<body onload="initialize()">
<div id="map_canvas" style="width:100%; height:100%"></div>
</body>
</script>
我用实际坐标和缩放替换 [GLAT]、[GLONG] 和 [ZOOM]。稍后将详细了解 [LOCATIONS]。
MarkerWithLabel 是 Gary Little 的代码http://code.google.com/p/google-maps-utility-library-v3/source/browse/tags/markerwithlabel/1.1.8/src/markerwithlabel.js
如果我将 [MARKERLOCATIONS] 替换为以下内容,我会在页面上获得所需的标记
AddMarker(51.47,0,"Greenwich")
用不同的坐标重复这个语句给了我想要的尽可能多的标记。
如果我删除 [MARKERLOCATIONS] 而在 c# 中执行以下操作,则它不起作用(gmap 是 wpf 网络浏览器):
gmap.LoadCompleted += new LoadCompletedEventHandler(gmap_LoadCompleted);
void gmap_LoadCompleted(object sender, NavigationEventArgs e)
{
// Add markers
foreach (Marker myM in ListMarker)
{
Object[] CallArgs = new Object[3];
CallArgs[0] = myM.Latitude.ToString();
CallArgs[1] = myM.Longitude.ToString();
CallArgs[2] = myM.ShortDescription;
object dummy = gmap.InvokeScript("AddMarker", CallArgs);
}
}
出于调试目的,我在 AddMarker 中放置了一个警报,并且我依次传递的值;我还创建了一个函数来遍历markersArray的内容:
function ReportGPS() {
if (markersArray) {
for (var i = 0; i < markersArray.length; i++) {
//remove the marker from the map
alert(markersArray[i].toString());
}
}
}
public void Test()
{
object dummy = gmap.InvokeScript("ReportGPS");
}
如果我添加 5 个标记,那么 ReportGPS 会给我 5 个警报。
所以就像他们根本没有被添加到地图中一样。同样,如果从初始化函数调用 AddMarker,它就可以工作。
我错过了什么?