Я смотрю на этот код, который я унаследовал. По сути, мы передаем форму в функцию, чтобы преобразовать ее в другой формат:
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);
}