📄 uniteagleeye.~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
UnitShellAPIs;
{$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 + -