FM'e göster: Herkese Türkiye Haritası

3
auselen
curl -s http://download.maxmind.com/download/worldcities/worldcitiespop.txt.gz \
| zcat \
| awk -F$',' '{if ($1 == "tr") print $6, $7}' \
| gnuplot -p -e \
"set terminal pngcairo size 1280, 720 background rgb 'black';"\
"set size ratio -1; unset key; unset tics; unset border;"\
"plot '<cat' using (sin(pi/180*(\$2-35))*cos(pi/180*\$1)):(sin(pi/180*(\$1-39))) with points ls 11"\
> tr.png

file

Başka bir lokasyon veri tabanı da geonames fakat tab ile ayrılmış durumda.

curl -s http://download.geonames.org/export/dump/cities1000.zip | zcat | awk -F$'\t'

Görüşler

1
FZ

Cok keyifli imis :) Ayrica gnuplot FTW! (saka maka gecen sene bir is icin epey faydasi dokunmustu)

2
auselen

Sevindim, gönderirken biraz urkmustum, bunun yeri burasi degil gibilerinden...

Cogu zaman enlem, boylam (lat, lon) isleri ile ugrasirken bir kitaplik kullan, enlem hangisiydi boylam hangisiydi, iki nokta arasi uzaklik neydi gibi sorularin cevabini dusunmemek icin google->stackoverflow goc yolunu izliyordum. Sonunda kendi tavrimdan s1kildim ve oturup biraz kafa yormaya karar verdim. Simdi de konuyu daha fazla anlamanin verdigi keyfini yasiyorum.

Yukaridaki de kullandigim orneklerden biri. gnuplot'un icinde sin/cos/pi olmasi oldukca hos tabi ki.

Umarim bir kac kisinin ilgisini uyandirir. Bende daha da tembessum uyandiran sey, ayni veri-kumesini 20 sene once gorseydim acaba neler hissederdim sorusu :)

1
FZ

Bu arada en altta, sag alt tarafta, bildigimiz TR'nin disinda bir tane '+' isareti gorunuyor. Caber Kalesi'nin oldugu yer sanirim.

1
auselen

malesef degil, geonames veri-kumesinde yok ama worldcities de var. Belki hata belki baska bir politik konu. Girmek istemedim :)

$ awk -F$',' '{if ($1 == "tr" && $7 > 45) print $2, $6, $7}' worldcitiespop.txt 
balkha 35.175703 45.512949
balkhah al qadimah 35.175703 45.512949
belxey xwaru 35.175703 45.512949
3
hcg

Merhaba, oncelikle tesekkurler. Gercekten cok guzel calisma. İki sorum olacak, trigonometrik hesaplama neden gerekti ve 35 ile 39 ne icin?

4
auselen

Cok guzel soru(lar).

Meseleyi su anki anlayisim: enlem, boylam iki aci. dunyanin merkezinden dunya kuresinin uzerindeki bir noktanin konumunu vermeye yeterli, lakin bunun iki boyutlu bir projeksiyonunu yapmaya calistigimizda bizim bildigimiz dunya sekli ya da turkiye haritasina benzemesi gerektigini dusunuyoruz.

enlem 0 ekvator. 90 kuzey kutbu, -90 guney kutbu. 180 derece. boylam 0 greenwich, ama dunyanin etrafini 360 dereceye boluyoruz. (niye enlemin 180, boylamin 360 oldugunu bir dusunelim)

Dunyanin herhangi bir noktasina karsidan baktigimizda istedigimiz projeksiyonu yakalamak icin, geometriyi kullaniyoruz (muhakkak daha iyi projeksiyon yontemleri vardir ve dunya tam yuvarlak degil ama bu konulari gözardi ediyoruz - daha iyi bir geometri vardir demiyorum - daha iyi formuller vardir diyorum - benim baskis acim basitlik ve anlasilabilirlik uzerine).

Isin eglenceli kismi aslinda bir koordinatin kure uzerindeki konumunun iki boyutlu projeksiyonunun (yani bir daire imis gibi gorunumunun) hesaplanmasi cok kolay. Hayal edebilirseniz dunyanin merkezinden bir isin cikarin bunun enlem acisinin (Y ekseni oluyor aslinda) bize dogru olan yuksekligi o acinin sinusu. Boylamda da durum ayni (X ekseni), bize dogru olan genisligi yine sinus (derece cevrimleri gerekli, bizim 180 dedigimiz aci aslinda 1 pi). Bunu kafanizda canlandirabiliyorsaniz zaten is bitiyor, olmadi biraz kagit kalem ile calismak gerekli.

Geri kalan 35 ve 39 ayarlamasi turkiyenin merkezi. eger bunlar olmazsa turkiyeyi 0,0 noktasina dik bakarken gorurmus gibi oluruz. nitekim pek cekici degil.

Son puf noktasi x kordinatinin sin(boylam) ile hesaplandiktan sonra cos(enlem) ile carpilmasi. bu aslinda bir olceklendirme. Kuzeye giderken boylamlarin arasindaki uzaklik azaliyor. ekvator'da enlem/boylam 1-1 e yakinken kutuplarda boylamlarin arasinda mesafe neredeyse yok gibi. Bu daralmanin orani aslinda soyle birsey: (ilgili enlemin cevresi/360) / (ekvatorun ceversi). enlemin cevresi 2 * pi * cos(enlem). enlem ekvator'da 0, yani cevre 2 * pi, kutublarda 0... biraz kagit uzerinde oynamak gerekebilir karistiysa - karistirdiysam :) sonucta cos(enlem)'e sadelesiyor. yukaridaki tek-satirlik-islem ile test edilebilir, degisik acilardan bakis saglanabilir.

Baska bir kolaylik da herseyi aci, sin, cos, pi ye baglayip birim kure icerisinde calismak, boylelikle ekvatorun genisligi neydi vs gibi sorulari pas geciyoruz.

Umarim cevap olmustur.

Buradan meraklisina hemen tavsiyeler, 3 boyutlu donen bir dunya yapmak cok kolay olur. Daha da meraklisi stereo gozluk icin iki farkli projeksiyonu olusturabilir. Zor geldiyse yukari daki satir ile oynanabilir, baska programlama ortamlarina tasina bilir, degisik ulkeler ya da dunyanin tamami resmedilebilir.

Görüş belirtmek için giriş yapın...