Tôi có truy vấn tìm nạp dữ liệu PostGIS bằng cách sử dụng Npgsql. Mục đích của nó là để có một điểm (x, y co-ordinates) và làm việc ra (nếu có) hình học là tại thời điểm đó. Đối với đại đa số các hình học trong cơ sở dữ liệu truy vấn hoạt động tốt, nhưng đối với ít nhất một tôi nhận được ngoại lệ sau đây:NPGSQL: Liên kết hoạt động được gọi với kiểu LWGEOMCOLLECTION
ERROR: XX000: Relate Operation called with a LWGEOMCOLLECTION type. This is unsupported.
với đỉnh của stack trace phúc:
[NpgsqlException (0x80004005): ERROR: XX000: Relate Operation called with a LWGEOMCOLLECTION type. This is unsupported.]
Npgsql.d__0.MoveNext() +3160
Npgsql.ForwardsOnlyDataReader.GetNextResponseObject(Boolean cleanup) +808 Npgsql.ForwardsOnlyDataReader.GetNextRow(Boolean clearPending) +308 Npgsql.ForwardsOnlyDataReader.Read() +47
Tất cả hình học nên hợp lệ khi tôi gọi ST_MakeValid
trên bất kỳ nội dung nào không có và hiện tại không có nơi nào ST_IsValid
trả về false. Hình học được tạo ra bằng cách gọi ST_GeomFromKML
và được hiển thị tốt trên bản đồ dưới dạng lớp raster sử dụng WMS qua GeoServer hoặc dưới dạng lớp vectơ sử dụng ST_AsGeoJSON
để dữ liệu PostGIS có vẻ ổn.
Có cách nào để tôi có thể sửa đổi mã hoặc dữ liệu của mình để ngăn điều này xảy ra không? Một phần của thất bại đang là phần mà người đọc đã được đọc trong:
command.CommandText = "SELECT area_code FROM area WHERE ST_INTERSECTS(ST_SetSRID(ST_Point(:x, :y), 4326), shape) AND area_type_code = :typecode";
command.CommandType = CommandType.Text;
var typeCodeParameter = new NpgsqlParameter
{
DbType = DbType.String,
ParameterName = "typecode",
Value = _typeCode
};
var xParameter = new NpgsqlParameter
{
DbType = DbType.Double,
ParameterName = "x",
Value = _x
};
var yParameter = new NpgsqlParameter
{
DbType = DbType.Double,
ParameterName = "y",
Value = _y
};
command.Parameters.Add(typeCodeParameter);
command.Parameters.Add(xParameter);
command.Parameters.Add(yParameter);
using (var reader = command.ExecuteReader())
{
if (reader.Read())
area = new AreaBasic
{
Code = (string)reader["area_code"]
};
}
EDIT: biết thêm thông tin. Lỗi tương tự xảy ra khi chạy truy vấn với các giá trị được mã hóa cứng trong pgAdmin III do đó vấn đề không phải là Npgsql cụ thể.