KML Polygon Tools

กรกฎาคม 9, 2008

         เมื่อเช้าผมนั่งเตรียมแผนที่สำหรับการนำเสนอข้อมูลสถิติ โดยผ่าน google earth เป็นซอฟท์แวร์ แน่นอนว่าสิ่งสำคัญที่ต้องทำคือการเตรียมข้อมูล KML ในรูปแบบ Polygon 3D หลังจากนำเสนอมีหลายๆท่านที่ชอบเพราะความสวยงามและน่าตื่นตาตื่นใจ วันนี้เลยนำ tools ในการช่วยสร้างมาแนะนำครับ

         ก่อนอื่นต้องบอกก่อนว่าการสร้างข้อมูล KML ทำได้หลากหลายวิธีครับ ทั้งจากการเขียนโปรแกรม การแปลงจาก shapefile และการแปลงจาก text file ธรรมดา เครื่องมือตัวที่ผมพูดถึงก็คือ Excel app called KMLxl  เป็น plug-in ที่สร้างจาก vba โดยทำงานบนโปรแกรม excel ซึ่งพัฒนาโดย Remy Paternoster มันสามารถสร้างปละแก้ไขข้อมูล KML ได้ โดยเฉพาะในเรื่องของการเพิ่มเติมหรือแก้ไขข้อมูล attribute การทำงานก็ง่ายครับ คือท่านอาจจะใช้โปรแกรม google earth หรือ google map สร้างข้อมูล kml จากแผนที่ขึ้นมาก่อน หรือกรณีที่มีข้อมูล GIS แบบ vector อยู่แล้วก็ใช้โปรแกรม OGR หรือ Arcgis export ให้เป็น KML แล้วจึงนำ KML มาแก้ไขเพิ่มเติม เพื่อสร้าง KML Polygon 3D โดยท่านสามารถปรับ scale หรือกำหนดขนาด สี ต่างๆเพิ่มเติมได้ แล้วก็ส่งออกเป็น KML นำไปใช้งานต่อไป ท่านที่สนใจสามารถไปดาวน์โหลดมาใช้งานได้ฟรีที่ http://www.cctindustrial.com/kmlxl/

 

-


Opticks : open source remote sensing

กรกฎาคม 4, 2008

        เมื่อวานเข้าไปนั่งกินกาแฟอยู่ที่ AIT พอดิบพอดีขากลับจึงไปเจอรุ่นน้องที่รู้จักกันสมัยเรียน จึงได้แวะทักทายคุยไปคุยมาอยู่นานเกือบชั่วโมงจนผมต้องขอตัวกลับบ้าน ในระหว่างที่คุยกันนั้นน้องคนนี้ได้ถามถึงโปรแกรมที่เกี่ยวข้องกับ Remote sensing ประเภท opensource ว่ามีอยู่หรือไม่ เพราะเท่าที่ดูแล้วมีน้อยจริงๆส่วนใหญ่ที่มีมักจะเป็นไลบารี่ที่เกี่ยวกับ image processing สะเป็นส่วนใหญ่ เมื่อเช้าเลยลองเข้าไปหาจาก google ปรากฏว่าไปเจอกับ Opticks โปรแกรม Remote sensing ประเภท opensource ที่น่าสนใจเข้า

         Opticks เป็นโปรแกรม remote sensing ที่ดังอยู่เหมือนกัน โดยแรกเริ่มเดิมทีไม่ได้เป็น opensource แต่มาถึงปัจจุบันกลายเป็น opensource เต็มตัวแล้ว โดยเป็น remote sensing development framework ที่มี licensed อยู่ในกลุ่ม LGPL 2.1. และที่สำคัญมีหลายหน่วยงานและ lab วิจัยนำไปใช้งานกันค่อนข้างมากแล้ว โดยในงาน FOSS2008 มีบทความสองสามชิ้นที่พูดถึงการนำ Opticks ไปใช้ในการวิเคราะห์ข้อมูล และอื่นๆ ซึ่งคาดว่าน่าจะเป็นการเปิดตัวอย่างเป็นทางการ

         Opticks มีฟังก์ชั่นที่น่าสนใจเยอะครับ ที่โดดเด่น คงเป็นเรื่องของการรองรับประเภทของข้อมูล remote sensing ที่หลายด้าน เช่น motion imagery, SAR, multi-spectral, hyper-spectral เป็นต้น นอกจากนี้ยังมีฟังก์ชั่นการวิเคราะห์ข้อมูลอื่นๆทั้งในแบบ optical remote sensing และ SAR , การทำงานร่วมกับข้อมูล GIS , ความสามารถในการรองรับสถาปัตยกรรม 64 bit ทำให้สามารถทำงานกับข้อมูลขนาดใหญ่ (มากกว่า 4 GB) ได้ จุดเด่นเรื่องการจัดการ IO และเรื่องของ memory ก็เป็นอีกเรื่องที่หลายคนกว่าถึง ซึ่งท่านสามารถเข้าไปอ่านสรรพคุณได้ที่ https://opticks.ballforge.net/servlets/ProjectProcess?tab=2 

         ท่านที่สนใจใช้งานก็สามารถไปลงทะเบียนและทำการดาวน์โหลดได้ที่ https://opticks.ballforge.net/ 

-

  

-

 


Googlemap Layers

กรกฎาคม 1, 2008

        หลังจากเปิดตัวการใช้งาน Openlayers ไปแล้วฟีดแบคกลับมาค่อนข้างดีมีหลายท่านชอบและนำไปใช้ จุดเด่นคือความง่ายและความยืดหยุ่น ผมก็พยายามจะเขียนคู่มือง่ายๆเพื่อให้สามารถนำไปฝึกใช้งานกัน แต่คงจะใช้เวลาสักระยะหนึ่งเนื่องจากช่วงนี้กำลังก้มหน้าก้มตาทำ thesis อยู่

       ในหัวข้อนี้ผมจะเขียนถึงการใช้ openlayers กับ google map โดยใน openlayers api ได้มี class สำหรับเชื่อมต่อกับ google map api อยู่แล้ว เพียงแค่ท่านนำ google map key ไปใส่ก็สามารถทำงานได้ทันทีเลย ตัวอย่างต่อไปนี้ผมจะสาธิตการใช้ google map layers โดยท่านสามารถเขียน code ได้ดังต่อไปนี้

<html >
  <head>
    <title>OpenLayers Google Layer Example</title>
    <link rel=”stylesheet” href=”http://openlayers.org/dev/theme/default/style.css” type=”text/css” />
    <style type=”text/css”>
        #map {
            width: 512px;
            height: 512px;
            border: 1px solid black;
        }
    </style>

<!– Google Map API Key –>
    <script src=‘http://maps.google.com/maps?file=api&v=2&key=ABQIAAAAjpkAC9ePGem0lIq5XcMiuhR_wWLPFku8Ix9i2SXYRVK3e45q1BQUd_beF8dtzKET_EteAjPdGDwqpQ’></script>
    <script src=”http://openlayers.org/api/OpenLayers.js“></script>
    <script type=”text/javascript”>
        var map;

        function init() {
            //สร้่าง map object สำหรับ openlayers
            map = new OpenLayers.Map(’map’);
            // กำหนดประเภทของ map control bar
            map.addControl(new OpenLayers.Control.LayerSwitcher());
            // กำหนด layer type ของ google layers
            var gphy = new OpenLayers.Layer.Google(
                “Google Physical”,
                {type: G_PHYSICAL_MAP}
            );
            var gmap = new OpenLayers.Layer.Google(
                “Google Streets” // the default layers
            );
            var ghyb = new OpenLayers.Layer.Google(
                “Google Hybrid”,
                {type: G_HYBRID_MAP}
            );
            var gsat = new OpenLayers.Layer.Google(
                “Google Satellite”,
                {type: G_SATELLITE_MAP}
            );

            // เพิ่มชั้นข้อมูลประเภท google layers จาก google map ลงใน map object
            map.addLayers([gphy, gmap, ghyb, gsat]);
           // กำหนดตำแหน่งเริ่มต้นสำหรับแสดงผลแผนที่
            map.setCenter(new OpenLayers.LonLat(100.652, 13.737), 7);
        }
    </script>
  </head>
  <body onload=”init()”>
    <h1 id=”title”>Google Layer Demo</h1>

    <div id=”tags”></div>

    <p id=”shortdesc”>
       ตัวอย่าง Google Map Layers on Openlayers Application
    </p>

    <div id=”map”></div>
  </body>
</html>

 

-


OKMAP:Free GPS Mapping

มิถุนายน 30, 2008

         วันนี้ผมมีซอฟท์แวร์ GPS Mapping น้องใหม่อีกหนึ่งตัวมาแนะนำครับ โดยตัวนี้มีชื่อว่า OKMAP สำหรับซอฟท์แวร์ตัวนี้เป็นซอฟท์แวร์ฟรีที่น่าสนใจ ฟีเจอร์การทำงานคล้ายกับพวก  OziExplorer และ GPS TrackMaker แต่ดีดว่าตรงที่ฟรี สามารถรองรับการทำงานกับ GPS ได้หลายรุ่นโดยผ่านทางไลบารี GPS Bible ฟังก์ชั่นการทำงานหลักของ OKMAP ก็มีดังต่อไปนี้ครับ

         - เปิดข้อมูล vector data ได้หลายฟอร์แมท รวมถึงการใช้เป็น Tools ในการ upload ข้อมูลแผนที่เข้าสู่ GPS ได้

         - นำเข้าข้อมูลราสเตอร์ ทั้งแบบ geotiff และ ecw ได้และรองรับระบบพิกัดภูมิศาสตร์ที่หลากหลาย

        - มี editing tool สำหรับสร้างและแก้ไข ข้อมูล waypoint และ route track

        - ฟังก์ชั่น Realtime GPS Tacking

        - ส่งออกข้อมูล GPS ไปสู่ KML ฟอร์แมทได้

       ท่านที่สนใจสามารถไปดาวน์โหลดมาใช้งานฟรีได้ที่ http://www.okmap.it


แปลงพิกัดด้วยง่ายๆ spread sheet

มิถุนายน 27, 2008

        กำลังมองหา tools ง่ายในการแปลงค่าพิกัด แล้วก็ไปเจอ Cartisan Map Coordinate Converter เข้าน่าสนใจดีเป็น tools เล็กที่ทำงานบน spread sheet เช่น excel หรือ openoffice ได้ โดยรองรับการประมวลผลได้ 5000 พิกัดในหนึ่งครั้ง

        Cartisan Total Map Coordinate Converter รองรับรูปแบบพิกัด Geographic coordinate ทั้งแบบ Dd, DMS, DMd โดยสามารถแปลงไปสู้ระบบพิกัดแบบ UTM and MGRS โดยรองรับ 14 datums ที่นิยมใช้งานมาก ท่านที่สนใจสามารถไปดาวน์โหลดมาใช้งานได้ฟรีที่ http://www.cartisan.com/map_resources/utilities/total_coordinate_converter.html

 


Mirone: GDAL ,GMT GUI Interface

มิถุนายน 17, 2008

         ถ้าเอ่ยถึงชื่อ MatLab คิดว่าหลายๆท่านที่เรียนมาทางด้านวิทยาศาสตร์และวิศวกรรมศาสตร์น่าจะรู้จักซอฟท์แวร์ตัวนี้เป็นอย่างดี MatLab เป็นซอฟท์แวร์ที่มีฟังก์ชั่นการคำนวณต่างๆมากมาย ครอบคลุมไปถึงเรื่องทางสถิติ และการแก้สมการขั้นสูง ในงาน Geoinfomatic ก็มีการใช้ในด้านงานวิจัยเป็นหลัก ผมเองเคยใช้ MatLab ในงาน Postprocessing สำหรับข้อมูล GPS ,Geostat,ใช้ในการคำนวณโมเดลการไหลของน้ำจากข้อมูลความสูงภูมิประเทศเป็นต้น รวมไปถึงงานด้าน Digital Image Processing แต่สำหรับตัวโปรแกรม MathLab ออกแบบมาเพื่อการคำนวณแต่ไม่ได้มีโมดูลหรือฟังก์ชั่นการคำนวณเชิงพื้นที่ โดยเฉพาะการเข้าถึงข้อมูล ผู้ใช้ต้องแบบข้อมูลให้อยู่ในรูปแบบข้อมูลเชิงเลขที่เป็น textfile ทำให้ค่อนข้างยุ่งยากในกรณีที่ข้อมูลมีจำนวนมาก

        ดังนั้นจึงมีผู้พัฒนาโปรแกรมในรูปแบบของ MATLAB-based framework โดยเอาไลบารีการคำนวณและ GUI ของ MathLab มาใช้ผนวกกับโมดูลการคำนวณและประมวลผลเชิงพื้นที่จากซอฟท์แวร์ Opensource ชื่อดังคือ GDAL(สำหรับประมวลผลและจัดการข้อมูลราสเตอร์)+ GMT(General Map Tool) ผลลัพธ์ที่ได้คือ software ที่ใช้ในการคำนวณเชิงพื้นที่ในรูปแบบ Grid รวมไปถึงฟังก์ชั่น Geostat, Spatial analysis และอื่นๆ โดย  MATLAB สามารถทำงานกับข้อมูลดิจิตอลที่เป็น Raster ได้โดยตรงและมีประสิทธิภาพดีกว่าเดิม Mirone มี 2 เวอร์ชั่นคือ sourcecode base on MATLAB(ต้องติดตั้ง MathLab ก่อน) หรืออีกแบบเป็น binary deploy (ไม่ต้องติดตั้ง MathLab) ฟังก์ชั่นต่างมีมากพอสมควรครับ แต่การคำนวณมีประสิทธิภาพดีมาก รวมถึงความเร็วในการคำนวณและการจัดการ memory ในเครื่อง ท่านที่สนใจไปดาวน์โหลดโปรแกรมได้ที่ http://w3.ualg.pt/~jluis/mirone/downloads.htm

ตัวอย่าง tile map

ตัวอย่าง SRTM mosaic tool

 


GDAL With .Net

มิถุนายน 13, 2008

          มี email มาถามถึงการใช้งานไลบารีในการประมวลผลภาพ (Digital image processing) รวมไปถึงการทำงานด้าน Remote sensing โดยต้องการสร้าง Application จากภาษา .Net จริงๆแล้วถ้าเป็นไลบารี่ opensource คงหนีไม่พ้น GDAL โปรเจคชื่อดังคุณภาพดี วันนี้เลยจะขอมาสาธิตวิธีการใช้งาน GDAL ไลบารีเบื้องต้นนะครับ

         1 วิธีการ Build GDAL

             - เปิด DOS

             - Run VCVARS32.bat อยู่ใน Microsoft Visual Studio 8/VC/bin

             - ดาวน์โหลด sourcecode ของ GDAL จาก http://www.gdal.org/ 

             - เข้าไปที่ Root directory แล้ว Run คำสั่ง nmake /f makefile.vc

             - install ด้วยคำสั่ง nmake /f makefile.vc install

              กรณีติดปัญหาลองเข้าไปอ่านเพิ่มเติมได้ที่ http://www.gdal.org/gdal_building.html หรือ http://www.vterrain.org/Distrib/gdal.html

           *** หรือไม่ก็ใช้ FWtools ก็ได้นะครับ

        2 . เตรียมตัวเขียนโปรแกรมกัน โดยผมใช้ภาษา C#.net ในการเขียน

            - copy ไลบารี่ต่างๆที่เกี่ยวข้อง ซึ่ง build ไว้มาเก็บไว้ในที่ต้องการ จากนั้นก็ add เข้ามาใน .net นะครับ

            - ลองเริ่ม basic step กับ gdal โดยจะเขียนโปรแกรม gdal เพื่อเรียกดู infomation และ header ของภาพถ่ายดาวเทียมหรือภาพถ่ายทางอากาศ โดยจะใช้ฟังกชั่น Gdal.Open() เพื่อเข้าถึงภาพ Raster แล้วจึงเข้าถึงรายละเอียดของคุณสมบัติต่างๆของภาพ Raster เช่น Map Projection, pixel value , Meatadata header เป็นต้น

public static void Main(string[] args)
    {

        if (args.Length != 1) usage();

        Console.WriteLine(”");

        try
        {
            /* ——————————————————————– */
            /*      Register driver ทั้งหมด                                            */
            /* ——————————————————————– */
            Gdal.AllRegister();

            /* ——————————————————————– */
            /*      เปิดไฟล์ Raster                                                   */
            /* ——————————————————————– */
            Dataset ds = Gdal.Open( args[0], Access.GA_ReadOnly );
  
            if (ds == null)
            {
                Console.WriteLine(”Can’t open ” + args[0]);
                System.Environment.Exit(-1);
            }

            Console.WriteLine(”Raster dataset parameters:”);
            Console.WriteLine(”  Projection: ” + ds.GetProjectionRef());
            Console.WriteLine(”  RasterCount: ” + ds.RasterCount);
            Console.WriteLine(”  RasterSize (” + ds.RasterXSize + “,” + ds.RasterYSize + “)”);
           
            /* ——————————————————————– */
            /*      Get driver สำหรับ Raster                                                      */
            /* ——————————————————————– */ 
            Driver drv = ds.GetDriver();

            if (drv == null)
            {
                Console.WriteLine(”Can’t get driver.”);
                System.Environment.Exit(-1);
            }
           
            Console.WriteLine(”Using driver ” + drv.LongName);

            /* ——————————————————————– */
            /*      Get metadata หรือ Header ของภาพ Raster                                                   */
            /* ——————————————————————– */
            string[] metadata = ds.GetMetadata(”");
            if (metadata.Length > 0)
            {
                Console.WriteLine(”  Metadata:”);
                for (int iMeta = 0; iMeta < metadata.Length; iMeta++)
                {
                    Console.WriteLine(”    ” + iMeta + “:  ” + metadata[iMeta]);
                }
                Console.WriteLine(”");
            }

            /* ——————————————————————– */
            /*      แสดง “IMAGE_STRUCTURE”                           */
            /* ——————————————————————– */
            metadata = ds.GetMetadata(”IMAGE_STRUCTURE”);
            if (metadata.Length > 0)
            {
                Console.WriteLine(”  Image Structure Metadata:”);
                for (int iMeta = 0; iMeta < metadata.Length; iMeta++)
                {
                    Console.WriteLine(”    ” + iMeta + “:  ” + metadata[iMeta]);
                }
                Console.WriteLine(”");
            }

            /* ——————————————————————– */
            /*     แสดงส่วนของ subdatasets.                                             */
            /* ——————————————————————– */
            metadata = ds.GetMetadata(”SUBDATASETS”);
            if (metadata.Length > 0)
            {
                Console.WriteLine(”  Subdatasets:”);
                for (int iMeta = 0; iMeta < metadata.Length; iMeta++)
                {
                    Console.WriteLine(”    ” + iMeta + “:  ” + metadata[iMeta]);
                }
                Console.WriteLine(”");
            }

            /* ——————————————————————– */
            /*      แสดงรายละเอียด geolocation.                                             */
            /* ——————————————————————– */
            metadata = ds.GetMetadata(”GEOLOCATION”);
            if (metadata.Length > 0)
            {
                Console.WriteLine(”  Geolocation:”);
                for (int iMeta = 0; iMeta < metadata.Length; iMeta++)
                {
                    Console.WriteLine(”    ” + iMeta + “:  ” + metadata[iMeta]);
                }
                Console.WriteLine(”");
            }

            /* ——————————————————————– */
            /*      แสดง image boundary                                                 */
            /* ——————————————————————– */
            Console.WriteLine( “Corner Coordinates:” );
            Console.WriteLine(”  Upper Left (” + GDALInfoGetPosition( ds, 0.0, 0.0) + “)”);
            Console.WriteLine(”  Lower Left (” + GDALInfoGetPosition( ds, 0.0, ds.RasterYSize) + “)”);
            Console.WriteLine(”  Upper Right (” + GDALInfoGetPosition( ds, ds.RasterXSize, 0.0) + “)”);
            Console.WriteLine(”  Lower Right (” + GDALInfoGetPosition( ds, ds.RasterXSize, ds.RasterYSize) + “)”);
            Console.WriteLine(”  Center (” + GDALInfoGetPosition( ds, ds.RasterXSize / 2, ds.RasterYSize / 2) + “)”);
            Console.WriteLine(”");

            /* ——————————————————————– */
            /*      Get raster band                                                 */
            /* ——————————————————————– */
            for (int iBand = 1; iBand <= ds.RasterCount; iBand++)
            {
                Band band = ds.GetRasterBand(iBand);
                Console.WriteLine(”Band ” + iBand + ” :”);
                Console.WriteLine(”   DataType: ” + Gdal.GetDataTypeName(band.DataType));
                Console.WriteLine(”   ColorInterpretation: ” + Gdal.GetColorInterpretationName(band.GetRasterColorInterpretation()));
                ColorTable ct = band.GetRasterColorTable();
    if (ct != null)
     Console.WriteLine(”   Band has a color table with ” + ct.GetCount() + ” entries.”);
               
    Console.WriteLine(”   Description: ” + band.GetDescription());
                Console.WriteLine(”   Size (” + band.XSize + “,” + band.YSize + “)”);
                int BlockXSize, BlockYSize;
                band.GetBlockSize(out BlockXSize, out BlockYSize);
                Console.WriteLine(”   BlockSize (” + BlockXSize + “,” + BlockYSize + “)”);
                double val;
                int hasval;
                band.GetMinimum(out val, out hasval);
                if (hasval != 0) Console.WriteLine(”   Minimum: ” + val.ToString());
                band.GetMaximum(out val, out hasval);
                if (hasval != 0) Console.WriteLine(”   Maximum: ” + val.ToString());
                band.GetNoDataValue(out val, out hasval);
                if (hasval != 0) Console.WriteLine(”   NoDataValue: ” + val.ToString());
                band.GetOffset(out val, out hasval);
                if (hasval != 0) Console.WriteLine(”   Offset: ” + val.ToString());
                band.GetScale(out val, out hasval);
                if (hasval != 0) Console.WriteLine(”   Scale: ” + val.ToString());
            }
        }
        catch (Exception e)
        {
            Console.WriteLine(”Application error: ” + e.Message);
        }
    }

 private static string GDALInfoGetPosition(Dataset ds, double x, double y)
    {
        double[] adfGeoTransform = new double[6];
        double dfGeoX, dfGeoY;
        ds.GetGeoTransform(adfGeoTransform);

        dfGeoX = adfGeoTransform[0] + adfGeoTransform[1] * x + adfGeoTransform[2] * y;
        dfGeoY = adfGeoTransform[3] + adfGeoTransform[4] * x + adfGeoTransform[5] * y;

        return dfGeoX.ToString() + “, ” + dfGeoY.ToString();
    }
}

———————————————————————————

code ตัวอย่างจาก GDAL developer group โดย Tamas Szekeres

         สรุปอีกที GDAL &OGR เป็นไลบารีที่มีประสิทธิภาพ และใช้งานได้สารพัดประโยชน์จริงๆครับ ท่านที่เริ่มศึกษาการเขียนโปรแกรมทาง GIS หรือ Remote Sensing ก็สามารถนไปประยุกต์ใช้ได้ ซึ่งจะช่วยลดภาระเรื่องการจัดการไฟล์ไปได้มากเลยทีเดียว อ่านรายละเอียดเพิ่มเติมและดูตัวอย่างอื่นๆที่ http://trac.osgeo.org/gdal/wiki/GdalOgrInCsharp

 

 


MapWindow 4.5 Stables

มิถุนายน 1, 2008

        ในที่สุด MapWindow 4.5 เวอร์ชั่นเต็มก็ออกมาแล้ว หลังจากที่ปรับแต่งกันจนเสร็จสมบูรณ์ ในเวอร์ชั่นนี้พัฒนาไปจากเดิมเยอะเหมือนกัน และมีการปรับแก้ bug ทั้งหลายที่บรรดาผู้ใช้โพสเข้าไป ที่สำคัญมีการแปรเมนูคำสั่งเป็นภาษาไทยด้วย(แต่หลายคนก็ไม่ชอบนะครับจากที่ลองใช้ใน QGIS) มาลองดูรายละเอียดฟีเจอร์ใหม่ๆกันนะครับ

  • “Bookmark View” ฟังก์ชั่น
  • สามารถปรับเปลี่ยน Map background
  • เพิ่ม string functions ในส่วน DBF table editor เช่น trim, substring, toupper, tolower
  • เพิ่มเมนูลัดจาก keyboard shortcuts
  • เพิ่ม เครื่องมือ วัดระยะทางและพื้นที่ ที่ใช้พารามิเตอร์ของ proj มาคิดคำนวณ
  • เพิ่ม label-moving tool
  • มีโมดูล Google Geocoder โดยสามารถสืบค้น geocode จากบริการของ Google ได้และสามารถแปลงไฟล์เป็น Shapefile format ได้อีก (requires free Google API key; limit of 5000 addresses per day)
  • Live GPS connection สามารถใช้เป็น viewer เพื่อ GPS tracking ได้ทันที
  • Metadata Editor Tools
  •         สนใจไปดาว์โหลดมาใช้งานได้ที่ http://www.mapwindow.org/download.php?show_details=1 

     


    Apple Geo Application

    พฤษภาคม 25, 2008

             หลังจากที่เคยเขียนเรื่อง Apple กับซอฟท์แวร์ทางด้าน Geoinfomatic ก็มีสาวก apple ฝากให้ช่วยหาโปรแกรมใหม่ๆมาแนะนำแต่เนื่องจากผมไม่ได้ใช้ apple เป็น OS ประจำกายเหมือน windows กับ Ubuntu จึงไม่ได้ติดตามแบบใกล้ชิด เรียกว่านานๆจึงจะเจอตัวเด็ดๆสักที ว่าแล้ววันนี้ก็นำมาซอฟท์แวร์ฟรีมาฝากกันอีก 2 ตัวครับ

             ซอฟท์แวร์ตัวแรกคือ LoadMyTracks1.3 เป็นซอฟท์แวร์อีกตัวที่หลายคนบอกว่าใช้งานง่าย โดยใช้จัดการงาน upload/download ข้อมูลจาก GPS นอกจากนี้ยังรองรับการทำงานกับฟอร์แมท GPX และ KML ซึ่งในเวอร์ชั่นปัจจุบันสามารถทำงานได้กับ GPS ชนิดต่างๆเช่น Garmin, GlobalSat, Lowrance, Magellan, Sony, Timex, TomTom ท่านที่สนใจสามารถไปดาวน์โหลดมาใช้งานได้ที่ http://www.apple.com/downloads/macosx/math_science/loadmytracks.html 

     

             ซอฟท์แวร์อีกตัวหนึ่งเป็นซอฟท์แวร์ประเภท Photo Management ชื่อว่า JetPhoto ซึ่งมีฟีเจอร์การทำงานรองรับ Geotaging และมีฟังก์ชั่นเชื่อมโยงการทำงานกับ GPS กล่าวคือสามารถเปิดดูข้อมูลตำแหน่งของภาพบนแผนที่อย่าง Google Earth ได้ท่านที่สนใจสามารถเข้าไปอ่านรายละเอียดและดาวน์โหลดโปรแกรมได้ที่ http://www.apple.com/downloads/macosx/imaging_3d/jetphotostudio.html

    บทความเก่าที่เกี่ยวข้อง

    1. http://emap.wordpress.com/2008/03/14/geotagging/ 

    2. http://emap.wordpress.com/2008/03/21/gis-on-mac/

     


    Opensource Cartogram Software

    พฤษภาคม 19, 2008

             Cartogram เป็นการนำเสนอข้อมูลสถิติในรูปแบบของแผนที่ซึ่งไม่คงรูป โดยนำเสนอค่า value ของแต่ละ feature แทนที่ด้วยขนาดพื้นที่ (polygon) หรือระยะทาง(line) โดยจะมีการนำมาใช้ในแสดงข้อมูลสถิติต่างๆ เช่นจำนวนประชากร,ค่าความรู้ในแต่ละประเทศ เป็นต้น ซึ่งสามารถอ่านรายละเอียดเพิ่มเติมได้ที่ http://en.wikipedia.org/wiki/Cartogram 

    ตัวอย่างแสดง Area cartogram ของสัดส่วนคะแนนเสียงต่อประชากรที่ได้รับเลือกตั้งในรัฐของประเทศอเมริกา

            ขออนุญาติอธิบาย cartogram แบบคราวๆนะครับ เพราะเชื่อว่าหลายท่านที่เรียน Geostat น่าจะรูปจักดี แต่ประเด็นหลักที่จะนำมาเสนอวันนี้คงเป็นซอฟท์แวร์ opensource ที่ชื่อว่า ScapeToad ซึ่งเป็น Cartogram tools ที่น่าสนใจทีเดียว

            ScapeToad ใช้งานค่อนข้างง่ายครับ พัฒนาขึ้นจากภาษา JAVA ใช้ Gastner/Newman [2004] diffusion-based algorithm รองรับฟอร์แมทข้อมูลแบบ Shapefile และสามารถ export ข้อมูลแผนที่ผลลัพธ์ในรูปแบบของ SVG ได้อีกด้วย สนใจสามารถเข้าไปดาวน์โหลดซอฟท์แวร์มาใช้งานได้ที่ http://chorogram.choros.ch/scapetoad/ 

     


    SpatiaLite

    พฤษภาคม 18, 2008

            อาทิตย์หน้ามีอบรม Spatial Database ที่จุฬา ช่วงนี้เลยฟิตนั่งหาอ่านเรื่องราวต่างๆที่เกี่ยวกับ spatial database เป็นหลัก แล้วผมก็ไปป๊ะกับ  SpatiaLite and VirtualShape ซึ่งเป็นโปรเจคที่ทำเกี่ยวกับ spatial data management บน  sqlite database หลายๆท่านคงรู้จัก sqlite  เล็กพริกขี้หนูตัวนี้ดี ผมเองก็เคยใช้งาน sqlite อยู่บ้างเพราะว่าตัวเล็กใช้ง่าย ย้ายคล่อง และก็สามารถใช้งานร่วมกับ PHP ผ่าน web ได้ดี อ่านรายละเอียดที่ http://www.sqlite.org/whentouse.html )

            SpatiaLite and VirtualShape พัฒนาโดยคุณ Alessandro Furieri  เป็น Opensource software ฟีเจอร์การทำงานก็ไม่เบาเลยทีเดียวนะครับ เช่น รองรับ  WKT and WKB , มี SQL spatial functions เช่น AsText(), GeomFromText(), Area(), PointN() (ไม่ครอบคลุมทั้งหมด SF Spec), Import/export Shapefile, รองรับ coordinate reprojection ผ่านทาง PROJ.4 เทคนิคการทำงานของ ก็คือการใช้ VirtualShape สำหรับช่วย SQLite ติดต่อกับ shapefile เช่นเดียวดับ virtual table ซึ่งก็คล้ายกับเทคนิคของ sqlite OGR driver.

            การใช้งานก็ง่ายสะดวกเพราะเป็น dll ที่ทำงานร่วมกับ sqlite การติดตั้งไม่ซับซ้อน ประสิทธิภาพก็ ok ดีพอใช้แต่ก็ไม่เท่ากับ database ขนาดใหญ่ ผมขอบตรงที่สะดวก ท่านที่สนใจเข้าไปดาวน์โหลดมาใช้งานได้ที่ http://www.gaia-gis.it/spatialite/ 

           ตัวอย่างด้านล่างผมทดลองใช้งาน SpatiaLite and VirtualShape กับข้อมูลจังหวัด

          1. เริ่มต้นจากการโหลด .dll ทั้งหมดและ SQLite

          2. ทำการเข้าโปรแกรม โดยพิมพ์คำสั่ง SQLiteGeo.exe test.db

          3. โหลด extension SpatiaLite and VirtualShape ใช้คำสั่ง

               .load ‘SpatiaLite.dll’
               .load ‘VirtualShape.dll’

              4. สร้าง visual table โดยระบุชื่อ table และชื่อของ shapefile ที่จะ load

                    CREATE virtual table province using VirtualShape(province);
              5. ทดลองเขียนคำสั่ง SQL : Select * from province;

     


    Quantum GIS 0.10.0 ออกแล้วครับ

    พฤษภาคม 6, 2008

           ในเวอร์ชั่นนี้มีการแก้ไข bug 140 แห่ง เพิ่มความเสถียรของโปรแกรม เพิ่มความสามารถในเรื่องการ edit เช่น การ split features ,snap ที่สำคัญมีการพัฒนาในส่วนการทำงานของราสเตอร์ในด้านต่างๆ เช่นการทำ color classification และรองรับการทำงานกับ transparent layer นอกจากนี้ยังมีการปรับปรุงในส่วนของ python plug-in โดยผู้ใช้สามารถดาวน์โหลด plug-in ต่างๆหรือเขียน plug-in ด้วยภาษา python ได้อีกด้วยครับ

            นอกจากนี้ยังมีฟีเจอร์อีกสองฟีเจอร์ที่ QGIS ได้รับการสนับสนุนจากโครงการ Google’s Summer of Code ได้แก่ ฟีเจอร์การจัดการ symbol ในเรื่องของ scale และ rotation ซึ่งสามารถนำค่าจะ attribute มาใช้ในการ config ได้ สุดท้ายเป็นฟีเจอร์ contour line ที่จะเพิ่มเข้ามาในเวอร์ชั่น 10 นี้ สุดท้ายสิ่งที่มาใหม่ จะเป็นเมนูภาษาไทย ซึ่งคุณ แมน ได้มีการปรับแก้และพัฒนาเมนูภาษาไทย สำหรับคนไทยในโปรแกรม QGIS เพื่อให้ใช้งานได้ง่ายขึ้น ท่านที่สนใจสามารถดาวน์โหลดโปรแกรม QGIS ได้ที่ http://download.qgis.org/downloads.rhtml

    รูปที่ 1 หน้าต่างต้อนรับของ QGIS 10

    หน้าต่างแรกพร้อมทำงาน ในรูปแบบเมนูภาษาไทย

    ทดสอบการทำงานกับ Raster File ก็ใช้งานได้ดีครับ

    ทดสอบการทำงานกับ Vector file และ PostGIS ก็ทำงานได้ปกติครับ

    การแสดงผลภาษาไทยในตาราง attribute

    ฟังก์ชั่นบางส่วนเกี่ยวกับ Geoprocessing ที่เพิ่มขึ้นใน Grass Tools box

     


    GDAL tools

    เมษายน 26, 2008

           เคยกล่าวถึง GDAL tools มาหลายๆครั้งจนหลายท่านถามมาว่ามันมีประโยชน์อะไร และใช้งานอะไรได้บ้าง ถ้าให้ผมตอบคงต้องเขียนยาวเลยครับ เพราะว่า GDAL tools เป็นไลบารีจัดการด้าน Image Processing ที่ใช้ในได้ทั้งการเตรียมข้อมูลไปจนถึงวิเคราะห์ข้อมูล แต่ข้อเสียคือมันเป็น command คนเลยไม่ค่อยใช้ แต่ข้อดีคือมันเขียน Batch หรือ Script ได้ง่าย เหมาะกับการทำงานจำนวนมากๆ เช่นผมเคยต้องแปลงฟอร์แมท์ภาพถ่ายทางอากาศ 1000 ไฟล์และบีบอัดด้วย ถ้าใช้ซอฟท์แวร์ทั่วไปก็คงต้องกดกันหลายคำสั่งและใช้เวลานาน แต่ GDAL เขียน script ง่ายๆ 10 บรรทัด แล้ว RUN ก็จบ

           พูดอย่างเดียวก็อาจจะไม่ค่อยมีคนเชื่อนัก ดังนั้นจึงพยายามเอามานำเสนอในรูปการใช้งาน เพื่อว่าท่านจะได้นำไปประยุกต์ใช้งานได้ วันนี้มีงานคือต้องลดขนาดภาพ ผมจึงใช้ GDAL tools จาก package FWTOOLS มาจัดการ โดยใช้คำสั่งดังนี้ครับ

    gdal_translate -srcwin 41000 6000 800 600 -of jpeg world_dem.tif bg_out.jpg 

     


    Radar Tools

    เมษายน 24, 2008

            วันนี้ของนำเสนอ open-source software ตัวหนึ่งที่ใช้ในการประมวลผลข้อมูลประเภท SAR (Synthetic Aperture Radar) โดยซอฟท์แวร์ตัวนี้ชื่อว่า RAT (Radar Tools) ความน่าสนใจอยู่ตรงที่ RAT พัฒนาขึ้นโดยเติมเต็มซอฟท์แวร์ Remote Sensing ทั้วไป โดยซอฟท์แวร์ Remote Sensing ทั้วไปจะมีฟังก์ชันการประมวลผลทาง SAR ที่ค่อนข้างน้อยและเป็นฟังก์ชั่นทั่วไป แต่ในการประมวลผลขั้นสูงยังคงขาด ผู้พัฒนาจึงทำการเขียนฟังก์ชั่นในการประมวลผลขั้นสูงขึ้นเช่น SAR polarimetry (PolSAR), interferometry (InSAR) and polarimetric interferometry (PolInSAR)  เพื่อให้ผู้ใช้ได้นำไปใช้ โดยที่ผมชอบคือมันพัฒนาจาก IDL ดังนั้น GUI จะค่อนข้างใช้ได้ (หน้าตา GUI คล้าย ENVI) ไม่เป็น command line เหมือนที่ผมเคยใช้บน linux และดูแล้วค่อนข้างน่าเชื่อถือ เพราะเป็นซอฟท์แวร์ in house ที่มีคนใช้เยอะพอสมควรท่านที่สนใจสามารถไปดาวน์โหลดโปรแกรมและซอสโค้ดได้ที่ http://www.cv.tu-berlin.de/rat/ ก่อนลงต้องติดตั้ง IDL Virtual Machine ก่อนครับ

    ตัวอย่างโปรแกรม แสดงภาพข้อมูล SAR ครับ

    ตัวอย่างการประมวลผล SLC image

     


    Lidar Opensource Tools

    เมษายน 24, 2008

          ปัจจุบัน LIDAR(Light Detection and Ranging) กลายเป็นเทคโนโลยีในการสำรวจสภาพภูมิประเทศแบบใหม่ที่กำลังได้รับความนิยมในประเทศไทย โดยเริ่มมีการนำ LIDAR มาใช้ในการสำรวจในหลายพื้นที่ นอกจากนี้ LIDAR ยังสามารถนำมาช่วยเพิ่มประสิทธิภาพในการทำงานร่วมกับระบบงาน Digital Photogrametry โดยสามารถใช้ LIDAR ในการผลิต DEM ความละเอียดสูง เพื่อนำมาใช้ในกระบวนการ Ortho Rectification เรื่องของ LIDAR มีค่อนข้างเยอะครับ และบ้านเราก็มีการวิจัยและใช้งานกันมากขึ้นทั้งในหน่วยงานของรัฐ มหาวิทยาลัยและบริษัทเอกชนในโอกาสหน้าจะนำมาเล่าสู่กันฟังอีกที ตัวผมเองเคยมีโอกาสได้จับงานด้าน LIDAR อยู่ช่วงหนึ่งซึ่งก็เป็นโชคดีที่ผมได้ไปเข้าร่วมในโครงการนั้น เพราะทำให้ได้เรียนรู้เทคโนโลยีเกี่ยวกับ LIDAR อย่างจริงจังทั้งจากอาจารย์ผู้เชี่ยวชาญ โดยเฉพาะมีโอกาสได้ฟังการบรรยายจากผู้เชี่ยวชาญต่างประเทศ

          วันนี้ที่เขียนเรื่อง LIDAR เพราะมีท่านหนึ่ง email มาถามถึงซอฟท์แวร์ Opensource ที่ใช้ประมวลผลและจัดการข้อมูล LIDAR ว่ามีหรือไม่ คำตอบคือมีครับ แต่แน่นอนว่าอย่าไปคาดหวังว่ามันจะใช้งานได้ง่ายและสะดวกเหมือนซอฟท์แวร์คอมเมอร์เชียลราคาแพง แต่ถ้ามองในเทอมของการใช้งาน และการปรับปรุงพัฒนา algorithm สำหรับการประมวลผลก็ถือว่าน่าใช้งานทีเดียว ปกติที่ผมได้ทำลองใช้อยู่มี 2 ตัวครับคือ LASTOOLS และ LIB LAS 

          LASTOOLs ก็เป็นตัวที่น่าสนใจ เนื่องจากมี algorithm “Streaming Computation of Delaunay Triangulations ” สำหรับแสดงผลและจัดการข้อมูลขนาดใหญ่ได้ดี และมีฟีเจอร์ต่างๆที่เยอะพอสมควรตัวนี้ผมรู้จักจากการแนะนำของ อ.ไพศาล ส่วน Lib LAS พบจาก mailing list ก็พอใช้งานได้และยืดหยุ่นมากกว่าตรงที่มีทั้งไลบารีแบบภาษา C++ และ Python ให้เลือก ท่านที่สนใจสามารถไปดาวน์โหลดมาใช้งานได้ที่

         - libLAS : Python http://liblas.org/browser/trunk/python/tests

         - libLAS : C++ http://liblas.org/

         - LASTools : http://www.cs.unc.edu/~isenburg/lastools/download/

    *** ดูตัวอย่างข้อมูล LIDAR Online ได้ที่ http://gisdata.usgs.gov/website/Lidar/viewer.php?Box=-89.84:30.72:-88.21:30.03


    SRS From URL

    เมษายน 24, 2008

           จริงๆแล้วเรื่องที่นักพัฒนางานด้าน GeoInfomatic ต้องรู้ ไม่ว่าท่านจะมีพื้นฐานด้านใดก็คือเรื่องของ Mapping และ Spatial Coordinate Reference System หรือถ้าพูดภาษาง่ายๆก็คือเรื่องที่เกี่ยวกับ Map Datum, Map Projection นั้นเอง โดยทั่วไปแล้วงานที่เกี่ยวข้องกับการแปลงระบบพิกัดภูมิศาสตร์ของข้อมูล GIS วิธีการที่ชัดเจนและมีผลอย่างมากต่อค่าความถูกต้องของข้อมูลเชิงพื้นที่

           tool ประเภท Opensource ที่นิยมในการทำงานด้านนี้คือ Proj4 โดยจะยึดเอาค่าพารามิเตอร์และระบบรหัสการเรียกขานแบบ EPSG ซึ่งไลบารี่ตัวนี้ก็ทำงานร่วมกับ GDAL และ OGR สำหรับใช้ในการแปลงค่าพิกัด แต่ปัจจุบันการแปลงค่าพิกัดใน GDAL 1.5 ได้พัฒนาขึ้นโดย สามารถใช้การอ้างอิงผ่าน URL ได้โดยจะอาศัย SRS List จาก http://spatialreference.org  หรือกำหนดเอง ซึ่งทำให้การแปลงค่าพิกัดภูมิศาสตร์มีความยืดหยุ่นมากกว่าเดิมโดยเฉพาะกรณีที่ผู้ใช้ไม่ทราบรหัสที่แน่นอนของ EPSG หรือไม่ต้องการใช้ค่าสากล นอกจากนี้กรณีการแปลงสู่ local datum ผู้ใช้ยังสามารถ เข้าไป defined ค่า SRS ได้ที่ http://spatialreference.org/ref/user/ เพื่อให้ได้ค่าที่ถูกต้องและเหมาะสมกับสภาพภูมิศาสตร์ของแต่ละพื้นที่ โดยการใช้งานแบบ URL สามารถทำได้ดังนี้

    ogr2ogr -t_srs http://spatialreference.org/ref/user/test_thai_local/
    -s_srs EPSG:4326 world_borders_albers.shp world_borders.shp
    ** ตัวอย่างเป็นการแปลงจาก WGS84 มาสู่ indian 1975 โดยใช้พารามิเตอร์ในการแปลงที่กำหนดด้วย URL

    GeoServer 1.6.3 Release

    เมษายน 10, 2008

         GeoServer ประกาศปล่อย GeoServer 1.6.3 ให้ออกมาใช้งานได้แล้วครับ โดยในเวอร์ชั่น 1.6.3 มีการปรับแก้ Bug และ Error ต่างๆเกือบ 30 จุดจากเวอร์ชั่นก่อนหน้า

          สิ่งหนึ่งที่เห็นได้ชัดเจนคือการเพิ่มฟีเจอร์ของการทำ Watermarking  หรือลายน้ำสำหรับการประทับตรา เจ้าของข้อมูลลงในแผนที่ที่ให้บริการผ่าน WMS  โดยสามารถกำหนดขนาด ความโปร่งแสง และตำแหน่งที่แสดงผลของลายน้ำได้

           อีกสิ่งหนึ่งที่น่ายินดีคือการเพิ่มส่วนของ coverage reprojection ที่สามารถทำงานได้ดีและเร็วมากขึ้น นอกจากนี้ GeoServer เวอร์ชั่นใหม่ยังได้ปรับให้ admin สามารถกำหนดส่วนของ limited of CRS list ทำให้ไม่ต้องเปิดให้บริการในระบบอ้างอิงแผนที่ทั้งหมด ซึ่งลดภาระการทำงานของแม่ข่ายแผนที่ได้มากทีเดียว

             ท่านที่สนใจสามารถอ่านรายละเอียดเพิ่มเติม เกี่ยวกับการเปลี่ยนแปลงได้ที่ http://jira.codehaus.org/secure/IssueNavigator.jspa?reset=true&pid=10311&fixfor=14102 และสามารถดาวน์โหลดโปรแกรมได้ที่ http://geoserver.org/display/GEOS/GeoServer+Home 

     


    FOSS4G 2008

    เมษายน 6, 2008

           Open Source Geospatial Foundation (OSGEO) เป็นเจ้าภาพจัดงาน FOSS4G (Free and Open Source Software for Geospatial ) ขึ้นที่ Capetown, South Africa ในวันที่  29 ก.ย. - 3 ต.ค. 2551 โดยมี Autodesk และ Google เป็นผู้สนับสนุนหลักของงานนี้

           โดยมีหัวข้อหลักของการจัดงานในครั้งนี้ได้แก่

    - New FOSS GIS developments
    - Interoperability and standards - OGC, GEOSS
    - Web processing services, Sensor Web enablement and the like
    - Using FOSS with proprietary software
    - Making the transition to FOSS GIS
    - FOSS GIS support and training
    - FOSS GIS business models
    - FOSS GIS implementation and deployment
    - Open data, open content, open architectures, open everything!
    - Case studies of open source implementations
    - Improving FOSS GIS cartography and map production
    - Use Case driven FOSS GIS development and improving the user experience
    - FOSS GIS Internationalisation and Localisation
          สามารถอ่านรายละเอียดเพิ่มเติมได้ที่ http://conference.osgeo.org/index.php/foss4g/2008

     

     


    WWJava 1.0

    เมษายน 2, 2008

           WorldWind Java 1.0 เปิดตัวโปรแกรมที่ JavaOne โดย WorldWind เป็นเวอร์ชั่นที่พัฒนาบน JAVA รองรับ enviroment ทั้งแบบ netbeans ide และ eclipse โดยฟีเจอร์การทำงานหลักๆก็ยังคงเดิมเหมือนใน .net version ซึ่งเป็นโปรแกรมที่นำเสนอข้อมูลเชิงพื้นที่ในรูปแบบ 3-D virtual globe ข้อเด่นคือมีการเพิ่มส่วน API ในการ integrate การทำงานเข้ากับ web application ทั้งในรูปแบบ 2D และ 3D ท่านที่สนใจสามารถไปดาวน์โหลดซอสโค้ดและโปรแกรมได้ที่ http://worldwind.arc.nasa.gov/java/

           

     


    Mobile GIS Opensource Application

    มีนาคม 31, 2008

          เดี่ยวนี้อุปกรณ์มือถือต่างๆ ถูกพัฒนาให้มีความสามารถเพิ่มมากขึ้นจนเกือบจะเท่ากับเครื่องคอมพิวเตอร์ทั่วไป โดยเฉพาะบน Pocket PC ที่บางยี่ห้อมีหน่วยประมวลผลและหน่วยความจำที่มีประสิทธิภาพสูงจนสามารถ รองรับการทำงานกับโปรแกรมประยุกต์ที่มีการประมวลผลขั้นสูงได้

          Mobile GIS ก็คือระบบ GIS ที่ทำงานอยู่บนอุปกรณ์พกพา ก่อให้เกิดความสะดวกในการใช้งานโดยเฉพาะงานที่ต้องการเข้าถึงระบบในพื้นที่จริง มี email ฉบับหนึ่งที่ถามถึงซอฟท์แวร์ประเภท Mobile GIS ที่เป็น Opensource วันนี้ผมมีมาแนะนำ ซอฟท์แวร์ตัวนี้ชื่อ gvSIG Mobile การทำงานก็คล้ายกับ gvSIG เวอร์เต็มที่ทำงานบน desktop PC แตกต่างตรงที่ว่าบางฟีเจอร์อาจจะถูกตัวทิ้ง

         gvSIG Mobile เป็น Opensource Software ตัวจิ๋วที่รองรับระบบ Windows Mobile  ของ Pocket PC โดยโปรแกรมถูกพัฒนาจากภาษา javaโดยรองรับ data format ประเภท shapefiles, ECW, WMS และ images  นอกจากนี้ยังสามารถเชื่อมต่อการทำงานกับระบบ GPS บนอุปกรณ์พกพา เช่นการ tracking ได้อีกด้วย การเตรียมข้อมูลก็ง่ายสามารถใช้ gvSIG Desktop เตรียมข้อมูล แล้วทำการ sync ผ่าน extension ใน gvSIG Desktopได้เลย ท่านที่สนใจสามารถไปดาวน์โหลดมาใช้งานและสามารถนำซอสโค้ดมาพัฒนาต่อได้ที่ http://www.gvsig.gva.es/index.php?id=gvsig&L=2

    31.jpg

    41.jpg