Добрался до механизма "Менеджера плагинов", там, в общем, есть всё, что мне нужно, и даже то, что я только планировал сделать (выбор нужных тегов прямо на карте,удаление выбранного, создание треков и областей, и их перемещение мышкой и т.д. ), но есть небольшая проблема, и она в том, что основную демку, которую я использую как основу «картографической части» проекта, начинает плющить из-за конфликта двух разных методов создания геотегов. Причем попытки убрать более примитивный «внутренний» ни к чему хорошему не привели. Можно отказаться от «основной демки» (есть более простая, специально заточенная на нужный мне плагин), но в «главной демке» есть много чего хорошего, что заработало сразу без «танцев с бубном».
Зы
Вообще разумеется лучше всего было-бы отказаться кода демок и просто использовать компоненты напрямую но придется описывать всю "обвязку самостоятельно " что слегка лениво ...
Добавлено спустя 1 час 56 минут 18 секунд:Re: Геоинформация(GIS и просто карты) в программах на Лазарус"Вы панике не поддавайтесь организовано спасайтесь... " Уф глюк победил ! "Паническая атака" отбита !

Правда пришлось сделать отдельный режим MarkerEditor и пока работает "очереди" или в нем или без него но не вместе но это уже ерунда (нужно сохранить точки и приключится в другой режим ).
Добавлено спустя 46 минут 4 секунды:Re: Геоинформация(GIS и просто карты) в программах на ЛазарусНу это немного "Обман зрения" (Сейчас можно "смешать режимы" но в списке точек будет путаница )
Добавлено спустя 11 часов 57 минут 45 секунд:Re: Геоинформация(GIS и просто карты) в программах на Лазарус"Смешение" режимов немного поправил (добавил удаление "обычных точек" при конверсии в область ) чем полезно "смешение" тем что "обычные точки " имеют имя, а созданные, с помощью MarkerEditor-ра остаются безымянными.
Новая версия "Convert_to_area_ButtonClick" (для формы GPSListViewer ) + настройка цветов.
- Код: Выделить всё
const
areaFillColor1 :integer = clRed;
areaLineColor1 :integer = clMaroon;
procedure TGPSListViewer.Convert_to_area_ButtonClick(Sender: TObject);
type
TCoordRec = record
Lon: Double;
Lat: Double;
Name: String;
end;
var
i, iChecked: Integer;
item: TListItem;
rPt: TRealPoint;
gpsObj: TGpsObj;
CoordArr: array of TCoordRec;
APoints: TRealPointArray;
procedure AddGPSArea;
var
area: TGPSArea;
i: Integer;
MapView: TMapView;
begin
MapView:= FViewer;
area := TGPSArea.Create;
area.Name := Edit1.Text;
area.FillColor := areaFillColor1;
area.LineColor := areaLineColor1;
area.Opacity := 0.5;
for i := 0 to High(APoints) do
area.Points.Add(TGPSPoint.CreateFrom(APoints[i]));
MapView.GPSItems.Add(area, 201);
end;
begin
// count checked items
iChecked := 0;
for i:=0 to ListView.Items.Count - 1 do begin
if ListView.Items.Item[i].Checked then Inc(iChecked);
end;
if iChecked < 3 then begin
ShowMessage('Please select more 2 items .');
exit;
end;
SetLength(APoints,iChecked);
iChecked := 0;
for i:=0 to ListView.Items.Count - 1 do begin
if ListView.Items.Item[i].Checked then begin
item := ListView.Items[i];
if TryStrToGps(item.SubItems[2], rPt.Lon) and TryStrToGps(item.SubItems[1], rPt.Lat) then
begin
APoints[iChecked].Lon := rPt.Lon;;
APoints[iChecked].Lat := rPt.Lat;
Inc(iChecked);
end;
end;
end;
// Удаление точек после конверсии (теперь область можно редактировать и удалять в режиме MarkerEditor )
for i:= ListView.Items.Count - 1 downto 0 do begin
if ListView.Items.Item[i].Checked then begin
item := ListView.Items[i];
if TryStrToGps(item.SubItems[2], rPt.Lon) and TryStrToGps(item.SubItems[1], rPt.Lat) then
begin
gpsObj := TGpsPoint.CreateFrom(rPt);
gpsObj.Name := item.SubItems[0];
FViewer.GPSItems.Add(gpsObj, _CLICKED_POINTS_);
ListView.Items[i].Free;
FViewer.GpsItems.Clear(_CLICKED_POINTS_);
end
end
end;
AddGPSArea;
SetLength(APoints,0);
end;
procedure TGPSListViewer.Shape1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
with TColorDialog.Create(self) do begin
if Execute then
Case Button Of
mbLeft:begin
Shape1.Brush.Color:=Color;
areaFillColor1:=Color;
end;
mbRight:begin
Shape1.Pen.Color:=Color;
areaLineColor1:=Color;
end
end;
free;
end;
end;
Зы
Переход режим "Marker Editor" очень простой .
procedure TCfgFrame.CheckBoxMarkerEditorChange(Sender: TObject);
begin
MarkerEditor:=CheckBoxMarkerEditor.Checked;
PluginManagerMarkerEditorPlugin1.Enabled:= MarkerEditor;
end;
MarkerEditorPlugin добавляется PluginManager-е в "дизайн тайм" .
(+ нужно установить PluginManagerMarkerEditorPlugin1. Enabled :=False )
Панель управления "Marker Editor" почти полностью выдрана из примера
..\LazMapViewer\examples\plugin_demos\markereditor_demo
(Нет выбора типа точек но и без него все работает )
А флаг MarkerEditor блокирует стандартную реакцию на правую кнопку мыши .
- Код: Выделить всё
procedure TMainForm.MapViewMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
...
begin
if (Button = mbRight) and not CfgFrame.MarkerEditor then begin
..
end;
end;

Зы Зы
Все это разумеется происходит в постепенно перестраиваемой под мой проект "mapviewer_demo"
..\LazMapViewer\examples\fulldemo\mapviewer_demo.lpr
Но то что срыто за "шторками" пока никак с картами не взаимодействует
( как нетрудно догадаться по соседей теме это будет мнемосхема и дополнительная панель настройки )