Как в Delphi нарисовать точку с надписью?

0 голосов
спросил 26 Май, 10 от DevProSoftware (1,040 баллов) в категории Программные продукты Esri
Здравствуйте.

Помогите, пожалуйста со следующей задачей - мне необходимо в Delphi нарисовать в векторном и в растровом слоях карты точку с какой-то надписью. Я благодаря примерам на форуме получил указатель на

pFeatureClass: IFeatureClass;

Что мне нужно далее делать для рисования точки с надписью, если можно, пришлите пример кода, спасибо!

13 Ответы

0 голосов
ответил 26 Май, 10 от pooperec (10,820 баллов)
pPoint   := CoPoint.Create as IPoint;
pPoint.X := 1;
pPoint.Y := 2;
pGeometry := pPoint as IGeometry;
pFeature := pFeatureClass.CreateFeature;
pFeature.Shape := pGeometry;
pFeature.Store;

не?
0 голосов
ответил 27 Май, 10 от DevProSoftware (1,040 баллов)
Очень Вам благодарен, но на строке
pFeature.Shape := pGeometry;
программа "вылетает" с ошибкой:
raised exception class EOleException with message 'No support for this geometry type'


0 голосов
ответил 27 Май, 10 от pooperec (10,820 баллов)
Значит pFeatureClass имеет тип геометрии отличный от точечного...
0 голосов
ответил 27 Май, 10 от DevProSoftware (1,040 баллов)
Я так понимаю, что в слое, на который указывает pFeatureClass нельзя рисовать точки? Нужно выбрать другой слой? Если это так, можно имя слоя узнать? Спасибо.
0 голосов
ответил 27 Май, 10 от DevProSoftware (1,040 баллов)
Создал карту, в которой есть слой, в котором можно рисовать точки (ошибка не возникает). Рисую точку с координатами
pPoint.X := 0;
pPoint.Y := 0;
Она по идее должна рисоватьлся в левом верхнем углу, но почему-то не рисуется.
Карту создал в ArcInfo через New->World->Africa.mxt
0 голосов
ответил 27 Май, 10 от DevProSoftware (1,040 баллов)
Рисую в слое с названием pFeatureLayer.Name = 'Cities'
0 голосов
ответил 27 Май, 10 от DevProSoftware (1,040 баллов)
Вычислил в ArcInfo реальное место, где должна рисоваться точка с координатами (0,0) через Go To XY, но у меня в этом месте всё-равно точка не рисуется, не скажете, почему?
0 голосов
ответил 27 Май, 10 от pooperec (10,820 баллов)
Добавьте
pActiveView.PartialRefresh(esriViewGeography,nil,nil);
0 голосов
ответил 27 Май, 10 от DevProSoftware (1,040 баллов)
Спасибо, но всё-равно точка не рисуется, написал такой код:
procedure TMAP.OnClick;
var
  pActiveView : IActiveView;
  pLayer: ILayer;
  pFeatLayer: IFeatureLayer;
  pFeatClass: IFeatureClass;
  pPoint: IPoint;
  pGeometry: IGeometry;
  pFeature: IFeature;
begin
  pActiveView := phook.FocusMap as IActiveView;

  pLayer := phook.FocusMap.Layer[0];
  pFeatLayer := pLayer as IFeatureLayer;
  pFeatClass := pFeatLayer.FeatureClass;

  pPoint := CoPoint.Create as IPoint;
  pPoint.X := 0;
  pPoint.Y := 0;

  pGeometry := pPoint as IGeometry;
  pFeature := pFeatClass.CreateFeature;

  pFeature.Shape := pGeometry;

  pActiveView.PartialRefresh(esriViewGeography,nil,nil);

  pFeature.Store;
end;
0 голосов
ответил 27 Май, 10 от DevProSoftware (1,040 баллов)
Забыл дописать:
var
  pHook : IHookHelper; //объявлена как глобальная переменная

procedure TMAP.OnCreate(const hook: IDispatch);
begin
  pHook := CoHookHelper.Create as IHookHelper;
  pHook.hook := hook;
end;

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