Mapnik Kurulum ve Tile Oluşturulması

Mapnik, haritaların oluşturulmasında kullanılan açık kaynak kodlu bir “render” yazılımıdır. Yani elinizdeki verileri sizin belirleyeceğiniz stilde render ederek görüntüler (jpg, png, tif) oluşturur. Daha da fazla bir özelliği yoktur!  Şimdi şöyle bir soru sorabilirsiniz : Zaten verilerimi ArcMap veya QGIS ‘te açıp çeşitli stiller (renkler, desenler vs.) verebiliyorum ve bunu bilgisayarıma kaydedebiliyorum. Peki Mapnik bundan farklı olarak ne yapabiliyor ? Mapnik sadece render yapıyor fakat bunu çok iyi yapıyor. Herhangi bir masaüstü CBS yazılımı ile yapamayacağınız görsel efektleri başarıyla gerçekleştirebilirsiniz. Mesela OpenStreetMap, Mapnik ile render edilmiştir. Bir diğer özelliği ise Python bindingleri sayesinde Tile üretiminde kullanılabilmesidir. Bu yazıda Mapnik ile Tile üretiminden bahsedeceğim ve OpenLayers ile görselleştirmesini yapacağım. Ayrıca Mapbox tarafından geliştirilen TileMill ile stiller oluşturup bunları Mapnik ‘ e aktarımına değineceğim.

1. Gerekenler

Python 2.7.x

TileMill

TortoiseSVN

Mapnik 2.2.0

2. Kurulum

Öncelikle Python, TileMill ve TortoiseSVN yi kurun. Ardından Mapnik ‘i kuracağız. Fakat biraz uğraşmak gerekiyor. Aşağıdaki adımları takip ederek kurulumu gerçekleştirebilirsiniz.

1). ZIP dosyasını C sürücüsüne çıkartın. Şu şekilde olacaktır C:\mapnik-v2.2.0\ 

2). Ardından Bilgisayarıma sağ tıklayıp açılan menüden Özellikler seçilmelidir. Açılan pencerenden Gelişmiş sekmesinde Ortam Değişkenleri ‘ne tıklayın.

3). Burada Sistem Değişkenleri kısmında Path değişkeni bulunarak çift takılarak açılır. Değişken değeri kısmının sonuna giderek ;C:\mapnik-v2.2.0\lib; ifadesi eklenerek Tamam diyerek kapatılır.

4). Daha sonra Yine Sistem Değişkenleri bölümünün altındaki Yeni… butonuna tıklayarak açılan pencerede Değişken adı kısmında PYTHONPATH  yazılır. Değişken değeri kısmına ise ;C:\mapnik-v2.2.0\python\2.7\site-packages; ifade yazılır ve Tamam diyerek kapatılır.

Yukarıdaki işlemler Mapnik kütüphanesinin bilgisayarınıza tanıtılması için gereklidir. Bu işlemleri başarı ile yapıp yapmadığınızı kontrol etmek için Başlat Menüsünden IDLE (Python GUI) aracı açılır. Karşımıza gelen pencereye import mapnik yazıp enterleyin. Bu şekilde Mapnik kütüphanesi çağırmış olduk. Her şeyi doğru olarak yaptıysanız herhangi bir hata mesajı almamanız gerekiyor.

3. TileMill ile Mapnik Stil Dosyalarının Oluşturulması

Mapnik sisteme kurulduktan sonra harita üretmeye başlayabiliriz. Fakat öncesinde haritamızın stilini oluşturmamız lazım. Mapnik, haritaları render ederken XML tabanlı stil dosyalarına ihtiyaç duyar. Bu dosyalar hangi harita nesnesinin (yollar, binalar, akarsular vs.) hangi renkte/desende olacağı bilgisini taşır. Peki bu stil dosyalarının nasıl oluşturacağız? Malesef Mapnik bu stil dosyalarını oluşturmak için herhangi bir araca sahip değildir. Başta demiştim ya ”Mapnik sadece render yapar başka bir özelliği yoktur” diye işte bu yüzden… Mapnik herhangi bir dizayn aracına sahip olamayabilir fakat yardımcı yazılımlar kullanarak bu sorunu aşabiliriz. Bu konuda TileMill ‘den yararlanacağız. TileMill, MapBox şirketi tarafından geliştirilen harita görselleştirme aracıdır. CartoCSS adındaki sembol diliyle haritamızı tasarlayarak bunu Mapnik stili olarak kaydedebilme imkanı sağlıyor. Daha fazla bilgiyi MapBox ın sitesinde bulabilirsiniz.

Bu yazı için örnek olarak İstanbul ilçelerine ait poligon tipindeki veriyi TileMill ile açarak basit bir stil oluşturdum. Uygulamada kullandığım veriyi buradan indirebilirsiniz. Aşağıda bu örneğin ekran görüntüsü ve CartoCSS kodu verilmiştir.

Map { background-color: #b8dee6; }

#istanbulilce {

  polygon-pattern-file : url(‘F:\Blue_mosque-Istanbul.jpg’);

  ::line {

    line-color: #0c0202;

    line-width: 2;

    line-join: round;

    line-cap: round;

  }

}

Örnekte katman adı istanbulilce dir. Kodu kopyala/yapıştır yaparken aynı katman adında olmasına dikkat edin. Bu işlemin ardından Mapnik stil dosyası oluşturmak için TileMill ‘in sağ üst kısmındaki  butonuna tıklayıp Mapnik XML seçeneğine tıklıyoruz. Böylece Mapnik ‘in anlayabileceği stil dosyamızı ürettik. Dosya Belgelerim içerisine kaydediliyor.

Şimdi bu dosyayı kullanarak örnek haritamızı render edelim. Öncelikle IDLE (Python GUI) programını açıyoruz. Ardından aşağıdaki kodları girerek haritamızı render edeceğiz.

from mapnik import *

stilDosyasi = ‘C:\mapnikTest\istanbul.xml’  #mapnik stil dosyamizin yolunu gostermeli. TR karakterler hata #verebilir.

ciktiHarita = ‘c:\mapnikTest\istanbulRender.pgn’ #haritanin cikti yolu.

m = Map(4*1024,4*1024)

load_map(m, stilDosyasi)

m.zoom_all()

render_to_file(m, ciktiHarita)

Yukarıdaki kodlar ile 4096,4096 oranından PNG formatında haritayı üretmiş olduk. Bu işlemi başarı ile tamamladıysanız artık Tile üretimine geçebiliriz.

4. Mapnik Kullanarak Tile Oluşturma

Günümüzde Google, Bing, OSM, MapBox,  CartoDB gibi pek çok altık üreticisi haritalarını Tile şeklinde sunuyor. Böylece sunucu kaynakları (ram, işlemci) WMS ‘ye oranla daha az kullanılıyor ve daha hızlı. Dolayısıyla çok kullanıcılı bir ortamda altlık haritaların Tile şeklinde sunulması oldukça avantajlı. Fakat haritanın çözünürlüğüne bağlı olarak hard diskte fazla yer kaplayabiliyor. Bizde Mapnik kullanarak kendi Tile ‘mizi  üreteceğiz. Öncelikle TortoiseSVN ‘yi kullanarak aşağıdaki linkten kodlarımızı çekiyoruz.

http://svn.openstreetmap.org/applications/rendering/mapnik

İndirdiğimiz dosyalar arasından generate_tiles.py adlı dosyayı tile_olustur.py adıyla  kopyalıyoruz ve Not Defteri ile açıyoruz. En alta inerek açıklama kısmına geliyoruz. Burada açıklamadan sonraki kısmı tümüyle silip şu kodu yapıştırın

bbox = (27.4795,40.0465,30.4788,42.2509)

render_tiles(bbox, mapfile, tile_dir, 3, 15, “World”)

Düzenlediğimiz kod ile sadece İstanbul ‘u kapsayacak şekilde bounding-box tanımlamış olduk. Ayrıca zoom seviyesini 3 ile 15 arasında olması gerektiğini belirttim. Dosyanın son halini buradan indirebilirsiniz.

Yukarıdaki işlemler tamamlandıktan sonra komut satırını açıp tile_olustur.py scriptinin kalsörüne geçiyoruz. Ardından aşağıdaki komutları sırayla girip Tile oluşturacağız.

set MAPNIK_MAP_FILE=C:\mapniktest\istanbul.xml

set MAPNIK_TILE_DIR=C:\AppServ\www\istanbulTile

set HOME=C:\

tile_olustur.py

İşlem 10 -15 dk. sürecektir. Render bittikten sonra oluşan Tile ‘ler C:\AppServ\www\istanbulTile klasörün kopyalanacaktır. Toplamda 97.918 adet Tile üretildi ve boyutu 385 MB. Tabiki bu değerler  zoom aralığına ve bounding-box alanına bağlıdır. Bunları arttırdıkça boyutta artar. Sıra geldi oluşturduğumuz Tile ‘ı OpenLayers ile kullanmaya.

5. OpenLayers ile Tile  Görüntüleme

Oluşturuğumuz Tile ‘yi OpenLayers ile farklı yöntemlerle görüntüleyebilirsiniz. Ben burada OpenLayers.Layer.OSM ‘Constructorunu kullandım. Oluşturduğumuz Tile sadece bizim belirlediğimiz bounding-box u kapsayacak kadar olduğunda dışından kalan yerler boş kalacaktır. Web sunucusu olarak AppServ paket programındaki Apache ‘ yi tercih ettim. Aşağıda sayfa kodu ve ekran görüntüsü verilmiştir. FireBug ile olası hatalarını kontrol etmenizi tavsiye ederim.

 

<html xmlns=”http://www.w3.org/1999/xhtml”&gt;

<head>

<title>Test Tile</title>

<script src=”http://openlayers.org/dev/OpenLayers.js”></script&gt;

<script src=”http://maps.google.com/maps/api/js?sensor=false”></script&gt;

<script type=”text/javascript”>

function init(){

var  map = new OpenLayers.Map(‘map’, {});

var google_normal = new OpenLayers.Layer.Google(

‘G_normal’,

{type: google.maps.MapTypeId.ROADMAP}

);

var OpenSM = new OpenLayers.Layer.OSM(‘OpenStreet Map’);

var istanbulTile = new OpenLayers.Layer.OSM(“İstanbul Tile”, “/istanbulTile/${z}/${x}/${y}.png”, {});

map.addLayers([google_normal, OpenSM,istanbulTile]);

map.addControl (new OpenLayers.Control.LayerSwitcher({}));

map.addControl(new OpenLayers.Control.ScaleLine());

map.zoomToExtent([3211158.26388,3257775.08105,4969819.11568,5012787.6602]);

}

</script>

</head>

<body onload=”init()”>

<div id=”map” style=”width:100%; height:100%;”></div>

</body>

</html>

 

 

Yayınlamış olduğum yazıları kaynak belirtmek kaydıyla paylaşabilirsiniz.

Advertisements

One comment on “Mapnik Kurulum ve Tile Oluşturulması

  1. Pingback: Dizi Karakterlerinin Stil Haritası | Modasahne

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s