226 lines
6.4 KiB
Plaintext
226 lines
6.4 KiB
Plaintext
unit umain;
|
|
|
|
interface
|
|
|
|
uses
|
|
// Disable Variants in Delphi 5
|
|
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
|
|
Dialogs, imageenview, ieview, iemview, ComCtrls, ExtCtrls, hyieutils, hyiedefs,
|
|
Buttons, StdCtrls, iexBitmaps, iesettings;
|
|
|
|
type
|
|
TMainForm = class(TForm)
|
|
Panel1: TPanel;
|
|
StatusBar1: TStatusBar;
|
|
ImageEnMView1: TImageEnMView;
|
|
ImageEnView1: TImageEnView;
|
|
SpeedButtonLeft: TSpeedButton;
|
|
SpeedButtonUp: TSpeedButton;
|
|
SpeedButtonDown: TSpeedButton;
|
|
SpeedButtonRight: TSpeedButton;
|
|
SpeedButtonZoomIn: TSpeedButton;
|
|
SpeedButtonZoomOut: TSpeedButton;
|
|
Label1: TLabel;
|
|
Label2: TLabel;
|
|
Label3: TLabel;
|
|
Splitter1: TSplitter;
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure ImageEnView1MouseMove(Sender: TObject; Shift: TShiftState; X,
|
|
Y: Integer);
|
|
procedure ImageEnView1Resize(Sender: TObject);
|
|
procedure ImageEnMView1ImageSelect(Sender: TObject; idx: Integer);
|
|
procedure SpeedButtonZoomInClick(Sender: TObject);
|
|
procedure SpeedButtonZoomOutClick(Sender: TObject);
|
|
procedure SpeedButtonLeftClick(Sender: TObject);
|
|
procedure SpeedButtonRightClick(Sender: TObject);
|
|
procedure SpeedButtonUpClick(Sender: TObject);
|
|
procedure SpeedButtonDownClick(Sender: TObject);
|
|
procedure ImageEnView1MouseDown(Sender: TObject; Button: TMouseButton;
|
|
Shift: TShiftState; X, Y: Integer);
|
|
procedure ImageEnView1DrawBackBuffer(Sender: TObject);
|
|
procedure Label3Click(Sender: TObject);
|
|
procedure MapBeginWork(Sender: TObject);
|
|
procedure MapFinishWork(Sender: TObject);
|
|
private
|
|
{ Private declarations }
|
|
map: TIESlippyMap;
|
|
mouseDownPoint: TPoint;
|
|
mouseDownCoords: TIE2DPoint;
|
|
public
|
|
{ Public declarations }
|
|
end;
|
|
|
|
var
|
|
MainForm: TMainForm;
|
|
|
|
implementation
|
|
|
|
uses
|
|
ims, ShellApi;
|
|
|
|
{$R *.dfm}
|
|
{$R WindowsTheme.res}
|
|
|
|
|
|
procedure TMainForm.FormCreate(Sender: TObject);
|
|
begin
|
|
// Note: The MapQuest service has been discontinued
|
|
map := TIESlippyMap.Create(iesmpOSM_Mapnik, 'cache');
|
|
map.OnBeginWork := MapBeginWork;
|
|
map.OnFinishWork := MapFinishWork;
|
|
map.Zoom := 4;
|
|
|
|
ImageEnMView1.SoftShadow.Enabled := true;
|
|
ImageEnMView1.FillFromDirectory('images', -1, false, '', false, '', False, false);
|
|
ImageEnMView1.SelectAll();
|
|
ImageEnMView1ImageSelect(self, 0);
|
|
|
|
ImageEnView1.LegacyBitmap := false;
|
|
ImageEnView1.IEBitmap.VirtualBitmapProvider := map;
|
|
|
|
ImageEnView1Resize(self);
|
|
end;
|
|
|
|
procedure TMainForm.ImageEnView1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
|
var
|
|
xbmp, ybmp: integer;
|
|
begin
|
|
xbmp := ImageEnView1.XScr2Bmp(X);
|
|
ybmp := ImageEnView1.YScr2Bmp(Y);
|
|
mouseDownPoint := Point(xbmp, ybmp);
|
|
mouseDownCoords := IE2DPoint(map.Longitude, map.Latitude);
|
|
end;
|
|
|
|
procedure TMainForm.ImageEnView1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
|
|
var
|
|
xbmp, ybmp: integer;
|
|
begin
|
|
xbmp := ImageEnView1.XScr2Bmp(X);
|
|
ybmp := ImageEnView1.YScr2Bmp(Y);
|
|
StatusBar1.SimpleText := Format('Latitude: %3.8f, Longitude: %3.8f',
|
|
[map.BmpYToLatitude(ybmp), map.BmpXToLongitude(xbmp)]);
|
|
if ImageEnView1.MouseCapture then
|
|
begin
|
|
// drag map
|
|
map.Longitude := map.BmpXToLongitude( map.LongitudeToBmpX(mouseDownCoords.X) + (mouseDownPoint.X - xbmp) );
|
|
map.Latitude := map.BmpYToLatitude( map.LatitudeToBmpY(mouseDownCoords.Y) + (mouseDownPoint.Y - ybmp) );
|
|
ImageEnView1.Update();
|
|
end;
|
|
end;
|
|
|
|
// TImageEnView resized
|
|
procedure TMainForm.ImageEnView1Resize(Sender: TObject);
|
|
var
|
|
bmpw, bmph: integer;
|
|
begin
|
|
bmpw := ImageEnView1.Width;
|
|
bmph := ImageEnView1.Height;
|
|
|
|
ImageEnView1.IEBitmap.Allocate(bmpw, bmph);
|
|
|
|
map.PointPosition := Point(bmpw div 2, bmph div 2);
|
|
ImageEnView1.Update();
|
|
end;
|
|
|
|
// selected image
|
|
procedure TMainForm.ImageEnMView1ImageSelect(Sender: TObject; idx: Integer);
|
|
begin
|
|
with ImageEnMView1.MIO.Params[idx] do
|
|
begin
|
|
Label2.Caption := Format('Latitude: %3.8f (%s), Longitude: %3.8f (%s)', [EXIF_GPSLatitude,
|
|
EXIF_GPSLatitude_Str,
|
|
EXIF_GPSLongitude,
|
|
EXIF_GPSLongitude_Str]);
|
|
map.Latitude := EXIF_GPSLatitude;
|
|
map.Longitude := EXIF_GPSLongitude;
|
|
end;
|
|
ImageEnView1.Update();
|
|
end;
|
|
|
|
// Zoom-in
|
|
procedure TMainForm.SpeedButtonZoomInClick(Sender: TObject);
|
|
begin
|
|
map.Zoom := map.Zoom + 1;
|
|
ImageEnView1.Update();
|
|
end;
|
|
|
|
// Zoom-out
|
|
procedure TMainForm.SpeedButtonZoomOutClick(Sender: TObject);
|
|
begin
|
|
if map.Zoom > 0 then
|
|
begin
|
|
map.Zoom := map.Zoom - 1;
|
|
ImageEnView1.Update();
|
|
end;
|
|
end;
|
|
|
|
// left
|
|
procedure TMainForm.SpeedButtonLeftClick(Sender: TObject);
|
|
begin
|
|
map.Longitude := map.BmpXToLongitude( map.LongitudeToBmpX(map.Longitude) - 64 );
|
|
ImageEnView1.Update();
|
|
end;
|
|
|
|
// right
|
|
procedure TMainForm.SpeedButtonRightClick(Sender: TObject);
|
|
begin
|
|
map.Longitude := map.BmpXToLongitude( map.LongitudeToBmpX(map.Longitude) + 64 );
|
|
ImageEnView1.Update();
|
|
end;
|
|
|
|
// up
|
|
procedure TMainForm.SpeedButtonUpClick(Sender: TObject);
|
|
begin
|
|
map.Latitude := map.BmpYToLatitude( map.LatitudeToBmpY(map.Latitude) - 64);
|
|
ImageEnView1.Update();
|
|
end;
|
|
|
|
// down
|
|
procedure TMainForm.SpeedButtonDownClick(Sender: TObject);
|
|
begin
|
|
map.Latitude := map.BmpYToLatitude( map.LatitudeToBmpY(map.Latitude) + 64);
|
|
ImageEnView1.Update();
|
|
end;
|
|
|
|
procedure TMainForm.ImageEnView1DrawBackBuffer(Sender: TObject);
|
|
var
|
|
i: integer;
|
|
idx: integer;
|
|
lat, lon: double;
|
|
x, y: integer;
|
|
begin
|
|
for i := 0 to ImageEnMView1.MultiSelectedImagesCount - 1 do
|
|
begin
|
|
idx := ImageEnMView1.MultiSelectedImages[i];
|
|
lat := ImageEnMView1.MIO.Params[idx].EXIF_GPSLatitude;
|
|
lon := ImageEnMView1.MIO.Params[idx].EXIF_GPSLongitude;
|
|
x := map.LongitudeToBmpX(lon);
|
|
y := map.LatitudeToBmpY(lat);
|
|
with TIEBitmap.Create(@marker[0], marker_Size) do
|
|
begin
|
|
RenderToTBitmapEx(ImageEnView1.BackBuffer, x - marker_spot_x, y - marker_spot_y, 64, 64, 0, 0, Width, Height, 255, rfNone);
|
|
Free();
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TMainForm.Label3Click(Sender: TObject);
|
|
begin
|
|
ShellExecute(Handle, 'open', PChar('http://www.imageen.com'), nil, nil, SW_MAXIMIZE);
|
|
end;
|
|
|
|
|
|
// Before downloading tiles
|
|
procedure TMainForm.MapBeginWork(Sender: TObject);
|
|
begin
|
|
Screen.Cursor := crHourglass;
|
|
end;
|
|
|
|
// After downloading tiles
|
|
procedure TMainForm.MapFinishWork(Sender: TObject);
|
|
begin
|
|
Screen.Cursor := crDefault;
|
|
end;
|
|
|
|
end.
|