带有 NetTopologySuite 的 npgsql 无法写入 3D 点
npgsql with NetTopologySuite can't write 3D point
我正在尝试使用带有 NetTopologySuite 的 npgsql 将 3d 点(和线串)写入数据库 table。我使用的是最新版本 (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 点插入 table。
我正在使用这个版本的软件包:
- 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 点起作用?
P.S.:我找到了一个可行的解决方法,但真诚地看起来很丑陋:
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();
你好像忘了把Ordinates.XYZ
传给UseNetTopologySuite()
,如图the Npgsql docs:
conn.TypeMapper.UseNetTopologySuite(handleOrdinates: Ordinates.XYZ);
好的,上一版 Npgsql (4.0.4) 和 Npgsql.NetTopologySuite (4.0.4)
已解决问题
我正在尝试使用带有 NetTopologySuite 的 npgsql 将 3d 点(和线串)写入数据库 table。我使用的是最新版本 (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 点插入 table。
我正在使用这个版本的软件包:
- 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 点起作用?
P.S.:我找到了一个可行的解决方法,但真诚地看起来很丑陋:
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();
你好像忘了把Ordinates.XYZ
传给UseNetTopologySuite()
,如图the Npgsql docs:
conn.TypeMapper.UseNetTopologySuite(handleOrdinates: Ordinates.XYZ);
好的,上一版 Npgsql (4.0.4) 和 Npgsql.NetTopologySuite (4.0.4)
已解决问题