Como Hacer consultas en Oracle Eficientes

Topics: Algorithms, Español, Web Controls
Sep 26, 2008 at 9:37 AM
Estoy creando un mapa con varias capas (Delegacion, Colonia, Manzanas) desde un archivos .shp
algo asi como esto: en el archivo MapHelper.cs y el mapa se carga muy rapido

CapaDelegacion = new SharpMap.Layers.VectorLayer("Delegaciones");
//Origen de Datos
CapaDelegacion.DataSource = new SharpMap.Data.Providers.ShapeFile(@"\\servidor\GIS\Shapes\Shp\df\RDeleg.shp", true);
//Estilos Delegacion
CapaDelegacion.Style.Fill = new SolidBrush(Color.FromArgb(243, 239, 228));
CapaDelegacion.Style.Outline.DashStyle =
DashStyle.DashDot;
CapaDelegacion.Style.Outline =
new Pen(Color.Black, 2);
CapaDelegacion.Style.EnableOutline =
true;
CapaDelegacion.SRID = 8307;
CapaDelegacion.MaxVisible = 300000;
CapaDelegacion.MinVisible = 55000;


Pero soy nuevo usando SharpMap y ahora necesito cargar esas pero obteniedo la data desde una basa de datos Oracle. asi que cree una funcion para obtener los datos y cambio la fuente de datos en las capas. Pero las consultas son muy lentas Que puedo Hacer ???? y porsupuesto me interesa que la consulta a Oracle sea pasando un  BoundingBox  Para filtrar los datos.

No se si esto no se pueda hacer o lo estoy haciendo mal???


//Origen de Datos
CapaDelegacion.DataSource =  new SharpMap.Data.Providers.GeometryProvider(DataOracle());

public

 

static List<Geometry> DataOracle()
{
    List<Geometry> features = new List<Geometry>();
    Database db = null;
    DbCommand cmd = null;
    IDataReader dr = null;
    db =
DatabaseFactory.CreateDatabase();
    cmd = db.GetSqlStringCommand(
@"SELECT g.""GEOM"".Get_WKB() FROM ""RECINTOMANZANA"" g WHERE mslink >=7426 AND mslink <=7440");
    dr = db.ExecuteReader(cmd);
    try
    {
        while (dr.Read())
        {
            Geometry geom = GeometryFromWKB.Parse((byte[])dr[0]);
            if (geom != null)
                {
                    features.Add(geom);
                }
         }
  }
finally
{
dr.Close();
}
return features;
}