Select на Map контроле

0 голосов
спросил 23 Янв, 08 от filippov70 (5,320 баллов) в категории Программные продукты Esri
Здравствуйте!
где можно почитать про то, как, к примеру, по двойному клику на Мапконтроле выбрать объекты со слоев. Точно так же, как в ArcMap инструмент Select Features?

12 Ответы

0 голосов
ответил 23 Янв, 08 от Stepan25 (2,900 баллов)
http://edndoc.esri.com/arcobjects/9.2/NET/858a508c-b771-467c-81e6-c6aa72d88f9c.htm

посмотрите, может поможет. вообще со всеми вопросами по разработке есть смысл лезть на этот сайт.
0 голосов
ответил 23 Янв, 08 от filippov70 (5,320 баллов)
Спасибо за помощь, но это совсем не то :(
0 голосов
ответил 24 Янв, 08 от Mitrich (13,680 баллов)
0 голосов
ответил 24 Янв, 08 от filippov70 (5,320 баллов)
Очень огорчает, что в стандартом тулбаре нет инструмента "Выбрать"Angry 
0 голосов
ответил 28 Янв, 08 от filippov70 (5,320 баллов)
да, с сервером, походу, работает мало народу
А я тут дошел до следующего

    protected void Map1_Point(object sender, ESRI.ArcGIS.ADF.Web.UI.WebControls.PointEventArgs args)
    {

            Int32 x = Convert.ToInt32(args.ScreenPoint.X);
            Int32 y = Convert.ToInt32(args.ScreenPoint.Y);

            ESRI.ArcGIS.ADF.Web.Geometry.Point mapPoint = ESRI.ArcGIS.ADF.Web.Geometry.Point.ToMapPoint(x, y,
                Map1.GetTransformationParams(TransformationDirection.ToMap));
            if (map == null)
            {
                map = CWebApp.get_MapServerCtx(Map1, 0);
            }
     
            //IPoint MapPoint = m_WebApp.ServerContext.CreateObject("esriGeometry.Point") as IPoint;
            //MapPoint.X = mapPoint.X;
            //MapPoint.Y = mapPoint.Y;

            map.ClearSelection();

            IEnvelope pEnvelope = new EnvelopeClass();
            IActiveView pActiveView = map as IActiveView;
            //IDisplayTransformation pDisplayTrans = pActiveView.ScreenDisplay.DisplayTransformation;
            //pDisplayTrans.TransformRect(pEnvelope, ref r, 4); //5 = esriTransformPosition + esriTransformToMap.
            pEnvelope.XMax = mapPoint.X;
            pEnvelope.XMin = mapPoint.X + 1;
            pEnvelope.YMax = mapPoint.Y;
            pEnvelope.YMin = mapPoint.Y + 1;
            pEnvelope.SpatialReference = map.SpatialReference;

            ISelectionEnvironment pSelectionEnvironment = new SelectionEnvironmentClass();
           
            pSelectionEnvironment.CombinationMethod = esriSelectionResultEnum.esriSelectionResultNew;
            pSelectionEnvironment.PointSelectionMethod = esriSpatialRelEnum.esriSpatialRelIntersects;
            map.SelectByShape(pEnvelope, pSelectionEnvironment, false);

            ISelection pSel = map.FeatureSelection;
            IDisplay pDisp = pActiveView.ScreenDisplay;
            ESRI.ArcGIS.esriSystem.ITrackCancel pTrC = new TrackCancelClass();

            pSel.Draw(pDisp, pTrC);
            pActiveView.Refresh();
            Map1.Refresh();
           
            System.Windows.Forms.MessageBox.Show(" Selected:" + map.SelectionCount.ToString());
           
       
    }

плюс статические метод для получения объекта карты через IMap:

  public static IMap get_MapServerCtx(ESRI.ArcGIS.ADF.Web.UI.WebControls.Map MapCtrl, int MapResoursNumber)
    {
        MapFunctionality mf = (MapFunctionality)MapCtrl.GetFunctionality(MapResoursNumber);

        MapResourceLocal mr_local = (MapResourceLocal)mf.MapResource;
        IServerContext ctx = mr_local.ServerContextInfo.ServerContext;

        IMapServer ms = (IMapServer)ctx.ServerObject;
        IMapServerObjects mso = (IMapServerObjects)ms;


        MapInformation m_MapInfo = (MapInformation)mr_local.MapInformation;

        String dataFrame = m_MapInfo.DataFrame;
        return mso.get_Map(dataFrame);
    }

Мэсседжбокс вроде выдает кол-во объектов "под кликом", но только с тех слоев, которые были видны по-дефолту. Если включить видимость еще какого нибудь слоя, в селекшн объекты с него не попадают.
Чего не хватает?

Не ругайте меня сильно, потому как мало опыта в SOACry
0 голосов
ответил 28 Янв, 08 от filippov70 (5,320 баллов)
Да, и еще, как сделать чтобы выбранные объекты "подсветились"?
0 голосов
ответил 29 Янв, 08 от Alexander1 (32,520 баллов)
Look at this sample:

"Select Tool Task for Web ADF"

http://arcscripts.esri.com/details.asp?dbid=15133
0 голосов
ответил 30 Янв, 08 от filippov70 (5,320 баллов)
спасибо, с выборками начинает получатся

0 голосов
ответил 31 Янв, 08 от filippov70 (5,320 баллов)
проблема с выборкой остается, Мэсседжбокс вроде выдает кол-во объектов "под кликом", но только с тех слоев, которые были видны по-дефолту. Если включить видимость еще какого нибудь слоя, в селекшн объекты с него не попадают.
использую этот код:
            if (Map1.ImageBlendingMode == ImageBlendingMode.WebTier)
            { Map1.Refresh(); }
            else if (Map1.ImageBlendingMode == ImageBlendingMode.Browser)
            { Map1.RefreshResource(CWebApp.get_MapResours(Map1, 0)); }

использую WebTier.
и еще, в событии Map1_Point хочу заполнять ListBox, имеется код который работет, но при его вызове в этом событии ничего не видно в  ListBoxе, при вызове  его в других событиях(например, Map1_PreRender) все работает как надо. Чего не хватает?


0 голосов
ответил 31 Янв, 08 от Alexander1 (32,520 баллов)
Это код to refresh a map, а где код, в котором меняется Layers visibility?
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...