内部にwebbrowserコントロールを含むwinformクライアントがあります。Visual Studio で C# を使用し、永続化のために MSSQL を実行します。私の目標は:
MSSQL (DBML/DataContext 経由で処理) に保存されているデータを取得し、データベースで取得した各住所のマーカーを Google マップ (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 で [Geo toggle] ボタンをクリックすると、_geoLocationsArr の各ジオコーディングされた住所のマーカーが地図上に表示されます。そして、すべてが完璧に機能しています。
しかし!ここで、_geoLocationsArr を、winform がマーカー データ (xml、または文字列配列) を作成する winform から生成されたデータに置き換えたいと思います。 HTML ページの JS に winform を追加します)。
では、WinForm 内でデータを作成するにはどうすればよいでしょうか。ボタンをクリックすると、フォームがパラメータとして作成したデータを使用して JS HTML ページが呼び出されますか? したがって、関数 toogleGeocodes() を呼び出すと、関数 toggleGeocodes(_myGeoLocationsArr[]) のようなパラメーターとしてデータが保持されます。_myGeoLocationsArr[] は、関数を呼び出すときに winform が作成してパラメーターとして送信したものです。