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.

ESRI Arcgis Javascript API with Knockout JS MVVM

4 Nis

Yazıya başlamadan önce, yazının başlığında belirtilen kavramları daha önce duymamış olanlar için kısaca açıklamaya çalışayım. Arcgis Javascript API, ESRI firmasının harita tabanlı javascript uygulamaları geliştirmek için sunduğu bir araçtır. Knockout JS ise javascript tarafında MVVM(Model-View-View Model ) tasarım deseninin uygulanabilmesini sağlayan bir kütüphanedir.

Knockout Js Model
Knockout Js Model

Kısaca söylemek gerekirse Javascript kodu ile HTML kodunun arasında aktarım yapabilen, iki taraf arasında köprü vazifesi gören bir kütüphanedir.

Bu yazının konusu, Arcgis Javascript API ve Knockout JS kütüphanesinin bir arada kullanıldığı bir harita uygulamasını göstermektir. GitHub hesabımda oluşturduğum esri-knockout-mvvm repository içerisinde uygulama kodlarını bulabilirsiniz.

Neden Arcgis JS API ile birlikte Knockout JS kullanma ihtiyacı duydum?

Arcgis Javascript API ile uyglamalar geliştirirken Javascript kodu içerisinde HTML elemanlarının kullanılması noktasına takıldım. Örneğin bir butona tıkladığımızda, butonun olay yakalayıcı metodunda bir HTML tablosunu oluşturur ve sayfanın bir yerine yerleştirir. Burada farklı konuların birbirinden ayrılması (Separation of Concerns) prensibini Javascript programlama dilinde ihlal etmiş oluyoruz. Oysa programlama prensipleri genel kavramlar olup uygulama alanına göre değişmez. Bu sebepten dolayı Knockout JS kullanarak HTML ve Javascript kodunu birbiriden ayırdım.

Uygulama Araç Kutusu:

  • Arcgis Javascript API
  • Knockout JS
  • Bootstrap
  • JQuery
  • Dojo

Uygulama Özeti:

Uygulama, harita üzerindeki bir noktaya tıklandığında, tıklanan yerin yakınlarındaki sosyal aktiviteleri, olayları göstermektedir. Bu bilgileri seatgeek.com API üzerinden çekmektedir.

Uygulamanın çalışan halini buradan inceleyebilrsiniz.

Uygulama Görseli
Uygulama Görseli