"cache" klasörlerini kurcalayayım dedim ve bir şeyler yakaladım galiba. "/private/var/root/Library/Cache/locationd" diye bir klasör mevcut bende ve içerisinde cache.plist, cells.plist ve clients-b.plist diye üç adet dosya ve wifi diye boş bir klasör mevcut. clients-b.plist ve cache.plist o meşhur "Black Listed Apps" ile ilgili galiba, Apple'ın çalışmasını istemediği programları engelleme amacıyla hazırda beklettiği düşünülen arayüz. Cache.plist'te "unauthorized applications"a gönderme olduğu gibi o anki konuma da bir gönderme var, belki de yasaklı program kullananların konumlarını tespit edip uzaydan gönderecekleri bir lazer ışını ile onları yoketmeyi planlıyorlardır :P cells.plist benim dikkatimi çekti konuyla ilgili olarak, bendekinin şu anki içeriği şu şekilde:
<key> içerisinde kalanların en son yer tespitinde kullandığı baz istasyonlarının kimlik numaraları, <string> içerisindekilerin de bu istasyonların koordinatlarının olabileceğini düşünüyorum ki neden düşünmekle kalayım, google maps'ten baktım şimdi, ilki dün akşam yaptığım son konum tespiti, ikincisi de bu sabah yaptığım konum tespiti civarında. Konum tespitlerinin merkezleri olabilecekleri gibi referans alınan noktalar da olabilirler, bunun için biraz daha test etmek gerekiyor. Diğer sayıları /private/var/mobile/Library/Caches/MapTiles içerisindeki MapTiles.sqlitedb veritabanı dosyası içeriği ile eşleştirmeye çalıştım fakat muvaffak olduğum söylenemez. Hareket halindeyken ardı ardına konum tespiti yaparak bu dosyanın içeriğinin nasıl değiştiğini takip edebilir, ona göre net bir şey söyleyebiliriz. Bu akşam, dün yaptığım testleri bu dosyayı da inceleyerek tekrar edebilirim. Siz de deneyebilirsiniz tabi bu arada :) ****** Ekleme: Cache.plist içerisindeki koordinat bilgisinin başında zaten CLLocationCore::kLastFix yazıyormuş ve içerisinde son tespit edilen noktanın koordinatı ve koordinatın olası sapma miktarı gibi bilgiler yer alıyormuş (yukarıdaki 1799 bu olası sapma miktarını gösteriyormuş yani). Lâkin, sırf buna bakarak bir konum bulunamadığında en son bulunmuş noktanın kullanıldığını savunmak doğru olmayacaktır, öyle olsa cells.plist içerisinde birden fazla koordinat bulunmasının bir anlamı kalmıyor. <key> ile ilgili bir atış yapıyorum :) Sırasıyla ülke kodu (ülke telefon kodu değil :) ), operatör kodu ve kullanılan baz istasyonlarının kodları olabilir. <string> içerisindeki ilk değer de koordinat tespiti için kullanılan baz istasyonu sayısı olabilir (yukarıdaki örnekte tutuyor). Kendi telefonunda bu dosyanın içeriğini inceleyenler bu bilgiler doğru mu değil mi anlamak için yardımcı olabilirse sevinirim. Doğruysa Türkiye'deki Turkcell kullanıcıları için <key> içerisindeki ilk iki değerin 286 ve 001 olması gerekiyor. Türkiye dışında kullananlar için ilk, Türkiye içinde başka operatör kullananlar için de ikinci değer farklıysa bu atışımın tuttuğuna inanacağım :) Ayrıca <string> kısmının en başındaki değer, <key> kısmının 0x'le başlayan numaralarının sayısına eşitse bunu da tutturmuş olabilirim :) |
Dün hareket halindeyken haritayı ve interneti açık bıraktım. Eve ulaştığımda dosyada 39 adet koordinat bilgisi vardı. Bu sabah, aynı güzergahtan geri gelirken interneti kapatıp yer tespiti yapmayı denedim, başarılı olamadı. Baktığımda gördüm ki dosya sıfırlanmıştı. Yedeğini almıştım, bu yedeği geri yükleyip .lastpurge değerini ileriye aldım ve haritayı yeniden çalıştırdım. Bu sefer işe ulaşana kadar başarılı bir şekilde konum tespitini gerçekleştirdi. Yani bu şekilde bir önbellekleme var fakat 12 saat belki de daha kısa bir süre sonra dosya sıfırlanıyor. (Otomatik olarak değil tabi, haritayı açmadan önce dosya eskisi gibi duruyordu. Harita uygulamasını açınca muhtemelen en başta bir kontrol yapıp en son değiştirilme tarihi üzerinden belli bir süre geçmişse dosyayı sıfırlıyor) <string> başındaki 2 muhtemelen harita yakınlaştırma seviyesi. 16'lık sistem yazılan sayılar ise dediğim gibi referans alınan baz istasyonlarının numaraları olabilir, bunu doğrulayamadım henüz fakat CoreTelephony/CoreTelephony.h dosyasının içerisindeki __CellInfo yapısında location, cellid, station gibi değerler var. Ufak bir program yazıp _CTServerConnectionCellMonitorGetCellInfo arayuzu ile bu değerleri okuyup bu plist dosyasındaki değerler ile karşılaştırmayı düşünüyorum, eve gidince artık :) (Ekleme: 16'lık düzendeki bu iki sayıdan birincisi bölge kodu (location area code) ikincisi de baz istasyonu numarası gibi duruyor, deneyeceğiz bakalım) Yalnız, baz istasyonu numarasıysa bunlar yer hesaplama yalnızca iki baz istasyonu kullanılarak yapılıyor olabilir. Bendeki bütün girdilerde yalnızca 2 adet bu tip sayı vardı. CellID değerlerini okuyabilirsem bu değerleri çiftler halinde Google Map/My Location API'sine gönderip telefonda bulunan koordinatla aynı koordinatı bulup bulmayacağını da denemek istiyorum, ondan sonra yorum yapmaya devam edebilirim. Bu arada TURKCELL'de olmayan bir arkadaş telefonunda yer tespiti yapıp bu dosyanın içerisindeki <key> kısmındaki değerlerin ne olduğunu bildirebilirse memnun olacağım. (Ekleme: arkadaşın AVEA hattını benim telefona takıp denedik ve operatör numarası olduğunu tahmin ettiğim yerin değerinin 003 olduğunu gördüm, vodafone'da da 002 çıkar muhtemelen, telsim'den aynen devam ettiğini varsayıyorum tabi. Bu arada şu an bulunduğum yerde TURKCELL yaklaşık 500 metre ötede bir sonuç verirken AVEA yaklaşık 50 metre hatalı bir sonuç verdi.) Google Maps/My Location arayüzünü ve şebeke bilgilerini kullanarak yer tespinin nasıl yapılabileceği ile ilgilihttp://www.anddev.org/poor_mans_gps_-_celltowerid_-_location_area_code_-lookup-t257.html adresinde bir örnek var, konuyla ilgilenenler oraya bakabilir. |
Apple.com da Iphone 3G yi tanitirken bu olaydan bahsetmis. Eger GPS ve wi-fi kullanilamazsa bile cell towerlardan bilgi alinabildigini soylemis. Ayrica GomerciN arkadasin dedigi sey bende olmadi yani cache bende silinmedi sadece 1de fa (yaklasik 1 hafta once) wifi den hafizaya alinan harita uzerinden neredeysev hergun haritada yer bulabiliyorum. In addition to A-GPS, iPhone 3G uses signals from GPS satellites, Wi-Fi hot spots, and cellular towers to get the most accurate location fast. If GPS is available, iPhone displays a blue GPS indicator. But if you’re inside — without a clear line of sight to a GPS satellite — iPhone finds you via Wi-Fi. If you’re not in range of a Wi-Fi hot spot, iPhone finds you using cellular towers. And the size of a location circle tells you how accurately iPhone is able to calculate that location: The smaller the circle, the more accurate the location |
Yalnız, "WiFi hotspot" tabiri kafaları karıştırmasın. "If you’re not in range of a Wi-Fi hot spot" demek "wi-fi ile (veya herhangi bir şekilde) internete bağlanamıyorsanız" anlamına gelmiyor. Bu yöntem, yakınınızda bir "wi-fi hotspot" olup olmadığına bakıyor ve varsa bu "wi-fi hotspot"ların konum bilgilerini yerinizi hesaplamada kullanıyor. Yani bu "wi-fi hotspot"lardan herhangi birisine bağlanmamış olsanız bile bu yöntem ile yeriniz tespit edilebiliyor. Türkiye'de bildiğim kadarıyla yalnızca TTNet'in "hotspot"ları var şu an (yanlış biliyor olabilirim), onlar da Skyhook sistemine dahil edilmiş midir, bilmiyorum. Dolayısıyla Türkiye'deyken GPS'iniz yoksa baz istasyonları kullanılarak yapılan konum tespitine bağımlı kalıyorsunuz ve bunun için de (önbellek yeterince dolu olmadığı sürece) internet bağlantısı gerekiyor. ("wi-fi hotspot"ların kullanılmasının şöyle bir avantajı var: takdir edersiniz ki kablosuz internet dağıtıcıların kapsama alanı baz istasyonlarınınkine göre oldukça düşüktür, yani hangi hot-spot'ların kapsama alanında olduğunuz bilinirse yerinizin tespit edilmesi çok daha kolay ve tutarlı olacaktır) Önbellek silinmesi ile ilgili durum dediğimden farklı olabilir tabi ki, tam bir bağımsız deney ortamında test etmem mümkün olmadı neticede. Fakat dediğiniz gibi internet kapalı olmadığı halde bir haftadır farklı noktalarda konum tespiti yapabiliyorsanız cells.plist dosyanızın epeyce kabarık olması gerekir :) boyutunu bir kontrol edebilirseniz sevineceğim. Bir de uyarmam gereken bir konu var, EDGE'i BossPrefs ile kapattığınızı belirtmişsiniz. BossPrefs ile gelen EDGE seçeneği herkeste çalışmayabiliyormuş. Nitekim BossPrefs'i ilk kurduğumde EDGE'i oradan kapatsam bile EDGE açık kalıyordu ve interneti kullanabiliyordum. Bu durumun önüne geçmek için BossPrefs'te "Config" tuşu ile ayarlar kısmına girip "New Edge Toggle" seçeneğini kapalı (off) durumuna getirmeniz gerekiyor. Aksi halde EDGE'i kapattığınızı sandığınız halde EDGE açık kalmış olabilir. Böyle bir durumla karşı karşıya olup olmadığımızı anlamak için rica etsem Google Maps uygulamasında yer tespiti yaptıktan sonra Safari ile bir sayfaya girmeyi deneyebilir misiniz acaba? Çünkü eminim ki internet veya çok büyük bir önbellek (veya baz istasyonu koordinatlarının veritabanı) dosyanız olmadan baz istasyonu tabanlı yer tespiti yapmanız imkansız (ki normalde eminim diye pek konuşmam :) ) ***** Düzeltme ve ekleme: "Hotpoint" kavramı bütün kablosuz internet bağlantı noktalarını kapsıyor da olabilir, öyle de olsa bu noktalar aracılığı ile konum tespit edebilmek için öncelikle bu bağlantı noktalarının konum bilgilerinin bir veritabanına aktarılması gerekiyor. Skyhook'un sitesinde bu noktaların konum bilgilerinin nasıl toplandığı ile ilgili bir bilgi verilmiş.http://www.skyhookwireless.com/howitworks/faq.php adresindeki "How do you determine the location of these Wi-Fi access points?" başlığında anlatılana göre Skyhook'un veri toplama donanımına sahip araçlar yollarda gezdiriliyor ve her bir noktadaki kablosuz ağ bilgileri belli bir şekilde biçimlenip konum, zaman gibi bilgilerle beraber saklanıyormuş. Bu işin böyle araç gezdirilerek yapılacağı aklıma gelmezdi :) Gerçi Google Maps'in "Street View" uygulaması için de benzer bir yöntem uygulanmıştı galiba. |
2.0 için offline harita gösterecek bir program varmı? |
Dostum benim EDGE kesinlikle kapali dedigin gibi süphe kalmasin diye yer konumu yapildigi bir anda safariye girdim birsey olmadi ayrica veri akisindada birsey gostermedi ayrica benim su anda almanyada gecici olarak kullandigim hatta EDGE ayarlarida girilmememis. Ayrica bende dün bir test yapayim dedim ve <berlin de daha önce hic önbellege almadigim bir yere gittim ve orada hic baglanti olmadigini kontrol edip wi-fi ayarlarinida kapattiktan sonra yer bulma tusuna tikladiktan sonra cok sasirtici birsey oldu bana yine bir yer gosterdi ama gorulen yerde harita gozukmuyordu yani anlayacagimiz bana maps uzerinde bir enlem boylam konumunu alarak bir yer bildiriyor ancak orasi onbellege alinmadigi icin mahalleyi gostermedi. |
Berlin de bir sorun olmamakta sahsen Bayagı bir zamanım gcior orda. Oflin ile alakası yok herzaman mı bulunugn yeri göstrmkt? Farklı yrlrd edg v wifi yokkn dne bide |
of of of, Barbee dalacak uçan tekmeyle :) |
Senin telefonda GPS çipi olduğuna inanmaya başlayacağım :) Bir şeyleri gözden kaçırıyoruz gibi geliyor bana. Dün yaptığın testin sonucunu doğrulamak için şöyle bir şey yapabilir misin acaba: yine bu şekilde, daha önce önbelleğe almadığın bir yerde konum tespiti yaparsan ve yine aynı şekilde haritanın gösterilmediği bir konumu gösterirse bu noktayı haritanın "drop pin -> add to bookmarks" özelliği ile hafızaya alıp daha sonra internete girdiğin zaman nokta koordinatını Google Maps'e girip bu noktanın gerçekte bulunduğun noktaya yakın bir yer olup olmadığını belirleyebilir misin? Çünkü bu durumu ben de yaşadım fakat gösterilen noktanın aslında son koordinat tespiti yaptığım yer olduğunu farkettim. Mümkünse locationd klasörünün içindeki dosyaları paylaşabilir misin? Bu dosyalar kullanılıyor mu kullanılmıyor mu merak ettim. Veya locationd klasörünün ismini değiştirip yeniden konum tespiti yapmayı deneyebilir misin? Bu şekilde konum tespiti sıfırdan mı yapılıyor yoksa bu dosyalar bir şekilde kullanılıyor mu görebiliriz. Teorik olarak klasörün ismini değiştirip Maps uygulamasını açarsan sıfır bir önbellek klasörü açması ve internete bağlı olmadığın sürece bir konum tespit edememesi lazım (yani olay benim dediğim gibi bir önbellekleme ile çalışıyorsa). Acaba Almanya'daki baz istasyonları bir şekilde koordinat bilgisi de mi sağlıyor :) Olması mümkün bir durum fakat internette böyle bir bilgiye ulaşamadım bir türlü. Zaten hatırladığım kadarıyla ilgili başlık dosyalarında da koordinat bilgisi ile ilgili bir bölüm bulunmuyordu. Tabi iPhone'daki gizlenen API'lerden birisi de olabilir ama ne bileyim, var bir tuhaflık :) Bu şekilde, internet bağlantısı ve GPS çipi olmadan konum tespit edilebilmesi ile ilgili bir şeyler bilen varsa konuya açıklık getirebilir mi acaba, bilgilendirici bir internet sayfasıyla falan hani :) |
emin değilim fakat yazında bazı harfler eksik gibi, öyle böyle değil hem de :) |
o kadar testi boşuna mı yaptım ben :) son yeri gösterdiği de oldu fakat 4. ve 5. testler bir tür önbellekleme olduğunu gösteriyor. Bu iki testteki sonuçların hiçbirisi daha önceden işaretlediğim bir nokta değildi.
Bu arada, dünkü güzergahtan geri dönerken yeniden yer tespiti yaptırmaya çalıştım internet kapalıyken, halen doğru veya yanlış bir yer gösteremedi. Tahminime göre konum bilgilerini, haritayı aldığına göre farklı bir şekilde alıyor önbelleğe ve haritayı internet yokken gösterebilse de daha önceden konum tespiti yaptırdığı bir noktada bile olsanız hafızadan gösteremeyebiliyor. Hafızasında daha önceden tespit edilmiş bir konum varken önbelleğe alınmış istasyon konum bilgileri mevcut değilse arkadaşın dediği gibi en son işaretlenen yeri gösteriyor (bknz: 1. Test)
< Bu mesaj bu kişi tarafından değiştirildi GomerciN -- 19 Ağustos 2008; 8:31:11 >