KOCAELİ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ DÖNEM PROJESİ ORACLE SPATIAL İLE MEKANSAL SORGULAMALAR 100202075 TOLGA KAPLAN 100202020 METİN YILMAZ OCAK, 2014 ÖNSÖZ VE TEŞEKKÜR Projemiz adından da anlaşılacağı üzere Oracle ile spatial (mekansal) sorgular ve bu sorguların nasıl çalıştırılacağı ile ilgilidir. Projemizde ilk olarak Oracle 11g r2 x64 sürümünü kurup, gerekli eklentileri yükledikten sonra, daha önceden de PostgreSQL üzerinde denemiş olduğumuz mekansal sorguları Oracle syntax’ına çevirip çalıştırdık. Ve görsel olarak (koordinat sistemine dayalı) ekrana getirdik. Öncelikle proje çıkmaz bir haldeyken, bizi yönlendirip ilgili dokümanlarla yol göstererek projemizi tamamlamamızı sağladığı için değerli hocamız Arş. Gör. Süleyman Eken’e teşekkürü bir borç biliriz. Sorularımızla terlettiğimiz Facebook/Turkish Oracle User Group & Oracle Forum Türkiye grubuna ve stackoverflow.com teknik paylaşım sitesine katkılarından dolayı teşekkürlerimizi sunarız. Ve son olarak; hayatımız boyunca bugünlere gelmemizde şüphesiz en büyük katkıları yapmış olup, hiçbir özveriden kaçınmayan değerli ailelerimize çok teşekkür ederiz. Ocak – 2014 Metin Yılmaz – Tolga Kaplan iv İÇİNDEKİLER ÖNSÖZ VE TEŞEKKÜR ........................................................................................... iv İÇİNDEKİLER ............................................................................................................ v ŞEKİLLER DİZİNİ..................................................................................................... vi SİMGELER DİZİNİ ve KISALTMALAR ............................................................... viii ÖZET........................................................................................................................... ix ABSTRACT ............................................................................................................... 10 1. GİRİŞ ..................................................................................................................... 11 1.1. Tarihçe ............................................................................................................ 11 1.2. Mekansal Veritabanları Nedir? ...................................................................... 12 1.3. Oracle Spatial Niçin Vardır? .......................................................................... 13 2. MEKANSAL VERİTABANLARI ........................................................................ 14 2.1. Veritabanı Yönetim Sistemleri ....................................................................... 14 2.1.1 Hiyerarşik Veritabanları .................................................................................... 14 2.1.2 Ağ Veritabanları ................................................................................................ 15 2.1.3 İlişkisel Veritabanları ....................................................................................... 15 2.2. Mekansal Veritabanı Yönetim Sistemleri ...................................................... 17 3. ORACLE SPATIAL KURULUMU ...................................................................... 19 3.1. Oracle Spatial Teknolojisi Nedir? .................................................................. 19 3.2. OracleSpatial Kurulumu ................................................................................. 19 3.2.1 Oracle 11g R2 Kurulumu .................................................................................. 19 3.2.2 Spatial Bir Veritabanı Oluşturma ...................................................................... 28 4. ORACLE SPATIAL ÜZERİNDE MEKANSALSORGULAMA ÖRNEKLERİ . 48 4.1. Oracle Spatial Fonksiyonları .......................................................................... 48 4.2. Gerçekleştirilen Mekansal Sorgular ............................................................... 51 5. SONUÇLAR VE ÖNERİLER ............................................................................... 70 KAYNAKLAR .......................................................................................................... 71 ÖZGEÇMİŞ ............................................................................................................... 72 v ŞEKİLLER DİZİNİ Şekil 1.1.1854 Londra - Kolera salgını verileri ......................................................... 11 Şekil 1.2.Raster veri ................................................................................................... 12 Şekil 1.3.Vektörel veri ............................................................................................... 13 Şekil 3.1.Oracle download ......................................................................................... 20 Şekil 3.2.Oracle dosyalar ........................................................................................... 20 Şekil 3.3.Oracle kurulum e-mail ................................................................................ 21 Şekil 3.4.Oracle kurulum e-mail sorgulama .............................................................. 21 Şekil 3.5.Oracle kurulum create database .................................................................. 22 Şekil 3.6.Oracle kurulum desktop class ..................................................................... 23 Şekil 3.7.Oracle kurulum şifre belirleme ................................................................... 23 Şekil 3.8.Oracle kurulum gereksinimi kontrolü ......................................................... 24 Şekil 3.9.Oracle kurulum bilgiler ............................................................................... 25 Şekil 3.10.Oracle kurulum yükleme........................................................................... 25 Şekil 3.11.Oracle kurulum güvenlik duvarı izni ........................................................ 26 Şekil 3.12.Oracle kurulum orcl veritabanı ................................................................. 26 Şekil 3.13.Oracle kurulum orcl kurulumunun tamamlanması ................................... 27 Şekil 3.14.Oracle kurulumunun tamamlanması ......................................................... 28 Şekil 3.15. Başlat görünümü ...................................................................................... 29 Şekil 3.16.database configuration assistance ............................................................. 29 Şekil 3.17.DCA veritabanı oluşturma ........................................................................ 30 Şekil 3.18.DCA custom database ............................................................................... 30 Şekil 3.19.DCA veritabanı adı ................................................................................... 31 Şekil 3.20.DCA enterprise manager .......................................................................... 32 Şekil 3.21.DCA otomatik bakım ................................................................................ 32 Şekil 3.22.DCA şifre belirleme .................................................................................. 33 Şekil 3.23.DCA şifre uygunluğu ................................................................................ 34 Şekil 3.24.DCA file location ...................................................................................... 34 Şekil 3.25.DCA yedekleme ........................................................................................ 35 Şekil 3.26.DCA bileşenler.......................................................................................... 36 Şekil 3.27.DCA script ................................................................................................ 36 Şekil 3.28.DCA hafıza miktarını belirleme................................................................ 37 Şekil 3.29.DCA sizing ............................................................................................... 38 Şekil 3.30.DCA character sets ................................................................................... 38 Şekil 3.31.DCA connection mode .............................................................................. 39 Şekil 3.32.DCA database storage ............................................................................... 40 Şekil 3.33.DCA create database ................................................................................. 40 Şekil 3.34.DCA create database – özet ...................................................................... 41 Şekil 3.35.DCA kurulum başlangıç ........................................................................... 42 Şekil 3.36.DCA kurulum bitiş.................................................................................... 43 Şekil 3.37.DCA hata .................................................................................................. 44 Şekil 3.38.Listener durumları..................................................................................... 44 vi Şekil 3.39.Enterprise manager ................................................................................... 45 Şekil 3.40.Enterprise manager giriş ........................................................................... 46 Şekil 3.41.Enterprise manager ekranı ........................................................................ 46 Şekil 4.1.Yeni bağlantı oluşturma .............................................................................. 51 Şekil 4.2.Yeni bağlantı bilgileri ................................................................................. 51 Şekil 4.3.Sqldeveloper tablo oluşturma ..................................................................... 52 Şekil 4.4.Sqldeveloper veri ekleme ............................................................................ 52 Şekil 4.5.MapView menüsü ....................................................................................... 60 Şekil 4.6.MapView’de görüntüleme .......................................................................... 60 Şekil 4.7.GeoRaptor yükleme .................................................................................... 61 Şekil 4.8.Referans veriyi GeoRaptor’a ekleme .......................................................... 62 Şekil 4.9.Tüm tabloyu GeoRaptor’a ekleme .............................................................. 62 Şekil 4.10.GeoRaptor’da görüntüleme ....................................................................... 63 Şekil 4.11.Bölgelerin alanını veren sorgu .................................................................. 64 Şekil 4.12.Nehirlerin alanını veren sorgu .................................................................. 64 Şekil 4.13.Nehirlerin uzunluklarını veren sorgu ........................................................ 65 Şekil 4.14.Bölgelerin uzunluklarını veren sorgu........................................................ 66 Şekil 4.15.Şehir7 ile diğer şehirler arasındaki mesafeyi hesaplayan sorgu ............... 67 Şekil 4.16. Bölgeler ile şehirlerin birbirini içerme durumlarını ve şehirlerin ortalama sıcaklıkları ile nüfuslarını veren sorgu .................................................................. 68 Şekil 4.17. Nehir1’in geçtiği bölgeleri veren sorgu ................................................... 69 vii SİMGELER DİZİNİ VE KISALTMALAR Kısaltmalar DCA : Database Configuration Assistant(Oracle Veritabanı Oluşturma Aracı) GIS : Goegraphic Information System (Coğrafi Bilgi Sistemi - CBS) HTML : Hyper Text Markup Language (Zengin Metin İşaretleme Dili) MVTYS : Mekansal Veritabanı Yönetim Sistemleri SID : System Identifier (Sistem Tanımlayıcısı - Veritabanı Adı) SQL : Structured Query Language (Yapılandırılmış Sorgu Dili) PC : Personal Computer (Kişisel Bilgisayar) PL/SQL : Procedural Language/Structured Query Language (Prosedürel Sorgu Dili) RDBMS : Relational Database Management System (İlişkisel Veritabanı Yönetim Sistemi) T-SQL : Transact SQL (SQL Komut Yapısı) VTYS : Veritabanı Yönetim Sistemleri viii ÖZE ORACLE SPATIAL İLE MEKANSAL SORGULAMALAR ÖZET Yaptığımız bu çalışmada mekansal sorgular ve bu sorguların görsel olarak ekrana getirilmesi araştırılmıştır. İlk etapta özellikle Oracle’ın mekansal sorgulamalarıyla ilgili Türkçe kaynakların yetersiz olması sebebiyle çalışmamızın her adımı için İngilizce kaynaklar bulunup, Türkçe’ye çevrilmiş ve her aşama bu çevirilere göre gerçekleştirilmiştir. Çeviri aşamasından sonra kurulum aşamasına geçilmiş, uygun olan işletim sistemi ve Oracle versiyonu belirlenerek kurulum tamamlanmıştır. Kurulumdan sonra elimizde mevcut olan PostgreSQL mekansal sorguları Oracle’a uygun bir şekilde çevrilerek (fonksiyon isimlerinin düzenlenmesi, ID değerleri eklenmesi vb.) başarıyla gerçeklenmiştir. Daha sonra ise Oracle üzerindeki MapView ve GeoRaptor eklentileriyle sorguların görselleştirilmesi sağlanmıştır. Çalışmaların tümü Windows 7 64-bit işletim sistemi üzerinde Oracle 11g R2 X64 sürümü kullanılarak gerçekleştirilmiştir. Anahtar Kelimeler: Veritabanı Tabloları Oluşturma, Oracle Veritabanları Kullanımı, Mekansal Sorgular, Mekansal Sorguların Çizimi, ix İNGİLİ ZC E ÖZET SPATIAL QUERIES ON ORACLE SPATIAL ABSTRACT Spatial queries and their visual forms were investigated in study which we prepared. In first place, due to the lack of Turkish resources which related with Oracle’s spatial queries, English resources were translated to Turkish in each stage. Every stage was realized according to these translations. The installation stage was launched after translation stage. And it was completed with appropriate operating system and the version of Oracle. After the installation stage, the PostgreSQL queries which we have existing were translated Oracle syntax and were realized successfully. Then the queries were visualized with the MapView and the GeoRaptor addition on Oracle. All studies were realized with Oracle 11G R2 X64 on Windows 7 X64 Operating system. Keywords :Creating the Database Tables, Usage of the Oracle Databases, Spatial Queries, Visualization of the Spatial Queries 10 1. GİRİŞ 1.1. Tarihçe Her ne kadar mekansal veritabanları çok uzak bir geçmişe sahip olmasa da aslında yüzyıllar önce insanoğlunun üzerinde düşünmeye ve bir nevi prototip çizimler gerçekleştirmeye başladığı Dünya haritaları bugünkü görsel veritabanı sistemlerinin atası olarak kabul edilebilir. Hayvan derilerine ve parşömen kağıtlarınaharita çizimleri yapılmasıyla başlayan bu süreç günümüzde GPS (Uydu Görüntüleme Sitemi) teknolojisi ile de birleşerek Google Map benzeri uygulamaların hayatımıza girmesiyle devam etmektedir. Ve 70’li yılların başında ortaya çıkan veritabanı teknolojisi “mekansal” olarak da kategoriye ayrılmış ve günümüzde bu alanda da gelişmeye devam etmektedir. Şekil 1.1. 1854 Londra - Kolera salgını verileri 11 1.2. Mekansal Veritabanları Nedir? Mekansal veritabanlarının tanımını yapmadan önce mekansal verinin ne olduğunu açıklamamız gerekir. Mekansal veri diğer bir deyişle “görsel veri”dir. Uydu görüntüleri, haritalar, 3 boyutlu modellemeler, GPS, medikal görüntüler vb. hepsi birer mekansal veridir. Ve mekansal veriler vektörel veri ve raster veri olarak 2’ye ayrılırlar. Raster Veri Raster formatındaki veriler, modellenecek alanı/bölgeyi piksel gruplar halinde veya daha çok benzediği şekliyle satranç tahtası şeklinde gösterir. Her bir birim/hücre/piksel belli bir coğrafik alanı temsil etmektedir. Uzaktan Algılama (remote sensing) verileri genellikle raster formatındadır[1]. (R:yol L:arazi H:ev B:plaj C:koruma alanı S:deniz) Şekil 1.2.Raster veri Vektörel Veri Vektörel veriler, nokta ve çizgilerin birleşmesi ile gerçek durumu temsil eder. Bunlar da birleştirilerek poligonlar oluşturulur. Bu sayede her türlü coğrafi şekil vektör formatında kolayca tanımlanabilmektedir. Coğrafi Bilgi Sistemi’nden elde edilen harita çıktıları 12 genellikle vektör formatındadır. Uzaktan Algılama verileri ise genellikle raster olduğu için vektörel veriye dönüşümünün yapılması gerekmektedir. Şekil 1.3. Vektörel veri Bu açıklamalarla birlikte mekansal veritabanının tanımı daha kolay yapılabilir; mekansal nesnelere ait verileri saklayabilen veritabanlarına mekansal veritabanı denir. Mekan bilgisi; nokta, çizgi veya poligon olarak tutulabilir. Navigasyon, şehirleşme analizi, ulaştırma ağı izleme sistemleri, suç izleme sistemleri, Google Earth mekansal veritabanlarına örnek olarak verilebilir. 1.3. Oracle Spatial Niçin Vardır? Oracle Spatial, vektörel ve raster tabanlı coğrafi veriler, topoloji ve ağ modelleri de dahil olmak üzere yerküre üzerindeki tüm konum bilgilerini yönetmek için oluşturulmuş bir Oracle veritabanı teknolojisidir. Yer yönetimi, kamu hizmetleri ve savunma/ülke güvenliği gibi uygulamalar için ileri düzey coğrafi bilgi sistemi (GIS) uygulamalarının ihtiyaçlarını karşılamak üzere tasarlanmıştır. Özellikle önceki sürümlere kıyasla 11g sürümünde daha iyi performans, yönetim, ağ uygulamaları, coğrafi kodlama kolaylığı sağlıyor olması Oracle Spatial’in en büyük artılarındandır. 13 2. MEKANSAL VERİTABANLARI 2.1. Veritabanı Yönetim Sistemleri Günümüzde hemen hemen tüm veri kullanılan alanlarda Veritabanı Yönetim Sistemleri (VTYS) olmadan hiçbir şey yapılamaz hale gelmiştir. Çok basit bir web uygulamasından, çok büyük şirketlerin ağır verilerine kadar pek çok alanda veritabanı uygulamalarına ihtiyaç duyulmaktadır. Birbirinden farklı isimlerle anılan bu programlar için bir çok nesne birbiri ile aynı temel işlevi yerine getirmekte olup, yaklaşık olarak aynı teorilere dayanarak çalışmaktadırlar. VTYS, bir veritabanı oluşturmak, veritabanını düzenlemek, geliştirmek ve bakımını yapmak gibi çeşitli karmaşık işlemlerin gerçekleştirildiği birden fazla programdan oluşmuş bir yazılım sistemidir. Ya da diğer bir deyişle veritabanlarını kurmayı, yaratmayı, tanımlamayı, işletmeyi ve kullanmayı sağlayan programlar topluluğuna “veritabanı sistemi” ya da “veritabanı yönetim sistemi” (database management system –DBMS) denir[2]. VTYS’ler fiziksel hafızayı ve veri tiplerini kullanıcılar adına şekillendirip denetleyen ve kullanıcılarına standart bir SQL arayüzü sağlayarak onların dosya yapılar, veri yapısı, fiziksel hafıza gibi sorunlarla ilgilenmek yerine veri giriş-çıkışı için uygun arayüzler geliştirmelerine olanak sağlayan yazılımlardır. VTYS’de verileri tutmak üzere bir çok türde nesne ve bu nesnelere erişimleri düzenlemek üzere kullanıcılar, roller ve gruplar yer alır. Her bir kullanıcının belli hakları vardır. Bu haklar kısıtlanabilir. Örneğin bir tablo ya da programcığı bir kullanıcı kullanabilirken bir başkasının hakları veritabanı yöneticisi tarafından kısıtlanmış olabilir. Veritabanları verileri saklama ve onlara erişme bakımından farklı tiplere ayrılır: 2.1.1 Hiyerarşik Veritabanları Bu veritabanı tipi, ana bilgisayar ortamlarında çalışan yazılımlar tarafından kullanılmaktadır. Bu türde en çok kullanılan yazılım, IBM tarafından çıkarılan IMS' dir. Uzun bir geçmişe sahip olmasına rağmen, PC ortamına uyarlanan hiyerarşik veri tabanları 14 yoktur. Hiyerarşik veri tabanları, bilgileri bir ağaç (tree) yapısında saklar. Kök (Root) olarak bir kayıt ve bu köke bağlı dal (branch) kayıtlar bu tip veritabanının yapısını oluşturur. 2.1.2 Ağ Veritabanları Hiyerarşik veri tabanlarinin yetersiz kalmasından dolayı bilim adamlarının ortak çalışması sonucu ortaya konulmuş bir veri tabanı türüdür. Ağ veri tabanları verileri ağaçların daha da gelişmiş hali olan graflar (ağacın kendisi de özel bir graftır.) şeklinde saklarlar. Bu yapı en karışık yapılardan biridir. 2.1.3 İlişkisel Veritabanları Edgar Frank Codd Tarafından Geliştirilmiştir. Bu sistemde veriler tablo şeklinde saklanır. Bu veri tabanı yönetim sisteminde; veri alış verişi için özel işlemler kullanılır. Bu işlemlerde tablolar operandlar olarak kullanılır. Tablolar arasında ilişkiler belirtilir. Bu ilişkiler matematiksel bağıntılarla (ilişkilerle) temsil edilir. Günümüzde hemen hemen tüm veri tabanı yönetim sistemleri ilişkisel veri modelini kullanırlar. İlişkisel modeli 1970 yılında Codd önermiştir. Bu model, matematikteki ilişki teorisine (“the relational theory”) dayanır. İlişkisel veri modelinde (Relational Data Model) veriler basit tablolar halinde tutulur. Tablolar, satır ve sütunlardan oluşur. Bilgisayar ortamında veri saklama ve erişiminde geçmişten günümüze değişik yöntemler ve yaklaşımlar kullanılmıştır. Bunlardan Geleneksel Yaklaşım (Dosya - İşlem Sistemi) verileri ayrı ayrı dosyalarda gruplamaya dayanır. Verileri saklamak için programlama dillerinde kullanılan sıralı (Sequential) ve rastgele (Random) dosyalama sistemleri gibi. Birbiriyle ilgili olan ve aynı gruba dahil olan veriler bir dosyada, bir başka gruba dahil olan veriler de başka bir dosyada tutulurdu.Geleneksel Yaklaşımın birçok sakıncası vardır ve bu sakıncaların beraberinde getirdiği sorunların üstesinden gelebilmek için de Veri Tabanı Yaklaşımı zamanla Geleneksel Yaklaşımın yerini almıştır. Günümüzde veriler artık Veri Tabanı Yaklaşımı ilkesine göre VTYS’ lerde tutulmakta ve işlenmektedir. 15 Aynı veri değişik kişilerin PC’lerinde veya değişik bilgisayarlarda tekrar tekrar tutulmaz; veri tekrarı (data redundancy) azaltılır ya da yok edilir. Veri tutarlılığı (data consistency) : Aynı verinin değişik yerlerde birkaç kopyasının bulunması “bakım” zorluğu getirir: bir yerde güncellenen bir adres bilgisi başka yerde güncellenmeden kalabilir ve bu durum veri tutarsızlığına (“data inconsistency”) yol açar. Veri paylaşımı / Eşzamanlılık (concurrency) : Veri tabanı yönetim sistemi (VTYS) kullanılmadığı durumlarda veriye sıralı erişim yapılır. Yani birden çok kullanıcı aynı anda aynı veriye erişemez. Bir VTYS’de ise verinin tutarlılığını ve bütünlüğünü bozmadan aynı veritabanlarına saniyede yüzlerce, binlerce erişim yapılabilir. Veri bütünlüğü (data integrity): Bir tablodan bir öğrenci kaydı silinirse, öğrenci varolduğu diğer tüm tablolardan silinmelidir. Veri güvenliği (data security) : Verinin isteyerek ya da yanlış kullanım sonucu bozulmasını önlemek için çok sıkı mekanizmalar mevcuttur. Veri tabanına girmek için kullanıcı adı ve şifreyle korumanın yanı sıra kişiler sadece kendilerini ilgilendiren tabloları ya da tablo içinde belirli kolonları görebilirler. Veri Bağımsızlığı (data independence) : Programcı, kullandığı verilerin yapısı ve organizasyonu ile ilgilenmek durumunda değildir. VERİ BAĞIMSIZLIĞI, VTYS’lerinin en temel amaçlarındandır. VTYS programlarından bazıları şunlardır; ArcSDE : ArcSDE VTYS’si RDBMS içerisinde saklanan coğrafi verileri sorgulamak, analiz etmek ve düzenlemek amacıyla kullanılan ESRI ArcGIS ailesi ürünlerindendir. IBM, DB2, Informix, Microsoft SQL Server ve Oracle üzerindeki coğrafi verilerin ArcView, ArcEditor ve ArcInfo gibi ArcGIS Desktop ürünlerine bilgi sunulmasını sağlayan önemli bir bileşendir. Coğrafi veri için ortak bir model sunmaktadır. Mekansal veriler, RDBMS için önem arzeden veri import ve export programları kullanmak suretiyle, bir RDBMS’ten başka birine veri kaybı olmadan kolaylıkla taşınabilmektedir. ArcSDE, nokta(point), çizgi(line) ve alan(polygon) gibi geometrik veriler veritabanına eklenirken bozuk yapılı geometrilerin eklenmesine izin vermeyerek veri bütünlüğünü de korumaktadır. 16 MS SQL Server : Bir orta ve büyük ölçekli VTYS’dir. SQL’e eklentiler yazmak için TSQL’i destekler. Oracle : Daha çok yüksek ölçekli uygulamalarda tercih edilen bir VTYS’dir. SQL’e eklentiler yapmak için PL/SQL geliştirilmiştir. OGC standartlarını desteklemektedir. Spatial teknoloji; MDSYS şeması, spatial indeks mekanizması, spatial analiz işlemleri için fonksiyonlar, prosedürler ve operatörler, tuning işlemleri için operatörler, topoloji veri modeli, netwok data model oluşturulması, GeoRaster veriler üzerinde analizlerin yapılabilmesi gibi özellikleri içerir. MySQL : Genellikle Unix-Linux temelli Web uygulamalarında tercih edilen bir VTYS’dir. Açık kod bir yazılımdır. Küçük-orta ölçeklidir. Özellikle Web için geliştirilmiş bir VTYS’dir denilebilir. Postgre SQL : Bu da MySQL gibi açık kod bir VTYS’dir. MS Access : Çoklu kullanıcı desteği yoktur. İşletim sisteminin sağladığı güvenlik seçeneklerini kullanır. Bunun yanında belli sayıda kayda kadar (1000000 civarı) ya da belli bir boyutun (yaklaşık 25MB) altına kadar bir sorun çıkartmadan kullanılabilecek bir küçük ölçekli VTYS’dir. Advantage : Türk programcılar tarafından geliştirilen bir orta ve büyük ölçekli VTYS’dir. 2.2. Mekansal Veritabanı Yönetim Sistemleri Mekansal Veritabanı Yönetim Sistemleri denince akla ilk gelen terim ise GIS’dır. Dilimize ise CBS (Coğrafi Bilgi Sistemleri) olarak çevrilmektedir. Coğrafi Bilgi Sistemleri; konuma dayalı gözlemlerle elde edilen grafik ve grafik-olmayan bilgilerin toplanması, saklanması, işlenmesi ve kullanıcıya sunulması işlevlerini bütünlük içerisinde gerçekleştiren bir bilgi sistemidir. Coğrafik bilgileri dijital bir yapıya oturtarak bilgisayarda yardımcı araçlar ile veritabanımızda bu verileri saklayabilmemiz, düzenleyebilmemiz coğrafi bilgi sistemleri sayesinde gerçekleşir. Kullanım alanları arasında ise; bilimsel araştırmalar, kaynak yönetimi, altyapılar, peyzaj mimarlığı, kentsel planlama, kartografya, kriminoloji, coğrafi tarih, lojistik, maden haritalama, haritacılık, meteoroloji, tarımsal araştırmalar, trafik izleme – araç takip sistemleri, arama kurtarma gibi alanlar bulunmaktadır[3]. 17 MVTYS programlarından bazıları şunlardır; Oracle Spatial Oracle Spatial en genel anlamda Oracle veritabanına mekansal yetenekler ilave eden bir Oracle opsiyonudur. Daha teknik bir tanımla, çok boyutlu verilerin veya nokta, çizgi, poligon gibi coğrafi şekillerin Oracle veritabanında saklanması, sorgulanması, update edilmesi gibi işlemlerin yapılabilmesini sağlayan; özel bir SQL şeması ve özel SQL fonksiyonlarını içeren Oracle opsiyonudur. Temelde 4 bileşenden oluşur: - MDSYS isimli ve geometrik veri tiplerinin saklanması, syntax’I ve tanımlarını öngören Oracle şeması. - Mekansal indexleme - Komşuluk ve yakınlık analizi, kesişme, içerme vb. mekansal sorguların - yapılabilmesini sağlayan özel coğrafi fonksiyonlar. - Yönetimsel araçlar PostGIS Coğrafi nesneler için PostgreSQL’e destek veren açık kaynaklı bir yazılımdır. PostgreSQL’ e mekansal veri tabanı olma özelliği katan bir eklentidir[4]. 18 3. ORACLE SPATIAL KURULUMU 3.1. Oracle Spatial Teknolojisi Nedir? Spatial özelliğini açıklayabilmek için önce Oracle teknolojisinin ne olduğuna bakmak gerekli. Oracle 1977 yılında Kaliforniya, ABD’de kurulmuş olan, Microsoft’un ardından dünyanın en büyük ikinci yazılım şirketidir. Oracle; ilişkisel bir veritabanı yönetim sistemidir. Oracle’ın özelliklerinden bazıları; büyük miktarda veri tutabilmesi ve verilerin depolandığı alanları ayarlama imkanı verebilmesi, aynı anda çok sayıda kullanıcıya hizmet verebilmesi, işletim sistemi, veri erişim dilleri ve ağ iletişim protokolleri standartlarıyla uyumlu olması, yetkisiz erişimleri engelleme ve kontrol edebilme imkanı sağlamasıdır[5]. Spatial seçeneği ise Oracle Enterprise Edition sürümü ile birlikte gelmektedir. Standart Edition’da Locator adlı, sadece temel mekansal fonksiyonalite sağlayan ve Spatial’ın “alt” versiyonu diyebileceğimiz bir opsiyon mevcuttur. Kompleks GIS projelerinde Locator muhtemelen yetersiz kalacağı için büyük projelerde Spatial’ı kullanmak daha doğru olacaktır. Enterprise sürümü ile gelen SqlDeveloper kullanılarak sorgular çalıştırılabilir. Ve spatial sorguların görselliği için ise aynı program üzerindeki MapView ve GeoRaptor eklentileri kullanılmaktadır. 3.2. OracleSpatial Kurulumu 3.2.1 Oracle 11g R2 Kurulumu Kurulum aşamalarına geçmeden önce işletim sistemi olarak Windows 7 64 bit kullandığımızı tekrar edelim.http://www.oracle.com/technetwork/database/enterprise- edition/downloads/index.html?ssSourceSiteId=ocomen adresine giderek 19 Şekil 3.1.Oracle download Microsoft Windows x64’a ait iki dosyayı bilgisayarımıza indiriyoruz. İndirip aynı klasör içine çıkardığımızda aşağıdaki gibi dosyalar gelmelidir; Şekil3.2.Oracle dosyalar Ve setup’a tıklayarak Oracle kurulumuna başlıyoruz. 20 Şekil 3.3.Oracle kurulum e-mail Şekil 6’da gösterildiği üzere karşımıza gelen ilk ekranda “My Oracle Support” sistemine e –mail adresimizi kayıt etmek isteyip istemediğimiz soruluyor. İstemiyorsak hiçbir alana dokunmadan “İleri” diyoruz. Şekil 3.4.Oracle kurulum e-mail sorgulama 21 “Geçerli bir e-mail adresi girmediniz.” uyarısına evet diyerek devam ediyoruz. Şekil 3.5.Oracle kurulum create database Şekil 8’de karşımıza 3 seçenek geliyor. Biz örnek “orcl” veritabanının da kurulmasını istediğimiz için ilk seçeneği seçiyoruz. Fakat örnek veritabanının kurulmasını istemezsek “install database software only” diyerek “ileri” diyoruz. 22 Şekil 3.6.Oracle kurulum desktop class Gelen ekrandan “Desktop Class” ı seçiyoruz. Ve devam ediyoruz. Şekil 3.7.Oracle kurulum şifre belirleme 23 Şekil 10’da ise “administrative password” ve “confirm password” alanları hariç diğer alanlar dolu olarak karşımıza geliyor. Oracle’ın kurulacağı dizini değiştirmek istersek üstteki kısımdan değiştirebiliriz. Değiştirmek istemezsek ise; sadece password belirlememiz yeterli. Şekil 3.8.Oracle kurulum gereksinimi kontrolü Kurulum için istenen gereksinimler (harddiskte yeterli boş alan, sistem gereksinimleri vb.) kontrol ediliyor. 24 Şekil 3.9.Oracle kurulum bilgiler Kontrol işlemi bittikten sonra kurulum sırasında vermiş olduğumuz bilgiler ( Oracle’ın hangi dizine kurulacağı, örnek veritabanına ait sistem bilgileri vb. ) karşımıza geliyor.“Bitir” diyerek yükleme aşamasına geçiyoruz. Şekil 3.10.Oracle kurulum yükleme 25 Kurulum başlıyor. Şekil 3.11.Oracle kurulum güvenlik duvarı izni Kurulum belli bir aşamaya geldiğinde güvenlik duvarından Oracle için erişime izin vermemiz isteniyor. “Allow access” diyerek devam ediyoruz. Şekil 3.12.Oracle kurulum orcl veritabanı 26 Oracle kurulumu tamamlandıktan sonra otomatik olarak “orcl” veritabanının kurulmasına geçiliyor. Şekil 3.13.Oracle kurulum orcl kurulumunun tamamlanması “orcl” veritabanının kurulumu tamamlandı. Bazı uyarılar ve “orcl” veritabanımıza ait bilgiler ( adı, kurulduğu dizin ) ekrana geliyor[6]. 27 Şekil 3.14.Oracle kurulumunun tamamlanması Kurulumun tamamlandığına dair ekranda “kapat diyerek Oracle kurulumumuzu tamamlamış oluyoruz. 3.2.2 Spatial Bir Veritabanı Oluşturma Oracle kurulumu tamamlandıktan sonra Oracle’a ait programların Başlat’taki görünümü aşağıdaki gibi olmalıdır; 28 Şekil 3.15. Başlat görünümü Spatial bir veritabanı oluşturmak için ise Şekil 18’de de görülen “Database Configuration Assistant”ı kullanıyoruz. Şekil 3.16.database configuration assistance Karşımıza gelen ilk ekrana “next” diyerek devam ediyoruz. 29 Şekil 3.17.DCA veritabanı oluşturma “Create a database” diyoruz. Şekil 3.18.DCA custom database 30 Şekil 21’de yer alan ekranda karşımıza 3 seçenek geliyor. Biz mekansal veritabanı oluşturacağımız için 2.seçenek olan “Custom Database”i seçiyoruz. Eğer normal bir veritabanı yaratmak isteseydik 1.seçeneği, datawarehouse ise de 3.seçeneği seçmemiz gerekecekti. Şekil 3.19.DCA veritabanı adı Veritabanımıza isim veriyoruz. SID ( system indetifier ) da otomatik olarak veritabanımızla aynı isimde oluyor. 31 Şekil 3.20.DCA enterprise manager Şekil 23’te veritabanımızı konfigüre etmek için Enterprise Manager mi yoksa başka bir yönetim aracı mı kullanacağımız soruluyor. “Configure Enterprise Manager” diyerek “Automatic Maintenance Tasks” sekmesine geçiyoruz. Şekil 3.21.DCA otomatik bakım 32 Şekil 24’te “enable automatic maintenance tasks” diyerek otomatik olarak bakım yapılmasına izini veriyoruz. Şekil 3.22.DCA şifre belirleme Şekil 25’te gördüğümüz ekranda karşımıza iki seçenek geliyor. Bu seçeneklerin ilkinde veritabanlarımız için önceden oluşturulmuş olan “SYS, SYSTEM, DBSNMP ve SYSMAN” kullanıcıları için ayrı ayrı şifre belirleyebiliyoruz. İkinci seçenek de ise bu kullanıcıların hepsi için tek bir şifre belirleyebiliyoruz. Biz 2.seçeneği seçerek devam ediyoruz. 33 Şekil 3.23.DCA şifre uygunluğu Gireceğimiz şifrenin en az 8 karakterli ve içinde en az bir büyük harf, bir küçük harf ve bir de sayı olması isteniyor. Fakat aksi durumdaki şifreler de kabul ediliyor. Evet diyerek devam ediyoruz. Şekil 3.24.DCA file location 34 Next diyerek devam ediyoruz. Şekil 3.25.DCA yedekleme Bu kısımda yedekleme için 2 seçenek karşımıza geliyor. “Specify flash recovery area” seçeneğinde yedekleme dizini ve yedekleme alanı boyutunu seçebiliyoruz. Eğer verilerimizin tümüyle arşivlenmesini istersek ise “Enable Archiving” seçeneğini seçiyoruz. Biz yedekleme istediğimiz için 1.seçeneği seçip dizin ve boyuta dokunmadan devam ediyoruz. 35 Şekil 3.26.DCA bileşenler Bu ekranda veritabanı türlerinin bileşenleri görüntüleniyor. Next diyerek devam ediyoruz. Şekil 3.27.DCA script 36 Custom Scripts sekmesini de “no scripts to run” olarak ayarlayarak devam ediyoruz. Şekil 3.28.DCA hafıza miktarını belirleme Bu kısımda ne kadar hafıza kullanılacağını belirliyoruz. İstersek “use automatic memory management” seçeneğini işaretleyerek hafızanın otomatik olarak belirlenmesini sağlıyoruz. İstersek de sabit bir miktarı seçiyoruz. 37 Şekil 3.29.DCA sizing Sizing sekmesini next diyerek geçiyoruz. Miktarlarda herhangi bir değişiklik yapmıyoruz. Şekil 3.30.DCA character sets 38 Character Sets sekmesi ilk karşımıza geldiğinde “use the default” seçeneği işaretli olarak geliyor. Fakat bu seçeneği seçtiğimizde, veritabanının herhangi bir kısmında kullanacağımız ( veritabanı adı, sorgular vb. ) yazılarda yabancı alfabelere ait harfleri kullanmaya çalıştığımızda hata alırız. Bu yüzden 2.seçenek olan “Use Unicode” diyerek çoklu dil desteği verilmesini sağlıyoruz. Bunu seçtiğimizde İngilizce, Türkçe vb. harfleri isimlendirmede veya sorgularda kullanabiliriz. Şekil 3.31.DCA connection mode “Dedicated Server Mode” seçeneğini seçerek devam ediyoruz. 39 Şekil 3.32.DCA database storage Database Storage ekranında veritabanı saklama ile ilgili olarak bilgilendiriliyoruz. İstersek sol tarafta yer alan seçeneklerden birini seçip ( tablespaces, datafiles, redo log groups ) inceleyebiliriz. Next diyerek devam ediyoruz. Şekil 3.33.DCA create database 40 Veritabanı oluşturacağımız için şekil 36’da karşımıza gelen ekranda “create a database” seçeneğini seçerek devam ediyoruz. Şekil 3.34.DCA create database – özet Veritabanımıza ait bilgiler görüntüleniyor. bilgisayarımıza kaydedebiliyoruz. 41 İstersek bir HTML belgesi olarak Şekil 3.35.DCA kurulum başlangıç Veritabanımız kuruluyor. Bilgisayarımızın donanım ve yazılım gücüne bağlı olarak kurulum süresi 1 saati bulabilmektedir. 42 Şekil 3.36.DCA kurulum bitiş Veritabanımız kuruldu. Fakat zaman zaman bu ekran gelmeden önce kurulumun tamamlanmasına yakın, bir hata oluşabilmektedir. 43 Şekil 3.37.DCA hata Bu hatanın bize anlatmak istediği şudur; 1) Oracle ile ilgili servis’leri kontrol edin. Başlatılmamış veya disabled durumda olan servisler’lar olabilir. Şekil 3.38.Listener durumları 44 Ekranda görüldüğü üzere Oracle ile ilgili servisleri kontrol edip şekildeki durumlara (status) getirmemiz gerekmektedir. ( Servisleri açabilmek için Başlat’ta “services.msc” yazmamız gerekmektedir. ) 2) Listener’ları düzeltmemize rağmen sorun hala devam ediyor olabilir. Bu durumda Enterprise Manager ile ilgili problem vardır. Enterprise Manager ise veritabanı ve kullanıcılarımıza ait bilgilerinbrowser’da görüntülenmesi ve bazı tanımlamaların browser’da yapılmasıdır. Şekil 3.39.Enterprise manager Hatadan sonra “OK” diyerek hatalı kurulumu tamamlıyoruz. https://localhost:1158/em adresine giderek Oracle Enterprise Manager’i açıyoruz. Karşımıza aşağıdaki gibi bir ekran geliyor. 45 Şekil 3.40.Enterprise manager giriş Bu ekranda kullanıcı adı olarak “system” , şifre olarak da veritabanı yaratırken belirttiğimiz şifreyi yazarak sisteme giriş yapıyoruz. Şekil 3.41.Enterprise manager ekranı Karşımıza gelen ekranda 3 okun renginin de kırmızı ve aşağı yönlü olması veritabanının hatalı olduğunu gösteriyor. Bu durumda Enterprise Manager’dan da user oluşturamayacağımız için Başlat’taki Oracle programları arasından “SQLPLUS”ı açıyoruz. 46 Ve kullanıcı adı ile şifre soruyor. “system” kullanıcı adı ve veritabanı oluştururken kullandığımız şifre ile giriş yapıyoruz. Amacımız; kullanıcı oluşturmak. Önce; CREATE TABLESPACE veri_tablespace DATAFILE 'D:\data\metin_data_01.dat' SIZE 500K REUSE AUTOEXTEND ON NEXT 500K MAXSIZE 500M; komutunu yazarak tablespace oluşturuyoruz. Dizini ve maksimum boyutu da belirliyoruz tabi. Daha sonra; CREATE USER kullaniciadiniz IDENTIFIED BY veritabaniolustururkenyazdiginizsifre DEFAULT TABLESPACE veri_tablespace TEMPORARY TABLESPACE temp QUOTA UNLIMITED ON veri_tablespace; komutuyla kullanıcımızı oluşturmuş oluyoruz. 47 4. ORACLE SPATIAL ÜZERİNDE MEKANSALSORGULAMA ÖRNEKLERİ 4.1. Oracle Spatial Fonksiyonları Oracle Spatial için belirlenmiş, şekiller arasındaki ilişkileri belirleyen ve çeşitli ölçümleri yapan birçok fonksiyonu vardır. Bu fonksiyonlar ise SDO_GEOMETRY ve SDO_GEORASTER tiplerinin alt tipi olarak kullanılmaktadır. Vektör veriler için SDO_GEOMETRY, raster veriler için SDO_GEORASTER tipi kullanılır. SDO_GEOMETRY yapısı; -SDO_GTYPE number -SDO_SRID number -SDO_POINT sdo_point tipi -SDO_ELEM_INFO sdo_elem_info dizisi -SDO_ORDINATES sdo_ordinate dizisi şeklindedir. SDO_GEORASTER yapısı; -RasterType sayı -SpatialExtent SDO_GEOMETRY -RasteerDataTable varchar(32) -RasterID number -Metadata XMLType şeklindedir. Çalışmalarımızda vektörel şekiller kullandığımız için biz de SDO_GEOMETRY tipine uygun bir şekilde fonksiyonları oluşturduk. Bu fonksiyonlar; SDO_GEOM.SDO_AREA Seçilen şeklin alanını ölçer. SDO_GEOM.SDO_Area(koordinat,0.005) şeklinde bir kullanımı vardır. 0.005 sayısı ölçüm sonucunun toleransını belirler. Yani 0.005 oranında sapma oluşabilir[7]. 48 SDO_GEOM.SDO_DISTANCE Seçilen iki şekil arasındaki mesafeyi ölçer. SDO_GEOM.SDO_DİSTANCE(şekil1, şekil2, 0.005) şeklinde bir kullanımı vardır. SDO_GEOM.SDO_LENGTH Seçilen şeklin uzunluğunu ölçer. SDO_GEOM.SDO_LENGTH(şekil1, 0.005) şeklinde bir kullanımı vardır. SDO_GEOM.SDO_BUFFER Seçilen şeklin etrafında tampon bir çokgen oluşturur. SDO_GEOM.SDO_BUFFER(şekil1, 0.005) SDO_GEOM.SDO_CENTROID Seçilen bir poligonun merkezini verir. SDO_GEOM.SDO_CENTROID(şekil1, 0.005) SDO_GEOM.SDO_DIFFERENCE Seçilen iki şeklin topolojik farkını başka bir şekil olarak döndürür. (Topolojik farkını çizer.) SDO_GEOM.SDO_DIFFERENCE (şekil1, şekil2, 0.005) SDO_GEOM.SDO_MBR Seçilen bir şeklin etrafından minimum sınırlayıcı (tampon) dikdörtgen döndürür. SDO_GEOM.SDO_MBR (şekil1, 0.005) SDO_GEOM.SDO_ANYINTERACT Seçilen 2 şeklin herhangi bir etkileşimde bulunup bulunmadığına bakar. SDO_GEOM.SDO_ANYINTERACT(şekil1, şekil2, ‘mask=ANYINTERACT’, 0.005); şeklinde kullanımı vardır. SDO_GEOM.SDO_CONTAINS Seçilen 2 şekilden birinin diğerini kapsayıp kapsamadığını kontrol eder. 49 SDO_GEOM.SDO_CONTAINS (şekil1, şekil2, ‘mask=CONTAINS’, 0.005); şeklinde kullanımı vardır. SDO_GEOM.SDO_COVERS Seçilen 2 şekilden birinin diğerini kaplama durumunu kontrol eder. SDO_GEOM.SDO_COVERS (şekil1, şekil2, ‘mask=COVERS’, 0.005); şeklinde bir kullanımı vardır. SDO_GEOM.SDO_EQUALS Seçilen 2 şeklin aynı/denk olup olmadığını kontrol eder. SDO_GEOM.SDO_EQUALS (şekil1, şekil2, ‘mask=EQUALS’, 0.005); şeklinde kullanımı vardır. SDO_GEOM.SDO_INSIDE Seçilen 2 şeklin birbirinin içinde olup olmadığını kontrol eder. SDO_GEOM.SDO_INSIDE (şekil1, şekil2, ‘mask=INSIDE’, 0.005); şeklinde kullanımı vardır. SDO_GEOM.SDO_ON Seçilen 2 şekilden birinin diğerinin üzerinde olup olmadığını kontrol eder. SDO_GEOM.SDO_ON (şekil1, şekil2, ‘mask=ON’, 0.005); şeklinde kullanımı vardır. SDO_GEOM.SDO_UNION Seçilen 2 şeklin birleşimini döndürür. SDO_GEOM.SDO_UNION (şekil1, şekil2, ‘mask=UNION’, 0.005); şeklinde kullanımı vardır. SDO_GEOM.SDO_OVERLAPS Seçilen 2 şeklin üst üste gelme durumunu kontrol eder. SDO_GEOM.SDO_OVERLAPS (şekil1, şekil2, ‘mask=OVERLAPS’, 0.005); şeklinde kullanımı vardır. 50 SDO_GEOM.SDO_TOUCH Seçilen 2 şeklin birbirine dokunup dokunmadığını kontrol eder. SDO_GEOM.SDO_TOUCH (şekil1, şekil2, ‘mask=TOUCH’, 0.005); şeklinde kullanımı vardır. 4.2. Gerçekleştirilen Mekansal Sorgular Verileri yine Oracle’ın bir programı olan SqlDeveloper aracılığıyla veritabanımıza aktardık. Bunun için önce aşağıda yer alan 2 şekildeki gibi bağlantı oluşturmamız gerekiyor. Şekil 4.1.Yeni bağlantı oluşturma Şekil 4.2.Yeni bağlantı bilgileri 51 Şekil 46’da yer alan bağlantı ekranında da görüldüğü üzere bir bağlantı adı belirleyip, oluşturduğumuz kullanıcı adı ve şifresini yazıp, ve son olarak da SID kısmına veritabanımızın adını yazarak giriş yapıyoruz. Şekil 4.3.Sqldeveloper tablo oluşturma Şekil 4.4.Sqldeveloper veri ekleme 52 Giriş yaptıktan sonra direkt olarak ekrana gelen “worksheet” kısmına sorgularımızı yazarak veritabanımızı şekillendirmeye başlayabiliriz. Bizim projemizde yarattığımız tablolar ve bu tablolara eklediğimiz değerler ise şu şekilde; İlk tablomuz “poligonbolge” tablosu: CREATE TABLE poligonbolge (name varchar(50), koordinat sdo_geometry); “poligonbolge” tablosuna eklediğimiz değerler ise şu şekilde; INSERT INTO poligonbolge VALUES( 'bolge1', SDO_GEOMETRY( 2003, null, null, MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1), mdsys.sdo_ordinate_array(-10,10 ,0,10, 0,0, -10,0, -10,10) ) ); INSERT INTO poligonbolge VALUES( 'bolge2', SDO_GEOMETRY( 2003, null, null, MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1), mdsys.sdo_ordinate_array(-10,0 ,0,0, 6,-5, 0,-10, -10,-10, -16,-5, -10,0) ) ); 53 INSERT INTO poligonbolge VALUES( 'bolge3', SDO_GEOMETRY( 2003, null, null, MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1), mdsys.sdo_ordinate_array(0,10 ,10,0, 0,0, 0,10) ) ); INSERT INTO poligonbolge VALUES( 'bolge4', SDO_GEOMETRY( 2003, null, null, MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1), mdsys.sdo_ordinate_array(0,0 ,10,0, 10,-10, 0,-10, 6,-5, 0,0) ) ); INSERT INTO poligonbolge VALUES( 'bolge5', SDO_GEOMETRY( 2003, null, null, MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1), mdsys.sdo_ordinate_array(0,10 ,15,10, 15,-5, 10,-5, 10,0, 0,10) ) ); 54 Komutları yazarken SDO_GEOMETRY tipinden sonra yazdığımız “2003” şeklindeki sayılar, şeklin id numarasını belirtmektedir. Her şekil için farklı bir id numarası vardır. Projemizde kullandığımız geometrik şekillerin id numaraları ise şu şekildedir: Poligon = 2003 (poligonbolge tablomuz için) Çizgi = 2002 (multilinenehir tablomuz için) Nokta = 2001 (noktasehir tablomuz için) İkinci tablomuz “multilinenehir” tablosu: CREATE TABLE multilinenehir (name varchar(50), koordinat sdo_geometry); “multilinenehir” tablosuna ait değerler ise şu şekilde; INSERT INTO multilinenehir VALUES( 'nehir1', SDO_GEOMETRY( 2002, null, null, MDSYS.SDO_ELEM_INFO_ARRAY(1,2,1), mdsys.sdo_ordinate_array(-3,5, -6,1, -8,-4, -6,1, 0,3, 3,4) ) ); INSERT INTO multilinenehir VALUES( 'nehir2', SDO_GEOMETRY( 2002, null, null, MDSYS.SDO_ELEM_INFO_ARRAY(1,2,1), mdsys.sdo_ordinate_array(11,6, 8,-1, 9,7, 8,-1, 0,-4, -1,-6) ) 55 ); Üçüncü tablomuz “noktasehir” tablosu: CREATE TABLE noktasehir (name varchar(50),isiort numeric,nufus numeric(10), koordinat sdo_geometry); “noktasehir” tablosuna ait değerler şu şekilde; INSERT INTO noktasehir VALUES( 'sehir1',9, 650000, SDO_GEOMETRY(2001, null, SDO_POINT_TYPE (-9,8,NULL), NULL, NULL) ); INSERT INTO noktasehir VALUES( 'sehir2',8, 530000, SDO_GEOMETRY(2001, null, SDO_POINT_TYPE (-6,6,NULL), NULL, NULL) ); INSERT INTO noktasehir VALUES( 'sehir3',8, 700000, SDO_GEOMETRY(2001, null, SDO_POINT_TYPE (-3,2,NULL), NULL, NULL) ); INSERT INTO noktasehir VALUES( 'sehir4',6, 450000, SDO_GEOMETRY(2001, null, SDO_POINT_TYPE (-4,5,NULL), NULL, NULL) ); INSERT INTO noktasehir VALUES( 'sehir5',8, 1600000, SDO_GEOMETRY(2001, null, 56 SDO_POINT_TYPE (-11,4,NULL), NULL, NULL) ); INSERT INTO noktasehir VALUES( 'sehir6',9, 1400000, SDO_GEOMETRY(2001, null, SDO_POINT_TYPE (-9,-9,NULL), NULL, NULL) ); INSERT INTO noktasehir VALUES( 'sehir7',9, 2200000, SDO_GEOMETRY(2001, null, SDO_POINT_TYPE (-3,-3,NULL), NULL, NULL) ); INSERT INTO noktasehir VALUES( 'sehir8',10, 820000, SDO_GEOMETRY(2001, null, SDO_POINT_TYPE (-2,-8,NULL), NULL, NULL) ); INSERT INTO noktasehir VALUES( 'sehir9',11, 930000, SDO_GEOMETRY(2001, null, SDO_POINT_TYPE (3,-6,NULL), NULL, NULL) ); INSERT INTO noktasehir VALUES( 'sehir10',12, 640000, SDO_GEOMETRY(2001, null, SDO_POINT_TYPE (-5,-5,NULL), NULL, NULL) ); INSERT INTO noktasehir VALUES( 'sehir11',9, 650000, SDO_GEOMETRY(2001, null, SDO_POINT_TYPE (3,3,NULL), NULL, NULL) ); 57 INSERT INTO noktasehir VALUES( 'sehir12',8, 530000, SDO_GEOMETRY(2001, null, SDO_POINT_TYPE (7,2,NULL), NULL, NULL) ); INSERT INTO noktasehir VALUES( 'sehir13',8, 700000, SDO_GEOMETRY(2001, null, SDO_POINT_TYPE (1,7,NULL), NULL, NULL) ); INSERT INTO noktasehir VALUES( 'sehir14',6, 450000, SDO_GEOMETRY(2001, null, SDO_POINT_TYPE (4,-9,NULL), NULL, NULL) ); INSERT INTO noktasehir VALUES( 'sehir15',8, 1600000, SDO_GEOMETRY(2001, null, SDO_POINT_TYPE (8,-7,NULL), NULL, NULL) ); INSERT INTO noktasehir VALUES( 'sehir16',9, 1400000, SDO_GEOMETRY(2001, null, SDO_POINT_TYPE (7,-4,NULL), NULL, NULL) ); INSERT INTO noktasehir VALUES( 'sehir17',9, 2200000, SDO_GEOMETRY(2001, null, SDO_POINT_TYPE (3,-1,NULL), NULL, NULL) ); INSERT INTO noktasehir VALUES( 'sehir18',10, 820000, 58 SDO_GEOMETRY(2001, null, SDO_POINT_TYPE (12,-3,NULL), NULL, NULL) ); INSERT INTO noktasehir VALUES( 'sehir19',11, 930000, SDO_GEOMETRY(2001, null, SDO_POINT_TYPE (13,0,NULL), NULL, NULL) ); INSERT INTO noktasehir VALUES( 'sehir20',12, 640000, SDO_GEOMETRY(2001, null, SDO_POINT_TYPE (14,2,NULL), NULL, NULL) ); INSERT INTO noktasehir VALUES( 'sehir21',9, 650000, SDO_GEOMETRY(2001, null, SDO_POINT_TYPE (8,8,NULL), NULL, NULL) ); INSERT INTO noktasehir VALUES( 'sehir22',8, 530000, SDO_GEOMETRY(2001, null, SDO_POINT_TYPE (11,9,NULL), NULL, NULL) ); INSERT INTO noktasehir VALUES( 'sehir23',8, 700000, SDO_GEOMETRY(2001, null, SDO_POINT_TYPE (4,9,NULL), NULL, NULL) ); 3 tabloyu ve bu tablolara ait değerleri veritabanımızda oluşturduk. Bu işlemden sonra bir de bu verilerin görüntülerini oluşturmamız gerekli. Bunun için aşağıdaki şekilde de 59 görüldüğü üzere görüntülemek istediğimiz tabloya çift tıklayarak açıyoruz ve “data” sekmesiyle içindeki değerleri görüyoruz. Şekil 4.5.MapView menüsü Bu değerlerden istediğimiz birine sağ click ile tıklayarak gelen menüden “İnvoke Map View on result set” seçeneğine tıklıyoruz. Ve sonuç: Şekil 4.6.MapView’de görüntüleme 60 MapView, SqlDeveloper içerisinde yer alan mekansal verileri görüntülemeye yarayan bir araç. Fakat bu araç çoklu gösterim konusunda yetersiz kalıyor. Peki çoklu gösterimden kastımız ne? Yukarıdaki sorgularımızda da görüldüğü gibi 3 tane tablo ekledik veritabanımıza. Bunların bir tanesi poligon (poligonbolge), bir tanesi çizgi (multilinenehir), bir tanesi de nokta (noktasehir). Yani her biri farklı geometrik şekil. MapView sadece nokta veya sadece poligonları bir arada gösterebiliyor. Veritabanındaki bütün kayıtların bir arada gösterilmesini istiyorsak GeoRaptor kullanmamız gerekiyor. GeoRaptor da SqlDeveloper üzerine bir .jar dosyası olarak eklenen ve kullanılan bir araç. http://sourceforge.net/projects/georaptor/adresinden .jar dosyasını bilgisayarımıza indiriyoruz. SqlDeveloper’da Help sekmesinden “Check for Updates”e tıklayarak GeoRaptor yükleme ekranını açıyoruz. Şekil 4.7.GeoRaptor yükleme 61 Bu ekranda “Add” diyerek GeoRaptor’u eklememiz gerekiyor. “Name” kısmına “GeoRaptor” , “Location” kısmına da http://georaptor.sourceforge.net/install.xml yazarak GeoRaptor’u eklemiş oluyoruz. İşlem tamamlandıktan sonra veritabanındaki değerlerimize geri dönüyoruz. Poligonbolge’nin data’sına giriyoruz. Sağ tıklayıp GeoRaptor -> Create and Display Query Layer diyerek bolge1’i GeoRaptor’a eklemiş oluyoruz. Şekil 4.8.Referans veriyi GeoRaptor’a ekleme Daha sonra bütün tablonun GeoRaptor’a eklenmesi için de; Şekil 4.9.Tüm tabloyu GeoRaptor’a ekleme 62 Tabloya sağ tıklayıp GeoRaptor -> Add to Map diyoruz. “Poligonbolge” tablosunu GeoRaptor’a eklemiş olduk. Bu işlemleri kalan tablolarımız için de ( önce referans olarak bir değere create and display query layer diyip, daha sonra tabloya sağ tıklayıp add to map diyoruz ) yapıyoruz. Ve bütün tabloların birleşmiş hali; Şekil 4.10.GeoRaptor’da görüntüleme Gerçekleştirdiğimiz sorgular şunlardır: 1) Bölgelerin alanlarını veren sorgu: select name, SDO_GEOM.SDO_Area(koordinat,0.005) as alan from poligonbolge; 63 Şekil 4.11.Bölgelerin alanını veren sorgu 2) Nehirlerin alanlarını veren sorgu: select name, SDO_GEOM.SDO_Area(koordinat,0.005) as alan from multilinenehir; *Nehirler, çizgi şeklinde oldukları için alanları sıfır olarak döndürüldü. Şekil 4.12.Nehirlerin alanını veren sorgu 64 3) Nehirlerin uzunluklarını veren sorgu: select name, SDO_GEOM.SDO_Length(koordinat,0.005) as alan from multilinenehir; Şekil 4.13.Nehirlerin uzunluklarını veren sorgu 4) Bölgelerin uzunluklarını veren sorgu: (çevreleri hesaplanıyor) select name, SDO_GEOM.SDO_Length(koordinat,0.005) as alan from poligonbolge; 65 Şekil 4.14.Bölgelerin uzunluklarını veren sorgu 5) Şehir 7 ile diğer şehirler arasındaki mesafeyi hesaplayan sorgu: select b.name, sdo_geom.sdo_distance(a.koordinat,b.koordinat,0.005) uzaklik from noktasehir a,noktasehir b where a.name='sehir7' order by uzaklik DESC; 66 Şekil 4.15.Şehir7 ile diğer şehirler arasındaki mesafeyi hesaplayan sorgu 6) Bölgeler ile şehirlerin birbirini içerme durumlarını ve şehirlerin ortalama sıcaklıkları ile nüfuslarını veren sorgu: select s.name, SDO_GEOM.RELATE(b.koordinat, 'contains', s.koordinat, 0.005) RELATIONSHIP from noktasehir s, poligonbolge b; *Bu sorguda ekrana getirilmesi gereken nüfus ve ortalama sıcaklık değerleri, SUM ve AVG fonksiyonlarını SqlDeveloper’da çalıştıramadığımızdan dolayı sadece içerme durumları ekrana getirilmiştir. *23 şehir ve 5 bölge olduğu için toplamda 115 tane içerme durumu döndürülmüştür. 67 Şekil 4.16. Bölgeler ile şehirlerin birbirini içerme durumlarını ve şehirlerin ortalama sıcaklıkları ile nüfuslarını veren sorgu 7) Nehir1’in geçtiği bölgeleri veren sorgu: select b.name, SDO_GEOM.RELATE(n.koordinat, 'anyinteract', b.koordinat, 0.005) relationship from poligonbolge b,multilinenehir n where n.name='nehir1'; 68 Şekil 4.17. Nehir1’in geçtiği bölgeleri veren sorgu 69 5. SONUÇLAR VE ÖNERİLER Projemizde coğrafi-geometrik verilerin veritabanına nasıl aktarılacağı, gelişmiş düzeydeki coğrafi bilgisayar programlarının temelde ne tip prosedürlerle başlayıp karmaşık seviyelere geldikleri incelenmiştir. Sonuç olarak coğrafi işlem yapan programlarının hepsinin temelinde verileri depolamak için mekansal bir veritabanı, ve bu veritabanında sorgulamalar yapabilmek için mekansal veriler olması gerekmektedir. Bu komutlara bağlı olarak karmaşık seviyede çizimler yapılabilmekte ve sorgulamalar yapılabilmektedir. Bizim incelemiş olduğumuz kısım ise; karmaşıklıktan ziyade temelde hangi sorguların ve ne tür çizimlerin basit seviyede yapılabileceğidir. Bu bilgiye dayanarak sadece nokta, çizgi ve poligon tipindeki geometriler için sorgular oluşturulup, çizimler gerçeklenmiştir. Oracle’ın sistemimize kurmuş olduğu programların hiyerarşik yapısına bakıldığında mekansal işlemler yapmak için sqldeveloper aracının kullanılması gerektiği ilk bakışta anlaşılmayabilir. Bu durumdan dolayı, mekansal işlemleri sqldeveloper’da eklentilerle yapmak yerine direkt olarak mekansal işlemleri yapabilen ayrı bir program yazılabilir/oluşturulabilir. 70 KAYNAKLAR [1] http://www.coastlearn.org/tr/gis/format.htm [2] www.kirklareli.edu.tr/download//by-files/57570443.html [3] http://tr.wikipedia.org/wiki/Co%C4%9Frafi_bilgi_sistemi [4] http://www.gunduz.org/seminer/GIS/AKK_GIS_Uygulamalari-Nicolai-Tufar22052005.pdf [5] http://tr.wikipedia.org/wiki/Oracle [6] Oracle Database 11g R2 , Talip Hakan ÖZTÜRK, Pusula Yayıncılık, 2012 [7] http://docs.oracle.com/cd/B19306_01/appdev.102/b14255/sdo_operat.htm 71 ÖZGEÇMİŞ Tolga Kaplan, 6 Nisan 1991 yılında Sivas’ta doğdu. İlköğretimi ve liseyi Sivas’ın Gürün ilçesinde tamamladıktan sonra 2010 yılında YGS ve LYS sınavlarına girerek Kocaeli Üniversitesi Bilgisayar Mühendisliği bölümüne girmeye hak kazandı. Halen bu bölümde 4.sınıf öğrencisi olarak öğrenim hayatına devam etmektedir. Veritabanı Sistemleri konusunda araştırmaya ve çalışmalar yapmaya devam etmektedir. E-mail : [email protected] Metin Yılmaz, 26 Nisan 1992 yılında İstanbul’da doğdu. İlköğretimini Çağrıbey İlköğretim Okulu’nda, liseyi ise Kadıköy Kenan Evren Anadolu Lisesi’nde tamamladı. 2010 yılında girdiği YGS ve LYS sınavları sonucunda Kocaeli Üniversitesi Bilgisayar Mühendisliği bölümünde okumaya hak kazandı. Halen aynı bölümde 4.sınıf öğrencisi olarak öğrenim hayatına devam etmektedir. E-mail : [email protected] 72