.NET 4.5,C#,Npgsql 3.1.0
我有一个检索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 :(得分:2)
提供另一个答案,因为PostGisTypes文档的上述链接现已破坏。
PostGisGeometry是一个抽象基类,它不包含比SRID更多的东西。相反,您希望将datareader获取的对象强制转换为适当的类型(以下任何一种):
这些课程有办法找到坐标。
例如:
...
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;
...
答案 1 :(得分:1)
正如你在这里看到的那样 https://github.com/npgsql/npgsql/blob/dev/src/Npgsql.LegacyPostgis/PostgisTypes.cs PostgisGeometry类型是一组xy对。
例如,线串是一个点数组,一个多边形是一个环数组,依此类推。 你可以遍历那些结构并获得坐标。
但是,如果您只想使用openlayers显示几何图形,我建议您使用wkt格式。 您应该更改查询,选择st_astext(几何)而不是几何,而不是将结果视为字符串并将其返回给OpenLayers。 然后使用OpenLayers.Geometry.fromWKT将WKT解析为OpenLayers.Geometry