Kategoriler


SON YORUMLAR
mehmet uluğ
bu makalemsi makale! şaka olmalı:)
sevda
beğendim
Reyting Amca
Sitenin reytingi düştü. Google.da aratınca arkalarda çıkıyor. Eskiden ilk sırada çıkardı. Site sahibi ateşli yazılar yazmıyor 1-2 yıldır...
Seda
web sitesi, masa üstü uygulamaları, muhasebe, restaurant, otel, barkot sistemleri yazılımı yapılır. adres:s.sedaerden@gmail.com
Hafize
Yazılım ödevleri ve web sitesi yapılır.Bilgi için hafizearduc@hotmail.com
Gamze
C#, C++, ASP.NET-MVC, HTML-CSS, Matlab, Arduino ödevleri yapılır. Bilgi için; gamze.zirh@gmail.com
Eyüp yılmaz
merve seni seviıyorum asl bebeyoö
BEYZADE BOZTEPE
18 Yaşındayım ınstagram=beyzadebztp
Eyüp yılmaz
39 yasındayım coderım hackerıım ıp verın modemınıze vurayım
BEYZADE BOZTEPE
18 Yaşındayım ınstagram=beyzadebztp (çıkın çıkın gelin GIZLARRRRR)
BEYZADE BOZTEPE
EYVALLAH BENDE İYİYİM
BEYZADE BOZTEPE
İYİYİM GEZEGEN SEN NASILSIN
Eyüp yılmmaz
17 yasındayım kız talıplerımı beklıyom ınsatgram= eyup.yılmaz3
BEYZADE BOZTEPE
MERHABA DÜNYA

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ı
Differences between ASP and ASP.NET
ASP .NET Maintaining the ViewState
Askerlik ve Bilgisayar Mühendisliği
Askerlik ve Bilgisayar Mühendisliği
Bilgisayar mühendisliği öldü?
Bilgisayar Mühendisleri için CV hazırlama rehberi - 3
Bilgisayar mühendisliği öldü?
VNC Nedir? (Virtual Network Computing)
Askerlik ve Bilgisayar Mühendisliği
Askerlik ve Bilgisayar Mühendisliği
En iyi bilgisayar mühendisliği bölümüne sahip üniversiteler
Bilgisayar mühendisliği öldü?
Askerlik ve Bilgisayar Mühendisliği
Bilgisayar mühendisliği öldü?
Neden Bilgisayar Mühendisliği?
Yeni mezun bilgisayar mühendisleri için 10 büyük günah!
Bilgisayar Mühendisi olacaklara üniversite seçme rehberi?
Neden Bilgisayar Mühendisliği?
Neden Bilgisayar Mühendisliği?

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

yavuz topcu(21.01.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 %33 %33
Katılıyorum Çekimserim Katılmıyorum






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