15 Ocak 2018

Vektör Veriler

Leaflet JS ile ilgili makale serisinin ikincisi ile tekrar sizlerle birlikteyim. Bu yazıda Coğrafi veri türlerini incelemeye başlayacağız. Temel olarak coğrafi veri türlerini Vektör, Raster ve TIN olarak üç gruba ayırabilriz. Vektör veriden başlayarak sırasıyla veri türleri ile ilgili anlatımlarımızı yapalım.Vektör veriler, yeryüzünde konumu bilinen ve koordinat bilgisine sahip veridir. Üç farklı geometriye sahip verilerdir.

  1. Noktasal veri : Elektrik Direği, Otobüs Durağı, Ağaç vb.
  2. Çizgisel veri : Yol, Nehir, Fay Hattı vb.
  3. Poligon verisi : Bina, Ada, Parsel, Göl vb.

Yukarıda veri türleri için verilen örnekler bir hayli çoğaltılabilir. Burda mantığını anlamak açısından bir kaç örnek vererek bunların Leaflet kütüphanesi ile harita üzerinde nasıl gösterilebileceği aşamasına geçmiş olalım.

Noktasal veri Leaflet JS harita kütüphanesinde Marker olarak tanımlanmakta. Marker obje yapısını inceleyecek olursak Enlem-Boylam ve objemizi özelleştirebileceğimiz 2 parametreden oluşuyor. Yapıyı ve örnek kullanımı aşağıda görebilirsiniz. 

L.marker(<LatLnglatlng,<Marker optionsoptions?)

var nokta = L.marker([38.722278, 35.487246],{draggable:true,opacity:0.8})

Şimdi çizgisel bir verinin Leaflet JS' de nasıl tanımlandığını inceleyelim. Çizgisel veri Polyline olarak tanımlanır. Yine Marker'da gösterdiğimiz gibi yapısını inceleyelim.

L.polyline(<LatLng[]>latlngs,<Polyline options>options?)

İlk parametremiz yine koordinat parametresi. Burda Marker'dan farklı olarak çizgi birden fazla noktanın birleşimiyle oluştuğundan giriş parametremiz bir koordinat dizisinden oluşmalı. İkinci parametremiz de Marker da olduğu gibi options yani objemizin özelleştirilmesi ile ilgili tanımlayacağımız özellikleri barındırıyor. Çizgi kalınlığı, Çizgi rengi, Çizgi türü, Çizgi görünürlüğü vb. seçeneklerle objemizi özelleştirmemiz mümkün. Örnek kullanım ile anlatımımızı güçlendirelim. Çizgimizi oluşturmak için öncellikle bir  koordinat dizisi dizisine ihtiyacımız var. Nokta, Çizgi ve Poligon çizerek koordinatları kolay bir şekilde üretebilmeniz için  Ali KILIÇ tarafından geliştirilen yazılıma buradan ulaşabilirsiniz. Bu yazılım üzerinden bir çizgi çizerek ilgili koordinatları üretiyoruz.

var koordinatlar = [ 
[38.72137843396316,35.4849922657013],
[38.721771851378676,35.486140251159675],
[38.72211504352556,35.486623048782356],
[38.72243312258021,35.48684835433961],
[38.72258379111195,35.48721313476563],
[38.72241638161267,35.487889051437385],
[38.722031338275855,35.48877954483033]
];

Oluşturduğumuz dizi fonksiyonumuzun ilk parametresini oluşturuyoruz. İkinci parametrede ise çizgi rengini kırmızı olarak aşağıdaki şekilde tanımlayalım. 

var cizgi= L.polyline(koordinatlar, {color: 'red'});

Son olarak poligon yapısını inceleyelim. Poligon yapı olarak çizgiyle oldukça benzer. İlk parametre yine koordinat dizisinden, ikinci parametre obje özelliklerinden oluşuyor.

L.polygon(<LatLng[]> latlngs, <Polyline optionsoptions?)

Yukarıda linkini paylaştığım yazılımı kullanarak bu sefer bir kapalı alan çizip koordinat üretiyoruz. Ürettiğimiz koordinatları aşağıdaki şekilde yine bir değişkene atıyoruz.

 var koordinatlar = [
[38.72154584589405,35.48704147338868],
[38.72162118113501,35.487374067306526],
[38.72131146908098,35.48743844032288],
[38.721261245378145,35.487116575241096],
[38.72154584589405,35.48704147338868]
];

Kapalı alanı temsil eden koordinatları ilk parametremiz olarak ikinci parametremizde kapalı alanın çizgi rengi ve dolgu rengini tanımlayarak örnek kodumuzu yazmış olalım.

var poligon = L.polygon(koordinatlar, {color: 'blue',fillColor:'red'});

Kısaca özetleyecek olursan nokta,çizgi ve poligon verilerinin tanımlanması Leaflet de sırasıyla Marker,Polyline ve Polygon fonksiyonları ile mümkün. Bu fonksiyonlar iki parametre ye sahip. Koordinat ve verinin özelliklerini tanımlıyoruz bu iki parametre sayesinde. Yeri gelmişken sona bıraktığım bir hususu da dile getirmiş olayım. İsterseniz sadece koordinat parametresini girerek de obje oluşturabilirsiniz. İkinci parametreyi yazmadığınız zaman varsayılan tanımlama ile ilgili obje oluşacaktır. Fonksiyonun kaç parametreden oluştuğunu açıkca görebilmek açısından ilk başta dile getirmedim. Objelerinizi tanımladıktan sonra haritamıza addTo() fonksiyonu ile ekleyebilirsiniz. Bir yazının daha sonuna gelmiş bulunuyoruz. Hakkımda sayfasındaki mail adresi ile bana ulaşmanız mümkün. Her türlü soru ve görüşlerinizi duymaktan zevk duyarım..