【问题标题】:Cross domain open kmz files in asp.net mvc在 asp.net mvc 中跨域打开 kmz 文件
【发布时间】:2012-09-17 15:20:15
【问题描述】:

我在通过 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 文件的任何建议?

【问题讨论】:

    标签: asp.net-mvc google-earth kmz


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我已经在 wcf 中实现了 Kmz 文件生成器。该服务返回 Stream 类型对象,传出响应内容类型设置为“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;
          }
      }
      

      希望它有所帮助。

      【讨论】:

        【解决方案3】:

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

        希望它有所帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-08-01
          • 1970-01-01
          • 2013-01-08
          相关资源
          最近更新 更多