24 Ekim 2015 Cumartesi

Jeodezik Hesap Web Uygulaması

Uzun bir aradan sonra tekrar merhaba.

Daha önceki yazımda (bk. Windows Phone için Jeodezik Hesap Uygulaması) Windows Phone işletim sistemi için geliştirmeye başlamış olduğum Jeodezik Hesap Uygulaması Projesini sonlandırdığımı ve bunun yerine her yerde çalışabilecek bir uygulama geliştirme fikriyle Jeodezik Hesap Web Uygulaması Projesini geliştirmeye başladığımı yazmıştım. Bu yazımda ise söz konusu projeyle ilgili biraz detay vereceğim.

Yazısını yazmam bugüne nasip olsa da uygulama yaklaşık bir senedir yayında. Haritacılık hesaplamalarından dört temel ödev ile yayın hayatına başlayan uygulamaya zamanla diğer hesaplamaları da ekledim. Bugün toplamda 18 hesaplama modülü ile hizmet vermektedir.

İleride inşallah vakit bulup da üzerinde çalışabilirsem anlık koordinat dönüşümü hesabı için bir modül geliştirmeyi düşünüyorum. Modül sayesinde alım yaptığınız noktanın koordinat bilgisi alınarak çeşitli koordinat sistemlerine ve dilimlerine dönüşüm gerçekleştirilebilecek. Yine TKGM'nin parsel sorgu ekranından alınan parselleri Google Earth üzerinde açabileceğimiz (KML biçiminde) şekilde kayıt etme imkanı sunan bir modül ya da ayrı bir web uygulaması fikri de aklımda var. Bakalım yapmak ne zamana nasip olacak :)

Uygulama ile Yapabileceğiniz Çeşitli Haritacılık Hesaplamaları

  • Temel Ödev 1
  • Temel Ödev 2
  • Temel Ödev 3
  • Temel Ödev 4
  • Küçük Nokta Hesabı
  • Yan Nokta Hesabı
  • Dik Ayağı - Dik Boyu Hesabı
  • Önden Kestirme
  • Geriden Kestirme
  • Yere İndirme
  • İki Boyutlu Benzerlik Dönüşümü
  • İki Boyutlu Afin Dönüşümü
  • Pergel Açıklığı Hesabı
  • Dever Hesabı
  • Rakortman Boyu Hesabı
  • Minimum Kurp Yarıçapı Hesabı
  • Kurp Asal Elemanlarının Hesabı
  • Tecviz Hesabı

Uygulamaya, http://jeodezikhesap.com adresinden ulaşabilirsiniz.

Meslektaşlarıma kolaylık sağlamasını umarım.

12 Ağustos 2014 Salı

Windows Phone için Jeodezik Hesap Uygulaması

Uygulama sayesinde haritacılık hesaplamalarının temeli olan hesaplamalardan ikinci temel ödevi Windows Phone işletim sistemli cep telefonunuz ile kolayca yapabilirsiniz.

Elinizde bulunan iki noktanın Y ve X koordinatlarını metre olarak ilgili yerlere giriniz. Hesapla dedikten sonra uygulama size semt açısını grad cinsinden ve ara mesafeyi de metre cinsinden verecektir.

Zamanla diğer temel ödevler ve daha karmaşık hesaplamalar da eklenecektir.

Kullanacak arkadaşlara kolaylık sağlamasını umarım.

Ekran Görüntüsü


Windows Phone Store'da Jeodezik Hesap uygulamasına gitmek için tıklayınız.

Önemli Not: Proje sadece Windows Phone işletim sistemine yönelik olduğu için sonlandırılmış ve yerine her platformda çalışan bir uygulama geliştirme fikriyle Jeodezik Hesap Web Uygulaması geliştirilmeye başlanmıştır. Uygulamaya http://jeodezikhesap.com adresinden ulaşabilirsiniz. 

11 Ağustos 2014 Pazartesi

Entegre İdare Kontrol Sistemi Uygulaması

Kırsal Toprak Düzenlemesi için geliştirilen Entegre İdare Kontrol Sistemi’ni kısaca çiftçi destek başvurularının ve ödemelerinin idaresi ve kontrolü için geliştirilmiş bir entegre sistem olarak tanımlamak mümkündür.

Türkiye’de günümüzde entegre sistemlere örnek olarak Çiftçi Kayıt Sistemi (ÇKS) verilebilir fakat bu sistem kadastral parsel tabanlı olduğu için malik taraflıdır. Çiftçiye değil de malike destek verilmektedir. Sonuç olarak amacına hizmet edememektedir.

Tarımsal parsellerin tespit edildiğini varsayarsak ve sistem kadastral parsel tabanlı değil de tarımsal parsel tabanlı olursa amaçlanan hizmet gerçekleşecektir.

Kadastral parseller için belirlenen bir Kadastral Parsel Değer Kat Sayısı (KPDKS) ve tarımsal parseller için belirlenen Tarımsal Parsel Değer Kat Sayısı (TPDKS) ile kadastral parsellerden alınacak vergi miktarı (alan=kadastral parselin alanı olmak üzere)

Alan x KPDKS x Vergi Kat Sayısı

formülü ile bulunur. Tarımsal parsellere verilecek destek miktarı ise (alan=tarımsal parselin alanı olmak üzere)

Alan x TPDKS x Destek Kat Sayısı

formülü ile bulunur.

Oluşturulan veri tabanı ile:
  • Çiftçi ve tarımsal parsel tabanlı, çiftçi destekli bir yapı oluşturulacak.
  • Bu sayede örneğin tarlasını eken çiftçiden vergi alınmayacak. (Destek=Vergi)
  • Malik değil de çiftçi desteklendiği için yıllarca tam olarak uygulanamayan Toprak Reformu’na

dolaylı olarak destek sağlanacaktır.

Veri tabanında:
  • Kadastral parseller, tarımsal parseller, malikler, çiftçiler ve alınacak vergi ile verilecek destek bilgileri yer almaktadır.
  • Kadastral parsellerin malikleri, tarımsal parsellerin ise çiftçileri vardır. Malik ve çiftçi aynı kişi olabildiği gibi farklı kişiler de olabilirler.
  • Malik ve çiftçi bilgileri detaylı olarak bulunur.
  • Kadastral parsellerden (malikten) alınacak vergi ve tarımsal parsellere (çiftçiye) verilecek
destek bilgileri bulunur.

Ekran Görüntüleri

10 Ağustos 2014 Pazar

Koordinatlarla Alan Hesabı Programı

Program sayesinde koordinatlarla alan hesabını (Gauss) kolayca yapabilirsiniz.

İndirdiğiniz klasörde gelen koordlist.xls'ye Y ve X koordinatlarınızı metre olarak girin sonra da program içinden Gözat ile koordlist.xls'yi bulun. Program alanı size metrekare olarak verecektir.

Kullanacak arkadaşlara kolaylık sağlamasını umarım.

Ekran Görüntüsü


9 Ağustos 2014 Cumartesi

Dört Temel Ödev Çözümü Programı

Uzun süredir yazamıyordum ama yeni alan adını almamın üzerine tekrardan yazmaya karar verdim :)

Öncelikle sizlerle 2013 yazında Başarsoft'taki stajımda MapInfo, MapBasic ve C# ile yaptığım çalışmalarımı günde günde paylaşacağım. Daha sonra tekrardan Harita Mühendisliği'ne yönelik programlama derslerine devam edebiliriz. Ne zaman olur bilmiyorum ama aklımda çok şey var. Neyse lafı fazla uzatmadan bugün paylaşacağım programa geçelim.

Program sayesinde haritacılığın temeli olan dört temel ödev hesabını kolayca yapabilirsiniz. C# ile yazmıştım. Basit bir şey zaten. Kullanacak arkadaşlara kolaylık sağlar umarım.

Ekran Görüntüsü



17 Şubat 2013 Pazar

Python ile Arayüzlü Programlama

Daha önceki yazılarımda (Bkz. Python Programlama Dili, İkinci Temel Ödev ve Python ile Çözümü) Python ile siyah ekran (konsol, terminal) üzerinde çalışan basit programlar yapmış ve bunların nasıl işlediğini görmüştük. Bu programlar hem geliştirici hem de kullanıcı için hiç çekici değillerdi :) Şimdi bunları nasıl arayüzlü hale getirebileceğimize kısa bir giriş yapalım. Bu sayede hem Python bilgimizi biraz daha ilerletir, hem Python'un resmi arayüz kütüphanesi olan Tkinter'ı tanır, hem de mesleğimizle alakalı olan örnek problemimizin (İkinci Temel Ödev) Python ile nasıl arayüzlü olarak programlandığını görürüz.

Jeodezik Hesap adında bir programımız olsun ve bu program bizden formlar yardımıyla Y1, X1, Y2, X2 koordinatlarını alsın. Daha sonra bunlarla ilgili hesapları yapıp (bir fonksiyon yardımıyla) bize bir düğmeye (button) tıkladığımız zaman sonuçları göstersin. Lafı uzatmadan kaynak kodlarına gelecek olursak:

from tkinter import *
import math

pencere=Tk()
pencere.title("Jeodezik Hesap")
pencere.geometry("300x375")
pencere.resizable(FALSE, FALSE)

giris_yazi="Jedeozik Hesap \n (İkinci Temel Ödev Hesabı)"
giris=Label(text=giris_yazi, font="Verdana 10 bold", fg="red")
giris.pack(padx=5, pady=5)

def Hesap():
    y1=float(girdi_y1.get())
    x1=float(girdi_x1.get())
    y2=float(girdi_y2.get())
    x2=float(girdi_x2.get())

    dy=y2-y1
    dx=x2-x1

    aci=((200/math.pi)*(math.atan(dy/dx)))

    # Bolge Analizi
 
    if dy>0 and dx>0:
        aci=aci
    elif dy>0 and dx<0:
        aci=aci+200
    elif dy<0 and dx<0:
        aci=aci+200
    elif dy<0 and dx>0:
        aci=aci+400
    elif dx==0 and dy>0:
        aci=100
    elif dx==0 and dy<0:
        aci=300
    elif dx>=0 and dy==0:
        aci=0
    elif dx<0 and dy==0:
        aci=200
    else:
        aci=0
    
    cikti_semtacisi["text"]="Semt Açısı = " + str(aci) + " gon"

    mesafe=math.sqrt((pow(dy,2)+pow(dx,2)))
    
    cikti_mesafe["text"]="Mesafe = " + str(mesafe) + " m"
    
etiket_y1=Label(text="Y1", font="Verdana 9 bold")
etiket_y1.pack()

girdi_y1=Entry()
girdi_y1.pack(padx=5, pady=5)

etiket_y1=Label(text="X1", font="Verdana 9 bold")
etiket_y1.pack()

girdi_x1=Entry()
girdi_x1.pack(padx=5, pady=5)

etiket_y1=Label(text="Y2", font="Verdana 9 bold")
etiket_y1.pack()

girdi_y2=Entry()
girdi_y2.pack(padx=5, pady=5)

etiket_y1=Label(text="X2", font="Verdana 9 bold")
etiket_y1.pack()

girdi_x2=Entry()
girdi_x2.pack(padx=5, pady=5)

Hesapla=Button(text="Semt Açısı - Mesafe Hesapla", command=Hesap)
Hesapla.pack(padx=10, pady=10)

cikti_semtacisi=Label(font="Verdana 9 bold", fg="blue")
cikti_semtacisi.pack()

cikti_mesafe=Label(font="Verdana 9 bold", fg="blue")
cikti_mesafe.pack()

son_yazi="Ertan Taner Tunç - 17.02.2013"
son=Label(text=son_yazi, font="Verdana 8", fg="grey")
son.pack(padx=10, pady=10)

mainloop()

Eğer daha önceki yazılarımı okuyup kodları incelediyseniz nelerin yeni olduğunu hemen fark etmişsinizdir zaten. Eğer kodları anlamakta sıkıntı yaşıyorsanız önce Python 3 için http://www.istihza.com/beta/py3/icindekiler_python.html ve daha sonra da Tkinter 3 için http://www.istihza.com/beta/tk3/icindekiler_tkinter.html adreslerini ziyaret etmenizi öneririm. Ben burada Python programlama dersi vermekten ziyade kodlama mantığıyla ilgili örnekler (mesleki - meslek dışı) veriyorum.

Gördüğünüz üzere önce penceremizin parametreleri girilmiş daha sonra etiketler (label) ve formlar oluşturulmuş. Arada da Hesap fonksiyonu tanımlanmış. En sonda da bir düğme (button) yardımıyla bu fonksiyonun çalışabilmesi için komut verilmiştir. Kafanızda bir şeyler oluştuğunu umuyorum. Artık daha kullanıcı dostu programlar yazabilirsiniz :)

Programın .pyw dosyasını indirmek için tıklayınız.

Ekran Görüntüsü




Not: Programı Python 2 ile çalıştırabilmek için ilk satırı:

from Tkinter import *

olarak değiştirin. 

15 Şubat 2013 Cuma

İkinci Temel Ödev ve Python ile Çözümü

Daha önceki yazımda (Bkz. Python Programlama Dili) Python programlama dilinden kısaca bahsetmiş ve  ilgili yazıda Windows ortamında çalıştırılabilir (*.exe) biçimine çevrilmiş (py2exe ile) ufak bir program örneği de paylaşmıştım. Şimdi o programın kaynak kodlarına birlikte bakalım ve daha sonra da bu programı py2exe ile nasıl exe biçimine dönüştürebileceğimizi görelim.

Öncelikle programın kaynak kodlarına göz atacak olursak:

# coding=utf-8
import math

# Giris

print """\n\tSEMT-MESAFE HESAPLAYICISI
\tErtan Taner Tunc - www.ettunc.tk"""

# Girdiler

print "\n1. Noktanin koordinatlarini (m) giriniz :\n"

Y1=float(raw_input("Y1 = "))
X1=float(raw_input("X1 = "))

print "\n2. Noktanin koordinatlarini (m) giriniz :\n"

Y2=float(raw_input("Y2 = "))
X2=float(raw_input("X2 = "))

# Hesaplamalar

dy=Y2-Y1 # Y farki.
dx=X2-X1 # X farki.

# Aci Hesabi
aci=(200/math.pi)*(math.atan(dy/dx))

# Bolge Analizi

if dy>0 and dx>0:
    aci=aci
elif dy>0 and dx<0:
    aci=aci+200
elif dy<0 and dx<0:
    aci=aci+200
elif dy<0 and dx>0:
    aci=aci+400
elif dx==0 and dy>0:
    aci=100
elif dx==0 and dy<0:
    aci=300
elif dx>=0 and dy==0:
    aci=0
elif dx<0 and dy==0:
    aci=200
else:
    print "Yanlis giris yaptiniz!"

# Mesafe Tayini

mesafe=math.sqrt((math.pow(dy,2))+math.pow(dx,2))

# Ciktilar

print "\nSemt Acisi = %.5f gon"%(aci)
print "\nAra Mesafe = %.4f m"%(mesafe)

# Cikis
raw_input("\n\t Cikis = Enter")

# ile başlayan satırlar yorum satırlarıdır ve işlemler hakkında bilgi vermektedir.

Programı kısaca açıklayacak olursak. İlk satırda karakter kodlaması hakkında bilgi vermekteyiz. Biz burada UTF-8 kullanmışız. İkinci satırda ise Math modülünü programımıza eklemiş yani import etmişiz. Bunun amacı çeşitli matematiksel işlemler için hazır fonksiyonlardan (math.atan gibi) yararlanmak. Math modülü ile daha fazla bilgi almak için http://www.istihza.com/py2/math.html adresini ziyaret ediniz.

Daha sonra iki noktanın koordinatlarını kullanıcıdan girdi olarak almışız. Sonra da bu koordinatlardan ilgili bağıntılar yardımıyla açı değeri ve mesafe değeri elde etmişiz.

Son olarak da bu elde ettiğimiz değerleri ekrana yazdırmışız.

Not: %5.f, %4.f vs. ile çıktı hassasiyeti belirlenmiştir. %x.f virgülden sonra x haneli çıktı vermeye yarar.

Programın .py (semtmesafe.py) dosyasını indirmek için tıklayınız.

Py2Exe Nasıl Kullanılır?

Py2Exe ile oluşturduğunuz Python programlarınızı (.py, .pyw vs.) Windows ortamında direk çalıştırılabilir hale (*.exe) sokmaya yarayan bir Python modülüdür.

Modüle http://www.lfd.uci.edu/~gohlke/pythonlibs/ adresinden ulaşabilirsiniz. İlgili sayfada Ctrl+F ile py2exe araması yapın ve kendinize uygun paketi indirin. Yine aynı sayfada birçok Python modülü de bulunmaktadır. Python programlama ile ilgileniyorsanız bu sayfayı favorilerinize almanızı öneririm.

Şimdi işleme geçersek. Programınızın bulunduğu klasörde bir setup.py oluşturun. İçeriğini:

from distutils.core import setup

import py2exe

setup(console=['hello.py'])

şeklinde düzenleyip kaydedin. Daha sonra klasör içine Shift'e basılı tutarak farenin sağ tuşu ile tıklayın. Komut penceresini burada aç deyin ve:

python setup.py py2exe

yazıp Enter'a basın. Aynı klasör içinde build ve dist adında iki klasör oluşması gerekir. dist klasörüne girin. Programınız aynı isimle ve exe biçimde sizi bekliyor olacak.

Not: Bana kalırsa bunlara hiç gerek yok. Windows ortamında programınızı çalıştıracak olan kullanıcı ilgili Python sürümünü bilgisayarına yüklerse sizin Python ile oluşturduğunuz programlarınızı zaten direk olarak açabilir. Ücretsiz ve düşük boyutlu olduğu için son kullanıcı da zahmetsizce yükleyebilir. Linux ortamında zaten birçok popüler dağıtımda (Ubuntu, Linux Mint vs.) Python önyüklü olarak gelmektedir. Dolayısıyla biçim değiştirmek yerine bu yolu tercih etmenizi öneririm. Bu sayede oluşturduğunuz programlar tüm platformlarda (Windows, Linux, Mac) çalışacaktır.

Görüldüğü üzere Python giriş seviyesi programcılık için oldukça hızlı sonuçlar verir. Öğrenmesi çabuk ve pratiktir. Bu yönüyle bu işle benim gibi hobi düzeyinde ilgilenen kullanıcılar için bence en iyi programlama dilidir.