我有一个 winform 客户端,其中包含一个 webbrowser 控件。在 Visual Studio 中使用 C#,并运行 MSSQL 以实现持久性。我的目标是:
获取存储在我的 MSSQL 中的数据(通过 DBML/DataContext 处理),并在谷歌地图(Javascript v3)上为我在数据库中获得的每个地址显示一个标记。
现在我的应用解决方案中有一个 HTML 文件,其中包含用于显示这样的 Google 地图的 JS 代码(我们称之为 mymap.html):
var map;
var _geoLocationsArr = [
["Tranehavevej 10, 2450", "Fiberby"],
["Tranehavevej 8, 2450", "Fiberby"],
["Tranehavevej 6, 2450", "Fiberby"],
["Tranehavevej 4, 2450", "Fiberby"],
["Johan Kellers Vej 27, 2450", "Service"],
["Johan Kellers Vej 25, 2450", "Service"],
["Johan Kellers Vej 23, 2450", "Service"],
["Johan Kellers Vej 21, 2450", "Service"],
["Johan Kellers Vej 24, 2450", "Potentiel"]
];
var customIcons = {
Fiberby: {
icon: 'http://labs.google.com/ridefinder/images/mm_20_red.png',
shadow: 'http://labs.google.com/ridefinder/images/mm_20_shadow.png',
title: 'Fiberby'
},
Service: {
icon: 'http://labs.google.com/ridefinder/images/mm_20_yellow.png',
shadow: 'http://labs.google.com/ridefinder/images/mm_20_shadow.png',
title: 'Service'
},
Unknown: {
icon: 'http://labs.google.com/ridefinder/images/mm_20_gray.png',
shadow: 'http://labs.google.com/ridefinder/images/mm_20_shadow.png',
title: 'Ukendt'
}
};
var geocoder;
function initialize(lat, lng) {
geocoder = new google.maps.Geocoder();
var myLatlng = new google.maps.LatLng(lat, lng);
var mapOptions = {
zoom: 14,
center: myLatlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
//geocodeMe();
}
function toggle() {
initialize(55.66718, 12.5411);
for (var i = 0; i < _locations.length; i++) {
var item = _locations[i];
var latlng = new google.maps.LatLng(item[0], item[1]);
var icon = customIcons[_locations[i][1]] || {};
var marker = new google.maps.Marker({
position: latlng,
map: map,
icon: icon.icon,
shadow: icon.shadow,
title: "Hello World! " + i
});
}
}
function toggleGeocodes() {
initialize(55.66718, 12.5411);
for (var i = 0; i < _geoLocationsArr.length; i++) {
geocodeMe(_geoLocationsArr[i][0], _geoLocationsArr[i][1]);
}
}
function geocodeMe(address, type) {
geocoder.geocode({
'address': address
},
function(result, status){
if(status == google.maps.GeocoderStatus.OK){
map.setCenter(result[0].geometry.location);
var icon = customIcons[type] || customIcons['Unknown'];
var marker = new google.maps.Marker({
map: map,
icon: icon.icon,
shadow: icon.shadow,
position: result[0].geometry.location,
title: icon.title
});
} else{
alert('Geocode was not successful for the following reason: ' + status);
}
});
}
</script>
</head>
<body onload="initialize(55.665919, 12.55482)">
<div id="map_canvas" style="width: 100%; height: 100%"></div>
</body>
当我在我的 winforms 中点击“地理切换”按钮时,它会在地图上显示 _geoLocationsArr 中每个地理编码地址的标记。一切都很完美。
但!现在,我想用从我的 winform 生成的数据替换 _geoLocationsArr,我的 winform 在其中创建标记数据(xml 或字符串数组,对我来说什么格式并不重要,重要的是它可以从winform 到 HTML 页面中的 JS)。
那么,如何在我的 WinForm 中创建数据,以及当单击调用 JS html 页面的按钮时,使用表单创建的数据作为参数?因此,当调用函数 toogleGeocodes() 时,它会将数据作为参数作为函数 toggleGeocodes(_myGeoLocationsArr[]) ,其中 _myGeoLocationsArr[] 是 winform 在调用函数时创建并作为参数发送的内容。