Esri Jupyter Notebook’ta OpenStreetMap Bina Verisi Kullanılarak Basit Analizler Yapımı

Esri Jupyter Notebook’ta OpenStreetMap Bina Verisi Kullanılarak Basit Analizler Yapımı

ArcGIS Pro yüklü makinede yüklenebilen ücretsiz Jupyter Notebook sayesinde ‘ArcGIS API for Python’ kullanılarak coğrafi uygulamalar geliştirip analizler gerçekleştirebilirsiniz. Bununla birlikte ArcGIS Online yönetimini de yapılabilmektedir.

ArcGIS Pro yazılımına sahip ama henüz Jupyter Notebook’u bilgisayarınıza yüklemediyseniz link içinde geçen yönergeleri takip edip bilgisayarınıza yükleyebilirsiniz. Hemen şimdi kullanmak istiyorsanız da Esri’nin ücretsiz hizmete sunduğu notebooks.esri.com adresinde Jupyter Notebook’u kullanabilirsiniz. Dikkat etmeniz gereken husus bu adreste yapacağınız çalışmaları ve verilerinizi kendi yerel bilgisayarınıza kopyalamanız. Çünkü açacağınız oturum, süre kısıtlı; eğer hiçbir işlem yapmazsanız belirli bir süre içinde oturumunuz otomatik olarak kapatılır ve yaptığınız çalışmaları kaybedebilirsiniz.

Bu yazıda Jupyter Notebook platformu üzerinde 3 boyutlu bir harita üzerinde OpenStreetMap (OSM) bina verilerini görselleştirip, metro duraklarına kendi oluşturacağımız yakınlık analizi algoritmasına göre görselleştirmesi anlatılmaktadır.

İşleyiş adımları aşağıdaki gibi olacaktır:

Şekil 1. İşleyiş adımları

Gereksinimler:

  1. ArcGIS Developer hesabı (ücretsiz oluşturmak için https://developers.arcgis.com/ adresini ziyaret edin)
  2. Jupyter Notebook

1.      OSM Bina Verilerinin Alınması

OSM ücretsiz servisler sunması nedeniyle içerdiği büyük boyutlarda coğrafi verilerin son kullanıcılar tarafında erişimi farklı ücretli ve ücretsiz olarak erişilebilmektedir. Bu yazıda overpass-turbo.eu sitesi üzerinden ücretsiz olarak bina verilerini indireceğiz. Yasal kullanım hakları için https://www.openstreetmap.org/copyright sitesine mutlaka bakın.

İlgili sitede, arama kutusuna istediğiniz bölgeyi yazın ve alacağınız bina verilerini öncelikle olabildiğince dar alan için alın. Yazı bitiminde istediğiniz büyüklükte bir alan üzerinden çalışabilirsiniz.

Şekil 2. Ankara şehir merkezi binalar

Sol üstteki ‘Wizard’ (Sihirbaz) düğmesine basıp, çıkan ekranda haritada görüntülenen alan için alabileceğimiz OSM verisi için sorgu oluşturacağız. Buradaki sorgu için kullanacağınız kelimelerin detaylarını linkte bulabilirsiniz.

Şekil 3. Sorgu sihirbazı

Sorgu sihirbazına yazacağınız ‘building=* OR building:levels=*’ yazarak, haritada görüntülediğiniz alandaki tüm binaları ve varsa seviye (kat) bilgisini da almış oluyorsunuz. Burada seviye bilgisi her bina için farklılık gösterecektir. ‘build and run query’ (derle ve çalıştır sorguyu) düğmesine basarak, ilgili alan için veriler çekilir.

Web sayfasının sol üst kısmındaki ‘Data’ (Veri) sekmesine tıklayarak, çekilen verileri görüntüleyebilirsiniz. Eğer verilerinizde sıkıntı yoksa, web sayfasının sol kısmındaki ‘Export’ (Dışarı Çıkart) düğmesine tıklayarak verileri indirme için gerekli paneli açacağız.

Şekil 4. ‘Dışarı Çıkarma’ paneli

‘Export’ panelindeki ‘Data’ kısmını genişlettiğinizde ‘download/copy as GeoJSON’ (indir/kopyala GeoJSON olarak) linkine tıklayın. Bu şekilde ArcGIS Developer hesabı ile giriş yapabileceğiniz ArcGIS Online içerisine kolay bir şekilde format değişimi yapmadan atabileceğiz.

2.      Verinin ArcGIS Online İçerisine Atılması

ArcGIS Online giriş yapın ve ‘Content’ (İçerik) linkine tıklayın. Sol kısımdaki ‘Add Item’ (Öğe Ekle) düğmesine tıklayıp dosya içeri aktarma sürecini başlatalım. ‘From my computer’ (Bilgisayarımdan) seçeneğini seçelim.

Şekil 5. ArcGIS Online ‘Bilgisayarımdan bir öğe ekle’ paneli

Bir önceki bölümden indirdiğimiz dosyayı burada seçip, ilgili alanları dolduruyoruz. Başlık kısmına girdiğimiz değeri sonraki bölümlerde kullanacağız. Kısa bir süre sonra öğemiz ‘Feature Layer’ (Feature Katmanı) olarak eklenmiş olacak.

Yeni eklenen öğeyi tıklayıp sayfasını açın. Analizler için kullanacağımız yeni bir ‘Field’ (Alan) oluşturmak için ‘Data’ (Veri) sekmesine tıklayıp verilerin görüntülendiği sayfa açılsın.

Şekil 6. ‘Alan Ekle’ menüsü

Sol kısımdaki üç tırtıklı ikona tıklandığı zaman açılan menüde ‘Add Field’ (Alan Ekle) menü seçeneğini tıklanır ve aşağıdaki resimdeki veriler girilir.

Şekil 7. ‘Alan Ekle’ paneli

3.      Jupyter Notebook içerisinde Programlama

Öncelikle analiz için kullanacağımız metro bilgisini almak. Bunun için ‘Jupyter Notebook’ uygulamasını çalıştırın ve yeni bir çalışma kitabı oluşturun ve aşağıdaki kodları yazıp çalıştırın.

Şekil 8. Metro bilgisinin alınıp ArcGIS Online’a kaydetme

Yukarıdaki kodlarda kırmızı ile kapatılmış alanları kendi bilgilerinize göre doldurmanız gerekmektedir. Bu kod parçası Ankara merkezde metro istasyonları POI bilgisini ‘feature’ olarak en fazla 20 tane olacak şekilde almaktadır. Sonrasında da harita üzerinde gösterimini sağlayıp, bilgiyi ArcGIS Online üzerine ‘metrolar’ olarak kaydetmektedir.

İsterseniz kaydedilen ‘metrolar’ katmanının görsel ikonunu değiştirebilirsiniz.

Metro bilgisini alma işlemini bitirdikten sonra, ana uygulamamızı oluşturabiliriz. Bunun için yeni bir çalışma kitabı oluşturalım Jupyter Notebook üzerinde.

Kod hücrelerinde:

  1. Gerekli kütüphane kullanımları yapılıyor ve ArcGIS Online hesabına bağlantı sağlanıyor.
  2. Merkezi Ankara olacak şekilde bir harita objesi oluşturuluyor.
  3. ArcGIS Online hesabına bağlı olan içerikte bina bilgilerini içeren ‘export’ katmanı bulunuyor.
  4. ‘metrolar’ katmanı bulunuyor.
  5. Yapılacak analiz sonucunda 3 boyutlu binaların görselliğini değiştirmek için özel bir semboloji tanımlanıyor. ‘ClassBreak’ tipindeki bu sembolojide alan ‘distance’ içindeki 0, 15, 25, 50, 75 ve 100 metrelik değerlere göre bina renklendirilmesi farklı olmaktadır.
    Metro katmanı haritaya katman olarak eklenir. Haritayı 3 boyutlu hale getirmeyi unutmayınız.
  6. Basit bir analiz yapılıyor. Metro konumlarına göre oluşturacağımız ‘buffer’ işlemini 100,75,50,25 ve 15 metrelik tekrarlar ile yapıp, her oluşturulan ‘buffer’ poligonun bina poligonu ile arasındaki uzaklık farkının sıfır olması durumunda, bina bilgisindeki ‘distance’ alanına ilgili ‘buffer’ uzaklığının değeri yazılmaktadır. Bu şekilde tüm binaların metro duraklarına olan uzaklığı hesaplanmaktadır.

Şekil 9. Basit bina-metro durağı analizi

Kodun çalıştırılması sonrasında haritamızda analiz sonucunu görüntüleyeceğiz.

Şekil 10. Ankara merkez bina-metro yakınlık analizi

Metro bilgisi yerine isteyeceğiniz farklı POI bilgilerin ve bina bilgilerine göre farklı analizler yapabilirsiniz artık.

ArcMap ve ArcGIS Pro Arasındaki Python Farklılıkları

ArcMap ve ArcGIS Pro Arasındaki Python Farklılıkları

Python açık kaynak kodlu, platformlar arası kolaylıkla kullanılabilen genel amaçlı bir programlama dilidir. ArcGIS Platformu’nda ise ArcMap 10.x ve ArcGIS Pro’daki Geoprocessing araçlarının ana dili olarak kullanılmaktadır. Geniş bir kullanıcı kitlesine sahip olması sebebiyle her geçen gün geliştirilmekte ve CBS kullanıcılarının ihtiyaçlarına karşılık verebilen bir dil haline gelmektedir. ArcGIS Pro içerisinde kullanılan Python versiyonu diğer ArcGIS ürünlerinden (ArcGIS Desktop, ArcGIS Server, ArcGIS Engine) farklı bir yapıdadır. ArcGIS Pro, Phyton 3.x kullanırken ArcMap Python 2.x versiyonlarını kullanmaktadır. Python dil yapısı ana hatlarıyla korunmakla birlikte Versiyon 3’te bazı değişiklikler yapılmıştır. Bu sebeple Python 2.x versiyonu ile yazılmış kodlar ArcGIS Pro’da uyumsuzluklara sebep olmaktadır.

ArcGIS Pro’da Desteklenmeyen Araçlar

Geoprocessing araçlarının pek çoğu ArcGIS Pro’da da mevcuttur, dahası aktarma ve geliştirme aşamasındadır. Ancak, ArcGIS Pro’nun içinde şu anda yer almayan birtakım araçlar vardır. Bunlardan bazıları;
Coverage,
Data Interoperability,
Parcel Fabric,
Schematics ve Tracking Analyst araçlarıdır.
Detaylı bilgi için tıklayınız.

Kütüphanenin Yeniden Düzenlenmesi

Python 3, Python 2 ‘nin kütüphanesinden farklı olarak önemli bir yapılanma içerir. Bu değişiklikler fonksiyonların çoğunun farklı lokasyonlara taşınmasından veya yeni bir modülün parçası olarak yeniden adlandırılmasından kaynaklanmaktadır. Eğer iki versiyonu da destekleyecek kodlara ihtiyacınız varsa bu gibi farklılıklarla başa çıkacak esnek importlar (içeri aktarma) kullanmalısınız. Bu işlemi Pro’da kullandığınız girdilere isim vererek yapabilirsiniz.

Print Komutu

Bir diğer önemli değişikliklerden biri çok sık kullanılan print komutudur. Python 2 versiyonunda kullanılan print statement ArcGIS Pro içerisinde kullanılamamaktadır. Ancak, yeni güncellemelerle beraber gelen print fonksiyonu her iki versiyonda da kullanılabilmektedir.

Import Yaparken Yaşanabilecek Sorunlar

Phyton 2 kodlarınızı Phyton 3 kurallarına göre yazdırmak için kod satırının en başına __future__ yazmanız gerekmektedir. Örneğin, Python 3’te yer alan print fonksiyonunu çağırmak için from __future__ import print_function kullanılmaktadır.

Sözlükte Yapılan Değişiklikler

Aşağıda yer alan kodlar Python 3’te değiştirilmiştir.

ArcMap ArcGIS Pro
dictionary.iteritems() dictionary.items()
iteritems items
xrange range

 

String ve Encoding Kurallarındaki Değişiklikler

Python 3’de tırnak içerisinde yazılan her şey Unicode string olarak tanımlanmaktadır. Ancak aynı kural Python 2 içerisinde geçerli değildir. Bunun için Python 2 içerisinde unicode_literals import edilmesi gerekmektedir. Bu sayede tırnak içerisindeki her şey Unicode olarak okunacaktır.

from __future__ import unicode_literals

Desteklenmeyen Veri Formatları

ArcGIS Pro’nun geliştirilmeye başlanmasıyla beraber bundan sonra pek çok veri formatı desteklenmemeye başlamıştır. Bunlardan bazıları aşağıda yer almaktadır.

Raster catalogs
Geometric networks
Topologies
Schematic datasets
Geodatabase servers
ArcMap document templates
ArcReader documents
Graphs
Tiled map packages
Personal geodatabases

 

Modül Güncellemeleri

Mapping Modülü

ArcGIS Desktop tarafında yer alan arcpy.mapping alt modülü ArcGIS Pro’da isim değiştirmiş ve arcpy.mp adını almıştır. Bu değişiklik ile modülün kabiliyetlerine esneklik kazandırılmıştır. Harita otomasyonuna ek olarak arcpy.mp proje seviye yönetimi sağlamaktadır. ArcGIS Pro’da acpy.mp in görevlerinden biri de harita dokümanının (.mxd) aksine proje dosyasına (.aprx) erişmektedir. ArcMap tarafında bu işlem arcpy.mapping.MapDocument(mxd_path) komutuyla sağlanırken, Pro’da komut ismi arcpy.mp.ArcGISProject(aprx_path) olarak değişmektedir. Aynı şekilde List fonksiyonlarının da ismi kısaltılmış ve basitleştirilmiştir. Aynı işlemleri gerçekleştirseler de ArcMap için yazılmış olan bu kodların ArcGIS Pro için düzeltilmesi gerekmektedir. Detaylı bilgi için tıklayınız.

ArcGIS Desktop tarafında katman dosyaları “.lyr” uzantısına sahipken ArcGIS Pro tarafında bu uzantı ismi “.lyrx” olmaktadır. “.lyrx” dosyaları birden çok katman veya grup katmanları içerebilme özelliğine sahipken “.lyr” dosyası tek bir katman veya katman grubu depolayabilmektedir. ArcGIS Pro .lyr dosya formatını okuyabilmekte olup dosya formatını çevirmek için arcpy.management.SaveToLayerFile() komutu kullanılmaktadır.

Veri Kaynaklarının Güncellenmesi

ArcGIS Pro ile bir katmanın veya tablonun veri kaynağını değiştirmek için uygulanması gereken metodlar ve parametreler değişmiştir. arcpy kütüphanesindeki scriptler dosyalarınızı tek tek açmak yerine hepsini birden güncelleyebilme imkanı sağlamaktadır. Detaylı bilgi için tıklayınız.

Network Analysis Modülü

ArcGIS Desktop tarafında kullanılan arcpy.na komutları, Pro’da farklılıklar göstermektedir. Desktop tarafında Make Route Layer aracı kullanılırken Pro tarafında bu araç Make Route Analysis Layer ismini almıştır. Pro’da bulunan bu yeni araçlar geliştirilmiş fonksiyonlar sunmaktadır. Pro’da bulunan Network Analysis katmanları verilerini ancak File Geodatabase’de tutmaktadır. Bu sebeple verilerin saklı tutulacağı veritabanı yeni bir işlemden önce değiştirilmelidir. İşlem adımlarıyla ilgili detaylı bilgi için tıklayınız.

Analyze Tools For Pro

Python kodlarınızı hem 10.x’de hem de ArcGIS Pro’da veya sadece ArcGIS Pro’da çalışacak şekilde güncellemeniz mümkündür. Geoprocessing araçlarından biri olan Analyze Tools For Pro ile diğer ArcGIS ürünlerinde kullandığınız Python 2 kodlarının ArcGIS Pro’da verdiği hataları tespit edebilirsiniz. Bu araç Python 2to3 özelliği ile göç ettirilen kodlardaki sorunları tespit eder, ArcGIS Pro’ya taşınmamış araç ve fonksiyonları belirler ve uygun Python 3 komutlarına dönüşüm sağlar. Eğer kodlarınızı Python 2’den Python 3’e tek bir yönde çevirmek istiyorsanız 2to3 komutu genellikle %100 başarıyla çözüm sağlayacaktır. Bazen bu başarı %95 civarında seyretmekte ve kodlayıcı tarafından ek değişiklikler yapılması gerektirmektedir.