npgsql с NetTopologySuite не может написать 3D точку - PullRequest
0 голосов
/ 08 октября 2018

Я пытаюсь записать трехмерную точку (и линейную строку) в таблицу базы данных, используя npgsql с NetTopologySuite.Я использую последний выпуск (4.0.3), так как, по-видимому, решена проблема # 1906 .Мой код:

        NpgsqlConnection conn = new NpgsqlConnection ( "Host=localhost;Port=5433;Username=test;Password=test;Database=maindb" );
        conn.Open();
        conn.TypeMapper.UseNetTopologySuite( handleOrdinates: Ordinates.XYZ );
        NpgsqlCommand cmd = new NpgsqlCommand ( "INSERT INTO public.testtable (position) VALUES (@position)", conn );
        cmd.Parameters.Add ( "position", NpgsqlDbType.Geometry );
        NetTopologySuite.Geometries.Point pp = new NetTopologySuite.Geometries.Point ( 1, 2, 3 );
        cmd.Parameters["position"].Value = pp;
        cmd.ExecuteNonQuery();

Но это не работает, так как вставляет простую 2D-точку в таблицу.

Я использую следующие версии пакетов:

  • Npgsql v4.0.3
  • Npgsql.NetTopologySuite v1.0.2
  • NetTopologySuite v1.15.1
  • NetTopologySuite.IO.PostGis v1.15.0
  • GeoApi.Core v1.7.5

Что-то не так с конфигурацией или я должен сделать что-то еще, чтобы заставить 3D точку работать?

PS: я нашел обходной путь, которыйработает, но искренне это выглядит некрасиво:

        NpgsqlConnection conn = new NpgsqlConnection ( "Host=localhost;Port=5433;Username=test;Password=test;Database=maindb" );
        conn.Open();
        conn.TypeMapper.UseNetTopologySuite( handleOrdinates: Ordinates.XYZ );
        NpgsqlCommand cmd = new NpgsqlCommand ( "INSERT INTO public.testtable (position) VALUES (@position)", conn );
        cmd.Parameters.Add ( "position", NpgsqlDbType.Text );
        NetTopologySuite.Geometries.Point pp = new NetTopologySuite.Geometries.Point ( 1, 2, 3 );
        cmd.Parameters["position"].Value = pp.ToString();
        cmd.ExecuteNonQuery();

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Хорошо, проблема была решена с последним выпуском Npgsql (4.0.4) и Npgsql.NetTopologySuite (4.0.4)

0 голосов
/ 19 ноября 2018

Похоже, вы забыли передать Ordinates.XYZ в UseNetTopologySuite(), как показано в документах Npgsql :

conn.TypeMapper.UseNetTopologySuite(handleOrdinates: Ordinates.XYZ);
...