O3dg Install

Standard

มาเริ่มกันเลยดีกว่านะครับ

prerequire ก็มีหลายตัวเช่น
-qhull,qhull-devel, Delny , postgresql ,postgis ,python,python-dev,python-numeric,python-pg เป็นต้นนะครับ

แต่เนื่องด้วยมีัปัญหานิดหน่อยสำหรับ python ที่ไม่มีการ complile ให้ใช้ ucs4 สำหรับ encodind จึงต้องทำการ recomplied ใหม่แล้วถอนตัวเก่าออกสะ (ทำให้ยุ่งยากมาก)

กระบวนการก็มีดังนี้
- remove python และ libpython ให้เกลี้ยง (ถึงแม้มันจะบอกว่าต้องถอนบางโปรแกรมออกด้วยก็ต้องยอม)
- install new python,pyhton-base,python-doc,tkinter,libpython,libpython-dev
- install หรือ reinstall ชุด foss4g
- install libqhull , libqhull-dev, python-numeric, python-numeric-dev, python-pg
- install Delaunay
- python fixsyspath.py และทำการ update /etc/profile
- install html ของ o3dg และ cgi-bin ไฟล
- ติดตั้ง DB โดยมีการเพิ่มสร้าง createlang plpythonu o3dgdb มาด้วยจากนั้นก็สร้าง function ด้วย o3dg_postgis.sql
- นำเข้า shp ให้อยู่ในรูป 3D table
- ดำเนินการ แก้ไข path ต่างให้เรียบร้อย
- แก้ไขค่า /etc/httpd/conf/httpd.conf
# Add Handler for X3D,VRML file
AddType model/x3d+xml .x3d
AddType model/x3d+vrml .x3dv
AddType model/x3d+binary .x3db
AddEncoding gzip .x3dvz
AddEncoding gzip .x3dbz

ปล การแก้ไข python ให้ support ucs4 โดยการเพิ่ม –enable-unicode=ucs4

%configure2_5x –with-threads –with-cycle-gc –with-cxx=g++ –without-libdb –enable-ipv6 –enable-shared –enable-unicode=ucs4
และต้อง install package ดังนี้ด้วย blt,blt-scripts,libblt2,libdb2,libdb2-dev,libdb4.2-dev,libdbcxx4.2,libdbtcl,libgmp

AppforMap Application ภาคต่อ

Standard

มันยังไม่จบกันง่าย ๆ ครับพี่น้อง เนื่องมันเป็น version แรกอะนะ เจ้าของ code ยังจัดสรรอะไรได้ไม่หมด ค่าบางค่าเวลาจะ tune up จำเป็นต้องค้นหากันนิดหน่อย

วันนี้มาว่ากันเรื่อง Background_color

โดยมันจะมีค่าระบุไว้ใน code ของ function.php ถึงแม้เราจะเปลี่ยนค่าใน map file อย่างไรก็ตามมันก็ยังไม่เปลี่ยนอยู่นะครับต้องทำการเปลี่ยนใน code มันจริง ๆ แล้วน่าจะแยกไปเก็บใน maplinkconfig.php
นะเนี่ย

$background_color = ImageColorAllocate( $im, 235, 235, 235);

อะนะก็ต้องมาตามแก้มันสะ

ใช้งาน Plone กับ Mini Thin AppforMap

Standard

วันนี้มาสั้น ๆ แล้วกัน

ความแตกต่างของ obj ใน Plone เลือกให้ดีว่าจะเพิ่ม

-Directory (ห้อง)
-Page มันจะแสดง link แล้วแสดง page เมื่อ click
-File มันจะแสดงรายการชื่อไฟล์และเปิดไฟล์เมื่อ click

ส่วนการเพิ่ม AppforMap mini client เข้าไปจำเป็นต้องใช้ iframe tag

โดยใส่

<iframe>http://160.193.3.63/appformap/client_mini.phtml?defaultLayers=ampm><iframe>
ก็จะได้ผลดังรูปข้างล่าง

เข้าไปแต่ว่าด้วยความปลอดภัย Plone จะเ็ก็บ content แต่ไม่ render ทำให้ต้องไปแก้ใน Zope ให้มันอนุญาตอีกครั้ง

/ /portal_transforms/safe_html

โดยเพิ่มให้ iframe มีค่าเท่ากับ 1 ใน valid tag แล้วทำการ restart มันสะ

หรือหากจะแก้ทั้งหมดเพื่อใช้ในครั้งต่อ ๆ ไปก็ต้องไปแก้ใน


/python/Product/CMFDefault/utils.py

เกร็ดเล็กน้อย สารพัน Mapserver ทั้งหลาย 1

Standard

พอดีวันนี้เจอปัญหาด้าน Symbol Scaling ที่เกิดขึ้นกับ Symbol ที่เป็น PixMap ที่เกิดขึ้นกับ Mapserver 4.8.1
ก็เลยนั่งหาคำตอบอยู่นานเลยเจอ link ต่าง ๆ และเกร็ดบางอย่างน่าสนใจเลยเอาลงไว้แก้ขัดนะครับ

เป็น webboard ที่รวมความรู้ด้าน GIS และ Mapserver ไว้คนข้าง ใช้ได้เชียวเลย

Nabble

นี่เป็นอีกคำตอบนึงที่ได้จาก web แห่งนี้ยังไม่เคยลองเหมือนกัน
เป็นการใช้คำสั่งของ gdal ในการทำ tiling ไว้จะลองใช้ดู

เป็นคำสั่งในการสร้าง Tiled Tiff file ออกมา
gdal_translate -co TILED=YES your.tif tiled.tif

เป็นคำสั่งสร้าง preview ออกมา
gdaladdo tiled.tif 2 4 8 16 32 64 128 256

นี่ก็เป็นอีกหนึ่งของ Client ตัวใหม่ ที่น่าสนใจ คาดว่าพัฒนามาจาก Thesis ของเด็ก ปโท

FIST

วกกลับด้วย AppforMap กันสะหน่อยแล้วกันนะ

php.ini ต้องอนุญาตให้ใช้

register_globals = On

เพื่อจะทำให้สามารถใช้ CheckBox และฟังก์ชัน ต่าง ๆ ได้อย่างสมบูรณ์

จากนั้นด้านการใช้งาน postgis 1.0 อาจมีปัญหาบ้างนิดหน่อยกับเรื่องของข้อมูลเพราะมีการเข้มงวดกับการใช้มากขึ้นจาก postgis 0.8

โดยตัวอย่างที่ต้องทำการแก้ไข code ที่ทำการเพิ่มจุดเข้าไปให้นั้นจะรับได้แค่ จุดแรกที่กด เท่านั้น ส่วนจุดอื่น ๆ ก็จะข้ามไป
ใน functions.php


switch ($this -> theGeometry)
{
////Edit Change Log 1
case POINT :
$pointgeoCoordStr=explode(“,”,$geoCoordStr);
$__wkt=”POINT($pointgeoCoordStr[0])”;
break;

ที่เหลือก็ยังมีพวก ค่าการ zoom to point ที่ีมีการใ้ช้ magic number ใน file attrupdate.phtml ไว้ที่ 100 ซึ่งหากใช้หน่วยของแผนที่แบบ degrees ก็สัก 1 หรือ 1.5 ก็น่าจะดีกว่า

แล้วในส่วน Measure นั้นจะใช้ได้กับ Map File ที่ใช้ หน่วยเป็น Meters

- การแสดง Legend ด้วยคำสั่ง Drawlegend สำหรับ i18n

ต้องทำการกำหนด การแสดงค่าใน Label object ใน Legend obj ให้เป็นดังรูปแบบด้านล่าง

LEGEND
KEYSIZE 40 20
KEYSPACING 10 10
OUTLINECOLOR 0 0 0
IMAGECOLOR 255 255 255
LABEL
TYPE TRUETYPE
ENCODING SJIS
FONT “Sazanami-Mincho”
COLOR 0 0 0
SIZE 12
POSITION CL
PARTIALS FALSE
BUFFER 3
END
STATUS OFF
END

แล้ว legend จะทำาการสร้าง legend ด้วยภาษานั้นได้ จากการใช้ค่า Class name นั้นเอง

ว่าด้วยเรื่องของ Projection

Standard

วันนี้มากล่าวคร่าวกับเรื่องของ projection code กันเล็กน้อย

ตอนนี้มีหลายมาตรฐานมาก ๆ เลย
แต่โดยส่วนใหญ่ที่เราจะพบเจอ ก็เป็น ของ PROJ4 EPSG ซึ่งตอนนี้ก็มีของ QGIS และ PostGIS

โดยของ Postgis ส่วนใหญ่จะตรงกันกับของ PROJ 4 แต่ก็มีแตกต่างบ้างบางครั้ง

ก่อนต้องเป็นสองพวกตามหน่่วยอะนะครับ คือ Decimal Degree และ Meters

โดยในญี่ปุ่นส่วนใหญ่ที่เราจะเจอก็คือเป็นแบบ Decimal Degree

# JGD2000
<4612> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <>

และ
# WGS 84
<4326> +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs no_defs <>

ซึ่งแบบหลังเนี่ยจะเป็นแบบ Long Lat ที่ใช้ Datum เป็น WGS84 ซึ่งมีหลายประเทศก็ใช้กันอยู่

แต่หากเจอข้อมูลเก่า ๆในญี่ปุ่นก็จะมีการใช้ Tokyo datum นะครับซึ่งคือ

# Tokyo / Japan Plane Rectangular CS V
<30165> +proj=tmerc +lat_0=36 +lon_0=134.3333333333333 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>

# Tokyo
<4301> +proj=longlat +ellps=bessel +no_defs no_defs <>

JGD2000 จะใช้ GRS80 สำหรับ ellipsoid และ Tokyo Datum จะใช้ Bessel ellipsoid ซึ่งมีผลทำให้เกิดความคลาดเคลื่อนกันประมาณ 400 – 500 m.
อีกหน่วยก็คือ Meters

ซึ่งจะมีการแบ่งออกเป็นประมาณ 13 zone ก็ต้องดูว่าข้อมูลอยู่ใน zone ไหน

# JGD2000 / Japan Plane Rectangular CS V
<2447> +proj=tmerc +lat_0=36 +lon_0=134.3333333333333 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>

และ เทคนิคการนำข้อมูล shp เข้า PostGIS DB นั้นก็ใช้คำสั่งอย่างนี้นะครับ

(shp2pgsql -s 4326 airports.shp
-f output.sql)

หากไม่เช่นนั้นข้อมูลใน column SRID จะมีค่า = -1

สำหรับข้อมูลคราวนี้อ้างอิงจาก web นี้นะครับ

ท้ายนี้ขอแถมของไทยด้วยแล้วกันนะ
#WGS84/ UTM Zone 47
<32647>+proj=utm +zone=47 +ellps=WGS84 +datum=WGS84 +units=m +no_defs
#WGS84/ UTM Zone 48
<32648>+proj=utm +zone=48 +ellps=WGS84 +datum=WGS84 +units=m +no_defs
#Indian 1975/UTM Zone 47
<24047>+proj=utm +zone=47 +a=6377276.345 +b=6356075.413140239 +units=m +no_defs
#Indian 1975/UTM Zone 48
<24048>+proj=utm +zone=48 +a=6377276.345 +b=6356075.413140239 +units=m +no_defs

ถ้าเป็น latlong ส่วนใหญ่ก็เหมือนกับ ข้างบนคือ

# WGS 84 LongLat
<4326> +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs no_defs <>

สำหรับข้อมูลเก่า ๆ หน่อยอาจจะเจออันนี้บ้าง

#Indian 1954/UTM Zone 47
<23947>+proj=utm +zone=47 +a=6377276.345 +b=6356075.413140239 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs
#Indian 1954/UTM Zone 48
<23947>+proj=utm +zone=48 +a=6377276.345 +b=6356075.413140239 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs
#Indian 1975/ LongLat
<4240>+proj=longlat +a=6377276.345 +b=6356075.413140239 +no_defs

ใช้งาน AppforMap กับ Map file ของเราเอง

Standard

วันนี้ก็จะมาต่อกันอีกสำหรับ AppforMap เอาว่าย้ายกันมาให้ได้เลย

ก็ไม่มีไรมาก ต้องทำการแก้ไขไฟล์ส่วนใหญ่ที่อยู่ AppforMap/conf/
ซึ่งประกอบไปด้วยไฟล์ดังนี้

maplinkconfig.conf,refmapconfig.conf,browserconfig.xml และ load_modules.php

1.maplinkconfig.conf

ให้ทำการแก้ไขค่า ดังนี้

$workingDir=”C:/ms4w/tmp/ms_tmp/”;//path to the map image. Better use absolute url, because mapscript module change the workingdir
$imageUrl=”http://localhost/ms_tmp/”;//url to the map image.

if (!$mapfileUrl) $mapfileUrl=”C:/ms4w/apache/htdocs/librarymap/mapfile/library_app.map”;

if (!$layerXml) $layerXml=”http://localhost/appformap2/conf/browserconfig.xml?”;

และอาจต้องมีการปรับเปลี่ยนบ้างในกรณีหากมีการใช้ PostGIS อีกทั้งหน้าตา เมนูต่าง ๆ ให้สำรวจดูว่ามีอะไรที่ให้แสดงไว้บ้าง

2.refmapconfig.conf

แก้ไขทุกค่า ของมันเลยก็ว่าได้ เพราะมัีนมีอยู่แค่ 4 ตัว

3. browserconfig.xml

อันนี้เป็นไฟล์เพื่อแสดง ตัวบังคับการเปิดปิด layer ซึ่งอาจไม่ต้องมีจำนวนเท่ากันกับใน map file ก็ได้
หลักก็มีค่าของ

Title ซึ่งเป็นชื่อที่จะแสดง
Name และ Table ต้องตรงกับชื่อ layer ใน mapfile
Abstract ใช้คำอธิบายเยอะ ๆ ลงไปได้

4. load_modules.php
อาจต้องทำการแก้ไขบ้างในการ load module ของ php โดยเฉพาะเมื่อใช้กับ linux OS.

มาสำหรับขั้นสูงขึ้นในการใ้ช้ PostGIS และใช้ client_classic.phtml ที่ทำการ ค้นหาจุดได้นั้นต้องทำการแก้ไขเพิ่มเติมในไฟล์ search_select.php

ต้องทำการเปลี่ยน ตัวแปรที่เกี่ยวกับการ query มีค่าเหมือนกันกับชื่อ Select tag และ Option tag

และปรับเปลี่ยน SQL query command ให้สามารถดึงข้อมูลมาได้

ส่วนรายละเอียดให้ใช้งานได้อย่างเต็มที่ยังมีรายละเอียดอีกมากมาย โดยจะเอาตัวอย่าง มา post ไว้เต็มเลยดีกว่าเนอะ

แต่มี bug อยู่หนึ่งอย่างในไฟล์ function.php ซึ่งจะมีผลกับ postgis > 1.0 ขึ้นไปโดยจะเ้ข้มงวดกับการแบ่งแยก พิกัดมากขึ้น

จะเห็นว่ามันไม่มี

,

ระหว่างค่าพิกัดหายไปซึ่งใน version 0.8 นั้นจะยอมให้ใช้งานได้จึงต้องทำการแก้ไข code ที่ราว ๆ บรรทัด 2031 จาก

$NewPointArray = $NewPointArray.$geominx.” “.$geominy;

and replace it with;

$NewPointArray = $NewPointArray.”,”.$geominx.” “.$geominy;

เสร้จแหละนะคร้าบบ

เห่อ วันนี้ทำงานได้เยอะ มาก ๆ เลย สงสัยได้รับทราบเค้าดีว่าจะได้กลับไทยและบี visa ผ่านแหละ

shp2pgsql support i18n encod

Standard

วันนี้มีเพียงเกร็ดเล็กมาฝากในกรณีต้องการใช้การ convert shp2pgsql ให้สามารถทำการแปลงระบบการ encode เช่นจาก

Shift_JTS ไปเป็น UTF8

ต้องมีการใช้ option -W ต้องเป็นตัว UpperCase นะเพราะมันมีอีก option หนึ่งด้วย

แต่ก่อนจะทำการแปลงนั้นบางที shp2pgsql ของเราอาจไม่ได้ทำการ complie ให้ support ดังนั้นเราต้องการแก้ไขโดยต้อง complie ใหม่

โดยการทำการแก้ไขไฟล์

Makefile.conf.in

ทำการแก้ไขค่านี้ USE_ICONV=1

จากนั้นต้องทำการ recomplie มันสะคราวนี้ก็ดำเนินการได้เลยด้วยชุดคำสั่งนี้

# shp2pgsql -W SJIS shaperoads myschema.roadstable > roads.sql
# psql -d roadsdb -f roads.sql

หรือ

shp2pgsql -W SJIS shaperoads myschema.roadstable | psql -d roadsdb

แล้วหลังจากเราเอา ข้อมูลเข้าไปใน PostgreSQL แล้วนั้นซึ่ง Encode DB ของเรานั้นเป็น UTF-8

ทำใ้ห้เวลาสั่งให้ mapserver สร้าง label ในการแสดงแผนที่นั้นไม่จำเป็นต้อง ระบุ Encode ให้กับมันก็ได้

ติดตั้ง Zope และ Prima GIS

Standard

ก่อนอื่น เพิ่มส่วนนี้ไว้่ก่อนที่จะลืมอะนะครับ

ภายหลังทำการติดตั้ง Zope แล้วจำเป็นต้องแก้ไข iptable ให้สามารถตอบรับการเรียกจาก port 9080 ด้วย

โดยแก้ไขที่ไฟล์
/etc/shorewall/shorewall.conf

แล้วยังต้องทำการ install src ของ Mapserver และทำการ complie ไว้ด้วยเพราะต้องใช้ในขั้นตอนต่อไป

ทำการ extract PCL code

cd /tmp
tar -xzvf /mnt/cdrom/primagis/PCL-0.10.0.tar.gz
cd /tmp/PCL-0.10.0/PCL-Cartography/

อันนี้ทำเผื่อไว้ในกรณีชื่อมันเพี้ยน ๆ

ln -s /usr/share/proj/epsg /usr/share/proj/EPSG

อันนี้เป็นการ install ให้ zope รู้จักกับมันนะ
python setup.py build_ext -I /usr/src/RPM/BUILD/mapserver-4.6.2/ install

แล้วจากนั้นก็ให้ทำการปิด zope

แล้วสร้าง user

zopectl adduser username passwd

แล้วก็ restart zope ใหม่ดู
จากนั้นลองทำการทดลองเรียก Cartogtaphy ดู
โดยพิมพ์

python
>>> import cartography
>>> help(cartography)

หากมีการแสดง help ก็แสดงว่าน่าจะไม่มีปัญหาใด ๆ

จากนั้นก็เข้าไปสร้าง Plone Site แล้วก็สั่ง Easy Install (Prima GIS)

แล้วจึงสร้าง demo ตามที่เคยทำอธิบายไว้นะครับ

หากมีปัญหา ข้างนี้เป็นรวม link Faq ต่างๆ
http://trac.gispython.org/projects/PCL/wiki/FrequentlyAskedQuestions

AppforMap Application

Standard

วันนี้จะทำการลง Mapserver Client ใหม่ อะนะครับ

AppforMap Application

การลงก็ไม่ยากอะไรเป็นแค่ Web Map Client Application ก็ extract ไว้ใน htdocs path

จากนั้นต้องทำการแก้ไข้ไฟล์

maplinkconfig.php ซี่งอยู่ใน conf/ directory

โดยค่าที่สำคัญคงเป็นค่า

workingDirworkingDir and imageUrl

$workingDir=”C:/ms4w/tmp/ms_tmp/”;
$imageUrl=”http://localhost/ms_tmp/”;//url to the map image.

อีกทั้งต้องทำการแก้ไข IMAGEURL ใน mapfile ให้เป็นในลักษณะ http:// เช่นเดียวกันด้วย

แล้วยังต้องมีการไปแก้ไขไฟล์

browserconfig.xml

เพื่อทำให้สามารถใช้ควบคุมการกำหนดการเปิด ปิด Layer ได้

แต่ทั้งนี้ทั้งนั้นจำเป็นต้องทำการแก้ไข php.ini ให้เปลี่ยนแค่ register_globals=on ด้วยไม่เช่นนั้นก็ใช้ไม่ได้

และหากยังต้องทำการปรับแก้ไขไฟล์
refmapconfig.php

ที่เป็นตัวควบคุมของ Reference map ด้วย โดยต้องแก้ไข Extent ของภาพที่้ใชได้

ข้อแนะนำ

ส่วนใหญ่ การอ้างอิงถึงในตัวแปรให้ใช้ค่า Actual path

การ Recomplie RPM Package

Standard

วันนี้อาจจะนอกเรื่องด้าน Mapserver นิดหน่อยแต่ก็มีส่วนสำคัญในการทำงานที่เกี่ยวกับ Mapserver

คือการ Recomplie RPM Package โดยหากเราได้ทำการ install RPM แล้วหากมันไม่ประสบความสำเร็จ เราอาจจะทำการ Recomplie มันได้ใหม่ ทั้งนี้เราจำเป็นต้องมี SRPM มาด้วย ก็คือ src ของมันนั้นเอง ทำการ install โดยคำสั่ง

rpm -ivh “package name”

จากนั้นเข้าไปใน directory

/usr/src/RPM/SPECS/

ก็จะพบกับไฟล์ .spec

เราจะทำการ Recomplie โดยคำสั่ง

rpm -ba “spec name”

ผลการ Complie จะสร้าง rpm ใน directory

/usr/src/RPM/RPMS/

และ src rpm ใน directory ซึ่งหากมีการเปลี่ยน spec ก็สามารถใช้ SRPM แทนต้นฉบับได้

/usr/src/RPM/SRPMS/

จากนั้นก็ลอง install แล้วทดสอบดู อาจจะใช้คำสั่ง

urpmi –test “package name”

บางทีหากการ Recomplie มีปัญหาลองตรวจสอบดู เพราะมีการเปลี่ยน นิดหน่อย

จาก

CopyRight:

เป็น

License:

แถวท้าย คำสั่งในการ แสดง content ทั้งหมดใน rpm คือ

rpm -qil