2016-02-18 25 views
0

我想构建一个Web应用程序,它通过ASHX处理程序从SQL Server中提取数据,转换为有效的GeoJSON格式,并在小册子地图上显示标记。我有查询从SQLServer(描述,LAT,LONG)拉三个字段。我有能力在Leaflet中显示GeoJSON数据(来自网站文档)。我无法弄清楚的是如何成功构建GeoJSON数据。有没有简单的方法来使用Javascript序列化器来构建GeoJSON对象,还是我必须在hanlder中构建的过程。ASHX将SQL数据序列化为GeoJSON格式

下面是一个例子GeoJSON的文件,我想创建:

{ 
    "type": "FeatureCollection", 
    "features": [{ 
     "type": "Feature", 
     "properties": { 
     "name": "Placemarker 1", 
     "marker-color": "#0000ff", 
     "marker-symbol": "airport" 
     }, 
     "geometry": { 
     "type": "Point", 
     "coordinates": [ 
      -77.12911152370515, 
      38.79930767201779 
     ] 
     } 
    }, 
    { 
     "type": "Feature", 
     "properties": { 
     "name": "Placemarker 2", 
     "marker-color": "#FF0000", 
     "marker-symbol": "hospital" 
     }, 
     "geometry": { 
     "type": "Point", 
     "coordinates": [ 
      -7.12911152370515, 
      5.79930767201779 
     ] 
     } 
    }] 
} 

下面是一个ASHX文件的内容,我有,目前构建一个简单的JSON文件:

private class DataSet 
{ 
    public string description { get; set; } 
    public double valueLat { get; set; } 
    public double valueLong { get; set; } 
} 

public void ProcessRequest(HttpContext context) 
{ 
    List<DataSet> listResults = new List<DataSet>(); 
    int recordCount = 0; 

    try 
    { 
     // Get Connection String From WEB.CONFIG 
     string connStr = ConfigurationManager.ConnectionStrings["myConnStr"].ConnectionString; 

     // Connect And Get Data 
     OdbcConnection sqlConn = new OdbcConnection(connStr.ToString()); 
     OdbcCommand sqlCmd = new OdbcCommand("{call getSampleData}", sqlConn); 
     sqlConn.Open(); 
     OdbcDataReader rdr = sqlCmd.ExecuteReader(); 

     while (rdr.Read()) 
     { 
      DataSet results = new DataSet(); 
      results.description = rdr["description"].ToString(); 
      results.valueLat = Convert.ToDouble(rdr["lat"]); 
      results.valueLong = Convert.ToDouble(rdr["long"]); 
      listResults.Add(results); 
      recordCount++; 
     } 

     sqlConn.Close(); 
    } 
    catch (OdbcException o) 
    { 
     context.Response.Write(o.Message.ToString()); 
    } 

    var result = new 
    { 
     iTotalRecords = recordCount, 
     aaData = listResults 
    }; 

    JavaScriptSerializer js = new JavaScriptSerializer(); 
    context.Response.Write(js.Serialize(result)); 
} 
+0

geoJson图层是否需要保留?或者你是否打算只是为了显示在传单地图上而构建geoJson图层? – jbdev

回答

2

这可能帮助你从SQL Server获取数据到geoJson格式https://blogs.msdn.microsoft.com/sqlserverstorageengine/2016/01/05/returning-spatial-data-in-geojson-format-part-1/

根据意见编辑:

你也可以只通过JavaScript中的“listResults”循环,建立自己的GeoJSON的手动

//listResults...this is dummy data, 
//but an example of what you are currently getting from SQL 
var listResults = 
[{ 
    description:"description 1", 
    valueLat: 39.8282, 
    valueLong: -98.5795 
},{ 
    description:"description 2", 
    valueLat: 38.8282, 
    valueLong: -97.5795 
},{ 
    description:"description 3", 
    valueLat: 37.8282, 
    valueLong: -96.5795 
}]; 

//empty geoJson collection 
var geoJsonData = []; 

//loop through the listResults to build individual geoJson features 
for (var i = 0; i < listResults.length; i++) { 
    var result = listResults[i]; 
    geoJsonData.push(
     { 
     "type": "Feature", 
     "geometry": { 
     "type": "Point", 
     "coordinates": [result.valueLong, result.valueLat] 
     }, 
     "properties": { 
     "description": result.description 
     } 
     } 
    ); 

} 

一旦你建立GeoJSON的集合,你可以用传单吃了。

+0

这是正确的,我需要,但不幸的是我使用SQLServer 2008,我不认为这些命令可用。如果您有其他方法,请告诉我。否则,感谢您的输入! – rak11

+0

看到编辑,让我知道如果有帮助。 – jbdev

+0

也可以。我想以geoJson的形式提供数据,但在JavaScript中构建格式无损。谢谢! – rak11