2016-04-01 17 views
2

.NET 4.5,C#,3.1.0 Npgsql的如何從NpgsqlDataReader中檢索NpgsqlTypes.PostgisGeometry類型字段的幾何座標?

我有一個檢索PostGIS幾何領域的查詢 - 我可以看到這樣做的唯一途徑是:

public class pgRasterChart 
{ 
    ... 
    public NpgsqlTypes.PostgisGeometry GEOMETRY;  
    ... 
} 
... 
NpgsqlDataReader reader = command.ExecuteReader(); 
try 
    { 
     while (reader.Read()) 
     { 
      pgRasterChart chart = new pgRasterChart(); 
      chart.GEOMETRY = (PostgisGeometry) reader.GetValue(21); 
... 

此功能,但我需要要查看GEOMETRY字段的座標,我找不到這樣做的方法?我想使用座標在OpenLayers地圖上顯示結果。

任何答案最感激地收到。這是我的第一篇文章,所以我很抱歉,如果禮儀笨拙或問題不清楚。

回答

0

正如你在這裏看到的 https://github.com/npgsql/npgsql/blob/develop/src/Npgsql/NpgsqlTypes/PostgisTypes.cs PostgisGeometry類型是一組xy對。

例如,線串是點的數組,多邊形是環的數組等等.. 您可以遍歷這些結構並獲取座標。

但是,如果您只是想使用openlayers顯示幾何圖形,我建議您使用wkt格式。 您應該更改查詢,選擇st_astext(幾何)而不是幾何圖形,而不是將結果視爲字符串並將其返回給OpenLayers。 然後使用OpenLayers.Geometry.fromWKT將WKT解析爲OpenLayers.Geometry

+0

感謝弗朗西斯!您的意見非常有幫助。一旦我擁有了PostgisPolygon,我就可以得到這些要點。它真的很整齊。 想知道如何將此標記爲接受的答案...? – pdc

+0

http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work?rq=1 – fradal83

1

提供另一個答案,因爲上面的PostGisTypes文檔的鏈接現在已被打破。

PostGisGeometry是一個抽象基類,它不包含任何比SRID退出更多的東西。相反,你要通過你的DataReader獲得的對象轉換爲適當的類型(以下任何一項):

  • PostGisLineString
  • PostGisMultiLineString
  • PostGisMultiPoint
  • PostGisMultiPolygon
  • PostGisPoint
  • PostGisPolygon

這些類有獲得座標的方法。

如:

... 
NpgsqlDataReader reader = command.ExecuteReader(); 
try 
    { 
     while (reader.Read()) 
     { 
      var geom = (PostgisLineString) reader.GetValue(0); 
      var firstCoordinate = geom[0]; // Coordinate in linestring at index 0 
      var X = firstCoordinate.X; 
      var Y = firstCoordinate.Y; 
...