2012-01-24 14 views
0

私のasp.net MVC 3アプリからGoogleマップでKMLファイルをレンダリングしたいと思います。公開アクセス可能なサーバーにkmlファイルを書き込む方法は?

Google Maps JavaScript API V3から、kmlLayer( 'url')を使用してkmlをGoogleマップにレンダリングしています。 私はkmlファイルが一般にアクセス可能なサーバーに存在する必要があることを読んでいます。私は第三者のjavascriptでkmlファイルをローカルにレンダリングできますが、エラーが発生する可能性があります。 (Loading a local .kml file using google maps?

レンダリングするkmlファイルは、SQLサーバーデータベースにバイト配列として格納されます。したがって、1つのKmlファイルでは、kml拡張子を持つパスにバイト配列を書き込む必要があります。私はFile.WriteAllBytes(path、byte)でこれを行いました。ここでpath = localパスとbyte = Byte配列です。これは、MVCアプリケーションのコントローラで行われます。

public ActionResult MapView(int id) 
     { 
      Incident inc = db.Incidents.Find(id); 
      if (inc.IncidentDatas.Count != 0) 
      { 
       ViewBag.ListKmlUrls = kmlFileStore(inc); 
      } 

      return View(inc); 
     } 

public List<string> kmlFileStore(Incident inc) 
     { 
      List<string> listKmlUrls = new List<string>(); 
      // Specify a "currently active folder" 
      string activeDir = @"c:\incident" + inc.incId + @"\incidentData"; 

      //Create a new subfolder under the current active folder 
      string newPath = System.IO.Path.Combine(activeDir, "kmlFiles"); 

      // Create the subfolder 
      System.IO.Directory.CreateDirectory(newPath); 

      String url; 
      foreach(var d in inc.IncidentDatas) { 
       url = @"c:\incident" + inc.incId + @"\incidentData\kmlFiles\" + d.id + ".kml"; 

       //dataContent is byte[] 
       System.IO.File.WriteAllBytes(url, d.dataContent); 
       listKmlUrls.Add(url); 
      } 

      return listKmlUrls; 
     } 

アイデアはjavascriptのメソッドKmlLayer(...)へのURLを渡すためにviewbagスルーURLのリストにアクセスするビューは次のとおりです。 これはコードです。しかし、ここのURLはローカルパスだけです。

MVCアプリケーションは、kmlLayer(...)にURLを渡すことができるように、kmlファイルを公開アクセス可能なサーバーにどのように格納できますか?これはプログラムで行う必要があります。

現在、localhostからMVCアプリケーションとデータベースにアクセスしています。私は静的なIPと名前を持っています。また、オンラインアクセスのためにアプリとデータベースを公開したいと思います。どのように進むかわからない、私にいくつかの助言/指導を与えてください。ありがとう。

答えて

0

kmlファイルを一般公開するにはいくつかの問題があります。 Googleがファイルの場所にアクセスできる必要があるとします。

Google Earthをウェブサイトに埋め込むには、KMLをプラグインにインポートする方法が3つあります。 1. KmlNetworkLink 2. fetchKml 3. ParseKml

なければならないが、公にアクセス3. ParseKmlが良いように動作し、サーバに保存されているいずれも1 & 2必要kmlファイル。詳細については

<head> 
    <title>parsekml_example.html</title> 
    <script src="//www.google.com/jsapi?key=ABQIAAAA5El50zA4PeDTEMlv-sXFfRSsTL4WIgxhMZ0ZK_kHjwHeQuOD4xTdBhxbkZWuzyYTVeclkwYHpb17ZQ"></script> 
    <script type="text/javascript"> 
     var ge; 
     var placemark; 
     var object; 

     google.load("earth", "1"); 

     function init() { 
      google.earth.createInstance('map3d', initCB, failureCB); 
     } 

     function initCB(instance) { 
      ge = instance; 
      ge.getWindow().setVisibility(true); 
      var kmlString = '' 
         + '<?xml version="1.0" encoding="UTF-8"?>' 
         + '<kml xmlns="http://www.opengis.net/kml/2.2">' 

         + '<Document>' 
         + ' <Camera>' 
         + ' <longitude>-122.444633</longitude>' 
         + ' <latitude>37.801899</latitude>' 
         + ' <altitude>139.629438</altitude>' 
         + ' <heading>-70.0</heading>' 
         + ' <tilt>75</tilt>' 
         + ' </Camera>' 

         + ' <Placemark>' 
         + ' <name>Placemark from KML string</name>' 
         + ' <Point>' 
         + '  <coordinates>-122.448425,37.802907,0</coordinates>' 
         + ' </Point>' 
         + ' </Placemark>' 

         + '</Document>' 
         + '</kml>'; 

      var kmlObject = ge.parseKml(kmlString); 
      ge.getFeatures().appendChild(kmlObject); 
      ge.getView().setAbstractView(kmlObject.getAbstractView()); 
     } 

     function failureCB(errorCode) { 
     } 

     google.setOnLoadCallback(init); 
    </script> 
</head> 
<body> 
    <div id="map3d" style="height: 400px; width: 600px;"> 

    </div> 
</body> 

http://code.google.com/apis/earth/documentation/kml.html

+0

[OK]を参照して、私が代わりにGoogleマップを埋め込みたいです。 MVCアプリケーションでは、kmlファイルをレンダリングする簡単なロードマップを表示する必要があります。開いているレイヤーにローカルレンダリングのKmlLayerメソッドがあるかどうかはわかりません。グーグルアースでは地図のレンダリングが遅く、またGoogle Earthプラグインが必要です。ブラウザでMVCアプリケーションにアクセスしたユーザーが、プラグインを準備していない可能性があります。 – Qwerty

+0

Server.MapPath( "〜/ folder")の使用についてお読みください。しかし、どのようにWebサーバにkmlファイルを保存し、どこに格納されているのURLを取得することができないのかわかりません...私はKMLをMVCアプリケーションにアクセスするユーザのシステムに格納したくありません。 – Qwerty

+0

それは簡単なはずです。あなたの地理情報に基づいて、 'System.IO.File.WriteAllText(path、contents)'によってkmlファイルを作成します。これを試してみることができます 'StreamReader file = new StreamReader(filePath); var kml = file.ReadToEnd(); ' – Shahdat

関連する問題