gpt4 book ai didi

c# - 如何在 ASP.NET 中生成 KML 文件?

转载 作者:可可西里 更新时间:2023-11-01 07:47:11 24 4
gpt4 key购买 nike

如何在不向服务器写入临时文件或依赖第 3 方库或类的情况下直接生成 KML 文档并将其返回给浏览器?

最佳答案

我建议您考虑使用 HTTP 处理程序而不是 ASP.NET 页面。它将更清洁,性能更高。只需将“Generic Handler”类型的新项添加到您的项目,并考虑将代码移至其 ProcessRequest 方法。不过,一般方法还是不错的。

顺便说一句,除非您显式地将 .kml 文件映射到 ASP.NET 处理程序,否则它无论如何都不会运行。我建议使用默认的 .ashx 扩展名并添加一个 Content-Disposition HTTP header 来为客户端设置文件名:

Response.AddHeader("Content-Disposition", "attachment; filename=File.kml");

另外,请注意,您应该在将任何内容发送到客户端之前设置 header 内容,因此您应该移动设置Content-Type 并在其他内容之前添加 header 。


完整解决方案(来自 OP):

这是我的做法:

服务器

  1. 将 .kml mimetype 添加到您希望此"file"所在的文件夹中。比如说,\\myDevServer\...\InetPub\KML
    ( Google's instructions are only for Apache )
    1. 在您的 DEV 服务器上打开 Internet 信息服务 (IIS) 管理器
    2. 导航到您的 DEV 站点
    3. 右键单击 KML 文件夹并选择 Properties
    4. 单击HTTP header 选项卡
    5. 单击MIME 类型 按钮
    6. 点击新建
    7. 输入
      • 扩展名:.kml
      • MIME 类型:application/vnd.google-earth.kml+xml
    8. 单击 OK 两次返回到 HTTP Headers 选项卡
  2. KML 文件夹设置为 ASP.NET 应用程序(可能是可选的,具体取决于您的服务器设置方式)
    1. 点击目录标签
    2. 点击创建按钮
    3. 应用程序名称 字段随设置 KML 激活
    4. 单击 OK 返回 IIS 管理器主窗口

网站

  1. 打开 VS2008:
    1. 文件 >> 新网站
    2. 选择:
      • 空网站
      • 语言:C#
      • 位置:\\myDevServer\...\InetPub\KML\
  2. 解决方案资源管理器
    1. 右键单击该网站
    2. 选择新项目
    3. Visual Studio 安装的模板 窗口中选择 Generic Handler
    4. 输入一个名字(我用的是MelroseVista.ashx)
    5. 选择语言:Visual C#
    6. 点击确定
  3. 粘贴以下代码

//

using System;
using System.Web;
using System.Xml;

public class Handler : IHttpHandler
{
public void ProcessRequest( HttpContext context)
{
context.Response.ContentType = "application/vnd.google-earth.kml+xml";
context.Response.AddHeader("Content-Disposition", "attachment; filename=MelroseVista.kml");

XmlTextWriter kml = new XmlTextWriter(context.Response.OutputStream, System.Text.Encoding.UTF8);

kml.Formatting = Formatting.Indented;
kml.Indentation = 3;

kml.WriteStartDocument();

kml.WriteStartElement("kml", "http://www.opengis.net/kml/2.2");
kml.WriteStartElement("Placemark");
kml.WriteElementString("name", "Melrose Vista FL");
kml.WriteElementString("description", "A nice little town");

kml.WriteStartElement("Point");

kml.WriteElementString("coordinates", "-80.18451400000000000000,26.08816400000000000000,0");

kml.WriteEndElement(); // <Point>
kml.WriteEndElement(); // <Placemark>
kml.WriteEndDocument(); // <kml>

kml.Close();

}
public bool IsReusable
{
get
{
return false;
}
}
}
  1. 尝试在您喜欢的浏览器中加载您的页面
  2. 应该收到一个弹出窗口,要求您打开保存生成的 KML 文件。
  3. 如果您打开它,您应该让 GoogleEarth 自行启动并缩放到佛罗里达州东部的图钉
  4. 如果您保存它,您应该在文件中看到以下内容

\

<?xml version="1.0" encoding="utf-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Placemark>
<name>Melrose Vista FL</name>
<description>A nice little town</description>
<Point>
<coordinates>-80.18451400000000000000,26.08816400000000000000,0</coordinates>
</Point>
</Placemark>
</kml>

注意:XmlTextWriter 在这里工作得很好。但是,我认为 XMLDocument 对于较大的 KML 文件看起来更有前途,因为您可以在将其推送给用户之前在内存中对其进行操作。例如,如果您希望同一点出现在 GoogleEarth 位置树的多个文件夹中。

关于c# - 如何在 ASP.NET 中生成 KML 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/952667/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com