使用程序集版本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解析并创建了正确的对象。
这解决了我的问题。
答案 0 :(得分:1)
Npgsql内置了各种type mappings,包括PostgisGeometry
。有关类方法,请参阅(例如)src/Npgsql/NpgsqlTypes/PostgisTypes.cs
。
否则,有各种geometry output和geometry access函数。 E.g。
var queryString: String := 'select ST_AsText(wkb_geometry) as geom from link';
将以人类可读的well-known text (WKT)返回几何体。有几种格式或方法可以将单个坐标设为double
值。