Question

A friend of mine has embedded a google earth plugin into a C# user control. All works fine but when you close the window we recieve and "Unspecified Error" with the option to continue running the scripts or not. From our tracking it down it appears this is being cause by a script that google is dropping onto the page. Any ideas?

Was it helpful?

Solution

Here is an example, by me, of c#/Google Earth API integration that covers the problem you are having (see the comments) http://fraserchapman.blogspot.com/2008/08/google-earth-plug-in-and-c.html

Also, here is another of my projects that uses COM Google Earth Plugin Type Library (plugin_ax.dll) converted into the equivalent definitions in a common language run time assembly. It may be of some use. http://fraserchapman.blogspot.com/2008/12/google-earth-plugin-control-library.html

OTHER TIPS

We have now tried this in both IE and FF. Works fine. Any ideas why the error only comes up on close? can we somehow disable it? here is our code.

<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>

I ran the sample and didn't get any errors when closing the tab.

try this

yourWebBrowser1.Document.Write(String.Empty);

when you close the app.

my question: can you show me how to use AddKML(kml) in C# app? by string or file path, I tried both. I am looking for a way to parse kml files...

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top