سؤال

قام أحد أصدقائي بتضمين مكون إضافي لبرنامج Google Earth في عنصر تحكم مستخدم C#.كل شيء يعمل بشكل جيد ولكن عند إغلاق النافذة نتلقى "خطأ غير محدد" مع خيار الاستمرار في تشغيل البرامج النصية أم لا.ومن خلال تتبعنا للأمر، يبدو أن السبب في ذلك هو البرنامج النصي الذي يقوم Google بإسقاطه على الصفحة.أيه أفكار؟

هل كانت مفيدة؟

المحلول

إليك مثال من صنعي لتكامل c#/Google Earth API الذي يغطي المشكلة التي تواجهها (راجع التعليقات)http://fraserchapman.blogspot.com/2008/08/google-earth-plug-in-and-c.html

وإليك أيضًا مشروعًا آخر من مشاريعي يستخدم مكتبة أنواع المكونات الإضافية لـ COM Google Earth (plugin_ax.dll) التي تم تحويلها إلى تعريفات مكافئة في تجميع وقت تشغيل اللغة العامة.قد يكون من بعض الفائدة. http://fraserchapman.blogspot.com/2008/12/google-earth-plugin-control-library.html

نصائح أخرى

لقد جربنا هذا الآن في كل من IE وFF.يعمل بشكل جيد.هل لديك أي أفكار لماذا يظهر الخطأ عند الاقتراب فقط؟هل يمكننا تعطيله بطريقة أو بأخرى؟هنا هو الكود الخاص بنا.

<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<html>
<head>
    <script src="http://www.google.com/jsapi?key=ABQIAAAAzghEPRV_D0MDzTELJ4nkXBT2AlVLQD8Rz4_aVbiXesLoyhRIMBRo399nnxv9aY-fqnkVGgTgR-pTsg">
    </script>
    <script>
        google.load("earth", "1");
        var ge = null;
        var placemark;
        function init(){
            google.earth.createInstance("map3d", initCallback, failureCallback);
        }

        function initCallback(object){
            ge = object;
            ge.getWindow().setVisibility(true);
            ge.getNavigationControl().setVisibility(ge.VISIBILITY_SHOW);
            ge.getLayerRoot().enableLayerById(ge.LAYER_TERRAIN, false);

            placemark = ge.createPlacemark('');
            placemark.setName("Current Position");
            // Create style map for placemark
            var normal = ge.createIcon('');
            normal.setHref('http://maps.google.com/mapfiles/kml/paddle/red-circle.png');
            var iconNormal = ge.createStyle('');
            iconNormal.getIconStyle().setIcon(normal);
            var highlight = ge.createIcon('');
            highlight.setHref('http://maps.google.com/mapfiles/kml/paddle/red-circle.png');
            var iconHighlight = ge.createStyle('');
            iconHighlight.getIconStyle().setIcon(highlight);
            var styleMap = ge.createStyleMap('');
            styleMap.setNormalStyle(iconNormal);
            styleMap.setHighlightStyle(iconHighlight);
            placemark.setStyleSelector(styleMap);

            var options = ge.getOptions();

            options.setStatusBarVisibility(true);
            options.setScaleLegendVisibility(true);
        }

        function failureCallback(object){
            // Gracefully handle failure.
            alert("Error");
        }

        function changeViewAngle(angle){
            var lookAt = ge.getView().copyAsLookAt(ge.ALTITUDE_ABSOLUTE);
            lookAt.setTilt(angle);
            ge.getView().setAbstractView(lookAt);
        }

        function ShowMarker(){
            ge.getFeatures().appendChild(placemark);
        }

        function MoveMarker(lon, lat){
            // Create point
            var la = ge.getView().copyAsLookAt(ge.ALTITUDE_RELATIVE_TO_GROUND);
            var point = ge.createPoint('');
            point.setLatitude(lat);
            point.setLongitude(lon);
            placemark.setGeometry(point);
        }

        function HideMarker(){
            ge.getFeatures().removeChild(placemark);
        }

        function SetPosition(lon, lat, heading){
            var lookAt = ge.getView().copyAsLookAt(ge.ALTITUDE_RELATIVE_TO_GROUND);
            lookAt.setLatitude(lat);
            lookAt.setLongitude(lon);
            lookAt.setHeading(heading);
            ge.getView().setAbstractView(lookAt);
        }

        function SetAltitude(alt){
            var lookAt = ge.getView().copyAsLookAt(ge.ALTITUDE_RELATIVE_TO_GROUND);
            lookAt.set(lookAt.getLatitude(), lookAt.getLongitude(), 0, ge.ALTITUDE_RELATIVE_TO_GROUND, 0, lookAt.getTilt(), alt);
            ge.getView().setAbstractView(lookAt);
        }

        function ResizeMap(w, h){
            var map = document.getElementById('map3d_container');
            map.style.height = h;
            map.style.width = w;
        }

        function AddKML(kml){
            var parseKML = ge.parseKml(kml);
            ge.getFeatures().appendChild(parseKML);
            return ge.getFeatures().getLastChild().getName();
        }

        function RemoveKML(kmlName){
            if (ge.getFeatures().hasChildNodes()) {
                var nodes = ge.getFeatures().getChildNodes();
                for (var i = 0; i < nodes.getLength(); i++) {
                    var child = nodes.item(i);
                    if (child.getName() == kmlName) {
                        ge.getFeatures().removeChild(child);
                    }
                }
            }
        }

        function OptionsChanged(nav, status, scale, grid, map, terrain, road, border, building){
            var options = ge.getOptions();
            var form = document.options;

            if (nav) {
                ge.getNavigationControl().setVisibility(ge.VISIBILITY_SHOW);
            }
            else {
                ge.getNavigationControl().setVisibility(ge.VISIBILITY_HIDE);
            }

            options.setStatusBarVisibility(status);
            options.setScaleLegendVisibility(scale);
            options.setGridVisibility(grid);
            options.setOverviewMapVisibility(map);
            ge.getLayerRoot().enableLayerById(ge.LAYER_TERRAIN, terrain);
            ge.getLayerRoot().enableLayerById(ge.LAYER_ROADS, road);
            ge.getLayerRoot().enableLayerById(ge.LAYER_BORDERS, border);
            ge.getLayerRoot().enableLayerById(ge.LAYER_BUILDINGS, building);
        }



    </script>
</head>
<body onload='init()'>
    <center>
        <div id='map3d_container' style='border: 1px solid silver; height: 510px; width: 767px;'>
            <DIV id=map3d style="HEIGHT: 100%">
            </DIV>
        </div>
    </center>
</body>
</html>

لقد قمت بتشغيل العينة ولم أواجه أية أخطاء عند إغلاق علامة التبويب.

جرب هذا

yourWebBrowser1.Document.Write(String.Empty);

عند إغلاق التطبيق.

سؤالي:هل يمكنك أن تريني كيفية استخدام AddKML(kml) في تطبيق C#؟عن طريق سلسلة أو مسار الملف، حاولت كليهما.أبحث عن طريقة لتحليل ملفات KML ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top