Spatial WFS ve WMS Sorgularda SRS ve BBOX Kullanımı

27 Oca

Bu yazıda, OGC tarafından belirlenmiş standartlar olan WMS veya WFS gibi servislere yapılan sorgulara ait SRS, SrsName ve BBOX parametrelerinin kullanımı ve işlevleri incelenmektedir.

  • SRS (Spatial Reference System) parametresi, istenen çıktı verinin projeksiyonunu ifade eder. Projeksiyon belirteci olarak EPSG kodları kullanılır. (EPSG:4326 gibi)
  • BBOX parametresi, çıktı verinin içinde bulunduğu çerçeveyi ifade eder. Yani dörtgen şeklinde bir kutu belirler ve sunucudan bu kutu içerine düşen verileri ister. Çerçeve sınırları minX, minyY maxX, MaxY şeklinde belirlenir.

SRS parameteresi WMS sorgularında kullanılırken, SrsName parametresi ise WFS sorgularında kullanılmaktadır. Bu parametreler işlevsel olarak aynı görevi üstlenirler. Ancak kullanım zorunluluklarına bakıldığında;

  • WMS sorgularında SRS ve BBOX parametresi kullanmak zorunludur.
  • WMS sorgularında kullanılan SRS çıktı verinin projeksiyonunu ifade. Ayrıca BBOX ile ifade edilen sınırları da SRS koordinatları ile ifade edilir. WMS sorgularında bu iki parametre birlikte kullanılır.
  • WFS sorgularında SrsName parametresi kullanmak isteğe bağlıdır ve BBOX ile beraber kullanma zorunluluğu yoktur.

WFS sorgularında kullanılan SrsName parametresi bize istediğimiz koordinat sistemine göre coğrafi veri elde etmemizi sağlar. Örneğin bir WFS adresine birbirinden farklı SRS bilgileri ile sorgular göndererek sonuçlarını inceleyelim.

Sorgu 1- EPSG:4326 ile Point sorgusu:

 
 http://localhost:8080/geoserver/wfs?
      request=GetFeature&
      service=wfs&
      version=1.0.0&
      typename=GIS:poi&
      SrsName=EPSG:4326&
      BBOX=490867.51265,4515158.48547,490981.28371,4515253.73566

Cevap 1- Sorgu sonucu dönen nokta koordinatları: (29.89232754,40.77166657)

EPSG:4326 kodu ile WGS84 (World Geodetic System 1984) koordinat sistemi ifade edilmektedir. WGS84 Yeryüzü için standart bir coğrafi koordinat sistemi belirler.

Sorgu 2- EPSG:3857 ile Point sorgusu:

 
 http://localhost:8080/geoserver/wfs?
      request=GetFeature&
      service=wfs&
      version=1.0.0&
      typename=GIS:poi&
      SrsName=EPSG:3857&
      BBOX=490867.51265,4515158.48547,490981.28371,4515253.73566

Cevap 2- Sorgu sonucu dönen nokta koordinatları:  (3327598.68066687,4978720.64792567)

Sorgu 3- EPSG:900913 ile Point sorgusu:

 
 http://localhost:8080/geoserver/wfs?
      request=GetFeature&
      service=wfs&
      version=1.0.0&
      typename=GIS:poi&
      SrsName=EPSG:900913&
      BBOX=490867.51265,4515158.48547,490981.28371,4515253.73566

Cevap 3- Sorgu sonucu dönen nokta koordinatları:  (3327598.68066687,4978720.64792567)

3857 ve 900913 EPSG kodlarına sahip koordinat sistemleri aslında aynı şeyi ifade etmektedir. Bu nedenle sorgular aynı sonucu vermiştir. 900913 sayısı ile “google” kelimesi sayılarla ifade edilmeye çalışılmıştır. EPSG kodları arasında resmi olarak 900913 kodu yer almaz, bunun yerine 3857 kodu yer alır.(http://wiki.openstreetmap.org/wiki/EPSG:3857) İlk başlarda Google haritaları tarafından kullanılan Spherical Mercator projeksiyon koordinat sistemidir. Daha sonraları OpenStreetmap haritaları tarafından da kullanılmaya başlamıştır.

Sorgu 4- EPSG:41100 ile Point sorgusu:

 
 http://localhost:8080/geoserver/wfs?
      request=GetFeature&
      service=wfs&
      version=1.0.0&
      typename=GIS:poi&
      SrsName=EPSG:41100&
      BBOX=490867.51265,4515158.48547,490981.28371,4515253.73566

Cevap 4- Sorgu sonucu dönen nokta koordinatları: (490909.7666,4515222.0527)

EPSG:41100 kodu da resmi EPSG kodları arasında yer almaz. Eğer Coğrafi bir veri tabanına sahipseniz, özel bir projeksiyon koordinat sistemini bu veri tabanına kaydederek ona istediğiniz kodu verebilirsiniz. Bu kodu parametre ile gönderdiğinizde sizin belirlediğiniz koordinat sistemine göre sonuçlar alabilirsiniz.

Yukarıdaki sorgularda kullanılan BBOX parametresi, dörtgen bir sınır belirler ve veritabanında belirlenen bu sınırlar arasında kalan geometrik nesneler aranır.

Sorgu 5- BBOX ve SrsName ile Point sorgusu:

 
 http://localhost:8080/geoserver/wfs?
      request=GetFeature&
      service=wfs&
      version=1.0.0&
      typename=GIS:poi&
      SrsName=EPSG:3857&
      BBOX=490867.51265,4515158.48547,490981.28371,4515253.73566,EPSG:41100

Cevap 5- Sorgu sonucu dönen nokta koordinatları: (3327598.68066687,4978720.64792567)

Bu sorguda dikkat edilecek olursa BBOX parametresinin sonuna EPSG:41100 kodu eklenmiştir. Fakat SrsName parametresi ise EPSG:3857 olarak ayarlanmıştır. Burada yapılmak istenen BBOX koordinatlarının EPSG:41100 sisteminde verilmesi, ancak dönen sonuçların EPSG:3857 siteminde olmasıdır.

Bu parametrelerin doğru bir şekilde kullanımı, harita ve kaynak verinin projeksiyonları farklı olduğu durumlarda hayat kurtarır.

Angular 1.x Sonrası ve Angular 2

25 Oca

Google tarafından geliştirilen AngularJS geliştirme çatısında AngularJS 1.x ve Angular2 şeklinde bir ayrıma gidildi. Bu ayrım yaklaşık iki sene önce başladı ve bugün sonuçlarını değerlendirme fırsatım oldu.

Stack Overflow tarafından 2015-2016 yılında ölçülen ve 50.000 geliştiricinin katıldığı anket sonuçlarına göre ortaya çıkan teknoloji eğilimleri aşağıdaki grafikteki gibidir. Bu anket sonucunu paylaşmamın sebebi, geliştiricisi olduğum bir javascript kütüphanesi olan Angularjs tarafında yaşanan gelişmelerin sonucunu yansıtabilmektir.

Stack Overflow Trending Tech Anketi
Stack Overflow Trending Tech Anketi

 

Bu sonuçlara göre Facebook şirketi tarafından geliştirilen React kütüphanesinin son yıllarda önemli oranda bir geliştiriciyi kendine çektiği görülmektedir. Buna rağmen Google tarafından geliştirilen Angularjs kütüphanesi epeyce gerilemiş durumda.

react-angularjs-trends
Angularjs ve React Google arama trendleri

 

Google trendleri göz önüne alındığında son zamanlarda Angularjs ve React arama oranlarında yine React kütüphanesine olan ilginin arttığı görülmektedir.

Angularjs gibi kullanışlı bir kütüphaneye olan ilginin bu kadar gerilemesinin nedenlerinden biri Angular 2 sürümüyle yeni bir yola girmesidir. Şüphesiz daha performanslı ve daha hafif bir ürün ortaya koymak amacıyla Google tarafından böyle bir adım atılmıştır. Hem TypeScript dilinin hem ECMAscript 6 dilinin gücünden faydalanılmıştır. Ancak Angular 2 sürümü, geliştiricilere TypeScript dilini de bilmeyi zorunlu kılan bir ortam sunmuştur. Yani saf javascript bilgisi ile Angular 2 geliştirme yapılamamaktadır. Oysa Angularjs 1.x sürümlerinde saf javascript bilgisi yeterlidir.

Angular 2 sürümünün kullanıcılar tarafından sıcak bir şekilde karşılanmamasının bir diğer neden de geriye dönük uyumluluğunun olmamasıdır. Bu durum, geliştiricileri bir yol ayrımına getirmiştir. Angularjs 1.x ile geliştirilmiş uygulamalarınızı korumak ve devam etmek mi, yoksa geriye dönük olarak tüm uygulamalarınızı Angular 2 ile yeniden yazmak mı? Bu durum, Angular desteği sunan geliştirici topluluklarını da ikiye bölmüş durumdadır. Bu durumun sonucu zamana bağlı olarak görülecektir.

Şüphesiz teknolojik evrimin büyük bir hızla yaşandığı yıllardayız. Belkide bir kaç sene sonra Angular ve React kütüphenelerinin pabucunu dama atacak ve yerlerine yeni kütüphaneler üretilecektir. Hani bir zamanlar frontend geliştirme tarafında  popüler olan Flash, Java Flex, Silverlight’ta olduğu gibi. Bu elbette kaçınılmaz bir gelişim sürecidir. Ancak şirketlerin kendi ürünlerini kullananlarının önüne engel çıkarmasına şahsen bir anlam verebilmiş değilim. Bu da benim kişisel görüşümdür.

Angularjs Emit ve Broadcast

7 Oca

Angularjs uygulamalarında Dom elemanlarını haberdar etmek için kullanılan iki yöntemden biri broadcast diğeri de emit metotlarıdır.

Broadcast, root scope dan başlayarak bütün alt scope’ları yaydığı bilgiden haberdar edilebilir. Aşağıdaki resimde ifade edildiği şekli ile inceleyecek olursak, çalışma zamanında ilk MapController nesnesi Dom üzerine yerleştiğinde hiyerarşik olarak üst scope’dan aşağı doğru tüm scope’ları haberdar etmektedir.

Emit, yönteminde ise resimde görüldüğü üzere sadece parent scope’lar bilgilendirilir.