1

マップ上にピンを表示する地理マッピングを使用して Web アプリケーションを構築する必要があり、データは SQL 2005 データベースから取得されます。このイントラネット アプリケーションは安全なサーバーでホストされ、外部リソースにはアクセスできず、外部 API を使用することはできません。

インターネットで検索したところ、すべてのファイルをローカルに移動する必要がありますが、leaflet.js と mapbox を使用してこれを処理できることがわかりました。また、TileMill を使用してカスタム マップを作成し、タイルをアプリケーションにコピーする必要もあります。カスタム マップを作成しようとしましたが、csv ファイルまたは sqllite へのデータ ソースを要求しており、SQL 2005 データベースからデータを渡す必要があるため、レイヤーを作成できません。tilemill でカスタム マップを作成し、独自のデータソースを提供することはできますか? 私はこれを正しい方法で行っていますか?ローカルにアクセスする必要がある地理マッピング アプリケーションを作成するより良い方法はありますか? ありがとう

4

2 に答える 2

1

ロブ、これを行うためのより良い方法があると確信していますが、これが私が実装した方法です。

これから紹介するソリューションでは、Web アプリケーションからアクセスでき、そのデータを取得する Mapbox マップ (TileMill のデータ ソース追加機能に相当する Web アプリケーション CSV インポートについては、「omnivore mapbox」を検索してください) にマーカーを追加できるようにする必要があります。 MS SQL データベースに接続された GridView から生成された CSV ファイルから。

私は同じ問題を抱えていました。データはSQL 2008にあり、それを使用してマップを作成する必要があります。Mapbox では、ピンを表示するために CSV または POSTGRESQL が必要でしたが、POSTGRESQL サーバーをどこにもセットアップしていませんでした。これが私がしたことです:(私はC#を使用していて、ASP NET Webアプリケーションを作成していることに注意してください)

  • 空の ASPX ページを作成します。DataGridView.aspx と呼びましょう。
  • GridView を追加する
  • その GridView を SQL データ ソースにリンクする
  • ボタンを作成し、「Refresh CSV」と呼びます
  • それをダブルクリックすると、そのボタンのイベントが自動的に作成されます。

そのボタンのイベントのコードで、次のコードを使用します。

protected void Button1_Click(object sender, EventArgs e)
    {
        GridView1.AllowPaging = false;
        GridView1.DataBind();

        StringBuilder sb = new StringBuilder();
        for (int k = 0; k < GridView1.Columns.Count; k++)
        {
            if(k==0) // little trick to avoid comma at the end of the line
            {
                sb.Append(GridView1.Columns[k].HeaderText);
                continue;
            }

            //add separator 
            sb.Append(',' + GridView1.Columns[k].HeaderText);
        }
        //append new line 
        sb.Append("\r\n");
        for (int i = 0; i < GridView1.Rows.Count; i++)
        {

            for (int k = 0; k < GridView1.Columns.Count ; k++)
            {
                if (k == 0) // little trick to avoid comma at the end of the line
                {
                    sb.Append(GridView1.Rows[i].Cells[k].Text);
                    continue;
                }

                //add separator 
                sb.Append(','+GridView1.Rows[i].Cells[k].Text );
            }
            //append new line 
            sb.Append("\r\n");

        }

        string a= string.Empty;
        StreamWriter yourStream = File.CreateText(Server.MapPath("~/CSVExport.csv"));
        a = sb.ToString()+"\r\n"; //formatting text based on poeition
        yourStream.Write(a);                        
        yourStream.Close();
     } 

これらを DataGridView.aspx.cs ファイルの先頭に置くことを忘れないでください

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Text;

Web アプリケーションのルートで、空のファイルを作成し、「CSVExport.csv」という名前を付けます。

これにより、CSV としてフォーマットされた GridView データが保持されます。

このボタンをクリックするたびに、CSVExport.csv ファイルが更新されます。

すべてが正しく表示されるかどうかを確認するには、TileMill を起動して Web サイトを実行 (ローカルでデバッグ実行) します。

[localhost:whateverthatportnumberis]/DataGridView.aspx に移動します。

ボタンをクリックします。CSVExport.csv を開いて、ファイルが更新されているかどうかを確認します (データは CSV ファイル形式で表示されます)。

ここで、ローカル Web サイトのテストを停止せずに、TileMill [localhost:whateverthatportnumberis]/CSVExport.csv の CSV ファイルへのリンクを使用します。

CSVExport.csv ファイルが正しくフォーマットされている場合、マーカーが表示されているはずです。これは、SQL から Mapbox で使用できる CSV 形式にデータを取得する方法に関する質問に答えるはずです。ここで、「ローカルでアクセスする必要があるジオマッピング アプリケーションを作成するためのより良い方法はありますか?」と言うと、質問があいまいになります。ですから、ここでやめます。

繰り返しますが、先ほど提供したソリューションでは、Web アプリケーションからアクセスでき、そのデータを取得する Mapbox マップ (TileMill のデータ ソース追加機能に相当する Web アプリケーションの CSV インポートについては、「omnivore mapbox」を検索してください) にマーカーを追加できるはずです。 MS SQL データベースに接続された GridView から生成された CSV ファイルから。

于 2014-05-01T14:57:49.430 に答える
0

1 つの方法は、SQL 2005 データベースのデータを使用せずに、TileMill でカスタム マップを作成し、後で mapbox でホストできる mbtiles ファイルとしてエクスポートすることです。

このマップを leaflet.js のベースレイヤーとして使用し、SQL データベースにアクセスする REST API から AJAX 経由で動的にロードされるマーカーを追加します。

于 2014-04-30T13:46:29.890 に答える