Geographic Information Systems / Mapserver/Openlayers  Uygulama Geliştirme



İçerik

Geographic Information Systems / Mapserver/Openlayers  Uygulama Geliştirme_ 1

Hedefler 1

İşlemler 1

CGI betiğinin çalışması için httpd.conf düzenlenmesi işlemi 1

Projeksiyon tanımlama ve geotiff oluşturma işlemi 2

Mapfile dosyasının hazırlanması işlemi 3

Map file dosyamın ( /var/www/mapfile2.map ) içeriği: 3

Parçalı servis edilen tif dosyası oluşturma işlemi 4

OpenLayers ile servis edilen haritaya web üzerinden servis etme işlemi 4

 

 

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

Mapfile dosyasının hazırlanması işlemi

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 file dosyamın ( /var/www/mapfile2.map ) içeriği:

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