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