npgsql с NetTopologySuite не может написать 3D точку
Я пытаюсь записать трехмерную точку (и линейную строку) в таблицу базы данных, используя 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();
1 ответ
Кажется, ты забыл пройти Ordinates.XYZ
в UseNetTopologySuite()
, как показано в документах Npgsql:
conn.TypeMapper.UseNetTopologySuite(handleOrdinates: Ordinates.XYZ);
Хорошо, проблема была решена с последним выпуском Npgsql (4.0.4) и Npgsql.NetTopologySuite (4.0.4)