Mapx中鹰眼的实现

用了 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 ;

你可能感兴趣的:(鹰眼,MapX)