OGR/GDAL Virtual Formatı (Vektor)

OGR/GDAL, hem raster hemde vektör pek çok formatı destekleyen oldukça kapsamlı bir kütüphanedir. Ayrıca açık kaynak kodlu ve ücretsiz olması da çok büyük bir artı özelliktir. Bu konuda daha önceden yayınlamış olduğum yazıya ulaşmak için https://cbsuygulama.wordpress.com/2013/11/29/gdalogr-kutuphanesinin-derlenmesi/ adresini ziyaret edebilirsiniz.

OGR/GDAL Virtual formatı (*.vrt) raster ve vektör veri kaynaklarının tanımlandığı XML tabanlı bir formattır. Veri kaynaklarına ait bağlantı parametrelerini tutarak tek bir dosya üzerinden kütüphanenin desteklediği tüm formatlara ulaşabilmek mümkündür. Bunun yanında SQL sorgusu kullanabilme, koordinat sistemi dönüşümü (on-the-fly), geometri tanımlama gibi güçlü özellilere sahiptir. VRT formatı raster ve vektör veriler için olmak üzere iki çeşittir. Bu yazımda vektör verilere yönelik VRT formatının kullanımına değineceğim.

Temel Tanımlamalar

VRT formatı XMLtabanlıdır, katmanlar tanımlanırken belirli bir yapı kullanılır. XML şemasını (vektör veriler için) http://svn.osgeo.org/gdal/trunk/gdal/data/ogrvrt.xsd adresinde indirip inceleyebilirsiniz.

Temel bir VRT dosyasında şu taglar bulunmaktadır:

</OGRVRTDataSource> = kök element

</OGRVRTLayer> = alt öğe (katmanı tanımlarken kullanır)

</SrcLayer> = alt öğe (katman adını belirtmede kullanır)

Tüm bunların yanı sıra SQL sorgusu, koordinat tanımlamaları, koordinat dönüşümü gibi işlemlerde farklı taglar kullanır. Formata ait sayfaya http://www.gdal.org/drv_vrt.html adresinden ulaşabilirsiniz.

Örnekler

ShapeFile Katman Ekleme

Aşağıda bir SHP katmanının örnek tanımlaması verilmiştir. <SrcDataSource> tagı ile dosya yolu belirtilmiştir. <SrcLayer> tagının değeri çağırılacak katmanın/tablonun adını ifade eder. SHP dosyalarında dosya adı ile aynıdır. <OGRVRTLayer> tagındaki “name” özniteliği katmana verilecek “geçici” adı ifade eder. <LayerSRS> tagı ise katmanın koordinat sistemini ifade eder.

<OGRVRTDataSource>

<OGRVRTLayer name=”Iller – SHP”>

<SrcDataSource>E:\gecici\SHP\IL_3857.shp</SrcDataSource>

<SrcLayer>IL_3857</SrcLayer>

<LayerSRS>EPSG:3857</LayerSRS>

</OGRVRTLayer>

</OGRVRTDataSource>

PostGIS Katman Ekleme

PostGIS katmanı için örnek tanımlama aşağıda verilmiştir.

<OGRVRTDataSource>

<OGRVRTLayer name=”YolBuffer – PostGIS”>

<SrcDataSource>PG:dbname=’gis’ host=192.168.163.128 port=5432 user=’postgres’ password=’123′</SrcDataSource>

<SrcLayer>yol</SrcLayer>

</OGRVRTLayer>

</OGRVRTDataSource>

 

OSM Katman Ekleme

OSM, OpenStreet Map verileri için geliştirilmiş XML tabanlı bir formattır. Nokta, çizgi, poligon geometrisindeki verileri EPSG:4326 koordinat sisteminde tutmaktadır. Buradaki örnekte katman eklenerek koordinat dönüşümü yapılmıştır.  <OGRVRTWarpedLayer>   tagı koordinat dönüşümünün tanımlanmasında kullanılır ve <OGRVRTLayer> tagından önce gelir . <SrcLayer> tagının değeri “lines” olarak tanımlanarak çizgisel verilerin alınacağı belirtilmiştir. <LayerSRS> ile koordinat sistemi tanımlanmıştır. <TargetSRS> tagı kullanılarak dönüşümün yapılacağı koordinat sistemi belirtilmiştir.

<OGRVRTDataSource>

<OGRVRTWarpedLayer>

<OGRVRTLayer name=”Hatlar – OSM”>

<SrcDataSource>E:\gecici\OSM\1.osm</SrcDataSource>

<SrcLayer>lines</SrcLayer>

<LayerSRS>EPSG:4326</LayerSRS>

</OGRVRTLayer>

<TargetSRS>EPSG:3857</TargetSRS>

</OGRVRTWarpedLayer>

</OGRVRTDataSource>

 

MySQL Katmanı Ekleme

MySQL ‘de bulunan katmanları eklemek için aşağıdaki tanımlama verilmiştir. Bu örnekteki tabloya (bina_os) ait geometri kolonu bulunmaktadır.

<OGRVRTDataSource>

<OGRVRTLayer name=”Binalar – MySQL”>

<SrcDataSource>MySQL:cbs,host=192.168.163.130,port=3306,user=root,password=147</SrcDataSource>

<SrcLayer>bina_os</SrcLayer>

<LayerSRS>EPSG:3857</LayerSRS>

</OGRVRTLayer>

</OGRVRTDataSource>

PostGIS Katmana Buffer Uygulama

Bu örnekte çizgi geometresindeki katmana SQL sorgusu ile 100 metre buffer uygulanarak poligon üretilmiştir. <GeometryField> tagında “name” özniteliği katmana ait geometri kolonunu (yeniGeom) ifade eder.

<OGRVRTDataSource>

<OGRVRTLayer name=”YolBuffer – PostGIS”>

<SrcDataSource>PG:dbname=’gis’ host=192.168.163.128 port=5432 user=’postgres’ password=’123′</SrcDataSource>

<SrcLayer>yol</SrcLayer>

<SrcSQL>SELECT ST_Buffer(“geom”,100) AS “yeniGeom” FROM “yol”</SrcSQL>

<GeometryField name=”yeniGeom”/>

</OGRVRTLayer>

</OGRVRTDataSource>

 

Spatialite Katmanı Eklenmesi

Spatialite katmanı için  örnek tanımlama verilmiştir. Ayrıca SQL sorgusu ile sadece “geometri” ve “id” sütunları seçilmiştir. Burada dikkat edilmesi gereken nokta; eğer geometri sütunu belirtilmez ise sade bir tablo olarak değerlendirilir.

<OGRVRTDataSource>

<OGRVRTLayer name=”Direkler – Spatialite”>

<SrcDataSource>E:\gecici\Spatialite\map.db</SrcDataSource>

<SrcLayer>map_points</SrcLayer>

<LayerSRS>EPSG:4326</LayerSRS>

<SrcSQL>SELECT “id”, “geometry” FROM “map_points”</SrcSQL>

</OGRVRTLayer>

</OGRVRTDataSource>

 

FileGDB Katman Ekleme

Sisteminizde kurulu OGR/GDAL kütüphanesi FileGDB yi desteklemesi (öğrenmek için ogrinfo – formats komutu) halinde bu formata da rahatlıkla VRT üzerinden ulaşmanız mümkün. ESRI FileGDB katmanı için örnek tanımlama aşağıda verilmiştir. Yukarıdaki örneklerde geçen SQL sorguları da dahil olmak üzere tüm işlemleri bu katman için de gerçekleştirebilirsiniz.

<OGRVRTDataSource>

<OGRVRTLayer name=”Jeoloji – FileGDB”>

<SrcDataSource>E:\gecici\FileGDB\Tr_Veri.gdb</SrcDataSource>

<SrcLayer>jeoloji</SrcLayer>

<LayerSRS>EPSG:4326</LayerSRS>

</OGRVRTLayer>

</OGRVRTDataSource>

 

WFS Katman Ekleme

Bağlantı parametrelerini girmeniz halinden WFS katmanlarına da sanki bir dosyayı açarmış gibi ulaşabilirsiniz. Aşağıda Illinois Üniveritesi Jeoloji Araştırmaları Birimi’nin WFS servisine ait örnek bağlantı parametreleri verilmiştir.

<OGRVRTDataSource>

<OGRVRTLayer name=”TermalIletkenlik – WFS”>

<SrcDataSource>WFS:http://geothermal.isgs.illinois.edu/ArcGIS/services/aasggeothermal/CTThermalConductivity/MapServer/W

FSServer?request=GetCapabilities&service=WFS</SrcDataSource>

<SrcLayer>aasg:ThermalConductivity</SrcLayer>

</OGRVRTLayer>

</OGRVRTDataSource>

Katmanlara Erişim

Yukarıdaki örnek VRT tanımlamalarını herhangi bir VRT veya XML uzantılı bir dosyaya kaydederek OGR/GDAL kütüphanesini kullanan herhangi bir CBS yazılımı ile rahatlıkla kullanabilirsiniz. Üzerinden çalıştığınız projede farklı kaynakları bu şekilde tek bir VRT dosyası içinde tanımlayarak hepsine tek dosya üzerinden rahatlıkla ulaşabilmeniz mümkündür. Test amaçlı hazırladığım VRT dosyasını hem QGIS hem de GRASS GIS ortamında başarı ile kullandım. Aşağıda her iki yazılıma ait ekran görüntüleri gösterilmiştir.

 

SQL Injection Tehlikesi

Tüm bu kolaylıklarının ve üstün özelliklerinin yanı sıra yaptığım bazı testlerde VRT formatının oldukça tehlikeli bir silah haline dönüşebileceğini de farkettim. VRT formatı ile SQL sorguları çalıştırılabilir, dolayısıyla kötü niyetli biri tarafından hazırlanan bir sorgu ile bir anda tablolarınız silinebilir. İşin kötü yanı sadece bir çift tıklama ile bu işlem gerçekleşmektedir. Aşağıda örnek olarak verilen VRT tanımlaması ile “yol” tablosu silinmektedir. Sadece dosyayı QGIS veya GRASS GIS ile açmanız bu işlemi tetiklemeye yeter.

<OGRVRTDataSource>

<OGRVRTLayer name=”YolBuffer – PostGIS”>

<SrcDataSource>PG:dbname=’gis’ host=192.168.163.128 port=5432 user=’postgres’ password=’123′</SrcDataSource>

<SrcLayer>yol</SrcLayer>

<SrcSQL>DROP TABLE “yol”</SrcSQL>

</OGRVRTLayer>

</OGRVRTDataSource>

Yayınlamış olduğum yazıları kaynak belirtmek kaydıyla paylaşabilirsiniz.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s