ZoomToFeature типа...

0 голосов
спросил 06 Дек, 08 от Ulukbek (6,020 баллов) в категории Программные продукты Esri
Вот функция:
    void LocateFeatures(string LayerId,string  FieldName , string Constraint)
    {
        ESRI.ArcGIS.ADF.Web.QueryFilter qFilter = new ESRI.ArcGIS.ADF.Web.QueryFilter();
        qFilter.ReturnADFGeometries = false;
        qFilter.SubFields = new ESRI.ArcGIS.ADF.StringCollection(FieldName, ',');
        qFilter.WhereClause = String.Format(FieldName + "={0}", Constraint);
        qFilter.ReturnADFGeometries=true;

        IQueryFunctionality qFunc = GetQueryFunc();
        string[] layerIds;
        string[] layerNames;
        qFunc.GetQueryableLayers (null, out layerIds, out layerNames);
        System.Data.DataTable dt  = qFunc.Query(null , LayerId, qFilter);
        if (dt == null) return;

// объект есть, нашли!

        // начинаем центровку объекта
        ESRI.ArcGIS.ADF.Web.Geometry.Envelope env;
        ESRI.ArcGIS.ADF.Web.Geometry.Polygon pol;
        ESRI.ArcGIS.ADF.Web.Geometry.Geometry geo;
       
    // ниже
        System.Data.DataRow drow;
        int tcnt;
        drow=dt.Rows[0];
        pol = (ESRI.ArcGIS.ADF.Web.Geometry.Polygon)drow["shape"];
        geo = (ESRI.ArcGIS.ADF.Web.Geometry.Geometry)drow["shape"];
        env = geo as ESRI.ArcGIS.ADF.Web.Geometry.Envelope;
        env = pol as ESRI.ArcGIS.ADF.Web.Geometry.Envelope;
        tcnt = dt.Rows.Count;
    }

В результате env всегда null!?

Как мне получить энвелоп найденного объекта?

Вообще, задача показать найденный объект в центре и в его экстенте...
на ArcMap делал просто:
Sub ZoomToFeature(pFeat As IFeature)
    Dim ext As IEnvelope
    Set ext = pFeat.Shape.Envelope
    mxd.ActiveView.Extent = ext
    mxd.ActiveView.Refresh
End Sub

2 Ответы

0 голосов
ответил 06 Дек, 08 от PEKAHT (2,780 баллов)

Сорри, вначале написал, потом понял что тут про писание под сервер спрашивают :)

Извините, стер
0 голосов
ответил 08 Дек, 08 от PaRaD (540 баллов)
MapFunctionality mf=(MapFunctionality)map.GetFunctionality(imfIndex);        
        IGISResource res = mf.Resource;
        IQueryFunctionality qf = (IQueryFunctionality)res.CreateFunctionality(typeof(IQueryFunctionality), null);
        string[] layerIds;
        string[] layerNames;
        qf.GetQueryableLayers(null, out layerIds, out layerNames);
        int index = Array.FindIndex(layerNames, new Predicate<String>(delegate(String str) { return str == %layername; }));
        if (index != -1)
        {
            QueryFilter qfil = new QueryFilter();
            String lh = DropDownList1.SelectedItem.ToString();
            GraphicsLayer layer = (GraphicsLayer)qf.Query(mf.Name, layerIds[index], qfil);
            DataRow dr = layer.Select("%field = '" + lh + "'")[0];
            Envelope me = new Envelope();
            me.Union(layer.GeometryFromRow(dr));
            map.Extent = me;
            ESRI.ArcGIS.ADF.ArcGISServer.LayerDescription ld = mf.MapDescription.LayerDescriptions[index];
            
            ld.SelectionFeatures = new int[] { (int)dr[%field] };
        }
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...