1

内部に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 が作成してパラメーターとして送信したものです。

4

0 に答える 0