Не читается IFeature

0 голосов
спросил 12 Сен, 05 от DmitryOrlov (540 баллов) в категории Программные продукты Esri

Задача такова: в MapControl-е выбрать на карте объект путем query. Затем просто изменить масшат отображения карты так, чтоб выбранный объект был в центре эрана и вписан во все окно, т.е. aFeature.Get_Extent(anExt); MapControl1.Extent:=anExt;

procedure TForm1.Button1Click(Sender: TObject);
var
  aFL: IFeatureLayer;
  aLayer: ILayer;
  aTab: ITable;
  aDispTable: IDisplayTable;
  aQF: IQueryFilter;
  aFeatureSelection: IFeatureSelection;
  aFeature: IFeature;
  aTy: TOleEnum;
  aEnumFeature: IEnumFeature;
  aSel: ISelection;

begin
  MapControl1.Map.Get_Layer(0, aLayer);
  aFL:=aLayer as IFeatureLayer;
  aDispTable:=aFL as IDisplayTable;
  aDispTable.Get_DisplayTable(aTab);

  aQF:=CoQueryFilter.Create as IQueryFilter;
  aQF.Set_WhereClause('ID = '+Edit1.Text);
  aFeatureSelection:=aFL as IFeatureSelection;

  aFeatureSelection.SelectFeatures(aQF, esriSelectionResultNew, False);
  MapControl1.ActiveView.PartialRefresh(esriViewGeoSelection, nil, nil);

  MapControl1.Map.Get_FeatureSelection(aSel);
  aEnumFeature:=aSel as IEnumFeature;
  aEnumFeature.Reset;
  aFeature:=CoFeature.Create as IFeature;
  aEnumFeature.Next(aFeature);
  aFeature.Get_Extent(anExt);
  MapControl1.Extent:=anExt;
end;

Проблема в том, что aFeature не читается, т.е. она пустая. Пробовал и так: aFeatureClass.GetFeature(anID, aFeature), тоже не получается? Почему?

Уткнулся. Если кто знает - подскажите. Буду очень признателен! Проект горит...

2 Ответы

0 голосов
ответил 16 Сен, 05 от DmitryOrlov (540 баллов)

Люди, хелп! Неужели никто не пытался прочесть хоть раз IFeature, средствами Delphi 7 у ArcGIS 9? Мне нужно узнать центр IFeature, для этого я пытаюсь взять ее Extent. В нижеприведенном коде все нормально до момента, как я пытаюсь прочитать Extent. Т.е. aFeature находится, я проверял, но ни одно свойство она не возвращает (т.е. nil). Какой есть выход?

Более глобально, мне нужно отцентрировать карту оносительно центра найденной фигуры.

Поделитесь мыслями, плизз!

var
  aLayer: ILayer;
  aFeatureLayer: IFeatureLayer;
  aFeatureClass: IFeatureClass;
  aFeatureCursor: IFeatureCursor;
  aQueryFilter: IQueryFilter;
  anExtent: IEnvelope;
  aFeature: IFeature;
  x1, x2, y1, y2: double;
  aPoint: IPoint;
  s: widestring;
  aShape: IGeometry;

begin
  MapControl1.Map.Get_Layer(0, aLayer);
  aFeatureLayer:=aLayer as IFeatureLayer;

  aQueryFilter:=CoQueryFilter.Create as IQueryFilter;
  aQueryFilter.Set_WhereClause('ID = '+Edit1.Text);

  if aFeatureLayer.Search(aQueryFilter, false, aFeatureCursor) = S_OK
  then begin
    aFeatureCursor.NextFeature(aFeature);
    aFeature.Get_ShapeCopy(aShape);
    aFeature.Get_Extent(anExtent);
    anExtent.Get_XMin(x1);
    anExtent.Get_XMax(x2);
    anExtent.Get_YMin(y1);
    anExtent.Get_YMax(y2);

    aPoint:=CoPoint.Create as IPoint;
    aPoint.PutCoords(x1+(x2-x1)/2, y1+(y2-y1)/2);

    MapControl1.CenterAt(aPoint);
  end else
    ShowMessage('Not Found!');
end;

0 голосов
ответил 26 Сен, 05 от saysan (480 баллов)

А ты вот эту батву читал?

http://forums.esri.com/Thread.asp?c=93&f=1269&t=9485 8&mc=2#msgid263194

Или соответственно закачивал

http://codecentral.borland.com/codecentral/ccweb.exe/listing ?id=18754 ?

У меня (и не только,я полагаю) были проблемы с доступом ко многим объектам из под дельфы,в т.ч. и feature.

Закачкой указанного выше было вылечено.

 

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