ArcGIS Subtype Kullanılan FeatureClass ile Domain Kullanımı

7 Oca

ArcGIS platformunda oluşturulan coğrafi veri tabanları (geodatabase) üzerinde attribute domain’ler oluşturarak veri tabanındaki bütün FeatureClass’lar üzerinde kullanabilirsiniz. Attribute domain’ler FeatureClass üzerinde tanımlanan filed veri tipi ile uyumlu olmalıdır. Çünkü her attribute domain bir veri tipine sahiptir. Bu veri tipleri:

  • Short
  • Long
  • Float
  • Double
  • Text

Örnek bir attribute domain aşağıdaki gibi tanımlanabilir.

Burada “su_tipi” adında bir attribute domain oluşturulmuştur. Aldığı değerler ise code ve description alanlarına doldurulmuştur.

Hazırlanan attribute domain, bir feature class içerisindeki field üzerine aşağıdaki şekilde eklenip defalut değeri seçilebilir.

Artık siz içmesuyu ana hat çizimi yaparken su tipleri otomatik olarak “Arıtılmış” değerlerini almış olacaktır.

Dikkat

Ancak, eğer tanımladığınız feature class(şekilde içmesuyu ana hattı) üzerinde oluşturduğunuz bir subtype varsa attribute domain değerleri otomatik olarak gelmeyebilir. Bu durumda Arcgis Pro üzerinde attribute domain neden çalışmıyor diye düşünebilirsiniz. Ancak Arcgis Pro üzerinde subtype oluşturulduğunda her type için farklı attribute domain özelliği tanımlayabilme yeteneği getirilmiştir. Bu nedenle siz her bir subtype için değerleri yeniden belirlemek durumunda kalabilirsiniz. Eğer tanımlamazsanız çizim yaparken attribute değerleriniz null olarak gelebilir.

Yukarıdaki içmesuyu ana hat feature class üzerinde “*hat_tipi” field biraz daha koyu renkle ve “*” ile işaretlenmiştir. Bunun nedeni, hat_tipi alanında bir subtype tanımlanmış olmasıdır. Bu durumda her bir subtype üzerinde attribute domain tanımlamalarını tekrar gözden geçirmek durumunda kaldım. Eğer attribute domain tanımlamanızı, subtype oluşturduktan sonra yaptıysanız bu ayarları mutlaka kontrol etmelisiniz.

Subtype ekranında her bir su_tipi alanının belirlenmiş olduğunuzda artık bir sorun ile karşılaşmazsınız.

Opnelayers Contribution (Katkı Sunma)

27 May

Opanleyers, harita uygulamaları geliştirmek amacıyla geliştirilen açık kaynak kodlu bir Javascript kütüphanesidir. Uygulama kendini şu şekilde ifade eder:

A high-performance, feature-packed library for all your mapping needs.

yani

Tüm harita ihtiyaçlarınız için yüksek performanslı, özelliklerle dolu bir kütüphane.

Açık kaynak kütüphane olduğu için tüm geliştiricilerin sunabileceği katkılara açıktır. Openlayers kütüphanesine katkıda bulunabilmek için aşağıdaki adımları izleyebilirsiniz.

Geliştirme ortamının hazırlanması

Geliştirme ortamı için öncelikle kütüphanenin fork edilmesi gerekmektedir. Github ortamında bir havuzun (repository) fork işlemi, o kodun kendi Github havuzunuza bir kopyasının alınmasıdır. Şu anda Openlayers 6.3.1 sürümü yayınlanmış durumdadır.

Gerekli Geliştirme Araçları

Bilgisayarınızda bulunması gereken minimum ihtiyaç listesi:

  • Git
  • Node.js (minimum 8 ve üstü)

Kodun indirilmesi

Fork işleminin ardından kendi Github hesabınızda Openlayers kütüphanseisnin bir kopyası oluşturulur. Bu kopyayı kendi bilgisayarınıza clone veya downlad şeklinde indirmeniz gerekmektedir.

Uygulamanın çlışabilmesi için, kod indirme işleminden sonra kod dizininde bir terminal açarak node bağımlılıklarını yüklemelisiniz. Bunu yapan komut:

$ npm install

Örnek uygulamanın çalıştırılması

Kodda bulunan örnek uygulamalarının çalıştırılıp internet tarayıcısında görüntülenebilmesi için gerekli komut:

$ npm run serve-examples

serve-examples” script’i, package.json içerisinde tanımlanmıştır.

Testlerin çalıştırılması

Openlayers uygulaması test driven olarak geliştirilmiştir. Uygulamanın çalışabilir olması için tüm testlerin geçmiş olması gerekmektedir. Katkı sunduğunuz kod birimlerinin testlerinin yapılmış ve geçmiş olması gerekmektedir.

Testler bir kez çalıştırılması için gerekli komut:

$ npm test

Testleri geliştirme süreci boyunca sürekli çalıştırmak için gerekli komut:

$ npm run karma

Örnek uygulamalar

Openlayers örnek uygulamaları “examples” dizininde bulunmaktadır. Eklemek istediğiniz özelliklere ait örnek çalışma dosyalarını(html, js, css) “examples” dizininde oluşturabilirsiniz.

Pull Request

Openlayers katkı alma talebini pull requests (çekme isteği) ile gerçekleştirir. Pull request göndermeden önce kodun, aşağıdaki çekme isteği yönergesine uygun olduğundan emin olmalısınız.

Bir pull request yapmadan önce, neye katkıda bulunmak istediğinizi açıklayan bir issue oluşturmalısınız. Bu sayede yaptığınız pull request, fark edilir ve uygun olmayan bir şeye katkıda bulunmanız sağlanır. Geliştirici olarak açtığınız issue uygun görülürse, openlayers yetkilileri tarafından ilgili issue, pull request accepted şeklinde etiketlenir. Bu etiketleme işleminden sonra artık pull request gönderebilirsiniz.

Pull request talebi:

  • OpenLayers’ın kodlama stiline uygun olmalıdır.
  • Sürekli Entegrasyon sistemi(Continuous Integration system) tarafından otomatik olarak yürütülen entegrasyon testlerini geçmelidir.
  • Her pull request için tek bir sorun üzerinde çalışın.
  • İşlem geçmişi(commit history), kodda yapılan değişiklikler açıklar. Bu nedenle, binlerce satırı değiştirerek bunu tek bir commit ile açıklamak yerine, küçük, mantıksal ve anlaşılabilir işlemlere commit’ler uygulayın.
  • Kısa ve öz commit mesajları ekleyin.
  • Kodunuz otomatik olarak birleştirilebilir olmalıdır. Bazen master’da yapılan diğer değişiklikler, pull request (çekme isteğinizin) otomatik olarak birleştirilemeyeceği anlamına gelebilir.

Kaynak: https://github.com/openlayers/openlayers/blob/master/CONTRIBUTING.md

Datum Nedir?

21 May

Datumlar, coğrafi koordinat sistemlerin oluşturulabilmesi için gerekli olan referans sistemleridir.

Enlem ve boylamlar, belirli bir yeri dünya yüzeyinde ifade etmek için kullanılırlar. Enlem ve boylamların daima datum cinsinden belirtildiğini unutmamak gerekir. Mevcut konumunuzun enlemi ve boylamı, farklı referans noktaları için farklıdır. Yani datum değiştiğinde coğrafi koordinat sistemi de değişeceğinden dolayı koordinat değerleri de değişir.

Örnek datum’lar:

  • North American Datum of 1927 (NAD 1927 or NAD27)
  • North American Datum of 1983 (NAD 1983 or NAD83)
  • World Geodetic System of 1984 (WGS 1984)

Bu iki datum’a ait bir kontrol noktasının (Redlands, California) derece/dakika/saniye (DMS) cinsinden koordinatlarını ele alalım.

North American Datum of 1983 (NAD 1983 or NAD83):

34 01 43.77884       -117 12 57.75961

 North American Datum of 1927 (NAD 1927 or NAD27):

34 01 43.72995        -117 12 54.61539

Bu iki datum arasında kontrol noktası koordinatlarının boylam değeri yaklaşık 3 saniye farklılık gösterirken, enlem değeri yaklaşık 0.05 saniye farklılık göstermektedir.

NAD 1983 ve WGS 84 çoğu uygulama için aynıdır. Kontrol noktasının WGS84 datumu için değerleri şu şekildedir:

34 01 43.778837       -117 12 57.75961

Jodezik Datumlar (Geocentric datums)

Son 15 yılda, uydu verileri, haritacılara, dünyadaki kütle merkezi ile koordinatları ilişkilendiren ve dünyaya en uygun küresel küreyi tanımlamaları için yeni ölçümler sağladı. Dünya merkezli bir datum, dünyanın kütle merkezini başlangıç noktası olarak kullanır. En son geliştirilen ve yaygın olarak kullanılan datum WGS 1984’tür. Dünya çapında konum ölçümü için bir çerçeve görevi görür.

Yerel Datumlar (Local Datums)

Yerel datum kendi refereans aldığı küremsi şeklini (spheroid), belirli bir bölgedeki dünya yüzeyine tam olarak uyacak şekilde hizalar. Küremsi referans üzerindeki bir nokta, yer yüzündeki bir konum ile eşleştirilir. Bu nokta, referans noktasının başlangıç noktası olarak bilinir. Başlangıç noktasının koordinatları sabittir ve diğer tüm noktalar bundan hesaplanır.

Yerel datum’a ait bir koordinat sisteminin orijini, dünyanın merkezinde değildir. Ancak yerel bir datum küresinin merkezi, dünyanın merkezinden dengelenir. NAD 1927 and the European Datum of 1950 (ED 1950) yerel datum’lardır. NAD 1927, Kuzey Amerika’ya oldukça iyi uyacak şekilde tasarlanmıştır. ED 1950 ise Avrupa’da kullanılmak üzere tasarlanmıştır. Yerel bir datum, yer yüzündeki belirli bir alana çok yakın hizalandığı için, tasarlandığı alan dışında kullanımı uygun değildir.

Sonuç

Datum’lar coğrafi koordinat sistemlerinin oluşturulabilmesi için gereklidir. Harita dünyasında kullanılan çok sayıda datum vardır. Datum’lar değiştikçe koordinatlar da değişir.

Kaynaklar:

  • https://desktop.arcgis.com/en/arcmap/latest/map/projections/datums.htm
  • https://www.maptoaster.com/maptoaster-topo-nz/articles/projection/datum-projection.html

Coğrafi ve Projeksiyon Koordinat Sistemleri

16 Mar

Coğrafi Koordinat Sistemleri

Bir coğrafi koordinat sistemi, (CKS) yeryüzündeki konumları tanımlamak için üç boyutlu küresel bir yüzey kullanır. CKS’ne genellikle datum şeklinde yanlış adlandırılır. Datum, CKS’nin yalnızca bir parçasıdır. Çünkü bir CKS, açısal bir ölçü birimi, bir ana meridyen ve bir datum içerir.

CKS’de bir nokta, boylam ve enlem değerleri ile belirtilir. Boylam ve enlem, dünyanın merkezinden dünyanın yüzeyinde bir noktaya kadar ölçülen açılardır. Bu açılar genellikle derece cinsinden ölçülür. Aşağıdaki şekil buna bir örnektir.

Küresel sistemde, yatay çizgiler veya doğu-batı çizgileri eşit aralıklı enlem veya paralel çizgilerdir. Dikey çizgiler veya kuzey-güney hatları eşit boylam çizgileri veya meridyenlerdir. Bu çizgilerin kesişimi dünyayı kaplar ve retükül adı verilen ızgaralı bir ağ oluşturur.

Sıfır enlem çizgisine ekvator, sıfır boylam çizgisine ana meridyen denir. Coğrafi koordinat sistemlerinin çoğunda, ana meridyen İngiltere’nin Greenwich kentinden geçen boylamdır. Diğer ülkeler ise Bern, Bogota ve Paris’ten geçen boylam çizgilerini ana meridyen olarak kullanırlar. CKS’de (0,0) yani orijin, ana meridyen ve ekvatorun kesiştiği nokta olarak tanımlanır.

CKS’de enlem ve boylam değerleri geleneksel olarak ondalık derece veya derece, dakika ve saniye (DMS) olarak ölçülür. Enlem değerleri ekvatora göre ölçülür ve Güney Kutbunda -90 ° ile Kuzey Kutbunda + 90 ° arasında değişir. Boylam değerleri, ana meridyene göre ölçülür. Batı yönünde seyahat ederken -180 ° ile doğu yönünde seyahat ederken 180 ° arasındadır.

Boylam değerlerini X ve enlem değerlerini Y ile eşitlemek yararlı olabilir. Coğrafi koordinat sisteminde tanımlanan veriler bir derece doğrusal bir ölçü birimi gibi görüntülenir. Bu yöntem temelde Plate Carrée projeksiyonu ile aynıdır.

Enlemlerin kutuplara doğru gittikçe boyları küçülür ve kutuplarda sıfır olur.  Enlem ve boylam derecelerinin standart bir uzunluğu olmadığından, mesafeleri veya alanları doğru bir şekilde ölçemez veya verileri düz bir haritada veya bilgisayar ekranında kolayca görüntüleyemezsiniz.

Projeksiyon Koordinat Sistemleri

Projeksiyon kelimesi yansıtma anlamına gelmektedir. Projeksiyon koordinat sistemi düz, iki boyutlu bir yüzey üzerinde tanımlanır. Coğrafi bir koordinat sisteminden farklı olarak, projeksiyon koordinat sisteminin sabit uzunlukları, açıları ve iki boyuttaki alanları vardır. Bir projeksiyon koordinat sistemi, her zaman bir küre veya küreye dayanan bir coğrafi koordinat sistemini temel alır. Yani küresel yer yüzünün, düz bir zemine yansıtılmış halidir.

Bir projeksiyon koordinat sisteminde, konumlar bir ızgara üzerinde x, y koordinatları ile belirlenir ve orijin merkezde bulunur. Her konumun, bu merkezi konuma referans veren iki değeri vardır. Biri yatay konumunu diğeri dikey konumunu belirtir. Bu iki değere x ve y koordinatı denir. Başlangıçtaki koordinatlar x = 0 ve y = 0’dır.

Eşit aralıklı yatay ve dikey çizgilerin oluşturduğu ızgaralı yapıda, merkezdeki yatay çizgiye x ekseni, orta dikey çizgiye y ekseni denir. Birimler tutarlıdır ve tüm x ve y aralıkları arasında eşit aralıklıdır. Başlangıç noktasının üzerindeki yatay çizgiler ve başlangıç noktasının sağındaki dikey çizgiler pozitif değerlere sahiptir; aşağıdaki veya soldaki negatif değerlere sahiptir. Dört çeyrek daire, pozitif ve negatif X ve Y koordinatlarının dört olası kombinasyonunu temsil eder.

Sonuç

Projeksiyon ve Coğrafi koordinat sistemleri birbirlerinin dönüşümüdür. Coğrafi koordinat sistemi küresel yer yüzünü temsil ederken, projeksiyon koordinat sistemi, küresel yapının düz bir kağıt üzerine yansıtılmış halidir.

Kaynaklar

  • http://resources.arcgis.com/en/help/main/10.1/index.html#//003r00000006000000
  • https://blogs.esri.com/esri/arcgis/2010/08/12/wgs84-vs-nad83/
  • http://resources.arcgis.com/en/help/main/10.1/index.html#/What_are_projected_coordinate_systems/003r0000000p000000/
  • https://communityhub.esriuk.com/geoxchange/2012/3/26/coordinate-systems-and-projections-for-beginners.html

Postgis geçersiz geometriler ve Arcgis Drawing Error hatası

11 Oca

PostgreSQL veritabanı ile konumsal(spatial) verilerin yönetilebilmesini sağlayan Postgis eklentisi, geometrik nesneler üzerinde işlemler yapılabilmesini sağlayan bir çok hazır fonksiyon sunar. Bu fonksiyonların tam listesine buradan ulaşabilmek mümkündür.

Bu yazıya konu olan fonksiyon, oluşturulan geometrinin geçerli olup olmadığını bulmaya yarayan St_IsValid fonksiyonu olacaktır. Eğer geometri geçersiz ise PostgreSQL bize geometrinin neden geçersiz olduğuna dair bir de mesaj bildirimi sunacaktır. Geometrilerin geçerliliği ve basitliği konusunda OGC tarafından tanımlanan bilgilere buradan ulaşabilirsiniz.

OGC tarafından basit olarak tanımlanan geometri tipleri, kendini kesen veya kendine teğet olan anormal geometrik noktalara sahip olmayan geometrik şekillerdir.

Örneğin LINESTRING türünde basit ve geçerli bir geometri;

LINESTRING(0 0, 1 1)

Örneğin LINESTRING türünde basit olmayan ama geçerli bir geometri;

LINESTRING(0 0, 1 1, 0 0)

Bu geoemtrinin basit sınıfa girmemesinin sebebi kendini kesen bir noktaya (0 0) sahip olmasıdır.

Ancak öyle durumlar vardır ki, seçilen geometri geçersizdir. Örneğin;

LINESTRING(0 0)

Bu LINESTRING tipindeki geometri tek bir noktadan meydana gelmiştir. Oysa ki LINESTRING tipindeki geometriler en az iki noktadan meydana gelmek zorundadır.

Geçersiz bir geometriyi veri tabanında sorgulamak istediğimizde aşağıdaki gibi bir sonuç alınacaktır.

Geçerli bir geometri sorgusu için ise olumlu bir sonuç alınacaktır.

NOT:

ArcGIS desktop uygulamalarından ArcMap ile çalışırken, geçersiz geometri içeren tablolar görüntülenmek istendiğinde, uygulama “Arcgis Drawing Error” başlıklı bir uyarı mesajı vermektedir. Arcgis geçersiz geoemtriyi çizdiremediği için bu mesajı vermektedir.

Bu hatayı ortadan kaldırabilmek için geçersiz geometrileri SQL query yardımıyla seçerek sistemden silmek gerekmektedir.

Openlayers vector layer içerisinde feature araması

8 Tem

Opanlayers 3 kütüphanesinde vektör verilerin gösterilebilmesi amacıyla ol.layer.Vector nesneleri kullanılmaktadır. Bu nesneler içerisinde property olarak  bulunan ve veri kaynağını işaret eden ol.source.Vector nesneleri, vektörlerin nereden ve nasıl alındığını temsil etmektedir. En basit şekliyle bir vektör gösterim temsili şu şekildedir.

var vectorLayer = new ol.layer.Vector({
    source: new ol.source.Vector({
       ulr:'data/file.geojson'
    })
});

Vektör katmanı otomatik olarak verileri kaynak nesnesi aracılığı ile kaynaktan yükleyebilmektedir. Yuakrıdaki örnekte hedef veriler bir *.geojson dosyasında bulunmaktadır.

Başka bir kaynaktan elde edilen bir geometrik verinin katman içerisinde bulunup bulunmadığı bilgisi ya da arama metodu şu anda Openlayers kütüphanesinde bulunmamaktadır. Örneğin eczanelerin konumlarının (Lon, Lat) şeklinde bulunduğu bir katman olsun. Başka bir kaynaktan gelen tek bir noktanın (Lon,Lat) bu katman içerisinde bulunup bulunmadığını araştırmak istiyor olalım. Bu durumda ilk kullanılacak yöntemlerden biri geometrik verilerin WKT biçimlerini karşılaştırması olabilir. Bir noktanın WKT biçimi şu şekildedir:

     POINT(-71.064544 42.28787)

Bir katman içerisinde bir geojson nesnesinin arandığını varsayalım. Bu işlemi gerçekleştiren fonksiyonu şu şekilde hazırlayabiliriz.

var isGeojsonExistInLayer = function (layer, geojson) {
    var isExist = undefined;

    var feature = (new ol.format.GeoJSON()).readFeature(geojson);

    var formatWKT = new ol.format.WKT();
    var wktNew = formatWKT.writeGeometry(feature.getGeometry());

    if(angular.isArray(layer.getSource().getFeatures())){
        angular.forEach(layer.getSource().getFeatures(), function (item) {
            var wktExisting = formatWKT.writeGeometry(item.getGeometry());

            if (wktExisting === wktNew) {
                isExist = item;
            }
        });
    }

    return isExist;
};

Bu fonksiyonda kullanılan Foreach döngüsü angularjs kütüphanesine aittir. Uygulama kodları Openlayers v4.0.1 kütüphanesi kullanılarak hazırlanmıştır.

Openlayers 3 Harita Görünüm Özellikleri

7 Tem

Openlayers3 uygulamalarında, harita görünümü ile ilgili özellikler ol.View nesnesi ile belirlenir. Bu yazıda ol.View ile ilgili birkaç ipucundan bahsedilmiştir.

Bir haritanın belirli iki zoom seviyesinden dışarı çıkmaması için;

   map.setView(
         new ol.View({
             minZoom:1, 
             maxZoom:10
         })
   );

Bir haritanın belirli iki resolution seviyesinden dışarı çıkmaması için;

   map.setView(
          new ol.View({
               minResolution:1, 
               maxResolution:190
         })
   );

Eğer bir katmanın belirli bir çözünürlük aralığı dışında görünmesini istiyorsanız görünüm özelliklerinin katman üzerinde belirlenmesi gerekmektedir.

    var layer = new ol.layer.Tile({
           minResolution:4, 
           maxResolution:70
    });

Bu şekilde atarlanan katmanlarda zoom seviyeniz 3 olduğunda katman görünmez hale gelir. Yani k atmandaki minResolution ve maxResolution özellikleri katmanın visible özelliğini değiştirir.

Bu yazıda bahsedilen özellikler Openlayers V.4.0.1 üzerinde denenmiştir.

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.

.Net Framework Spatial Data Desteği

22 Ağu

System.Data altında bulunan sınıflar(Class) sayesinde farklı veri kaynaklarına erişmek ve onlar üzerinde işlemler yapmak mümkündür.  Örneğin ADO.NET mimarisinde kullanılan SQL Server, Oracle, ODBC ve OleDB gibi veri sağlayıcılar bu namespace altında bulunurlar.

.Net Framework 4.5 versiyonundan önce mekansal verilere düz SQL sorguları ile veya veritabanı üzerine kaydedilen stored procedure’ler aracılığı ile erişilebilmekteydi. Ancak .Net 4.5 versiyonundan sonra System.Data  kütüphanesine eklenen System.Data.Spatial alanı ile artık mekansal verilere erişim ve onlar üzerinde yapılacak işlemler DbGeography ve DbGeometry nesneleri ile gerçekleştirmek mümkün hale gelmiştir.

DbGeography

DbGeography sınıfı, verilerin jeodezik(yer yüzeyindeki)  koordinat sisteminde temsil edilmesini sağlar. Yani belirli bir koordinat sistemine göre nesnelerin yeryüzündeki konumu ile ilgilenir. Örneğin bir noktanın yeryüzünde nereye karşılık geldiği DbGeography nesnesi ile temsil edilebilir.

DbGeometry

DbGeometry sınıfı, nesnelerin geometrik şekillerini tanımlayan nesneler için bir taban oluşturur. DbGeometry nesnelerin konumu ile ilgilenmez, sadece şekilleri ile ilgilenir. Nesnelerin geometrik şekilleri Point, Polygon, LineString v.b. olabilmektedir. Örneğin bir yolun şeklinin LineString olması DbGeometry nesnesi ile temsil edilir. Yolun nerede konumlandığı ise DbGeography nesnesi ile temsil edilir.

Geometry ve Geography kavramlarının ayrımı sadece .Net platformuna özgü bir mesele değildir. Bütün platformlarda bu şekilde organize olmuştur. Bu organizasyon yazılım platformundan ziyade Coğrafi Bilgi Sistemleri ile alakalı bir durumdur.

DbGeometry ve DbGeography kavramlarını bir örnek üzerinden inceleyerek devam edelim. Open Geospatial Consortium (OGC) standartlarında bir geometrik şeklin temsili Well Known Text (WKT) adında bir işaretleme dili ile belirlenmiştir. Örneğin bir noktanın WKT gösterimi şu şekildedir:

POINT (12.321876 24.981276)

Örneğin Gebze’de seçilen bir noktanın Pendik ve İzmit’te seçilen noktalara göre uzaklıklarını karşılaştıralım.


[Test]
public void ClosestPoint_WithThreePoints()
{
    var gebze = DbGeometry.FromText("POINT(40.803099 29.405076)");
    var pendik = DbGeometry.FromText("POINT(40.877359 29.254845)");
    var izmit = DbGeometry.FromText("POINT(40.764946 29.950905)");

    var gebze_pendik = gebze.Distance(pendik);
    var gebze_izmit = gebze.Distance(izmit);

    Assert.True(gebze_izmit > gebze_pendik);
}

gebzepoint

Burada gebze.Distance(pendik) metodunun yaptığı iş aslında Pisagor‘un iki nokta arasındaki uzaklık hesabıdır. Yani düzlemdeki iki noktanın bir birine olan uzaklığının hesaplanması işlemi gerçekleştirilmekte ve sonuç derece cinsinden bir değer olmaktadır.

Geometrik şekilleri yer yüzündeki konumu ile temsil etmek için DbGeography sınıfı kullanılır.

[Test] 
public void ClosestLocation_WithThreePoints() 
{ 
    var gebze = DbGeography.FromText("POINT(40.803099 29.405076)", 4326);
    var pendik = DbGeography.FromText("POINT(40.877359 29.254845)", 4326); 
    var izmit = DbGeography.FromText("POINT(40.764946 29.950905)", 4326);

    var gebze_pendik = gebze.Distance(pendik);
    var gebze_izmit = gebze.Distance(izmit);

    Assert.True(gebze_izmit > gebze_pendik);
}

gebzepoint
Sonuç olarak metre cinsinden uzaklıklar elde edilir. Gebze’de seçilen nokta ile İzmit’te seçilen nokta arasındaki uzaklık yaklaşık 6km şeklinde hesaplanmıştır.

DbGeography sınıfında geometrik şekil tanımlama işlemi DbGeometry ile aynıdır. Ancak ek parametre olarak koordinat sistemi kodu (coordinateSystemId) girilebilir. Bu kodlar European Petroleum Survey Group(EPSG) tarafından koordinat sistemlerine atanmıştır. Bilinen tüm koordinat sistemlerine karşılık bir tamsayı vardır. Bu konu ile ilgili detaylara Spatial Reference System başlıklı yazıdan ulaşabilirsiniz.

 

Google Earth Pro Artık Ücretsiz

31 May

Google harita uygulaması Google Earth Pro‘yu artık ücretsiz bir şeklide biz kullanıcılara sunmaya başladı. Google Earth Pro yaklaşık $400 gibi bir ücret ile sunulmaktaydı. Resmi sitesinde yayınlanan haberde “now free” şeklinde duyurulmuş durumda.

Adsız

Program ile CBS (Coğrafi Bilgi Sistemleri) ve Harita adına ihtiyaç duyulan dosya türlerinin hemen hepsi açılabiliyor. Esri (Shape), MapInfo(tab), MicroStation(dng) gibi programlar tarafından üretilen vektör verileri görüntüleyebilmek artık çok kolaylaşmış gibi görünüyor.

Adsız2

Yaklaşık 10.000 vektör veri bulunan dosyayı açtığımda hiç sıkıntı yapmadan görüntüleyebildi. Bu açıdan performans sorunu da yok gibi görünüyor. Vektör verilerin üç boyutlu şekilde şehir planı ve arazi modeline uygun bir şekilde görüntülenebilmesi de ayrı bir güzellik.

Adsız4

Google Earth Pro’yu buradan indirebilirsiniz. Kullanıcı adı olarak email adresinizi, şifre olarak GEPFREE girdiğinizde programı ücretsiz olarak kullanmaya başlayabilirsiniz.