2014-04-30 48 views
1

我有一个需求来构建一个地理映射的Web应用程序,它将在地图上显示引脚,数据来自我的sql 2005数据库。此Intranet应用程序将托管在我们的安全服务器上,并且无法访问任何外部资源,也无法使用任何外部API。使用SQL 2005中的MapBox和TileMill创建自定义地图

在互联网上搜索后,我发现我可以使用leaflet.js和mapbox来处理这个问题,但我必须在本地移动所有文件。我还需要使用TileMill创建自定义地图,然后将这些图块复制到我的应用程序中。我试图创建自定义映射,但无法创建任何图层,因为它要求将数据源请求到csv文件或sqllite,并且需要从我的sql 2005数据库传递数据。是否有可能用tilemill创建自定义地图并提供我自己的数据源?我是否以正确的方式去做这件事?有没有更好的方法来创建必须在本地访问的地理绘图应用程序? 谢谢

回答

0

一种方法是在TileMill中创建自定义地图,而不在SQL 2005数据库中存储数据,然后将其导出为可以在地图框上托管的mbtiles文件。

将此映射用作leaflet.js中的基本层,并添加通过AJAX从访问SQL数据库的REST API动态加载的标记。

+0

一旦我这样做,我可以下载地图文件到我自己的服务器,而不是托管在地图盒上吗?我的应用程序无法访问任何外部链接。另外,当我在TileMill中创建地图时,它会要求数据源(csv文件等),我只是链接到一个空的csv文件以通过此步骤? – rob

1

Rob,我相信有更好的方法来做到这一点,但这是我实现它的方式。

我准备给你的解决方案应该允许你将标记添加到Mapbox地图(搜索“omnivore mapbox”以获取可以通过Web应用程序访问的Web应用程序CSV导入等效TileMill添加数据源功能)和从连接到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”。

这会将您的GridView数据格式化为CSV格式。

现在,每次单击该按钮时,都应更新CSVExport.csv文件。

要检查一切显示是否正确,请启动TileMill并运行(在本地调试运行)您的网站。

转到[本地主机:whateverthatportnumberis] /DataGridView.aspx

单击按钮。 打开CSVExport.csv检查,如果您的文件已被更新(你应该看到CSV文件格式的数据。)现在

,不停止你的本地网站的测试,继续使用该链接在TileMill CSV文件 [localhost:whateverthatportnumberis] /CSVExport.csv

如果您的CSVExport.csv文件格式正确,您应该看到显示的标记。 这应该回答你的问题,关于如何从SQL获取你的数据到一个可以被Mapbox使用的CSV格式。 当你说:“是否有更好的方法来创建必须在本地访问的地理映射应用程序?”。所以我会在这里停下来。

同样,我刚刚给你的解决方案应该允许你将标记添加到Mapbox地图(搜索“omnivore mapbox”以获取可通过Web应用程序访问的Web应用程序CSV导入等效TileMill添加数据源功能)和从连接到MS SQL数据库的GridView生成的CSV文件中获取其数据。

相关问题