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.

Spatial Reference System

26 May

Spatial Reference System

Spatial Reference System (SRS) veya Coordinate Reference System(CRS) coğrafi nesnelerin konumlarını bulmak için kullanılan koordinat tabanlı yerel, bölgesel veya küresel bir sistemdir. Bir SRS farklı mekansal referans sistemeler arasında dönüşümlerin yanı sıra, belli bir harita projeksiyonu tanımlar. Bazı koordinat sistemleri:

  • Universal Transverse Mercator koordinat sistemi
  • Birtish national grid reference system
  • Hellenic Geodetic Reference system 1987
  • Lambert conformal conic projection
  • United States National Grid
  • Jordan Transverse Mercator
  • International mapcode system
  • Irish grid reference system

Mekansal referans sistemleri SRID olarak ifade edilen benzersiz tamsayı kimlik numaraları ile ifade edilirler. European Petroleum Survey Group(EPSG) tarafından tanımlanmış olan SRID’ler de vardır ve bunlar EPSG kodu ile ifade edilirler. Örneğin “EPSG:4326” WGS84 projeksiyonu için EPSG kodudur. “EPSG:3857” ise WGS84 WebMercator için EPSG kodudur. Bu iki projeksiyon arasındaki fark “EPSG:4326” sisteminde dünya bir küre olarak ele alınırken “EPSG:3857” sisteminde dünya bir elips olarak düşünür. “EPSG:4326” enlem/boylam(lon/lat) koordinat sistemini kullanırken “EPSG:3857” x/y kartezyen koordinat sistemini kullanır. Bu sistemler sayesinde de yuvarlak yapıdaki dünya düz bir zemin üzerinde temsil edilebilmektedir.

SRS için tanımlanan bilgiler veritabanlarında OCG tarafından tanımlanan spatial_ref_sys metadata tablosunda tutulur. Bu tabloda SRID, AUTH_NAME, AUTH_SRID, SRTEXT gibi değerler bulunur. Konumsal veritabanı içinde birden fazla konumsal referansa sahip konumsal nesne tablosu veya raster veri bulunabilir.

Mekansal referans sistemleri (SRS) Open Geospatial Consortium (CRS) tarafından kolay bir şekilde erişim sağlamak amacıyla belli standartlarda herkesin anlayabileceği bir metin standardında tanımlanırlar. Bu standart Well Known Text(WKT) olarak isimlendirilir.

Well Known Text(WKT)

WKT bir harita üzerinde vektör geometri nesnesini temsil etmek için ve mekansal referans sistemleri arasında dönüşümler yapabilmek için geliştirlmiş bir metinsel işaretleme dilidir. WKT’nin binary karşılığı Well Known Binary (WKB)’dir. WKB ile WKT ile tanımlanan bilgilerin transferi ve veri tabanlarında saklanması için kullanılır. Bu formatlar OGC tarafından ISO/IEC 13249-3:2011 standardı olarak tanımlanmıştır.

WKT ile temsil edilen 18 adet geometri türü vardır. Bunlar:

  • Geometry
  • Point, Multipoint
  • LineString, MultiLineString
  • Polygon, MultiPoygon, Triangle
  • CircularString
  • Curve, MultiCurve, CompundCurve
  • CurvePolygon
  • Surface, MultiSurface, PolyhedralSurface
  • TIN, TINZ
  • GeometryCollection

Geometri koordinatları 2D (x,y), 3D (x,y,z), 4D (x,y,z,m) şeklinde temsil edilir.

Örnek WKT geometri gösterimleri:

  • POINT(25 18)
  • LINESTRING(10 15, 20 25, 50 55)
  • POLYGON((20 25, 50 55, 80 95, 20 25))
  • POLYGON((20 25, 50 55, 80 95, 20 25), (10 15, 18 22, 17 23, 10 15))
  • MULTIPOINT((11 12), (24 60), (40 40), (75 80))
  • MULTIPOINT(11 12, 24 60, 40 40, 75 80)
  • MULTILINESTRIN((15 15, 23 80, 10 40), (16 16, 33 10, 25 50, 38 09))

Well Known Binary(WKB)

Geometri nesnelerini taşınabilir ve veritabanlarında depolanabilir hale getirmek amacıyla bitişik byte dizisi şeklinde temsil eden ve OGC tarafından standartlaştırılan bir gösterim şeklidir. İki boyutlu(2D) geometrileri temsil eden bir kodlama şeklidir. WKB gösterimleri genellikle onaltılık sayı sistemindeki dizelerle yapılmaktadır.

SQL veritabanında WKB şeklinde depolanan geometrilere ODBC Client gibi veri sağlayıcılar aracılığı ile erişilebilmektedir. Konumsal veri üzerinde geometrik işlemleri gerçekleştirebilen fonksiyonlar SQL, Java veya C-API tarafından sağlanmaktadır.

Bir geometri için yapılan WKB gösterimi yapılırken, öncelikle geometri nesnesinin serileştirilmesiyle elede edilen sayı kümesinden alınan  işaretsiz tamsayı (Unsigned Integer) ve ondalık(Double) sayılar elde edilir. Daha sonra elde edilen her sayı, standart ikili(binary) sayı sistemine dönüştürülür.

Binary ifadelerin bilgisayar sisteminde serileştirilmesi sırasında işaret bitleri, en önemli ilk byte veya en az önemli ilk byte gibi bazı standartlar belirlenmiştir. Serileştirme işlemi, network ortamında bilgisayarlar arasında veri transferini gerçekleştirebilmek amacıyla gerçekleştirilir. Serileştirme için kullanılan iki tür kodlama vardır. Bunlar XDR ve NDR dir.

XDR (big-endian)

  • İşaretsiz tamsayının XDR gösterimin en önemli byte önce yazılır.

xdr1

  • Ondalik(Double) sayıların XDR gösteriminde işaret byte önce yazılır.

xdr2

NDR (little-endian)

  • İşaretsiz tamsayının NDR gösterimin en önemsiz byte önce yazılır.
  • Ondalik(Double) sayıların NDR gösteriminde işaret byte sona yazılır.

Geometri Nesnelerinin WKB Gösterimi

Geometri gösteriminde ilk byte veri için byte sırasını gösterir.

  • 00: Düşük son haneli (big endian)
  • 01: Büyük son haneli (little endian)

İkinci byte geometri türünü temsil eden bir tamsayıdır.

Type

2D

GEOMETRY

0000

POINT

0001

LINESTRING

0002

POLYGON

0003

MULTYPOINT

0004

MULTULINESTRING

0005

MULTIPOLYGON

0006

GEOMETRYCOLLECTION 0007
CIRCULARSTRING 0008
COMPUNDCURVE 0009
CURVEPOLYGON 0010
MULTICURVE 0011
MULTISURFACE 0012
CURVE 0013
SURFACE 0014
POLYHEDRALSURFACE 0015
TIN 0016
TRIANGLE 0017

 

Her geometrik veri türü benzersiz bir veri yapısına sahiptir. Koordinatlar double tipinde temsil edilir.

Örneğin: POINT(2.0, 4.0) geometrisi 000000000140000000000000004010000000000000 şeklinde 21 byte ile temsil edilir. Burada:

  • 1 byte integer 00 veya 0: Düşük son haneli
  • 4 byte integer 00000001 veya 1: POINT 2D
  • 8 byte float 4000000000000000 veya 2.0: X koordinatı
  • 8 byte float 4010000000000000 veya 4.0: y koordinatı

Kaynaklar: