예제 #1
0
        private IEnumerable <stream_access_point> DoStuff(string sql)
        {
            var connection = String.Format("Server={0};Port=5432;User Id={1};Database={2};CommandTimeout=60;Password=fakepassword;Timeout=60;", _dbConnection.HostName, _dbConnection.UserName, _dbConnection.DatabaseName);
            var conn       = new NpgsqlConnection(connection);

            conn.Open();

            NpgsqlCommand command = new NpgsqlCommand(sql, conn);


            try
            {
                NpgsqlDataReader dr = command.ExecuteReader();
                while (dr.Read())
                {
                    var l = new stream_access_point();

                    // sometimes when a line intercepts a polygon you can
                    // get a point, e.g. the EXACT mouth of a river.
                    // ignore these non-line geometries.
                    l.is_accessible = false;
                    l.linear_offset = 0.0M;
                    l.road_gid      = dr.GetInt32(0);
                    l.stream_gid    = dr.GetInt32(1);
                    l.street_name   = dr.GetString(3);

                    l.centroid_latitude  = Convert.ToDecimal(dr.GetDouble(5));
                    l.centroid_longitude = Convert.ToDecimal(dr.GetDouble(4));
                    l.linear_offset      = Convert.ToDecimal(dr.GetDouble(6));
                    var asdf         = dr.GetFieldDbType(9);
                    var isAccessible = dr.IsDBNull(9) == false?dr.GetBoolean(9) : false;

                    l.is_accessible = isAccessible;
                    l.Geom          = dr.GetString(7);

//                    l.IntersectionGeometryType = dr.GetString(6);
//                    var isLineString = String.Equals("Linestring", l.IntersectionGeometryType,
//                        StringComparison.OrdinalIgnoreCase);
//                    if (isLineString == false)
//                    {
//                        yield break;
//                    }
//
//                    if (dr.IsDBNull(1))
//                    {
//                        yield break;
//                    }
//
//                    l.StreamId = dr.GetInt32(0);
//                    l.StreamNumber = dr.IsDBNull(1) ? "Unnamed" : dr.GetString(1);
//                    l.StreamName = dr.IsDBNull(2) ? "" : dr.GetString(2);
//                    l.GeometryName = dr.IsDBNull(3) ? "" : dr.GetString(3);
//                    var asdf = dr[4];
//                    l.GeometryId = Convert.ToInt32(asdf);
//
//                    l.IntersectionGeometry = dr.GetString(5);
//
//
//                    l.StartPoint = dr.GetDouble(7);
//                    l.EndPoint = dr.GetDouble(8);
//                    l.StreamLength = dr.GetDouble(9);

                    yield return(l);
                }
            }

            finally
            {
                conn.Close();
            }
        }