关于如何使用Npgsql空间类型的简单示例

时间:2016-02-23 00:32:32

标签: c# postgis npgsql .net-4.6

使用程序集版本Npgsql.3.1.0-alpha6

我在Postgre中有一个带有Geometry字段的表。数据有效。连接数据库工作正常。 PostGre verion 9.5

我制作了以下代码(将其视为伪代码,因为使用类似于C#的Oxygene,我期待C#的答案):

  var connectionString: String := 'Server=192.168.0.11;User id=postgres;Password=password;Database=db';
  var queryString: String := 'select wkb_geometry as geom from link';

  using connection: NpgsqlConnection := new NpgsqlConnection(connectionString) do begin
    var command: NpgsqlCommand  := new NpgsqlCommand(queryString, connection);
    try
      connection.Open();
      var reader: NpgsqlDataReader := command.ExecuteReader();

      while reader.Read() do begin
        Console.WriteLine(' {0} {1}', reader[0].GetType(), reader[0].ToString() );
      end;

  reader.Close();

  except
  on ex: Exception do begin
    Console.WriteLine(ex.Message);
  end;
  end;
  Console.ReadLine();
end;  

此代码可以显示来自Geometry字段的二进制数据的ascii HEX表示。

我制作了一个win32软件,我从PostGIS中检索了EWKB,然后解析了Geometry字段的HEX数据。这样我就检索了每个数据以导出到另一种格式。

然后我使用Microsoft ADO连接,它使用适当的GIS对象解析和检索数据,并准备好使用坐标。

最终Npgsql已经在做了,但由于我没有看到任何示例,我不知道如何解析空间数据。

更新1

我完全误解了它是如何工作的。当我解读reader [0] .GetType()时,我意识到Npgsql已经根据NpgsqlTypes解析并创建了正确的对象。

这解决了我的问题。

1 个答案:

答案 0 :(得分:1)

Npgsql内置了各种type mappings,包括PostgisGeometry。有关类方法,请参阅(例如)src/Npgsql/NpgsqlTypes/PostgisTypes.cs

否则,有各种geometry outputgeometry access函数。 E.g。

var queryString: String := 'select ST_AsText(wkb_geometry) as geom from link';

将以人类可读的well-known text (WKT)返回几何体。有几种格式或方法可以将单个坐标设为double值。