私の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と名前を持っています。また、オンラインアクセスのためにアプリとデータベースを公開したいと思います。どのように進むかわからない、私にいくつかの助言/指導を与えてください。ありがとう。
[OK]を参照して、私が代わりにGoogleマップを埋め込みたいです。 MVCアプリケーションでは、kmlファイルをレンダリングする簡単なロードマップを表示する必要があります。開いているレイヤーにローカルレンダリングのKmlLayerメソッドがあるかどうかはわかりません。グーグルアースでは地図のレンダリングが遅く、またGoogle Earthプラグインが必要です。ブラウザでMVCアプリケーションにアクセスしたユーザーが、プラグインを準備していない可能性があります。 – Qwerty
Server.MapPath( "〜/ folder")の使用についてお読みください。しかし、どのようにWebサーバにkmlファイルを保存し、どこに格納されているのURLを取得することができないのかわかりません...私はKMLをMVCアプリケーションにアクセスするユーザのシステムに格納したくありません。 – Qwerty
それは簡単なはずです。あなたの地理情報に基づいて、 'System.IO.File.WriteAllText(path、contents)'によってkmlファイルを作成します。これを試してみることができます 'StreamReader file = new StreamReader(filePath); var kml = file.ReadToEnd(); ' – Shahdat