Выделение объектов

0 голосов
спросил 20 Апр, 10 от Alla (1,440 баллов) в категории Программные продукты Esri
       Здравствуйте! Помогите, пожалуйста!Нужно запрограммировать свою кнопку, при нажатии на которую выдлен был бы линейный объект на карте из определенного слоя.Слоев 2:реки и дороги. При нажати на кнопку появляется форма на ней 2 комбобокса и в зависимости от того что вних выбрано, неоходимо выделить объект, при нажатии на кнопку.

54 Ответы

0 голосов
ответил 20 Апр, 10 от pooperec (10,820 баллов)
Помогаю:
Делаете реализацию интерфейса ICommand, в котором на OnClick создаете форму и выбираете в выпадающих списках слой, и параметры фильтрации, которые задаете в интерфейсе IQueryFilter.
Потому выделяете через IFeatureLayer.FeatureClass.
0 голосов
ответил 20 Апр, 10 от pooperec (10,820 баллов)
Как-то так:

procedure TMapController.SelectEx(const LayerName, WhereClause: WideString;
const Symbol: IUnknown; Pan: WordBool);
var
pFl : IFeatureLayer;

pQF :IQueryFilter;
nulled : boolean;

pFS : IFeatureSelection;
pMarkerSymbol :ISimplemarkerSymbol;
pLineSymbol :ISimpleLineSymbol;
pFillSymbol :ISimpleFillSymbol;
pColor : IRGBColor;

begin
pFl:=LayerByName(LayerName);
if pFl<>nil then Begin
try
try
pQF:=CoQueryFilter.Create as IQueryFilter;
pQF.WhereClause:=WhereClause;
pFS:=pFl as IFeatureSelection;
except on E: Exception do
        {$I-}
          Showmessage(ERROR_CANT_SELECT_FEATURE+#10#13+ERROR_UNDER_COM+E.Message); //sh*t happens
        {$I+}
end;
if pFl.FeatureClass.FeatureCount(pQF)>0 then
      if Symbol =nil then Begin
        pColor:=CoRGBColor.Create as IRGBColor;
        pFS.SetSelectionSymbol:=true;
        case pFl.FeatureClass.ShapeType of
               $00000001:Begin
                 pMarkerSymbol:=CoSimplemarkerSymbol.Create as ISimplemarkerSymbol;
                 pMarkerSymbol.Size:=SELECTED_SYMBOL_SIZE;
                 pColor.RGB:=SELECTED_SYMBOL_COLOR;
                 pMarkerSymbol.Color:=pColor as IColor;
                 pColor.RGB:=SELECTED_SYMBOL_OUTLINECOLOR;
                 pMarkerSymbol.OutlineColor:=pColor as IColor;
                 pMarkerSymbol.XOffset:=0;
                 pMarkerSymbol.YOffset:=0;
                 pMarkerSymbol.Angle:=0;
                 pMarkerSymbol.Style:=SELECTED_SYMBOL_STYLE;
                 pFS.SelectionSymbol:=pMarkerSymbol as ISymbol;
               End;
               $00000003:Begin
                 pLineSymbol:=CoSimpleLineSymbol.Create as ISimpleLineSymbol;
                 pLineSymbol.Style:=SELECTED_LINE_STYLE;
                 pColor.RGB:=SELECTED_LINE_COLOR;
                 pLineSymbol.Color:=pColor as IColor;
                 pLineSymbol.Width:=SELECTED_LINE_WIDTH;
                 pFS.SelectionSymbol:=pLineSymbol as ISymbol;
               End;
               $00000004:Begin
                 pFillSymbol:=CoSimpleFillSymbol.Create as ISimpleFillSymbol;
                 pFillSymbol.Style:=SELECTED_FILL_STYLE;
                 pFillSymbol.Outline.Width:=SELECTED_FILL_WIDTH;
                 pColor.RGB:=SELECTED_FILL_COLOR;
                 pFillSymbol.Color:=pColor as IColor;
                 pColor.RGB:=SELECTED_FILL_OUTCOLOR;
                 pFillSymbol.Outline.Color:=pColor as IColor;
                 pFS.SelectionSymbol:=pFillSymbol as ISymbol;
               End;
       end;
      End
      else Begin
            pFS.SetSelectionSymbol:=true;
            case pFl.FeatureClass.ShapeType of
                 $00000001: if supports(Symbol,ISymbol) then
                             if supports(Symbol, IMarkerSymbol) then Begin
                                 pFS.SelectionSymbol:=Symbol as ISymbol;
                             End;
                 $00000003: if supports(Symbol,ISymbol) then
                             if supports(Symbol, ILineSymbol) then Begin
                                 pFS.SelectionSymbol:=Symbol as ISymbol;
                             End;
                 $00000004: if supports(Symbol,ISymbol) then
                             if sup
0 голосов
ответил 20 Апр, 10 от Alla (1,440 баллов)
        Я только начала изучать программирование в ArcGiS, и мне не совсем понятно,то что вы посоветовали.Я создала форму на ней 2 комбобокса с выпадающими списками, осталось только обработчик события OnClick на кнопку.
0 голосов
ответил 20 Апр, 10 от Alla (1,440 баллов)
    А нет никаких книг по программированию?
0 голосов
ответил 20 Апр, 10 от TDenis (42,620 баллов)
А вы на каком языке пишете, Алла?
0 голосов
ответил 20 Апр, 10 от Alla (1,440 баллов)
    VBA
0 голосов
ответил 20 Апр, 10 от TDenis (42,620 баллов)
Вот основная книга по VBA:
http://resources.esri.com/help/9.3/arcgisdesktop/com/vba_start.htm

Посмотрите, например, Samples
-> ArcMap -> Select Features Using An Attribute Query
0 голосов
ответил 20 Апр, 10 от Alla (1,440 баллов)
    Как можно установить текущий слои или нет? Если выбраем в комбококсе реки,как сделать так,что бы этот слои стал текущим?
0 голосов
ответил 20 Апр, 10 от TDenis (42,620 баллов)
Что значит - текущим?
0 голосов
ответил 20 Апр, 10 от Alla (1,440 баллов)
     Я в примере увидела это,сама не совсем понимаю, что имеют в виду. Пример такой:

Получение имени выбранного пользователем текущего слоя:
Dim pDoc As IMxDocument
Set pDoc = ThisDocument
Dim pLayer As ILayer
Set pLayer = pDoc.SelectedLayer
info2.Text = pLayer.Name

Может Вы подскажите?
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...