⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uniteagleeye.pas

📁 此代码是关于mapgis的在
💻 PAS
字号:
unit UnitEagleEye;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, OleCtrls, MapXLib_TLB, ExtCtrls;

type
  TFrmEagleEye = class(TForm)
    PanelEagleEye: TPanel;
    MapEagleEye: TMapXObject;
    procedure MapEagleEyeMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure MapEagleEyeMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure MapEagleEyeMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
  private
    FOperMap: TMapXObject;
    FGeoFileName: string;
    { Private declarations }
  public
    { Public declarations }
    procedure SetMapViewChanged;
    procedure InitLayers(const ReBuild:Boolean);
    procedure ReBuildLayers;
    property OperMap:TMapXObject read FOperMap write FOperMap;
    property GeoFileName:string read FGeoFileName write FGeoFileName;
  end;

var
  FrmEagleEye: TFrmEagleEye;

implementation

uses
  UnitGISShell;

{$R *.dfm}

var
// 鹰眼实现的参数
  EagleEye_Layer: MapXLib_TLB.Layer;   // 鹰眼图上临时图层
  EagleEye_Fea: MapXLib_TLB.Feature;   // 鹰眼图上反映 Map1 窗口位置的Feature
  Have_EagleEye: Boolean=False;        // 记录是否已经加载鹰眼
  EagleEye_CanMove: Boolean=False;     // 记录在鹰眼上移动Map1的标识

// 地图显示变化处理
procedure TFrmEagleEye.SetMapViewChanged;
var
  tempFea: MapXLib_TLB.Feature; //声明Feature变量
  tempStyle: MapXLib_TLB.Style; //声明Style变量
begin
  if (MapEagleEye.Layers.Count=0)or(EagleEye_Layer=nil) then Exit;
  if EagleEye_Layer.AllFeatures.Count=0 then
  begin
    //  设置矩形边框样式
    tempStyle := MapXLib_TLB.CoStyle.Create;
    tempStyle.RegionPattern := miPatternNoFill; //设置Style的矩形内部填充样式
    tempStyle.RegionBorderColor := RGB(255, 0, 0); //设置Style的矩形边框颜色
    tempStyle.RegionBorderWidth := 2; //设置Style的矩形边框宽度
    //在图层创建大小为Map1的边界的Rectangle对象
    tempFea := FrmEagleEye.MapEagleEye.FeatureFactory.CreateRegion(FOperMap.Bounds, tempStyle);
    EagleEye_Fea := EagleEye_Layer.AddFeature(tempFea, EmptyParam); //添加矩形边框
  end
  else begin  //否则,根据Map1的视野变化改变矩形边框的大小和位置
    EagleEye_Fea.Parts.Item[1].RemoveAll; //除去已有的矩形边框的顶点
    //添加大小和位置已变化的矩形边框的四个顶点
    EagleEye_Fea.Parts.Item[1].AddXY(FOperMap.Bounds.XMin, FOperMap.Bounds.YMin, 1);
    EagleEye_Fea.Parts.Item[1].AddXY(FOperMap.Bounds.XMax, FOperMap.Bounds.YMin, 1);
    EagleEye_Fea.Parts.Item[1].AddXY(FOperMap.Bounds.XMax, FOperMap.Bounds.YMax, 1);
    EagleEye_Fea.Parts.Item[1].AddXY(FOperMap.Bounds.XMin, FOperMap.Bounds.YMax, 1);
  end;
  EagleEye_Fea.Update(EagleEye_Fea, EmptyParam);
end;

procedure TFrmEagleEye.MapEagleEyeMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  MapEagleEye.Cursor := crHandPoint;
  EagleEye_CanMove := True;
end;

procedure TFrmEagleEye.MapEagleEyeMouseUp(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  MapEagleEye.Cursor := crDefault;
  EagleEye_CanMove := False;  
end;

procedure TFrmEagleEye.MapEagleEyeMouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
var
  Map_X, Map_Y: Double;
  X_X, Y_Y: Single;
begin
  if EagleEye_CanMove then
  begin
  //把屏幕坐标转换为地图坐标
    X_X := X;  Y_Y := Y;
    MapEagleEye.ConvertCoord(X_X, Y_Y, Map_X, Map_Y, miScreenToMap);
  //设置主图的中心x坐标和y坐标
    FOperMap.CenterX := Map_X;
    FOperMap.CenterY := Map_Y;
  end;
end;

procedure TFrmEagleEye.InitLayers(const ReBuild:Boolean);
begin
  EagleEye_Layer:=nil;
  if (ReBuild or (not FileExists(GeoFileName)))and(FOperMap.Layers.Count>0) then
    MyGIS.GMapTools.m_Map.SaveMapAsGeoset(GeoFileName);
  if (FOperMap.Layers.Count>0)and(FileExists(GeoFileName)) then
    MapEagleEye.GeoSet:=GeoFileName
  else
    MapEagleEye.Layers.RemoveAll;
  EagleEye_Layer := MapEagleEye.Layers.CreateLayer('EagleEye', EmptyParam, 1, EmptyParam, EmptyParam);
end;

procedure TFrmEagleEye.ReBuildLayers;
begin
  FOperMap.SaveMapAsGeoset('', GeoFileName);
  MapEagleEye.GeoSet:=GeoFileName;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -