Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
iki adres arası mesafe bulma
#1
Lightbulb 
Merhabalar iyi Çalışmalar
1- )iki adres arasındaki km'yi bulmak istiyorum.
2-)map kullanarak nasıl bir yol izlenir map kullanmadan da yapılabilir mı ?
Cevapla
#2
Merhaba,
İki yöntemle yapabilirsiniz. 
I. Yöntem: Koordinatlarını bildiğiniz noktalar arasındaki mesafeyi hesaplamak.
II. Yöntem: Map API ile iki nokta arasındaki (yaya, araç vb.) rotayı bularak hesaplamak. 
Aslında ikinci yöntem, temelde birinci yöntemi kullanarak mesafe hesabı yapar. 
Birinci yöntem için  Yeni Kaynak Kitabımızda geçen Yol Çizmek ve Mesafeyi Hesaplamak örnek uygulamaları size yardımcı olacaktır.
Mesafe ölçümlerinin tümü harita olmadan yapılır. Arka planda bir formülasyonla, coğrafi koordinatlar arası mesafe bulunur.
DelphiCan'dır!
Cevapla
#3
(11-06-2020, Saat: 17:25)ibrahim.aydin@perga.com.tr Adlı Kullanıcıdan Alıntı: Merhabalar iyi Çalışmalar
1- )iki adres arasındaki km'yi bulmak istiyorum.
2-)map kullanarak nasıl bir yol izlenir map kullanmadan da yapılabilir mı ?

Map kullanmadan uygun olursa karayollarının aşağıdaki gibi cetvelleri var.
excel dökümanı faydası olur mu  ekte il için olanı var karayolları sitesinde ilçeler dahil de olması lazım


Ek Dosyalar
.xls   ilmesafe.xls (Dosya Boyutu: 84 KB / İndirme Sayısı: 25)
"…De ki: "Hiç bilenlerle bilmeyenler bir olur mu? Şüphesiz, temiz akıl sahipleri öğüt alıp-düşünürler" (Zümer Suresi, 9)
Cevapla
#4
(11-06-2020, Saat: 17:37)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Merhaba,
İki yöntemle yapabilirsiniz. 
I. Yöntem: Koordinatlarını bildiğiniz noktalar arasındaki mesafeyi hesaplamak.
II. Yöntem: Map API ile iki nokta arasındaki (yaya, araç vb.) rotayı bularak hesaplamak. 
Aslında ikinci yöntem, temelde birinci yöntemi kullanarak mesafe hesabı yapar. 
Birinci yöntem için  Yeni Kaynak Kitabımızda geçen Yol Çizmek ve Mesafeyi Hesaplamak örnek uygulamaları size yardımcı olacaktır.
Mesafe ölçümlerinin tümü harita olmadan yapılır. Arka planda kullanılan bir formülasyonla, coğrafi koordinatlar arası mesafeyi bulunur.

Bilgi için teşşekür ederim kitabınız evde eve gecınce inceleyecegim.

(11-06-2020, Saat: 17:37)cinarbil Adlı Kullanıcıdan Alıntı:
(11-06-2020, Saat: 17:25)ibrahim.aydin@perga.com.tr Adlı Kullanıcıdan Alıntı: Merhabalar iyi Çalışmalar
1- )iki adres arasındaki km'yi bulmak istiyorum.
2-)map kullanarak nasıl bir yol izlenir map kullanmadan da yapılabilir mı ?

Map kullanmadan uygun olursa karayollarının aşağıdaki gibi cetvelleri var.
excel dökümanı faydası olur mu  ekte il için olanı var karayolları sitesinde ilçeler dahil de olması lazım

ilçeler için excel dokumune bakacagım teşekkurler
Cevapla
#5
Bu adresler arasındaki ilişkiyi GPS koordinatı bazında net kurabiliyor musunuz ? O zaman GoogleMaps'e bir sorgu yapıp net sonucu çektirebilirsiniz.

Diğer yandan bir ara API'lere girmeden yapabilir miyim diye değerlendirmiştim. Okul servisleri için uzaklığa göre ücret belirleme konusu hasıl olmuştu Smile

Arama formatınızı şu şekilde bilinen noktalar belirttiğinizde 

https://www.google.com/maps/dir/Ankamall+AVM/Kentpark+AVM

gibi...

size hemen rota çiziyor.


Örneğin :

https://www.google.com/maps/dir/Karşıyaka+İskele/Konak+İskele

dediğinizde dönen içerik içerisinde mesafe ve araç süre bilgisi geliyor.

,[[[0,"D550",[12592,"12,6 km",0]
,[1048,"17 dk."]


Sonucu parse edecek şekilde size uzaklık ve süre bilgisini döndürüyor.

Aksi halde teyide muhtaç adres girilmişse, o zaman size seçenekler çıkıyor. Seçenekler içerisinde de GPS koordinatları var. Kullanıcı seçenekler içerisinden uygun olanı seçtirirseniz, o GPS koordinatlarını @ işareti ile arama satırına eklediğinizde rota çizilerek sonuç net bir şekilde döndürülüyor.  Idea
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#6
Enlem,boylam bilgisi var ise kuş bakışı km haversine algoritması ile de hesaplanabilir
Yalnızım ama bir kente yürüyen ordu gibiyim, edebiyattan kaçınmalıyım..
Cevapla
#7
Size mesafe bulma SP mi yolluyorum. siz kendinize göre düzenlersiniz. Kod MySQL de aktif kullanılıyor.

CREATE DEFINER=`root`@`%` PROCEDURE `sp_yakin_istasyon_bul`(
i_long                VARCHAR(50),
i_lat                 VARCHAR(50))
BEGIN
SELECT DISTINCT(plan_site_no) AS site_no,site_name,Latitude,Longitude,(6371 * 2 * ASIN(SQRT(
         POWER(SIN((Latitude - ABS(i_lat)) * PI()/180 / 2),
         2) + COS(Latitude * PI()/180 ) * COS(ABS(i_lat) *
         PI()/180) * POWER(SIN((Longitude - i_long) *
         PI()/180 / 2), 2) ))) AS mesafe 
         
FROM tb_sites_m 
WHERE latitude IS NOT NULL AND longitude IS NOT NULL
GROUP BY plan_site_no
ORDER BY mesafe ASC LIMIT 5;
// Bilgi paylaştıkça çoğalır.. 

Cevapla
#8
Web projesi olarak düşünürseniz unigui tarafında falconsistemas isimli firmanın geliştirdiği bir component ile Bu link'teki gibi çok kolay yapabilirsiniz.

Çok farklı örnekler var, ufkunuzu değiştirebilir.
eEbvAe.png
Cevapla
#9
Şimdi bir çay molası vermiştim aşağıdaki kod çıktı.  
Kirli metoddur, temizlenmesi lazım...  Tongue

İlgilisine...

Teyit için haritayı da bir Webbrowser ile gösterebilirsiniz. WebBrowser belirtirseniz, Registry altında projeniz IE uyumu için FEATURE_BROWSER_EMULATION da işleyen kısmı da ekli... 
WebBrowser belirtmek istemezseniz parametre varsayılan olarak NIL olduğundan sıkıntı olmaz result olarak sadece mesafe döner.

Bu taslak projedir, özellikle parse kısmını geniş tuttum, başka bilgileri de çekmek üzere (güzergah, alternatifler vb. parse edilen veride yer alıyor)

uses System.Net.HttpClientComponent, Registry;

function GetDistance( Addr1, Addr2 : String; WebBrowser: TWebBrowser = nil ): string;
  procedure IE_Emul;
  var
    r : Registry.TRegistry;
  begin
    r := TRegistry.Create;
    try
      r.RootKey := HKEY_CURRENT_USER;
      r.OpenKey('\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION', True);
      r.WriteInteger(ExtractFileName ( ParamStr(0) ) , 11001);
      r.CloseKey;
    finally
      r.Free;
    end;
  end;
const
  AddrFormat = 'https://www.google.com/maps/dir/%s/%s';
var
  aUrl      : String;
  aClient   : TNetHTTPClient;
  sResponse : String;
  aNodeBegin,
  aNodeEnd  : Char;
  aSrc, aBlock, aResult, aTest : String;
  i, flag   : Integer;
  stoploop  : boolean;
begin
  Result  := '';
  Addr1   := StringReplace( Addr1, ' ', '+', [rfReplaceAll] );
  Addr2   := StringReplace( Addr2, ' ', '+', [rfReplaceAll] );
  aUrl    := Format( AddrFormat, [Addr1, Addr2] );

  aClient := TNetHTTPClient.Create(nil);
  try
    aClient.UserAgent   := 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'; // 'Dalvik/2.1.0 (Linux; U; Android 8.0.0; SM-N950F Build/R16NW)';
    aClient.Accept      := 'text/html';
    sResponse           := aClient.Get( aUrl ).ContentAsString;

  // Parse Section
  // ------------------------------------------------------------------------ //
    aSrc := '[[[[[[';
    if pos(aSrc, sResponse ) > 0 then
    begin
      System.Delete(sResponse, 1, Pos(aSrc, sResponse) -1);
      aNodeBegin := '[';
      aNodeEnd   := ']';

      aBlock := sResponse;
      System.Delete( aBlock, 1, pos( aSrc, aBlock ) -1 );

      aTest := aBlock;
        system.Delete(aTest, 1, Pos('"', aTest) );
        system.Delete(aTest, 1, Pos('"', aTest) );
        aTest := trim(aTest);

      i := Pos( aNodeBegin, aBlock );

      flag      := 0;
      stoploop  := false;
      while ( i < Length(aBlock) )
        AND ( not stoploop ) do
      begin
        if aBlock[ i ] = aNodeBegin then inc ( flag )
          else
        if aBlock[ i ] = aNodeEnd   then dec ( flag );

        if flag = 0
          then stoploop := true
          else inc(i);
      end;
      aResult := Copy( aBlock, 1, i );
      aResult := StringReplace( aResult, '\"', '"', [rfReplaceAll] );
      aResult := StringReplace( aResult, '\n', #13#10 , [rfReplaceAll] );

      i := pos( 'km"', aResult );
      if i > 0 then begin
        while aResult[ i ] <> '"' do dec ( i );
        System.Delete( aResult, 1, i );
        Result := Copy( aResult, 1, Pos('"', aResult) -1 );
        if Assigned(WebBrowser) then begin
          IE_Emul();
          WebBrowser.Silent := True;
          WebBrowser.Navigate( aURL );
        end;
      end;
    end;
  finally
    FreeAndNil(aClient);
  end;
end;


Kullanımı için şöyle deneyin... ( Not: Adresler haritadan rastgele seçilmiştir...)


procedure TForm1.Button1Click(Sender: TObject);
const
  SampleStart   = 'ankara, çankaya, yukarı dikmen, 629, 15';
  SampleFinish  = 'ankara, çankaya, açın, 12';
var
  aResult : String;
begin
  aResult := GetDistance( SampleStart, SampleFinish, WebBrowser1 );
  Showmessage( 'Hesaplanmış Mesafe : ' + aResult );
end;


"Başlama" veya "Bitiş" adresi için alışveriş merkezi, anıtsal yapı, iskele isimlerini direkt verebildiğiniz gibi, adres verecekseniz formatınız şöyle genelden özele veya özelden genele doğru  olsun... örnek:  il, ilçe, mahalle, sokak, bina numarası 

Adres yazarken yanına sokak, mahallesi, no gibi belirtici kullanmayın.



xvxbbo2zcxn6rqrer6kn.gif
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#10
Bu arada benim paylaştığım kod DB'de 2 nokta arasındaki kuş bakışı mesafeyi ölçer.. yol tarifi için @mrmarman hocam ve @pro_imaj hocamın teknikleri gayet hoş görünüyor.. elinze sağlık üstadlarım.
// Bilgi paylaştıkça çoğalır.. 

Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  uni gui hata form arası geçiş ibrahim.aydin@perga.com.tr 6 5.133 25-08-2020, Saat: 09:54
Son Yorum: ibrahim.aydin@perga.com.tr
  Formlar arası nesne kullanımı hassur 7 7.300 20-06-2017, Saat: 08:51
Son Yorum: hassur



Konuyu Okuyanlar: