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

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.