Page 1 of 1

is this inconvenience , just for me ? Am i alone in this?

Posted: Mon 25 Sep 2017 06:12
by costeakai
Hi,
Thanks for your product, with its incredible value for developers.
Devart's product is THE ONLY ONE standing up to Microsoft as far as providing spatial capabilities to EntityFramework, and is leaving MS in the dust when things are coming to synchronization.
I'v hit a nasty inconvenience: when using

Code: Select all

 PgSqlEntityProviderConfig.SpatialOptions.SpatialServiceType = SpatialServiceType.NetTopologySuite; 
and having a postgresql table with a geography column , with srid=4326 (wgs84), the Devart DbGeography column returned from an spatial EntityFramework query , has the Length property returning degrees , not meters.
I can get around this , by getting the st_length from a native postgis query , but it's cumbersome and it's slowing down things: it's NOT EntityFramework...
Why do i say this? because the Length of a MicrosoftSqlServer wgs84 DbGeography column, returns meters not degrees like NetTopologySuite does. Well, i guess i'm asking too much , i knew it , but it's worth a try ...

Re: is this inconvenience , just for me ? Am i alone in this?

Posted: Tue 26 Sep 2017 16:49
by costeakai
i'm so gone, that i'v just NOW remembered that there's also a SqlGeography (from DbGeometry , or from DbGeography, or from SqlGeometry).
This doesn't make up for an entityframework query , but makes it a whole lot easier to handle the results from the native postgis query , within the CSharp-code, without running around from c# to postgis and back ...

Code: Select all

   

void ZTest_PEBUNE_ges_36_LineString(SqlGeometry SqlPolygon , SqlGeometry SqlExtRing , int polyg_nr , ref double maxDiff )
{

   DbGeometry mPolygon = DbGeometry.FromBinary(SqlExtRing.STAsBinary().Buffer , (int)SqlExtRing.STSrid);
DbGeography gPolygon = DbGeography.FromBinary(mPolygon.AsBinary(), mPolygon.CoordinateSystemId);
byte[] bytegPolygon = gPolygon.AsBinary();
string s1 = @"('\x" , s2="";
//gou2.ToList().ForEach(b => s2 += b.ToString("x2"));
List<byte> g2l = bytegPolygon.ToList();
int cil = g2l.Count;
List<string> csil = new List<string>();
csil.Add(s1);

foreach(byte b in g2l)
   csil.Add(b.ToString("x2"));

csil.Add(@"',4326)");
PgSqlCommand pgCommand = (PgSqlCommand)_PgSqlConnection.CreateCommand(); 
pgCommand.CommandText = string.Format( @"select st_length(rrr.g2) as lll , rrr.g2 g2  from (select st_geomfromwkb{0}::geography g2 ) rrr",string.Join("",csil)); // merge OK
PgSqlDataReader pgReader = pgCommand.ExecuteReader();
pgReader.Read();
      double m = pgReader.GetDouble(0); 
   Debug.WriteLine(string.Format("p_g.Length:{0} {1}",gPolygon.Length , m)); 
      byte[] ou2 =   pgReader.GetFieldValue<byte[]>(1);
      DbGeography gCountryPolygon = DbGeography.FromBinary(ou2);
      double lll = (double)gCountryPolygon.Length; // degrees 37.0784

SqlGeography sgPoly = SqlGeography.STGeomFromWKB(SqlPolygon.STAsBinary(),(int)SqlPolygon.STSrid);

Re: is this inconvenience , just for me ? Am i alone in this?

Posted: Wed 27 Sep 2017 15:51
by Shalex

Re: is this inconvenience , just for me ? Am i alone in this?

Posted: Thu 29 Mar 2018 09:48
by costeakai
Hi,
Thank for your interest


Yes. Fully