SqlGeometryBuilder выбрасывает исключение формата - PullRequest
0 голосов
/ 14 апреля 2020

Я смотрю на этот код, который я унаследовал. По сути, мы передаем форму в функцию, чтобы преобразовать ее в другой формат:

    private static SqlGeometry Construct(OpenGisGeometryType geomType, LineString geometry)
    {
        SqlGeometryBuilder builder = new SqlGeometryBuilder();
        builder.SetSrid(4283);
        builder.BeginGeometry(geomType);

        int counter = 0;
        foreach (Coordinate coord in geometry.Coordinates)
        {
            if (counter == 0)
            {
                builder.BeginFigure(coord.Longitude, coord.Latitude);
            }
            else
            {
                builder.AddLine(coord.Longitude, coord.Latitude);
            }

            counter++;
        }

        builder.EndFigure();
        builder.EndGeometry();
        return builder.ConstructedGeometry;

    }

Все должно быть хорошо, но при отладке мы вводим и go в третью строку (SqlGeometryBuilder builder = new SqlGeometryBuilder ();). "Строитель" в окне местных жителей - ноль. Когда мы переместимся вниз на четвертую строку (builder.SetSrid (4283);), компоновщик станет:

'builder.ConstructedGeometry', вызвавший исключение типа 'System.FormatException'

Открывая его, я вижу, что InnerException - ноль, но Сообщение:

"24300: ожидался вызов SetSrid, но был вызван Fini sh."

Есть идеи? Тип geomType - это «Многоугольник», а геометрия - это массив широт и долгот.

Редактировать - опубликовал SqlGeometryBuilder:

public class SqlGeometryBuilder : IGeometrySink
{
    public SqlGeometryBuilder();

    public virtual SqlGeometry ConstructedGeometry { get; }

    public virtual void AddLine(double x, double y, double? z, double? m);
    public void AddLine(double x, double y);
    public virtual void BeginFigure(double x, double y, double? z, double? m);
    public void BeginFigure(double x, double y);
    public virtual void BeginGeometry(OpenGisGeometryType type);
    public virtual void EndFigure();
    public virtual void EndGeometry();
    public virtual void SetSrid(int srid);
}
...