Question

Comment puis-je générer et retourner un document KML directement dans le navigateur sans avoir à écrire un fichier temporaire au serveur ou de compter sur une bibliothèque 3ème partie ou classe?

Était-ce utile?

La solution

Je vous suggère de considérer l'aide d'un gestionnaire HTTP au lieu d'une page ASP.NET. Il sera plus propre et plus performant. Il suffit d'ajouter nouvel élément de type « gestionnaire générique » à votre projet et déplacer le code à sa méthode ProcessRequest. L'approche générale est bonne, cependant.

Par ailleurs, à moins que vous mappez explicitement les fichiers .kml à un gestionnaire ASP.NET, ça va pas fonctionner de toute façon. Je suggère d'aller avec l'extension .ashx par défaut et ajouter un en-tête HTTP Content-Disposition pour définir le nom du fichier pour le client:

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

En outre, notez que vous devez définir des choses d'en-tête avant tout est envoyé au client de sorte que vous devez déplacer la mise en Content-Type et en ajoutant en-tête avant d'autres choses.


Solution complète (de l'OP):

Voici comment je l'ai fait:

Serveur

  1. Ajoutez les .kml mimetype dans le dossier où vous voulez que ce « fichier » à vivre. Dites, \\myDevServer\...\InetPub\KML
    ( Google instructions sont uniquement pour Apache )
    1. Ouvrir Internet Information Services (IIS) Manager sur votre serveur DEV
    2. Accédez à votre site DEV
    3. Cliquez droit sur le dossier et choisissez KML Properties
    4. Cliquez sur l'onglet HTTP Headers
    5. Cliquez sur le bouton MIME types
    6. Cliquez New
    7. Entrez
      • Extension: kml
      • Type MIME: application / vnd.google-earth.kml + xml
    8. Cliquez deux fois OK pour revenir à l'onglet HTTP Headers
  2. Définir le dossier KML comme une application ASP.NET (peut-être en option selon la façon dont votre serveur est configuré)
    1. Cliquez sur l'onglet Directory
    2. Cliquez sur le bouton Create
    3. Le champ Application name devient actif avec le KML de réglage
    4. Cliquez OK vous ramène à la fenêtre principale du Gestionnaire des services Internet

Site

  1. Ouvrir VS2008:
    1. Fichier >> Nouveau site web
    2. Choisissez:
      • Empty Web Site
      • Langue: C#
      • Lieu: \\myDevServer\...\InetPub\KML\
  2. Dans Solution Explorer
    1. Rightclick le site
    2. Choisissez New Item
    3. Choisissez Generic Handler de la fenêtre Visual Studio installed templates
    4. Entrez un nom (je MelroseVista.ashx)
    5. Choisissez la langue: Visual C#
    6. Cliquez OK
  3. Collez le code suivant

//

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. Essayez de charger votre page dans votre navigateur préféré
  2. Vous devrait un popup vous demandant de open ou save le fichier KML résultant.
  3. Si vous open, vous devrait ont GoogleEarth se lancer et un zoom thumbtack en Floride orientale
  4. Si vous save, vous devrait voir ce qui suit dans le fichier

\

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

Note: XmlTextWriter a plutôt bien ici. Cependant, je pense que XMLDocument semble plus prometteur pour les fichiers KML plus grands puisque vous pouvez le manipuler en mémoire avant de le pousser à l'utilisateur. Si, par exemple, vous voulez que le même point d'apparaître dans plusieurs dossiers dans l'arborescence Emplacements GoogleEarth.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top