Kategoriler


SON YORUMLAR
Kaan çok eziksin
bsg. yazılımdan anlıyorsan bir işe gir.
İREM
Veri yapıları sınavım var..sınav süresi 30dk ve test..Veri yapılarında bilgili biri ücret karşılığında yardımcı olabilirse çok mutlu olurum..
Eray
29.8.2020 tarihli telefon numaram ile yaptığım yorum, ÖZEL DERS vermek, konu anlatımı yapmak veya freelancer olarak yazılım projelerinde yazılımcı olarak çalışmak içindir. Ödev yaptırmak, sınava girmek gibi isteklere geri dönüş yapmıyorum.
Tatar Ramazan
CLASS (Inheritance, abstract, interface, static) Kurallar: 1- Abstract ve interface classlarda new ile obje oluşturulamaz. Bu kural static sınıflar için de geçerlidir. 2- Statik metotlardan yalnızca statik değişken ve metotlar çağırılır. 3- Sınıfın tüm objeleri statik alanın aynı değerini paylaşır. 4- Sınıftan her obje oluştuğunda statik değişken değeri sıfırlanmaz kaldığı yerden devam eder. 5- Statik alana sınıftan obje oluşturmadan direk ulaşılabilir. 6- Statik değişken her zaman bir değere sahiptir. Nümerik değerler için değer atanmadıysa değeri sıfırdır. 7- Virtual metod, abstract ya da static olamaz. 8- Bir metod ya da properties override edilirken tipi değiştirilmez. 9- Türetilen sınıfta metod override edilmemişse ana sınıftaki içerik geçerli olur. 10- Bir interface uygulayan metod public olmalıdır. 11- Static metod abstract, virtual, override olamaz. 12- Properties?ler abstract ya da virtual olabilir. 13- Türetilen sınıf ana sınıftaki tüm abstract metodları uygulamazsa o da abstract olmalıdır. 14- Abstract metod içeren sınıf da abstract olmalı. 15- Abstract metod otomatikman virtual olur. 16- Türetilen sınıf abstract classtaki tüm metodları uygulamalıdır. 17- Virtual metod birden fazla türetilen sınıfta yeniden tanımlanabilir. 18- Bir sınıf birden fazla interface?i aralarına virgül konularak kullanabilir. 19- Interface tek başına hiçbir uygulama sağlamaz. 20- Abstract metod gövde içermez ve ana sınıf tarafından uygulanamaz. 21- Abstract sınıf içinde statik ya da virtual metod tanımlanabilir. 22- Bir interface metod uygulanırken public değilse başına tanımlandığı interface koyulur. 23- Protected tanımlanan field?a sadece türev sınıf içinden erişilir. 24- Fields (alanlar) virtual ya da abstract olamaz. 25- Interface?ler fields içermez. Properties içerebilir. 26- Bir constructor base ile miras alıyorsa hem aldığı mirası hem kendi içindekini uygular. İçi boşsa yalnızca kalıtım aldığını uygular. Miras alırken de derived (türetilen) classtaki parametre değerini esas alır. 27- Interface metod implemente edilirken override yazılmaz. Override virtual ya da abstract metodlar uygulanırken kullanılır.
World
Hello PIO
PIO
hello world
Tatar Ramazan
2009-10 yıllarında millet maaşını yazardı yüksek miktarlar alırlardı şimdi kimse yazmıyor zavallılar sürünüyorlar. Yanlışsam, durumunuz iyiyse çıkın yanlışlayın beni. Az bir kısmınız mutlu olacak diğerleri kıvransın dursun.
Tatar Ramazan
çok para bayılacaklar osuracaklar, sıçacaklar size zort zort zort...muhahah, puahahah...
tatminsiz
10.000 tl den aşağı çalışmam.

java ve c# ı yalayıp yuttum mssql oracle pl sql ibm db2 biliyorum. projeler yaptım kaç para alcam?
memnun
Muhasebe bölümünden bilişime geçtim 2 ay geride kaldım şimdi geri muhasebeye nakîl verdim ama bu parayı duyunca çallşmaya başladım
muhendis
Eskidendi o çok eskiden..mühendisler artık aç..4 yıllık mühendisim aldığım ücret 5000 tl...
cengiz
Ben de bilmiyorum faidesini...
orhon
ilk önce sql sonra t-sql

Bilgisayar Mühendisleri
Here is the website inspired me to use 
it as a guide when I tried to define 
myself as an engineer candidate a few 
years ago. It really helped me to work
 and study feeling in confidence with 
being on the right way. I suggest this 
website to whom it may direct her/his 
to find the right career path. It 
includes many articles varies from 
real life experiences to detailed 
software engineering issues. But the 
most dignified parts for me are the 
articles in general and career titles.
Son okunan makaleler:
ASP.NET ile GIS Uygulamaları
Bilgisayar Mühendisi olacaklara üniversite seçme rehberi?
Oradan Buradan...
Linux altında MSN Messenger Kullanımı - pidgin
Staj Yeri Nasıl Bulunur? Staja hazırlık olarak neler yapmalıyım?
En büyük sıkıntı
SUBNETWORKING
Oracle - Query Optimizer
İş bulmak üzerine
Bilgisayar Mühendsileri için CV hazırlama rehberi - 1
Von Neumann mimarisi
Dünyanın En İyi 500 üniversitesi 2007 Sıralaması Açıklandı
Steve Jobs ve Türkiye...
YAZ TATİLİNDE YAN GELİP YATMAK
Bir bilgisayar mühendisinin bilmesi gereken en temel teknolojiler
SAÇMA SORULARA DÜZGÜN CEVAPLAR!
ASP.NET - Server Controls
ASP.NET 2.0 - New Features
Microsofta çalışan Türkler - Aslı Bilgin Röportajı
Microsoftda Çalışan Bir Türk ile Yapılmış Röportaj

Bilgisayar Mühendisleri Portalı

ASP.NET ile GIS Uygulamaları

Hemen hemen tüm uygulamalarda yer alan GIS ( Coğrafi Bilgi Sistemleri )  , zaman içerisinde isteklere bağlı olarak gittikçe gelişmektedir . Kullanılacağı alana göre Windows , Web ve Mobil uygulamalarına rahatlıkla yer almaktadır . Bu yazımda sizlere ASP.NET 2.0 ile nasıl Web tabanlı Coğrafi Bilgi Sistemi uygulaması geliştirebileceğinizi aktarıyor olacağım .

Yazıma başlamadan önce sizlere GIS hakkında biraz bilgi vermek istiyorum . GIS : Coğrafi bilgilerin bir araya getirilmesi , bu bilgilerin bilgisayara aktarılması , depo edilmesi , işlenmesi , daha sonrada analiz edilip sunulması amacı ile geliştirilmiş olan bir sistemdir . Bu sistem sahip olduğu etkin veritabanlarına ve yapılarına göre iki grupta değerlendirilir . Vektör Tabanlı ve Raster Tabanlı .Vektör tabanlı GIS`erde vektör olarak tanımlanan veri, herhangi bir koordinat sisteminde nokta, çizgi ve alanlardan oluşan veridir. Raster tabanlı GIS'lerde raster olarak tanımlanan veri, belirli sayısal, harf veya renk olarak değerleri olan hücrelerin (piksel) bir araya gelmesiyle oluşan görsel bilgiyi kapsamaktadır. Bu bilgileri de sizlerle paylaştıktan sonra uygulamamıza başlayabiliriz .

   

Uygulamamız da , harita oluşturma ve oluşturacağımız harita üzerinde işlemler yapabilmemize olanak sağlayan fonksiyonları barındıran  sharpmap.dll`ini ve sistemimizde kullanacağımız harita katmanlarında göstermek istediğimiz şekil dosyalarını (shapefiles) uygulamamıza ekledikten sonra ilk olarak harita oluşturma fonksiyonunu düzenleyeceğiz. Sharpmap dll`ini makalemin sonunda belirteceğim referans adresinden temin edebilirsiniz yada benimle iletişime geçebilirsiniz .

 

private void haritaOlustur()
    {
        //harita bilgilerini veriyoruz
        System.Drawing.Image img = harita.GetMap();
        string imgID = SharpMap.Web.Caching.InsertIntoCache(1, img);
        imgHarita.ImageUrl = "getmap.aspx?ID=" + HttpUtility.UrlEncode(imgID);

    }
 

haritaOlustur fonksiyonu sayesinde oluşturduğumuz img nesnesini GetMap fonksiyonu ile eşleştirip ara yüzümüze eklemiş olduğumuz  imgHarita nesnesinin üzerine haritamızı oluşturduk . Bu fonksiyondan sonra haritamızın üzerinde bulunacak olan katmanları bu katmanlarda nelerin gösterileceğini ve ayarlarını yapabileceğimiz fonksiyonu düzenleyeceğiz.

 

private SharpMap.Map haritaDuzenle(System.Drawing.Size haritaBuyuklugu)
{
SharpMap.Map yeniHarita = new SharpMap.Map(haritaBuyuklugu);
SharpMap.Layers.VectorLayer katmanUlkeler = new SharpMap.Layers.VectorLayer("Ulkeler");
katmanUlkeler.DataSource = new SharpMap.Providers.ShapeFile(Server.MapPath(@"~\App_Data\ulkeler.shp"));
katmanUlkeler.Style.Fill = new SolidBrush(Color.YellowGreen);
katmanUlkeler.Style.Outline = System.Drawing.Pens.Black;
katmanUlkeler.Style.EnableOutline = true;

        SharpMap.Layers.VectorLayer katmanNehirler = new SharpMap.Layers.VectorLayer("Nehirler");
katmanNehirler.DataSource = new SharpMap.Providers.ShapeFile(Server.MapPath(@"~\App_Data\nehirler.shp"));
katmanNehirler.Style.Line = new Pen(Color.Blue, 1);

        yeniHarita.Layers.Add(katmanUlkeler);
yeniHarita.Layers.Add(katmanNehirler);
return yeniHarita;

}
 

haritaDuzenle fonksiyonu içerisinde  imgHarita nesnesinin büyüklüğüne göre yeni bir harita oluşturduktan sonra sırası ile Ülkeler ve Nehirler için yeni katmanlar meydana getirdik . Bu katmanlarda bulunacak olan dosyaları SharpMap.Providers.ShapeFile ile belirledikten sonra bu katmanlara özel çizgi , dolgu renkleri belirleyerek özelleştirmeler yaptık . Ve tüm bu ayarlamaları gerçekleştirdikten sonra bu katmanları oluşturmuş olduğumuz haritamıza Layers.Add ile ekleme işlemini tamamladık . Şimdide sıra sayfamız açılırken hazırlamış olduğumuz bu fonksiyonları çağımaya geldi .

 

SharpMap.Map harita;
protected void Page_Load(object sender, EventArgs e)
{
harita = haritaDuzenle(new System.Drawing.Size((int)imgHarita.Width.Value, (int)imgHarita.Height.Value));
//Haritamızın ilk görünümü
harita.ZoomToExtents();
haritaOlustur();

    }
 

Sayfamız başlatılırken hazır fonksiyonlarımızı da çağırdıktan sonra , Web.Config dosyamızın içerisini de aşağıda belirteceğim kodlar ile değiştirdikten sonra haritamızı ekranda görüntüleyebileceğiz .

 

<?xml version="1.0"?>
<configuration>
<system.web>
<httpHandlers>
<add verb="*" path="GetMap.aspx" type="SharpMap.Web.HttpHandler,SharpMap"/>
</httpHandlers>
<compilation debug="true"/>
</system.web>

</configuration>
 

Evet adım adım tüm işlemleri tamamladıktan sonra haritamızı ilk kez ekranımızda görüntüleyebildik . Bu tür uygulamalarda temel teşkil eden bölümleri bitirdikten sonra isterseniz uygulamamızı pozitif ve negatif yönlerde zum (zoom) yapabilen , hareket (pan) yeteneğine sahip bir hale getirelim . Bu işlem işleri bir listesini oluşturmak için önce uygulamamıza bir adet RadioButtonList ekleyelim eğer daha önceden ara yüzümüzde İmage nesnesi kullanmış iseniz bunun yerine ImageButton ekleyelim . Bu değişikliği ImageButton nesnesinin tıklama olayından (click event ) yararlanmak için gerçekleştirdik .Bu değişiklikleri yaptıktan sonra aşağıda belirteceğim değişiklikleri uygulayacağız .

 

protected void Page_Load(object sender, EventArgs e)
{
harita = haritaDuzenle(new System.Drawing.Size((int)imgHarita.Width.Value, (int)imgHarita.Height.Value));
if (Page.IsPostBack)
{
//Geri gönderim var ise merkez ve zum değerlerini kaydet
harita.Center = (SharpMap.Geometries.Point)ViewState["haritaMerkez"];
harita.Zoom = (double)ViewState["haritaZum"];
}
else
{
//İlk zum ve merkez bilgilerini kaydet , ilk kez haritayı oluştur
harita.ZoomToExtents();
ViewState.Add("haritaMerkez", harita.Center);
ViewState.Add("haritaZum", harita.Zoom);
haritaOlustur();
}

    }
 
Kod bloğundaki bu değişiklik sayesinde eğer sayfamızda bir geri gönderim ( post back ) var ise sadece zum ve merkez bilgileri kaydediliyor eğer sayfamız ilk kez açılıyor ise haritayı bu işlemlerin yanı sıra haritamızı da oluşturacak olan fonksiyonun çağrımını gerçekleştiriyor . Bu değişikliği de tamamladıktan sonra Tıklama olayında yapacağımız işlemleri tanımlayalım .
 

protected void imgHarita_Click(object sender, ImageClickEventArgs e)
{
//Kullanıcının tıkladığı noktayı saptayıp , bu noktayı haritamızın merkez noktası olarak belirliyoruz
harita.Center = SharpMap.Utilities.Transform.MapToWorld(new System.Drawing.Point(e.X, e.Y), harita);

//İşlem seçeneklerinden zum ile ilgili işaretleme varmı varsa değerine göre haritamıza zum uygulaması yapıyoruz
if (rdlSecenek.SelectedValue == "0")
//Zum +
harita.Zoom = harita.Zoom * 0.3;
else if (rdlSecenek.SelectedValue == "1")
//Zum -
harita.Zoom = harita.Zoom * 1.2;
//Bu hali ile Zum ve merkez bilgilerini kaydediyoruz
ViewState.Add("haritaMerkez", harita.Center);
ViewState.Add("haritaZum", harita.Zoom);

haritaOlustur();

    }
 

Zum işlemlerinde sıfır ile bir arasındaki değerlerde (+) yönde bir zum gerçekleştiriliyor ve değer sıfıra yaklaştıkça zum değeri daha fazla artıyor .

 
 

Şimdiye kadar ki bölümde basit bir harita uygulamasının nasıl oluşturulabileceğini ve üzerinde yapabileceğimiz en yaygın işlemlerden bazılarını sizlerle paylaşmaya çalıştım . Bu yazımızın devamında da sizlerle bu tür uygulamalarda gerçekleştirilebilecek birkaç uygulamayı da sizlerle paylaşmaya çalışacağım . Tekrar görüşmek üzere .


İlk olarak haritamız üzerinde istediğimiz bir noktaya nasıl bir nokta yada bir resim ile belirleyebiliriz . Bu ve bundan sonra vereceğim örneklerde haritamızı oluşturmuş olduğumuzu göz önünde bulundurarak mevcut sistemimiz üzerine eklemeler yaparak devam edeceğim . 

   

// sistem üzerinde ekleme yapacağımız noktaları bu değişkene aktaracağız
static SharpMap.Geometries.GeometryCollection kol = new SharpMap.Geometries.GeometryCollection(); //
protected void imgHarita_Click(object sender, ImageClickEventArgs e)
{
SharpMap.Geometries.Point belirlenenNokta = new SharpMap.Geometries.Point(29, 37.7);
//burada istersek fare ile işaretlenen noktayıda aldırabiliriz

        kol.Collection.Add(belirlenenNokta);
SharpMap.Geometries.LineString yeni = new SharpMap.Geometries.LineString();

            SharpMap.Layers.VectorLayer katmanBel = new SharpMap.Layers.VectorLayer("KatmanBelirlenen");
katmanBel.DataSource = new SharpMap.Data.Providers.GeometryProvider(belirlenenNokta);

            katmanBel.Style.Symbol = new Bitmap(@"D:\gisUygulama\App_Data\ikon.png");

            harita.Layers.Add(katmanBel);
haritaOlustur();

}
 
Yukarıdaki kod blok`u sayesinde haritamız üzerinde bir yeri ikon.png resmi ile aşağıdaki resimde gördüğümüz şekli ile  işaretlemiş olduk .
 

 

Eğer birden fazla noktayı aynı anda belirlemek istiyor iseniz ilk örneğimizdeki kodu aşağıdaki gibi değiştirmeliyiz .

 

SharpMap.Geometries.Point belirlenenNokta = new SharpMap.Geometries.Point(29, 37.7);
SharpMap.Geometries.Point belirlenenNokta1 = new SharpMap.Geometries.Point(30, 39);
//burada istersek fare ile işaretlenen noktayıda aldırabiliriz

        kol.Collection.Add(belirlenenNokta);
kol.Collection.Add(belirlenenNokta1);

        if (kol.Collection.Count < 2)
{

            SharpMap.Geometries.LineString yeni = new SharpMap.Geometries.LineString();

            SharpMap.Layers.VectorLayer katmanBel = new SharpMap.Layers.VectorLayer("KatmanBelirlenen");
katmanBel.DataSource = new SharpMap.Data.Providers.GeometryProvider(belirlenenNokta);

            katmanBel.Style.Symbol = new Bitmap(@"D:\tahir\sharpmap2\App_Data\icon.png");

            harita.Layers.Add(katmanBel);
haritaOlustur();

        }
else
{
for (int i = 0; i < kol.Collection.Count; i++)
{
kol.Collection.Add(belirlenenNokta);
}
SharpMap.Layers.VectorLayer katmanBel = new SharpMap.Layers.VectorLayer("KatmanBelirlenen");
katmanBel.DataSource = new SharpMap.Data.Providers.GeometryProvider(kol);
katmanBel.Style.Symbol = new System.Drawing.Bitmap(@"D:\tahir\sharpmap2\App_Data\icon.png");
harita.Layers.Add(katmanBel);
haritaOlustur();

        }

 

Vermiş olduğumuz noktaları bir işaretçi yardımı ile belirledikten sonra , şimdide belirleyeceğimiz iki nokta arasında nasıl bir yol çizdirebiliriz .  Bunun için sayfama tetikleyici olarak bir adat buton ekledikten sonra , bu botunun tıklanma olayına aşağıdaki kodu ekleyelim .

 

protected void btnCiz_Click(object sender, EventArgs e)
{
SharpMap.Geometries.LineString yeniCizgi = new SharpMap.Geometries.LineString();

        //yolumuzun geçeceği noktaları yeniCizgi ye ekliyoruz
yeniCizgi.Vertices.Add(new SharpMap.Geometries.Point(29, 37.7));
yeniCizgi.Vertices.Add(new SharpMap.Geometries.Point(30, 39));

SharpMap.Layers.VectorLayer katmanVek = new SharpMap.Layers.VectorLayer("katmanVektör");
katmanVek.DataSource = new SharpMap.Data.Providers.GeometryProvider(yeniCizgi);

        //Oluşturacağımız yolun özelliklerini belirliyoruz
katmanVek.Style.Line = new Pen(Color.Red, 2);
katmanVek.SRID = 4326;
harita.Layers.Add(katmanVek);
haritaOlustur();

    }

 

 

Ve uygulamamıza bu kodu ekledikten sonra çalıştırdığımızda aşağıdaki gibi bir görünüm elde etmiş oluyoruz . Burada bir sıkıntı yaşamış olabiliriz buda , yolu çizdirdikten sonra eğer haritamızı yakınlaştırır isek yol kaybolacaktır  çünkü her yakınlaştırmada yol haritaOlustur(); fonksiyonu ile yeniden oluşturulmaktadır . Bunu da sizlerle paylaşacak olduğum 3. örnekte belirlemiş olduğumuz bir alanı yakınlaştırma ile çözüyor olacağız . Tabi sadece tek çözüm de bu değil .

 

 
Bu yazımda sizlerle paylaşacak olduğum son örnek ise belirlemiş olduğumuz bir alanı ekrana yaklaştırma örneği olacak . Bu örneğimizde yakınlaştırmak istediğimiz alan için kuzey-güney ve doğu batı sınırlarını belirlememiz yeterli oluyor .
 

protected void btnCiz_Click(object sender, EventArgs e)
{

//Yakınlaştırmak istediğimiz alanın koordinatlarını belirliyoruz
SharpMap.Geometries.BoundingBox yakinAlan = new SharpMap.Geometries.BoundingBox(new SharpMap.Geometries.Point(26, 36), new SharpMap.Geometries.Point(42, 45));
harita.ZoomToBox(yakinAlan);
haritaOlustur();

}
 

Bu yazımda sizlerle paylaşacak olduğum son örnek ise belirlemiş olduğumuz bir alanı ekrana yaklaştırma örneği olacak . Bu örneğimizde yakınlaştırmak istediğimiz alan için kuzey-güney ve doğu batı sınırlarını belirlememiz yeterli oluyor .

 

Eğer 2. ve 3. örneklerimizdeki kodları birleştirir isek , 2. örnekte yaşamış olduğumuz problemi çözmüş oluruz .

Bu ve bir önceki yazımda ASP:NET ile GIS uygulamaları  üzerine sizlere temelden başlayarak bu tür uygulamalar nasıl geliştirebileceğinizi aktarmaya çalıştım . Yaşayacağınız problemlere benimle iletişime geçebilirsiniz . Tekrar görüşmek üzere .

 http://www.codeplex.com/SharpMap
Tahir MUTLU
Bu makaleyi beğendin mi? Yorumunu Yaz!







Sizden Gelen Yorumlar:

Yorum Yazın

Gülşen(4.4.2018 17:30:40)
Makaleniz iyi olmuş. Teşekkürler. Yalnızca bende yeni kullanmaya başladım GIS ve sharpmap i. Yukarda gösterdiğiniz şekilde kodumu oluşturuyorum. Onun öncesinde sharpmap kütüphanelerini nuget kullanarak yükledim. Ama kodu yazıp da çalıştırdığımda ekrana harita gelmiyor(hiçbirşey gelmiyor). Acaba birşeyleri eksikmi yapıyorum? Geri dönüş yaparsanız çok memnun olurum. İyi Çalışmlar.
mail adresim: rosegarden161@yahoo.com
%82 %0 %18
Katılıyorum Çekimserim Katılmıyorum



yavuz topcu(21.1.2010 06:31:30)
makaleyi beyendim..bende sayayı çalıştırmak istedim ama ulkeler.shp ve nehirler.shp yi bulamadığımdan takıldım kaldım . o dosyaları bana mail atarsanız sevinirim asdresim: yavuztopcu@gmail.com
%33 %17 %50
Katılıyorum Çekimserim Katılmıyorum






Copyright© 2001-2021. Bilgisayar Mühendisleri Portalı | Bütün hakları saklıdır.