RxJS Operatorler

29 Haz

RxJS API’nin önemli bir aktörü de Operatörlerdir. Operatörler, gözlemlenebilir nesneler için yardımcı işlemler olarak düşünülebilir. Her bir yardımcı işlem fonksiyonel programlama yöntemine göre fonksiyonlar halinde planlanmıştır. RxJS’de Operatörler 8 alt başlık halinde gruplandırılmıştır.

Bu başlıklar altında onlarca operatör bulunmaktadır. Buradan tüm operatörlere erişebilmek mümkündür. Bu yazıda popüler olanlardan bir kaçını aşağıdaki gibi kullanılmaktadır.

from()

Bir Observable nesne içerisine  array, promise veya iterable değerler eklemek için kullanılır.

concat()

Birden fazla Observable nesnesini bir dizi elemanı gibi sıraya dizer ve sırayla çalıştırır. Biri bitmeden diğerine geçmez. Bunu, biri bitmeden diğeri başlayamayan işlem sıralaması olarak düşünebiliriz.

Bu işlemin çıktısı aşağıdaki gibi olacaktır.

1, 2, 3, 4, 5, 6, 7, 8, 9

merge()

Concat işleminin benzeri olan bu operatörde, birden fazla Observable nesnesini bir dizi elemanı gibi sıraya dizer ancak işlemlerin sırayla yapılması beklenmez.

Bu işlemin çıktısı aşağıdaki gibi olacaktır.

 4, 5, 6, 7, 8, 9, 1, 2, 3

map()

Gözlenen verilerde değişiklik yapmak için kullanılabilir.

Bu işlemin çıktısı aşağıdaki gibi olacaktır.

 1, 4, 9

ajax()

Uzak sunucudan bir Ajax talebi yapmak için kullanılır.

Bu işlemin çıktısı sunucudan gelen JSON response olacaktır.

Sonuç

RxJS kütüphanesinde bulunan Operatorler konusu örnekler ile desteklenerek açıklanmıştır.

RxJS Subjects

28 Haz

RxJS’de Subjects gözlemlenebilir nesnenin (Observable) özel bir türüdür. Bunu, insanlarla dolu bir odadaki mikrofonla konuşan tek bir konuşmacı olarak düşünebilirsiniz. Burada:

  • Konuşmacının mesajları Subject,
  • Dinleyiciler Observer olarak düşünülebilir.

Konuşma esnasında mesajlar aynı anda birçok insana ulaşır. Bu olaya multicasting yani birden çok noktaya yayın yapmak denir. Dört farklı türde Subject vardır.

  1. Subject
  2. AsyncSubject
  3. BehaviorSubject
  4. ReplaySubject

Bu kavramları salondaki bir konuşmacının durumunu anlatan örnekler yaparak açıklayabiliriz.

Subject

Başlangıç değeri almaz ve tekrarlama davranışı göstermez.

Bu kod çalıştığında konsola iki defa, “merhaba sayın dinleyiciler.” mesajı yazılır.  Çünkü iki dinleyici bulunmaktadır. Salondaki bir konuşmacının her aklına geleni söylemesini buna örnek olarak verebiliriz.

AsyncSubject

İşlem tamamlandığında gözlemcilere en son mesaj değerini yayınlar.

Bu kod çalıştığında ekrana iki defa “merhaba arkadaşlar.” yazacaktır. Bunu salondaki bir konuşmacının aklında ilk cümlelerini düşünüp, ne söyleyeceğine karar verdiğinde konuşmasına benzetebiliriz. Yani konuşmacı, kullanıcılara en son aklında bulunan mesajı bildirmiş olur.

BehaviorSubject

Bir başlangıç değerine ihtiyaç duyar. Mevcuttaki en son değeri yeni abonelere yayınlar.

Burada salondaki konuşmacının sahneye çıkar çıkmaz selamlama yaptığı düşünülebilir. Konsola peş peşe iki defa “merhaba arkadaşlar.“, iki defa “nasılsınız“, iki defa da “konumuz küresel ısınma.” yazacaktır.

ReplaySubject

Belirtilen sayıda verilen son değeri, yeni abonelere tekrar yayınlar.

Burada salonda konuşmacı konuşurken bir dinleyici vardır. “selamlar” ve “nasılsınız” şeklinde iki mesaj yayınlanmıştır ve salondaki mevcut dinleyici tarafından bu mesajlar alınmıştır. Ancak ReplaySubject ile salona gelen sonraki dinleyicilere de önceki mesajlar tekrar gönderilir.

Sonuç

RxJS kütüphanesinde bulunan özel Observable türleri örnek uygulamalarla desteklenerek incelenmiştir.

Bir sonraki yazıda, RxJS kütüphanesindeki Operatörler incelenecektir.

RxJS ile Reaktif Programlama

26 Haz

RxJS ReactiveX API’sinin Javascript programlama diline kullanılmak üzere yazılan uygulamalardan biridir. Geliştiricilere, tepkisel olaylar (events) üzerinden güçlü ve işlevsel  bir fonksiyonel yaklaşım sunar. Bunların yanında giderek artan kütüphane ve yardımcı araçları ile geliştiricilere kullanım kolaylığı sağlamakta ve popülerliği artmaktadır.

RxJS reaktif programlamanın bir uygulaması olduğundan dolayı imperative gelenekteki bir programcı için ilk başta öğrenilmesi biraz zor gelebilir. Çünkü fonksiyonel programlama, declerative gelenekte uygulanan bir paradigmadır. Programlama dillerinin sınıflandırmasında bunu görebilmek mümkündür.

 

RxJS uygulaması yapmak için iki farklı yol izlenebilir:

Bana göre basit olan yöntem Angular projesi oluşturmaktır. Angular projesi oluşturmak için npm komutları kullanılır. Bir projeyi üç adımda oluşturmak mümkündür.

Adım-1: Angular CLI yüklenmesi

Angular projesinin yönetimini ve çalıştırılmasını sağlayan global Angular CLI yüklenme adımıdır. Bunun için gerekli olan komut:

npm install g @angular/cli

Adım-2: Uygulamanın oluşturulması

Uygulama için gerekli dosya ve dizinlerin oluşturulması adımıdır. Bu adıma, çalışma ortamının (workspace) hazırlanması da denir. Bu işlemi bir önceki adımda yüklenen Angular CLI komutları yürütür.

ng new myapp

Artık uygulama dosyaları yüklenmiştir ve aşağıdaki gibi bir dizin oluşturulmuştur.

 

 

 

 

 

 

 

 

 

 

 

Uygulama dosyaları src/app dizininde bulunmaktadır. Dizinde bulunan diğer dosyaların ne işe yaradığı bu yazının konusu değildir.

Adım-3 Uygulamanın çalıştırılması

Angular uygulamasını çalıştırmak için Angular CLI komutları çalıştırılır.

cd myapp

ng serve open

Bu komut ile Angular uygulaması, varsayılan tarayıcıda açılarak başlatılacaktır.

RxJS Uygulanışı

Angular projesinde rxjs kodlarını çalıştırmak için Angular projesinde bir typescript dosyası kullanılabilir. app.component.ts dosyası içerisine bir Observable tanımlamak için aşağıdaki gibi bir komut kullanılabilir.

 

 

 

 

 

 

RxJS kodlarını çalıştırmak öncelikle ‘rxjs’ modülünün yüklenmesi gerekmektedir. Bunun için gerekli komut:

import {from} from ‘rxjs’;
Ardından constructor içerisinde from operatörü ile bir observable oluşturulmaktadır.

RxJS Yardımcı Araçları

RxJS kütüphanesinde Operators ve Subjects olmak üzere iki önemli başlık bulunmaktadır. Sonraki yazılarda sırayla RxJS Subjects ve Operators konuları ele alınacaktır.

 

Reaktif Programlama (Reactive Programming)

25 Haz

Reaktif Programlama Nedir?

Reaktif programlama, asenkron veri akışlarıyla işlemler yapmayı ilke edinen bir programlama paradigmasıdır.

Asenkron Prensip

Reaktif programlamada her şey asenkron olarak, yani eş zamanlı olmadan çalışır. Yani bir işlem adımının yürütülebilmesi için başka işlemlerin sonucu beklenmek zorunda değildir. Çalışma zamanında, asenkron bir işlem yürüten kod satırı çalıştırıldıktan sonra, işlemin bitmesi beklenmeden diğer satırdaki işlemler yürütülebilir. Multithread işlemler yürütebilen sistemlerde asenkron yürütülecek olan işlemler, farklı thread’ler tarafından da yapılabilir.

Neden Asenkron çalışmalara ihtiyaç duyulur?

Programlamada asenkron çalışma ihtiyacı, uygulamaları daha duyarlı hale getirmek amacıyla kullanılır. Asenkron işlemler genellikle uzun zaman alan işlemlerdir. Bu nedenle ana uygulama bir görevi yürütürken, kilitlenme ve donma diye tabir edilen yavaşlamaları kullanıcıya yansıtmadan, sorunsuz bir kullanıcı deneyimi sunmayı sağlar. Asenkron işlemler dış kaynaktan bir veriyi almak olabileceği gibi yerelde uzun hesaplama gerektiren işlemler de olabilir.

Reaktif Programlamanın Püf Noktaları

Reaktif programlamada üç temel yapı taşından bahsedebiliriz.

1- Veri akışları (Data Streams)

Reaktif programlamada veri akışları, işin omurgasını oluşturmaktadır. Veriler bir kaynak tarafından oluşturulup başka bir kaynak tarafından tüketilir. Bütün olaylar, mesajlar, hatalar akışlar tarafından yayılma (emitting) yoluyla bildirilir.

2- Observable Pattern

Reaktif programlamada veri akışları gözlenebilir olarak tasarladığından dolayı, akıştan bir bildirim yapıldığında buna tepki verilebilmektedir. Gözlemlenebilir olan veri akışı nesneleri Observable olarak adlandırılırken, akışta gerçekleşen olaylara tepki veren nesneler Observer olarak adlandırılır.

Observable: Reaktif bir sistemde gözlenebilir olan şey veri akışıdır.
Observer: Observable tarafından yayınlanan veri akışlarını yakalar ve kullanır. Observer nesneleri bunu yapabilmek için Observable nesnesine abone (subscribe) olur.

Gözlemlenebilir bir veri akışını herhangi bir işlemden elde etmek mümkündür. Örneğin HTTP talepleri, form tıklama olayları, bildirimler, değişkenlerde meydana gelen değişiklikler, sensörlerden alınan değerler. Kısacası bir durum değişimi bildiren herhangi bir şey olabilir.

3- Fonksiyonel Programlama (Functional Programming)

Veri akışlarını yönetebilmek için uygulanan yöntem fonksiyonların kullanılmasıdır. Bir veri akışından elde edilen verilerin belli bir dönüşümden geçirilerek kullanılması için bir veya birden fazla fonksiyona ihtiyaç duyulabilir.

ReactiveX (Reactive eXtensions)

Reaktif programlama için kullanılan en popüler API ReaxtiveX ya da kısa adıyla Rx’dir. (“X” harfi Extensions için kullanılan bir kısaltmadır). Bu eklenti, reaktif programlama ilkelerinin bir uygulamasıdır. ReactiveX resmi sitesinde ReaxtiveX’in bir API’den ziyade, diğer programlama dillerine de ilham veren bir devrim, bir fikir ve programlamada bir akım olduğu belirtilmektedir.

ReaxtiveX kütüphanelerini kullanarak, aşağıdaki programlama dillerine reaktif özellikler katılabilmektedir.

Örnek RxJS Kodu

RxJS reaktif programlamanın Javascript programlama diline uyarlanmış kütüphanesidir. Javascript örnek uygulaması için öncelikle RxJS kodlarını içeren paketlerin koda dahil edilmesi gerekmektedir. Kodun en başında import sözcüğü ile başlayan satırlar gerekli paketleri yüklemektedir.

 

 

 

 

 

Daha sonra, from sözcüğü ile bir Observable sayı dizisi tanımlanmıştır. pipe() metodu, Observable nesnelere ait bir metottur ve yardımcı operatörleri akışa dahil etmek için kullanılır. Burada filter ve map adında iki operatör sisteme dahil edilmiştir. filter operatörü akıştaki 4’ten küçük sayıları seçerken, map operatörü, kalan sayıların karesini almaktadır.

Örnek kodun adımlarının incelenmesi aşağıdaki gibidir.

Kimler Kullanır?

ReactiveX’i kendi teknolojilerinde kullanan bazı şirketler aşağıda belirtilmiştir.

Sonuç

Bu yazıda reaktif programlamanın ne olduğu ve neden ihtiyaç duyulduğunu, reaktif programlamadaki önemli noktaları incelemiş olduk ve örnek uygulama ile yazımızı sonlandırmış bulunuyoruz.

Putty Kullanıcı Oturum Bilgileri ile Kısayol Oluşturmak

14 Şub

Putty Nedir?

Putty, windows işletim sistemi üzerinden ssh protokolü ile bağlanılabilen  sistemlere, erişim yapabilmek amacıyla kullanılan bir terminal uygulamasıdır. Program, tek bir exe şeklinde indirilmektedir ve kurulum yapılmamaktadır. Uygulamanın arayüz görünümü aşağıdaki gibidir.

Bu arayüz kullanılarak Linux gibi işletim sistemlerine, terminal aracılığı ile erişebilmek mümkündür. Ancak, birden fazla işletim sistemine erişmek istediğimizde her defasında bu ara yüzden kullanıcı erişim bilgilerini girmek biraz zaman alıcı bir yöntemdir. Putty.exe programı, farklı kısayollar üretilerek birden fazla oturum bilgisi ile kaydedilebilmektedir.

Bu işlem için masa üstüne sağ tıklayarak yeni kısayol oluşturulur.

Kısayol ayarlarında, Putty.exe dosyası seçilir.

Oluşturulan kısayola sağ tıklayarak özellikler penceresinde Hedef bölümüne aşağıdaki şekilde kullanıcı bilgileri girilebilir.

"C:\Program Files\PuTTY\putty.exe" -ssh bayram@172.16.1.110 -pw PaSwOrD

İşlem tamamlanmıştır. Kısayola çift tıklayarak, kullanıcı oturum bilgileri girilmeden direk terminal açılacaktır.

Python pip install SSL Sertifika sorunu

11 Şub

Python geliştirme sırasında ihtiyaç duyulan paketlerin bulunduğu repository adresine bazı durumlarda erişim sorunları yaşanabilir. Bu durumlardan biri de firewall arkasında bulunan sistemlerden, https protokolü ile repository erişimi talep edildiğinde, SSL sertifikalarının ilgili firewall tarafından değiştirilmesi nedeni ile meydana gelebilecek sertifika sorunudur. Kendi çalışmalarım sırasında Sophos filrewall arkasında çalışırken böyle bir sorunla karşılaştım.

Python geliştirme IDE’si PyCharm ile geliştirme yaparken Python paketlerini yüklemeye çalıştığınızda aşağıdaki ekran ile karşılaşabilirsiniz. Aşağıdaki örnekte Redis paketinin yüklenmesi sırasında karşılaşılan SSL sorunu vurgulanmıştır.

Bu durumdan kurtulabilmek için PyCharm arayüzünde yapılması gereken, paket yükleme arayüzündeki options kısmına –trusted-host pypi.python.org –trusted-host files.pythonhosted.org –trusted-host pypi.org ayarlarını girmektir.

Bu şekilde yükleme yapıldığında SSL sorunu ortadan kalkacaktır.

PyCharm kullanmadan, pip komutlarını konsol arayüzü aracılığı ile kullanarak yükleme yapmak için gerekli komut:  pip install redis –trusted-host pypi.python.org –trusted-host files.pythonhosted.org –trusted-host pypi.org şeklindedir.

Ancak geliştirme sürecinde onlarca paket yükleme işlemi olacağını göz önüne aldığımızda her defasında bu komutu kullanmak çok ta pratik bir çözüm değildir. Bunun yerinde pip ayarlarını global olarak pip.ini dosyasına eklemek, bizi her defasında aynı komutları girmekten kurtaracaktır. Python 3.7 versiyonu için Windows 10 ortamında pip.ini dosyasına C:\ProgramData\pip\pip.ini şeklide erişebilmek mümkündür.

Artık her pip install <package name> komutu, SSL sorununa takılmadan çalışacaktır.

Stackoverflow üzerinde tartışılan pip always fails ssl verification başlıklı soruya verilen çözüm cevabında belirtildiği üzere, trusted-host  seçeneği aslında SSL’yi atlamaz, ancak geçerli (ya da herhangi bir) HTTPS bulunmadığında (ve yalnızca) ilgili ana bilgisayarı güvenilir olarak işaretler.

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.

Asp.Net Core ve ilk Web Api Projesi

13 Ağu

Microsoft tarafından alınan en radikal kararlardan biri olan açık kaynak dünyasına geçiş, tüm geliştiriciler tarafından olumlu bir şekilde karşılanmıştır. Hatta geç kalınmış bir karar olduğuna dair eleştiriler de yapılmıyor değil.

Microsoft tarafında açık kaynak geliştirmeye olanak sağlayan düşünce ile birlikte, geliştirme ve çalıştırma araçları da tamamen yenilenmiştir. Çünkü açık kaynak ürünler, en önemli özelliklerinden biri olan, platform bağımsız çalışabilme yeteneğine sahip olmalıdır. Bu nedenle, geliştirme ve çalıştırma tarafında yeni ürünlere yer verilmiştir.

Platform bağımsız(cross-platform) çalışabilme yeteneğini kazandıran ilk ürün .Net Core adı altında yaniden düzenlenen .Net çatısı olmuştur. Şu an yayınlanmış olan versiyon .Net Core 2.1 şeklindedir.

.Net Core

.Net Core projeleri geliştirme yapmak için .Net Core SDK indirilerek kurulum yapılmalıdır.

Geliştirme işlemi tamamlandıktan sonra projenin bir platformda (Sunucu, PC v.s) çalıştırılabilmesi için ise .Net Core Rutime indirilerek kurulumu yapılmalıdır.

Çalışma ortamında .Net Core SDK kurulumu yapıldıktan sonra yine platform bağımsız bir araç olan Visual Studio Code kurulumu yapılmalıdır. (.Net Core projeleri Visual Studio 2017 geliştirme aracı ile de yapılabilmektedir.)

Visual Studio Code

Visual Studio Code ortamı, yönetici olarak başlatıldıktan sonra, yeni bir klasöre bağlantı yaparak yani diskte boş bir çalışma dizin açarak ilk çalışma projesi oluşturulabilir. Bu örnekte Asp.Net Web Api projesi üzerinden çalışılacağı için proje adını FirstWebApi olarak düzenleyebiliriz. FirstWebApi dizinini Visual Studio ile açtıktan sonra Terminal penceresine aşağıdaki konutu yazarak ilk Asp.Net Core Web Api projesi oluşturulabilmektedir.

dotnet new webapi

Proje Görünümü

Yeni bir proje oluşturulduğunda, geliştiricilere yol göstermesi açısından,  varsayılan olarak ValuesController.cs dosyası otomatik olarak oluşturulmaktadır. ValuesController içerisinde basitçe bir değişiklik yaparak ilk projeyi çalıştırabiliriz.

Kod

Kodu çalıştırmak için aşağıdaki komutu girmek yeterlidir.

dotnet run

Proje çalıştırıldığında http://localhost:5000 portundan web uygulaması için dinlemeye geçilir. Tarayıcıdan http://localhost:5000/api/Values adresine girildiğinde aşağıdaki şekilde bir JSON response elde edilir.

{“FirstName”:”bayram”,”LastName”:”Üçüncü”}

Danimarkalı Programcılar

2 Oca

Bir konu hakkında okuduğum bilgilerin temeline inmeyi ve o konunun yazarları hakkında bilgiler edinmeyi alışkanlık haline getirdim. Okuduğum yazı ve makalelerde karşılaştığım programcıların özelliklerini ve çalışma alanlarını incelediğimde karşıma çıkan bazı ortak özellikler farkettim. Bu nedenle, bu yazıda Danimarka kökenli programcılardan ve bu programcıların dikkatimi çeken ortak özelliklerden bahsetmek istedim.

Bjarne Stroustrup
1950 doğumlu olan Bjarne Stroustrup, Columbia Üniversitesi’nde profesördür. New York’ta Morgan Stenley’in genel müdürüdür. C++ programlama dilini tasarlamış ve uygulaya geçirmiştir. C++ ile birlikte Object Oriented Programming felsefesinin temelini atmıştır.

Anders Hejlsberg
1989 yılında Borland firmasında Turbo Pascal ve sonrasında Delphi programlama dillerini geliştirdi. 1996 yılında Borland firmasından ayrılarak Microsoft ile çalışmaya başlamıştır. Microsoft tarafında C# programlama dilini geliştirmektedir.

David Heinemeier Hansson
1979 doğumlu olan Hansson, Ruby on Rails programlama dilinin çatısını oluşturmuştur.

Lars Bak
Javacript ve Sanal makineler üzerinde uzman olan Lar Bak, Google tarafından üretilmiş olan Chrome tarayıcısında da kullanılan olan V8 Javascript motorunu geliştirmiştir.

Rasmus Lerdorf
Rasmus Lerdorf, PHP web programlama dilinin mucidi ve Apache sunucu projesi mühendislerindendir. Danimarka kökenli Kanadalıdır.

Yukarıda bahsedilen programcıların tümünün ortak özelliği, Danimarka kökenli olmaları ve çok önemli programlama dillerini geliştirmiş olmalarıdır.

Programlama dillerinin temelinde Biçimsel diller ve Automata teorisi yatmaktadır. Danimarkalı programcıları bir dil geliştirmeye iten şey nihayetinde bu teorinin iyi benimsenmiş olması olabilir. Bundan daha da önemlisi, İskandinav(Danimarka, İsveç ve Norveç) ülkelerinin dünyaca ünlü gelişmiş bir eğitim sistemine sahip olmaları olabilir.

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.