Skip to content

Instantly share code, notes, and snippets.

@bertt
Created April 24, 2020 12:37
Show Gist options
  • Save bertt/2e263a7ff1ab74a3cc9a4a6aecdccd33 to your computer and use it in GitHub Desktop.
Save bertt/2e263a7ff1ab74a3cc9a4a6aecdccd33 to your computer and use it in GitHub Desktop.
Read PolyhedralSurfaceZ from PostGIS with C# and OGR
var connectionString = $"Host=localhost;Username=postgres;Password=postgres;Database=postgres;Port=5432";
var sql = "select st_asbinary(geom_triangle) as geom1 from delaware_buildings limit 10";
var conn = new NpgsqlConnection(connectionString);
conn.Open();
var cmd = new NpgsqlCommand(sql, conn);
var reader = cmd.ExecuteReader();
while (reader.Read())
{
var b = (byte[])reader.GetValue(0);
IntPtr unmanagedPointer = Marshal.AllocHGlobal(b.Length);
Marshal.Copy(b, 0, unmanagedPointer, b.Length);
var polyhedral = Ogr.CreateGeometryFromWkb(b.Length, unmanagedPointer, null);
double[] point = { 0, 0, 0 };
foreach (var i in Enumerable.Range(0, polyhedral.GetGeometryCount()))
{
var polygon = polyhedral.GetGeometryRef(i);
foreach (var j in Enumerable.Range(0, polygon.GetGeometryCount()))
{
var linearring = polygon.GetGeometryRef(j);
foreach (var k in Enumerable.Range(0, linearring.GetPointCount()))
{
linearring.GetPoint(k, point);
Console.WriteLine($"{point[0]}, {point[1]}, {point[2]}");
}
}
}
Marshal.FreeHGlobal(unmanagedPointer);
}
reader.Close();
conn.Close();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment