Harita İşleme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
morphine39
Üye
Mesajlar: 35
Kayıt: 02 May 2009 04:50

Harita İşleme

Mesaj gönderen morphine39 »

Merhaba Arkadaşlar

Yapacağım bir projede harita işleme yapmam lazım.
Şöyleki;

Sisteme bir harita yüklüyecekler Ölçüleri hiç önemli değil

Yükleyecekleri bu harita üzerinde mekan tanımlaması yapacaklar. Mekanı kaydederken Haritanın üzerinde Şurada şeklinde bir işaret konulacak Kaydet dediklerinde sistem bunun koordinatlarını
kaydedecek daha sonra bunu çıktı olarak alabilecekler

Benim sizlerden öğrenmek istediğim şu
Ben haritayı yükleticem fakat
1 - Harita üzerinde işaretlemeyi nasıl yaparım
2 - İşaretlemenin Koordinatlarını resme göre nasıl alırım.
3 - Bunu daha sonra harita üzerinde görmek istediklerinde nasıl gösteririm

Direk kod istemiyorum. Google da nasıl arama yapacağımı da kelime olarak tam kestiremedim. Bana mantığı hakkında bilgi verirseniz
yada izlemem gereken yol hakkında gerisini ben halletmeye çalışırım..

Yardımlarınız için şimdiden teşekkürler
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Re: Harita İşleme

Mesaj gönderen Lost Soul »

En son Lost Soul tarafından 06 May 2010 12:06 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
CiTiZEN
Üye
Mesajlar: 1163
Kayıt: 06 Oca 2008 04:15

Re: Harita İşleme

Mesaj gönderen CiTiZEN »

tam olarak içeriği hakkında bilgim yok ama şurada konuşulmuştu koordinat vs. hakkında bilgi verebilir.

http://delphiturkiye.com/forum/viewtopi ... itas%C4%B1
UWESIS CORPORATION
morphine39
Üye
Mesajlar: 35
Kayıt: 02 May 2009 04:50

Re: Harita İşleme

Mesaj gönderen morphine39 »

Google da Delphi resim işleme diye aradım fakat yeterli bilgi bulamadım

Arkadaşlar ben TImage içine onu koyucam fakat ben ona tıkladığımda o resmin üzerine istediğim şekli nasıl koyucak
yada onun koordinatlarını nasıl alıcam..

Google Map örneği vermişsiniz. Benim de aklıma ilk o geldi fajat bu haritayı çiziim olarak yüklüyecekler

Kafam çok takıldı.. Çözüm bulamıyorum bir türlü
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Harita İşleme

Mesaj gönderen mrmarman »

Bu harita ölçekli bir harita olacaksa (google maps veya herhangi bir kaynaktan alınan harita) GPS koordinat sistemini anlatayım. Yoksa mevzu sadece bir resim üzerine konan bir nesne ise ve o nesnenin yerinin hatırlanarak yeniden çizilmesi ise o daha basit bir işlemdir ona göre anlatayım.
Resim
Resim ....Resim
morphine39
Üye
Mesajlar: 35
Kayıt: 02 May 2009 04:50

Re: Harita İşleme

Mesaj gönderen morphine39 »

Şimdi Olay Şu
Haritada bir noktada tanımlama yapılacak

yani şurası bir bina gibi
Daha sonra bu harita gösterildiğinde nokta da daha önce kaydedildiği yerde gösterilecek

Ölçekleme şundan dolayı lazım olabilir

Harita detaylı ve büyük tanımlanacak
Resim büyütüls de küçültülse de noktanın nerede olduğunu bilmek gerekir. Yani Tam adresi her türlü göstermesi gerekir.

Çok iyi anlatamadım mı :S
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Harita İşleme

Mesaj gönderen mrmarman »

Resmin büyüme ve küçülme oranları kontrolün altında olduğu sürece sorun yok.

Yapacağın işlem çok basit.
Bir TImage nesnesine (adı Image1 olsun...) bir haritayı Bitmap image olarak eklediniz. Form üzerinde büyüyüp küçüldükçe değişen bir Image1 olmasına rağmen sizin zaten biliyor olduğunuz boyutlar ( Image1.Width := 100 olduğunu ve Image1.Picture.Bitmap.Width := 300 olduğunu düşünürsek ve TImage nesnesinin stretch özelliği true ise ) senin yapman gereken işlem, Image1'in OnMouseUp olayındaki X, Y koordinatını en geniş ve orjinal olan Birmap'in Width ve height değerine dönüştürüp saklamak olacaktır.

Fiziksel bir örnek gerekirse örnek proje ve exe halini bu mesaja ekledim.

Resim
resim oranı bile değişse noktalarımız aynı konuma değerlendirip konulacaktır.

Resim
örnekteki resimler bunun içindir.

Kod: Tümünü seç

Var
  xBitmap : TBitmap;

procedure TForm1.btTemizleClick(Sender: TObject);
begin
  Image1.Picture.Graphic := xBitmap;
end;

procedure TForm1.btDoldurClick(Sender: TObject);
Var
  i : Integer;
  x, y : Integer;
  Satir : String;
  x1, y1 : Integer;
begin
  for i := 0 to ListBox1.Count - 1 do begin
    Satir := ListBox1.Items[i];
    x := StrToInt( Copy(Satir, 1, Pos(',', Satir) -1) );
    System.Delete(Satir, 1, Pos(',', Satir));
    y := StrToInt( Copy(Satir, 1, Pos('.', Satir) -1) );

    x1 := Trunc( X * (Image1.Width  / Image1.Picture.Bitmap.Width ) );
    y1 := Trunc( Y * (Image1.Height / Image1.Picture.Bitmap.Height) );
    with PaintBox1.Canvas do begin
      Brush.Style := bsSolid;
      Brush.Color := clYellow;
      Pen.Color   := clBlue;
      Pen.Width   := 3;
      Rectangle(x1-5, y1-5, x1+5, y1+5);
    end;
  end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  ListBox1.Items.SaveToFile( ChangeFileExt(Application.Exename, '_Koordinat.TXT') );
  xBitmap.Free;
end;

procedure TForm1.FormResize(Sender: TObject);
begin
  btTemizle.Click;
  Application.ProcessMessages;
  btDoldur.Click;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  xBitmap := TBitmap.Create;
  xBitmap.Assign( Image1.Picture.Bitmap );
  If FileExists( ChangeFileExt(Application.Exename, '_Koordinat.TXT') )
    then ListBox1.Items.LoadFromFile( ChangeFileExt(Application.Exename, '_Koordinat.TXT') );
end;

procedure TForm1.ListBox1DblClick(Sender: TObject);
begin
  if ListBox1.ItemIndex >= 0 then ListBox1.Items.Delete(ListBox1.ItemIndex);
  FormResize(Nil);
end;

procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
Var
  x1, y1 : Integer;
begin
  x1 := Trunc( X / (Image1.Width  / Image1.Picture.Bitmap.Width ) );
  y1 := Trunc( Y / (Image1.Height / Image1.Picture.Bitmap.Height) );
  Form1.Caption := Format('X: %d, Y:%d', [x1, y1]);

end;

procedure TForm1.PaintBox1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
Var
  x1, y1 : Integer;
begin
  x1 := Trunc( X / (Image1.Width  / Image1.Picture.Bitmap.Width ) );
  y1 := Trunc( Y / (Image1.Height / Image1.Picture.Bitmap.Height) );
  ListBox1.Items.Add( Format('%d,%d.', [ X1, Y1]) );
  FormResize(Nil);
end;
Dosya ekleri
HaritaKoordinat.rar
(234.62 KiB) 286 kere indirildi
Resim
Resim ....Resim
morphine39
Üye
Mesajlar: 35
Kayıt: 02 May 2009 04:50

Re: Harita İşleme

Mesaj gönderen morphine39 »

Örneğiniz yapmak istediğime çok yakın bir konu bunun için çok teşekkür ederim

Olayı biraz daha genişletirsek
Google map deki olay gibi

Ben bunu ( İnternet Ortamında IFRAME denildiği için öyle söylüyorum ) iframe içine koyarak resmi sağa sola kaydırarak uygun gördüğüm yere o noktayı koymak istiyorum.

Tabii zoom in/out gibi özellikler olacağı gibi bu resim o iframe içinde sağa sola da çekilecek

İşte ben bu durumda karışıyorum
Dediğiniz yöntem Mouse X,Y alara çok başarılı çalışıyor

Peki iframe içindeki resimde bu koordinatı nasıl yapcas
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Harita İşleme

Mesaj gönderen mrmarman »

@morphine39 yazdı:Arkadaşlar ben TImage içine onu koyucam fakat ben ona tıkladığımda o resmin üzerine istediğim şekli nasıl koyucak
yada onun koordinatlarını nasıl alıcam..

Google Map örneği vermişsiniz. Benim de aklıma ilk o geldi fajat bu haritayı çiziim olarak yüklüyecekler

Kafam çok takıldı.. Çözüm bulamıyorum bir türlü
dediğin için çözüm bu şekilde.

Şimdi de IFrame demişsin ki bu durumda GoogleMaps API ile çalışmak zorundasın. Kendi projemde GoogleMAPS için IFRAME içindeki kadarlık kısmı kendi yazılımıma aktarıp üzerinde öyle çalışıyorum. Böylece Offline ( sahada çalışırken ) harita ile ilgili sıkıntı yaşamıyorum :idea: . Genel kültür olsun diye soruyorsan vakit alan konulardır. GPS koordinat sistemi hakkında fikrin oluşana kadar girme derim. :wink:
Resim
Resim ....Resim
Cevapla