如何在ASP.NET中生成KML文件?
如何在不将临时文件写入服务器或依赖第三方库或类的情况下直接生成KML文档并将其返回到浏览器?
我建议你考虑使用HTTP Handler而不是ASP.NET页面。 它将更清洁,更高效。 只需在项目中添加“Generic Handler”类型的新项目,并考虑将代码移动到其ProcessRequest
方法。 不过,一般方法都很好。
顺便说一句,除非你明确地将.kml
文件映射到ASP.NET处理程序,否则它无论如何都不会运行。 我建议使用默认的.ashx
扩展名并添加Content-Disposition
HTTP标头来设置客户端的文件名:
Response.AddHeader("Content-Disposition", "attachment; filename=File.kml");
另外,请注意,您应该在将任何内容发送到客户端之前设置标题内容,因此您应该移动设置Content-Type
并在其他内容之前添加标题。
完整解决方案(来自OP):
我是这样做的:
服务器
- 将.kml mimetype添加到您希望此“文件”生效的文件夹中。 比如,
\myDevServer...InetPubKML
( Google的说明仅适用于Apache )- 在DEV服务器上打开
Internet Information Services (IIS) Manager
- 导航到您的DEV站点
- 右键单击
KML
文件夹,然后选择“Properties
- 单击
HTTP Headers
选项卡 - 单击
MIME types
按钮 - 单击
New
- 输入
- 单击“
OK
两次以返回“HTTP Headers
选项卡
- 在DEV服务器上打开
- 将
KML
文件夹设置为ASP.NET应用程序(可能是可选的,具体取决于服务器的设置方式)- 单击“
Directory
选项卡 - 单击“
Create
按钮 -
Application name
字段在设置KML
变为活动状态 - 单击“
OK
,返回主IIS管理器窗口
- 单击“
网站
- 打开VS2008:
- 文件>>新网站
- 选择:
- 在
Solution Explorer
- 右键单击该网站
- 选择
New Item
- 从
Visual Studio installed templates
窗口中选择Generic Handler
- 输入名称(我使用的是
MelroseVista.ashx
) - 选择语言:
Visual C#
- 单击
OK
- 粘贴以下代码
//
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", "https://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(); // kml.WriteEndElement(); // kml.WriteEndDocument(); // kml.Close(); } public bool IsReusable { get { return false; } } }
- 尝试在您喜欢的浏览器中加载您的页面
- 你应该得到一个弹出窗口,要求你
open
或save
生成的KML文件。 - 如果你
open
它,你应该让GoogleEarth自己启动并缩放到佛罗里达州东部的图钉 - 如果
save
, 则应在文件中看到以下内容
Melrose Vista FL A nice little town -80.18451400000000000000,26.08816400000000000000,0
注意: XmlTextWriter
在这里工作得很好。 但是,我认为XMLDocument
看起来更适合更大的KML文件,因为您可以在将其推送给用户之前在内存中对其进行操作。 例如,如果您希望相同的点出现在GoogleEarth位置树的多个文件夹中。
上述就是C#学习教程:如何在ASP.NET中生成KML文件?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/961958.html