?? 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
UnitGISShell;
{$R *.dfm}
var
// 鷹眼實現(xiàn)的參數(shù)
EagleEye_Layer: MapXLib_TLB.Layer; // 鷹眼圖上臨時圖層
EagleEye_Fea: MapXLib_TLB.Feature; // 鷹眼圖上反映 Map1 窗口位置的Feature
Have_EagleEye: Boolean=False; // 記錄是否已經(jīng)加載鷹眼
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的矩形內(nèi)部填充樣式
tempStyle.RegionBorderColor := RGB(255, 0, 0); //設置Style的矩形邊框顏色
tempStyle.RegionBorderWidth := 2; //設置Style的矩形邊框寬度
//在圖層創(chuàng)建大小為Map1的邊界的Rectangle對象
tempFea := FrmEagleEye.MapEagleEye.FeatureFactory.CreateRegion(FOperMap.Bounds, tempStyle);
EagleEye_Fea := EagleEye_Layer.AddFeature(tempFea, EmptyParam); //添加矩形邊框
end
else begin //否則,根據(jù)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 + -