用了
4+
小时,终于搞定了
Mapx
中鹰眼的实现,效果还不是很好,有待进一步调整,但基本功能实现了,代码共享如下:
先建一个窗体,放
Map1
(大地图)
,Map2
(鹰眼地图)
//先定义全局变量
m_TempLayer : Layer; //
导航图上临时图层
m_Fea :Feature ; //
导航图上反映主地图窗口位置的
Feature
bDown : Boolean ; //
鼠标在导航图上按下的标志
fcount :integer ;
procedure TForm1.FormCreate(Sender: TObject); //Form
加载时,初始化鹰眼的临时图层
begin
//
此处要改一下,把自定义工具改为标准工具
m_Fea := nil ;
m_TempLayer := nil ;
m_TempLayer := Map2.Layers.CreateLayer('aa', EmptyParam,1,EmptyParam, EmptyParam);
fcount := m_TempLayer.AllFeatures.Count ;
end;
procedure TForm1.Map1MapViewChanged(Sender: TObject); //
大地图的视图发生改变时
var tempFea : CMapXFeature;
bLayer : CMapXLayer ;
tempStyle : Style ;
begin
If fcount =0 Then //
矩形边框还没有
begin
tempStyle := coStyle.Create; //
设置矩形边框样式
tempStyle.RegionPattern := miPatternNoFill ;
tempStyle.RegionBorderColor := 255;
tempStyle.RegionBorderWidth := 2 ; //
在临时图层添加大小为
Map1
的边界的
Rectangle
对象
}
tempFea := Map2.FeatureFactory.CreateRegion(Map1.Bounds, tempStyle) ;
m_Fea := Map2.Layers.Item(1).AddFeature(tempFea, EmptyParam);
tempStyle := nil ;
end
Else //
根据
Map1
的视野变化改变矩形边框的大小和位置
begin
With m_Fea.Parts.Item(1) do
begin
RemoveAll ;
AddXY(Map1.Bounds.XMin, Map1.Bounds.YMin,EmptyParam) ;
AddXY(Map1.Bounds.XMax, Map1.Bounds.YMin,EmptyParam) ;
AddXY(Map1.Bounds.XMax, Map1.Bounds.YMax,EmptyParam) ;
AddXY(Map1.Bounds.XMin, Map1.Bounds.YMax,EmptyParam) ;
End ;
m_Fea.Update(EmptyParam,EmptyParam) ;
end;
End ;
procedure TForm1.Map2MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var MapX, MapY: Double;
ScreenX, ScreenY: Single;
begin
bDown := True ;
ScreenX := X;
ScreenY := Y;
Map1.ConvertCoord(ScreenX, ScreenY, MapX, MapY, miScreenToMap);
Map1.CenterX := MapX ;
Map1.CenterY := MapY ;
end;
procedure TForm1.Map2MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var MapX, MapY: Double;
ScreenX, ScreenY: Single;
begin
If bDown Then
begin
ScreenX := X;
ScreenY := Y;
Map1.ConvertCoord(ScreenX, ScreenY, MapX, MapY, miScreenToMap);
Map1.CenterX := MapX ;
Map1.CenterY := MapY ;
end;
end;
procedure TForm1.Map2MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
bDown := False;
end;
打开地图时,可添加以下代码:
(不添要出错,但这一块可以优化)
If fcount =0 Then //
矩形边框还没有
begin
//
设置矩形边框样式
tempStyle := coStyle.Create;
tempStyle.RegionPattern := miPatternNoFill ;
tempStyle.RegionBorderColor := 255;
tempStyle.RegionBorderWidth := 2 ; //
在临时图层添加大小为
Map1
的边界的
Rectangle
对象
}
tempFea := Map2.FeatureFactory.CreateRegion(Map1.Bounds, tempStyle) ;
m_Fea := Map2.Layers.Item(1).AddFeature(tempFea, EmptyParam);
tempStyle := nil ;
fcount := 1 ;
end ;