C# Gmap.Net Ve GPS İle İlgili Bir Soru
-
Öncelikle Merhaba,
Uzun süre önce arduino ile takılmak için birkaç parça birşeyler toplamıştım. Sonra kutuyu bir kenara attım. Geçen gün baktım tozlu tozlu duruyor. O kadar para verdik. Bir bakalım neymiş derken. GPS'ten aldığım veriyi harita da göstermek gibi bir projeye giriştim.
Temel olarak c# ile arduinoya bağlanıp gmap.net ile haritada konumumu nokta olarak göstermeye çalışıyorum. Arduino tarafında sıkıntı yaşamadım. Beklediğimden kolay oldu. Zaten herşeye bir kütüphane yazmışlar adamlar.
Yaşadığım sorun ise şu. Haritaya ilk markeri başarılı bir şekilde ekliyorum. Değiştiğini görmek için rastgele bir yere attım.
Thread içindeki döngü çalışmaya başladıgında, veriler saglıklı bir şekilde geliyor. Ama marker kayboluyor. İşin tuhaf yanı markerleri tutan listeye baktığımda konumunun değiştiğini görüyorum. Haritayı update etmeme rağmen konum belirmiyor.
Kodum:
Acaba nerde yanlış yapıyorum. İstediğim şey anlık olarak konumun değiştiğini görebilmek. Hobi diye başladım ama olmayınca baya bilendim. Daha önce benzer çalışma yapan varsa fikirlerini bekliyorum.
-
Çözdüm çok gülünç bir sorunu varmış. Convert ederken noktayı decimal olarak convert etmiyor. Haliyle 28,323135 olan kordinat 28323135 şeklinde çıkıyor. Çözümü için noktayı replace etmek gerekiyor.
lat = Convert.ToDouble(konum[0].Replace(".", ","));//lat double a çevrildi. lng = Convert.ToDouble(konum[1].Replace(".", ","));//lng double a çevrildi.
-
Sorunun sebebi Convert.ToDouble'ın yerel ayara riayet etmesi. Yerel yapılandırma Türkçe ise noktayı binlik ayraç algılayıp o beklenmeyen sonuca sebep olur.
Bu yüzden ortamın yerel yapılandırması ne olursa olsun değişmeyeceği garanti edilmiş kurallarla çalışması için ön tanımlı olan InvariantCulture'u kullanabilirsin. InvariantCulture bu tür metinden sayı dönüştürme işlemlerinde faydalıdır.
Özetle dönüştürmeyi virgüle, noktaya girmeden Convert.ToDouble(konum[0], CultureInfo.InvariantCulture) ile yapmak daha doğru olur.
-
buzukatak bunu yazdı
Sorunun sebebi Convert.ToDouble'ın yerel ayara riayet etmesi. Yerel yapılandırma Türkçe ise noktayı binlik ayraç algılayıp o beklenmeyen sonuca sebep olur.
Bu yüzden ortamın yerel yapılandırması ne olursa olsun değişmeyeceği garanti edilmiş kurallarla çalışması için ön tanımlı olan InvariantCulture'u kullanabilirsin. InvariantCulture bu tür metinden sayı dönüştürme işlemlerinde faydalıdır.
Özetle dönüştürmeyi virgüle, noktaya girmeden Convert.ToDouble(konum[0], CultureInfo.InvariantCulture) ile yapmak daha doğru olur.
Teşekkürler bunu öğrendiğim iyi oldu.
-
Güzel bir çalışma olmuş, tebrikler.