0

我在通过 google earth api 打开 kmz 文件时遇到问题。当我提供到服务器上文件的静态链接时,它工作正常:

google.earth.fetchKml(ge, 'http://10.122.150.183:8008/test.kmz', checkForCoordinates);

但是,当我将链接更改为另一个域(即 WCF 服务)上的文件时:'https://10.122.150.183:4431/Uploads/1/test.kmz',文件不会在谷歌地球中打开。我尝试了另一种解决方案:从 ASP.Net MVC 控制器动态提供 kmz 文件,返回:

return File(fileStream, "application/vnd.google-earth.kmz kmz", fileName);

如果我尝试从浏览器的地址栏中获取它,它工作正常,但是当我在fetchKml方法中提供指向操作的链接时,该操作甚至不会调用。

关于如何从另一个域打开 kmz 文件的任何建议?

4

3 回答 3

0

我认为您通过分配 MIME 类型走在正确的轨道上。已查看此页面上的信息 https://developers.google.com/kml/documentation/kml_tut#kml_server

于 2012-09-19T00:20:54.867 回答
0

我已经在 wcf 中实现了 Kmz 文件生成器。该服务返回流类型对象,传出响应内容类型设置为“application/vnd.google-earth.kmz”。

代码看起来像这样

public class Kmz
{
    public static Stream Generate(string stringKml, string fileName)
    {
        MemoryStream stream = new MemoryStream();
        using (ZipFile zip = new ZipFile())
        {
            zip.AddEntry(fileName, stringKml);
            zip.Save(stream);
        }

        WebOperationContext.Current.OutgoingResponse.ContentType = "application/vnd.google-earth.kmz";

        stream.Position = 0;
        return stream;
    }
}

希望它有所帮助。

于 2012-10-31T06:19:42.703 回答
0

您还可以使用javascript的iframe或脚本方式加载kml内容,这两种方式允许您从不同的域加载资源,然后使用parseKml函数解析kml内容并将其添加到您的地球中。

希望它有所帮助。

于 2013-09-17T04:05:42.423 回答