如何从 NpgsqlDataReader 检索 NpgsqlTypes.PostgisGeometry 类型字段的几何坐标?
How can I retrieve the geometry coordinates of a NpgsqlTypes.PostgisGeometry type field from the NpgsqlDataReader?
.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 地图上显示结果。
非常感谢收到的任何答复。这是我的第一个post,如果礼仪笨拙或问题不清楚,我深表歉意。
如您所见
https://github.com/npgsql/npgsql/blob/dev/src/Npgsql.LegacyPostgis/PostgisTypes.cs
PostgisGeometry 类型是一组 xy 对。
例如,线串是点数组,多边形是环数组等等。
您可以遍历这些结构并获取坐标。
不过,如果你只是想用openlayers显示几何图形,我建议你使用wkt格式。
您应该更改查询,选择 st_astext(geometry) 而不是几何图形,而不是将结果视为字符串并将其返回给 OpenLayers。
然后使用 OpenLayers.Geometry.fromWKT 将 WKT 解析为 OpenLayers.Geometry
提供另一个答案,因为上面的 link PostGisTypes 文档现在已损坏。
PostGisGeometry 是一个抽象基础 class,不包含比 SRID 更现有的任何内容。相反,您想将数据读取器获得的对象转换为适当的类型(以下任何一种):
- PostGisLineString
- PostGisMultiLineString
- PostGisMultiPoint
- PostGisMultiPolygon
- PostGisPoint
- PostGis多边形
这些 classes 有到达坐标的方法。
例如:
...
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;
...
.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 地图上显示结果。
非常感谢收到的任何答复。这是我的第一个post,如果礼仪笨拙或问题不清楚,我深表歉意。
如您所见 https://github.com/npgsql/npgsql/blob/dev/src/Npgsql.LegacyPostgis/PostgisTypes.cs PostgisGeometry 类型是一组 xy 对。
例如,线串是点数组,多边形是环数组等等。 您可以遍历这些结构并获取坐标。
不过,如果你只是想用openlayers显示几何图形,我建议你使用wkt格式。 您应该更改查询,选择 st_astext(geometry) 而不是几何图形,而不是将结果视为字符串并将其返回给 OpenLayers。 然后使用 OpenLayers.Geometry.fromWKT 将 WKT 解析为 OpenLayers.Geometry
提供另一个答案,因为上面的 link PostGisTypes 文档现在已损坏。
PostGisGeometry 是一个抽象基础 class,不包含比 SRID 更现有的任何内容。相反,您想将数据读取器获得的对象转换为适当的类型(以下任何一种):
- PostGisLineString
- PostGisMultiLineString
- PostGisMultiPoint
- PostGisMultiPolygon
- PostGisPoint
- PostGis多边形
这些 classes 有到达坐标的方法。
例如:
...
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;
...