İçerik
Geographic Information Systems /
Mapserver/Openlayers Uygulama
Geliştirme_
CGI betiğinin çalışması için httpd.conf düzenlenmesi
işlemi
Projeksiyon tanımlama ve geotiff oluşturma işlemi
Mapfile dosyasının hazırlanması işlemi
Map file dosyamın ( /var/www/mapfile2.map ) içeriği:
Parçalı servis edilen tif dosyası oluşturma işlemi
OpenLayers ile servis edilen haritaya web üzerinden
servis etme işlemi
Web tabanlı haritalar her geçen gün daha yaygın olarak kullanılıyor. Google, microsoft, yahoo’nun sunduğu haritalar üzerinde kütüphanelerini kullanarak ihtiyacınıza göre uygulamalar geliştirebiliyorsunuz. Fakat bu uygulamaların internet bağlantısına, harita sunucularına erişim konusunda bağımlılıkları, lisans konusunda yükümlülükleri söz konusu. Bunun yerine Mapserver kullanarak size özel haritaları kendi iç ağınızda, internet bağlantısı gerektirmeksizin çalıştırabilirsiniz. http://www.mapserver.org/
Mapserver haritalarınızı (shape file, tif... )servis etmenizi sağlayan bir cgi uygulamasidir. C programlama dili ile gelistirilmistir. Apache ile veya başka bir http sunucusu kullanılabilir. Linux, Apache, cgi, httpd gibi kavramlara yabancı olanlar için kurulum zahmetli olarak algılanabiliyor. Yeni başlayan arkadaşlara kolaylık sağlaması için bu belgeyi hazırlamak istedim.
Hedefler
Elimde herhangi bir projeksiyonu olmayan raster bir imaj var. Bu raster imajı
WGS84 projeksiyonuna göre düzeneleyip, offline çalışacak web uygulamalarıma altlık
olarak kullanmak istiyorum. Uygulamaları sunarken OpenLayers kullanacağım.
İşlemler
Ubuntu Linux üzerinde Mapserver kurulumu
$ sudo apt-get install cgi-mapserver mapserver-bin mapserver-doc
mapserv cgi uygulamasi bu
işlemden sonra /usr/lib/cgi-bin dizinine yükleniyor. Aşağıda bu dizin
içerisindeki programlarin doğru şekilde çalışabilmesi için, httpd servisi
konfigurasyon dosyası üzerinde gerekli ayarları yapıyoruz.
CGI betiğinin
çalışması için httpd.conf düzenlenmesi işlemi
$ cat /etc/apache2/sites-enabled/000-default
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews
+SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog ${APACHE_LOG_DIR}/access.log combined Alias /doc/ "/usr/share/doc/" <Directory "/usr/share/doc/"> Options Indexes MultiViews FollowSymLinks AllowOverride None Order deny,allow Deny from all Allow from 127.0.0.0/255.0.0.0 ::1/128 </Directory> </VirtualHost> |
Projeksiyon
tanımlama ve geotiff oluşturma işlemi
Kullanılan araç: Esri ArcMap. Öncelikle WGS84 projeksiyonuna sahip dünya
haritasını ve raster imajımı aynı çalışma alanına yükledim. Raster registration
özelliğinden faydalanarak çok sayıda referans noktalar tanımladım, böylece
raster imajımı dünya haritası üzerinde WGS84 projeksiyona uygun olacak şekilde
doğru yere oturtmuş oldum. (Raster registration özelliği ile ArcMap imajı
daraltarak veya genişleterek, projeksiyona uygun oran yönetimini tanımladığınz
referans noktalara göre kendisi halleti.)
Daha sonra raster image katmaını geotiff biçiminde dışarı aldım. Geotiff biçimi koordinat bilgileri de içermektedir. Dosya adı: Deneme.tiff
Gdalinfo uygulaması ile köşe koordinatlarını ve ölçüleri öğreniyoruz. Köşe noktalarındaki sayılar ve size bilgilerini map file dosyamızın içerisinde kullanacağız.
$ gdalinfo Deneme.tif
Driver: GTiff/GeoTIFF
Files: Deneme.tif
Deneme.tif.ovr
Deneme.tif.aux.xml
...
Size is 6940, 7000 Size is 6940, 7000
Corner Coordinates:
Upper Left ( 18.2073421, 46.3408557) ( 18d12'26.43"E,
46d20'27.08"N)
Lower Left ( 18.2073421,
38.2349303) ( 18d12'26.43"E,
38d14'5.75"N)
Upper Right ( 26.2426734, 46.3408557) ( 26d14'33.62"E, 46d20'27.08"N)
Lower Right ( 26.2426734, 38.2349303) ( 26d14'33.62"E,
38d14'5.75"N)
Center ( 22.2250077,
42.2878930) ( 22d13'30.03"E, 42d17'16.41"N)
Mapfile ımızda yer alacan EXTEND alanına buradaki köşe noktalarını kullanarak aşağıdaki sayıları oluşturuyoruz.
EXTENT 18.2073421 38.2349303 26.2426734 46.3408557
MAP NAME parcels_map #STATUS DEFAULT #STATUS ON CONFIG "MS_ERRORFILE"
"/tmp/ms_error.txt" SIZE 800 600 EXTENT 18.2073421 38.2349303 26.2426734
46.3408557 #Upper Left (
18.2073421, 46.3408557) (
18d12'26.43"E, 46d20'27.08"N) #Lower Left (
18.2073421, 38.2349303) (
18d12'26.43"E, 38d14'5.75"N) #Upper Right ( 26.2426734,
46.3408557) ( 26d14'33.62"E, 46d20'27.08"N) #Lower Right ( 26.2426734,
38.2349303) ( 26d14'33.62"E, 38d14'5.75"N) #Center (
22.2250077, 42.2878930) (
22d13'30.03"E, 42d17'16.41"N) UNITS METERS IMAGECOLOR 255 255 255 PROJECTION
'proj=longlat'
'ellps=WGS84'
'datum=WGS84'
'no_defs'
'' END WEB TEMPLATE "openlayers.html" IMAGEPATH "/var/www/tmp/" IMAGEURL "tmp/" END LAYER
NAME "Deneme" #
DATA "data/Deneme.tif"
DATA "data/Deneme_tiled.tif"
STATUS DEFAULT
PROJECTION
"proj=latlong"
"ellps=WGS84"
"datum=WGS84"
END
TYPE RASTER END END |
Parçalı servis edilen
tif dosyası oluşturma işlemi
Eğer image in parçalı olarak servis edilmesini istiyorsanız, geotif dosyanızı
gdal_translate uygulaması ile tiled hale getirebiliyorsunuz.
$ gdal_translate -of GTiff -co "TILED=YES" Deneme.tif Deneme_tiled.tif |
OpenLayers ile
servis edilen haritaya web üzerinden servis etme işlemi
OpenLayers harita servislerini yönetebilmenizi sağlayan, uygulama
geliştiricilerin çoğunlukla tercih ettiğim open source bir javascript
kütüphanesidir. OpenLayers kullanarak, mapserv cgi uygulamasinin servis ettiği
tiled tif haritalara erişeceğiz.
<!-- MapServer Template --> <html> <head> <title>MapServer Simple Viewer</title> <style> body,td { background-color:#ccc; } </style> <script src="http://www.mapserver.org/lib/OpenLayers-ms60.js"></script> </head> <body> <div style="width:600px; height:500px;" id="map"></div> <script defer="defer" type="text/javascript"> var map = new OpenLayers.Map('map', {maxExtent: new OpenLayers.Bounds(18.2073421, 38.2349303, 26.2426734, 46.3408557), maxResolution: 1} ); var mslayer = new OpenLayers.Layer.MapServer( "MapServer Layer", "http://10.0.20.106/cgi-bin/mapserv?map=/var/www/mapfile2.map", {layers: 'basic'}, {singleTile: "true", ratio:1} ); map.addLayer(mslayer); map.zoomToMaxExtent(); </script> </body> </html> |
Anahtar kelimeler: mapserver nedir, openlayers nedir, arcmap, raster regitration, nasıl yapılır, mapserver, shapefile, shp, esri
Öneri, görüş ve sorularınızı aokany@gmail.com adresine gönderebilirsiniz.
Ali Okan Yüksel,
İzmir, 2011