Process to import SHP with Thai (UTF8) to MS SQL Server

Standard

Process to import SHP with Thai (UTF8) to MS SQL Server as below
1. Shp2pgsql
2. Make sure PK is there
3. pgsql2shp
4. Make db on MS SQL
5. Shape2SQL (http://www.sharpgis.net/page/SQL-Server-2008-Spatial-Tools)
OGR2OGR is not worked for UTF8 to MSSQL, spending 2 days…. frown emoticon
Is it too difficult ?

Using mapbox layer on Openlayer v 2

Standard

Now, Tile maps is a useful for simple and fast data sharing.

Mapbox is a service that you can upload your preset MTiles or your raw data and make the tile server ready on their service.

Cliend and API is also ready in mapbox.com

However, many people ( like me still prefer OpenLayers API) following is a code you can add TileMap from Mapbox to openlayer

var mylayer = new OpenLayers.Layer.XYZ(
“mymap”,
[
"https://a.tiles.mapbox.com/v4/userid/${z}/${x}/${y}.png?access_token=token"
], {
attribution: “Tiles © MapBox“,
sphericalMercator: true,
wrapDateLine: true,
numZoomLevels: 8
}
);

Replace userid with your mapbox id

and token with your token for the map.

คำสั่งที่เกี่ยวข้อง การจัดการ tablespace ใน oracle

Standard

มีปัญหามาหลายครั้งกับ tablespace เต็ม ทำทีก็หาที ก็เลย ค้นมาเก็บไว้เลยละกัน

– list all tablespaces with their associated files, the
– tablespace’s allocated space, free space, and the
– next free extent:

clear breaks
SET linesize 130
SET pagesize 60
break ON tablespace_name skip 1
col tablespace_name format a15
col file_name format a50
col tablespace_kb heading ‘TABLESPACE|TOTAL KB’
col kbytes_free heading ‘TOTAL FREE|KBYTES’

SELECT dd.tablespace_name tablespace_name, dd.file_name file_name, dd.bytes/1024 TABLESPACE_KB, SUM(fs.bytes)/1024 KBYTES_FREE, MAX(fs.bytes)/1024 NEXT_FREE
FROM sys.dba_free_space fs, sys.dba_data_files dd
WHERE dd.tablespace_name = fs.tablespace_name
AND dd.file_id = fs.file_id
GROUP BY dd.tablespace_name, dd.file_name, dd.bytes/1024
ORDER BY dd.tablespace_name, dd.file_name;

– list datafiles, tablespace names, and size in MB:

col file_name format a50
col tablespace_name format a10

SELECT file_name, tablespace_name, ROUND(bytes/1024000) MB
FROM dba_data_files
ORDER BY 1;

– list tablespaces, size, free space, and percent free
– query originally developed by Michael Lehmann

SELECT df.tablespace_name TABLESPACE, df.total_space TOTAL_SPACE,
fs.free_space FREE_SPACE, df.total_space_mb TOTAL_SPACE_MB,
(df.total_space_mb – fs.free_space_mb) USED_SPACE_MB,
fs.free_space_mb FREE_SPACE_MB,
ROUND(100 * (fs.free_space / df.total_space),2) PCT_FREE
FROM (SELECT tablespace_name, SUM(bytes) TOTAL_SPACE,
ROUND(SUM(bytes) / 1048576) TOTAL_SPACE_MB
FROM dba_data_files
GROUP BY tablespace_name) df,
(SELECT tablespace_name, SUM(bytes) FREE_SPACE,
ROUND(SUM(bytes) / 1048576) FREE_SPACE_MB
FROM dba_free_space
GROUP BY tablespace_name) fs
WHERE df.tablespace_name = fs.tablespace_name(+)
ORDER BY fs.tablespace_name;

–short and easy check freespace of USERS
select sum(bytes)/1024/1024/1024 from dba_free_space where tablespace_name=’USERS’;

–check temp free space
SELECT tablespace_name, SUM (bytes_used), SUM (bytes_free) FROM v$temp_space_header GROUP BY tablespace_name;

–check temp dbf
SELECT tablespace_name, file_name, bytes FROM dba_temp_files WHERE tablespace_name like ‘TEMP%’;

–shrink free space
ALTER TABLESPACE temp shrink space;
ALTER TABLESPACE temp shrink tempfile ‘/oracle01/oradata/orcl/temp01.dbf’;

–add new bigfile
ALTER TABLESPACE tablespace ADD DATAFILE
‘path/filename.dbf’ SIZE bytes
AUTOEXTEND ON MAXSIZE UNLIMITED;

–add new tempfile
ALTER TABLESPACE SEARCH_TEMP ADD TEMPFILE
‘path/filename.dbf’ SIZE bytes
AUTOEXTEND ON MAXSIZE UNLIMITED;

ใช้งาน Attribute replacement สำหรับ Vector layer ใน OpenLayers

Standard

ลองหาวิธีนั้นนี่ มาตั้งนานว่า จะทำงานอย่างไรในการใช้งาน Attribute replacement

ใน Doc บอกง่าย ๆ

var defaultStyle = new OpenLayers.Style({
‘pointRadius’: 10,
‘externalGraphic’: ‘${thumbnail}’
});

เวลาทำการทสร้าง Style ใช้แบบข้างบนไม่มีปัญหา แต่หากต้อง modified ค่าระหว่างทาง หรือ vector นี้ใช้กับ หลายชนิด ชั้น ข้อมูละก็จะมีปัญหา

มาเจอ link ข้างล่างมีประโยชน์ ในการใช้ context

new OpenLayers.Style({
fillColor: ‘blue’,
strokeColor: ‘navy’,
strokeWidth: 3,
pointRadius: 9,
fillOpacity: 0.6,
strokeOpacity: 0.75,
label: ‘${label}’,
fontColor: “black”,
fontFamily: “Arial”,
fontSize: 11
},
{
context: {
label:function(feature) {
if(feature.attributes['p_name']) {
return feature.attributes.p_name;
} else {
return ”;
}
}
}
});

จึงเจอทางออก

http://gis.stackexchange.com/questions/70299/provide-an-alternative-label-when-styling-vector-layer-with-openlayers

Ushahidi คิดว่าง่าย

Standard

ได้รับการร้องขออย่างเร่งด่วน ให้ติดตั้ง Ushahidi ก็ยังไม่เคยลงมือเองตั้งแต่ต้น เคยแต่ดูงานสำเร็จ และทดลองใช้จาก Crowmap.com ก็ใช้งานได้ดีไม่มีปัญหาอะไร

พอมาใช้จริงก็เจอปัญหา เยอะเหมือนกัน เช่น นับตั้งแต่ติดตั้งเสร็จ ก็เจอ การเข้าหน้า admin ไม่ได้ ต้องทำการแก้ .htaccess เพราะมันแสดง “No input field specified” ก็ตามแก้กันไป ตาม link http://forums.ushahidi.com/topic/no-input-file-specified-1

แต่ก็มีปัญหาอื่นเพิ่มเติมขี้นมา เช่น Catalog แสดงสีเดียวหมดสะงั้น, จุด marker ที่แสดงเริ่มต้น ย้ายไม่ได้ต้องสั่งลบไปก่อน และอื่น ๆ ที่ดูแล้วมันเพี้ยน

ก็เลยลองค้นหาข้อมูลเพิ่มก็กะไว้แล้วว่าต้องมีเรื่อง security หรือ .htaccess ก็เลยรู้ว่าการแก้ ตามข้างต้นเป็นการแก้ปลายเหตุ ทำให้ผลมันเพี้ยน

วิธีที่ทำแล้วผ่านก็แก้ php.ini ให้แก้

cgi.fix_pathinfo = 0

สะ ก็จะแก้ได้ อ้างอิง จาก http://www.terencechang.com/2008/08/28/codeigniter-no-input-file-specified-php-5-apache-2/

เริ่มต้นกับ ZooWPS

Standard

หลังจากพูดคุยในวงเหล้า บนเครื่อง บนรถกับ Gerald มานานว่าจะลอง ๆ Zoo ก็ไม่มีโอกาสสะที ทั้งที่เข้าใจโครงสร้างระบบทุกอย่างหมดละ เมื่อวานก็เลยใช้ช่วงโอกาสเข้า Workshop กันไปเลยจะได้ลองจริง ๆ จากที่ลองก็ถือว่า มีแนวคิดที่ดี แต่ยังเป็นของใหม่ทำให้ต้องอาศัย ความเข้าใจอยู่ในระดับที่ว่าเป็น advanced ก็สรุป ๆ บางอย่างได้ดังนี้

Compile : ดูเหมือนจะยาก เพราะขนาดใช้ LiveDVD ที่ลง lib ที่จำเป็นไว้หมดแล้วก็ยังลงไม่ผ่าน อาจจะต้องใช้ lib-dev บางส่วนเพิ่มเติม ไว้จะลองใหม่

Install : หลัก ๆที่ใช้คือ zoo_loader.cgi และ main.cfg ให้ไปใส่ไว้ใน cgi-bin directory โดย main.cfg จะเป็น config กำหนดค่าต่าง ๆ ที่จำเป็น ทั้ง tmppath, tmpURL and so on.

Service Provider : จะมีไฟล์ หลัก ๆ ที่จำเป็นคือ zcfg จะเป็น metada config ระบุ input, output สิ่งที่สำคัญคือในบรรทัดแรก จะเป็น ชื่อ function ที่จะอ้างถึงในไฟล์ ServiceProvider อีกทั้งชื่อไฟล์ zcfg ก็จะต้องมีค่าตรงกับค่าในบรรทัดแรกด้วย
ในไฟล์ ServiceProvider (ที่อ้างมาจาก ค่าในไฟล์ zcfg) จะเป็นเหมือนไฟล์ที่เก็บ library function ทั้งที่ใช้ใน ตัว lib เองหรือ ถูกใช้จาก zcfg ค่า serviceType จะเป็นตัวบอกว่าใช้ service ในภาษาอะไรเช่น C, Python etc..
- serviceProvider เป็นชื่อไฟล์ ที่จะ link มาใช้ แต่ไม่ต้องมี .py ในกรณีของ python แต่ต้องมี .zo ในกรณีของ C (ทำเอา งง เหมือนกัน)
- ในการใช้ serviceprovider ของ C ต้องทำการ compile code ภายใน zoows source code แล้วจึงเอา obj มาไว้ใน cgi-bin directory ค่อนข้างดูยุ่งยากใช้ได้กันเลย ถ้าเทียบกับ python ที่เป็น script
- การทำเป็นลักษณะ lib function ใน serviceProvider ถือว่าดี ในกรณที่ อนาคตหากมีการใช้งาน WorkFlow
- การ fix config อาจจะทำให้การใช้งานร่วมกัน หลายคนใน server เดียวกันมีปัญหา
- การเก็บ lib code ไว้ใน web accessible อาจจะไม่ปลอดภัยมากนัก

ต่อไปคงต้องลอง migrate code PyWPS มาเล่นสักหน่อย

gdalbuildvrt กับ Virtual Mosaic Overlaped image

Standard

ครั้งนี้เจอปัญหา ที่จะทำให้ผู้ใช้ทำการ Request data จาก WCS โดยที่ data นั้นมี pixel ที่ overlap กันอยู่ได้ (ในกรณี คือข้อมูล MOD11A1 ที่ในส่วน overlap นั้นมี scene หนึ่งมีค่าเป็น nodata และอีก scene มีค่าข้อมูลอยู่)

โดยปกติถ้าทำการใช้เทคนิค Tiling ธรรมดา ใน Mapserver เมื่อทำ request พื้นที่ overlap ก็จะอาจจะได้ค่าข้อมูลในส่วนนั้นเป็น nodata ขี้นอยู่กับ order ของชั้นข้อมูลว่าอะไรอยู่บน หรือ ล่าง

เมื่อทำการหาข้อมูลเพิ่มเติม ก็มีผู้แนะนำให้ใช้ gdalbuildvrt ทำการสร้าง VRT file ขึ้นมาให้เหมือนเป็นการ Virtual Mosaic ซึ่งในการสร้างก็จะมี option -srcnodata ทำให้สามารถข้ามค่าข้อมูลนั้น ไปได้ แต่มันรองรับหลังจาก version 1.7.0 เท่านั้น

มีข้อพึงระวัง อยู่ 3 อย่างในการทำ vrt

- ต้องมี Projection / Coordinate เดียวกัน

- Spaitial resolution เท่ากัน

- Band order เหมือนกัน

Bands processing not work in WCS

Standard

หลังจากง่มหามาหลายชั่วโมง ก็เจออีกแล้วกับ ข้อตกหล่นที่พลาดของ Mapserver คราวนี้ กับ WCS

เมื่อต้องการเลือกข้อมูลบาง Band ของ Raster data type หากทำการ define ไว้ใน mapfile

ผลที่ได้ก็จะได้แต่ bands แรก เท่านั้น เพราะ มันข้ามคำสั่ง Bands ไปสะงั้น http://www.mail-archive.com/mapserver-users@lists.umn.edu/msg14498.html

แทนที่จะทำ tile index แค่อันเดียวแล้วเลือก bands ก็ต้องทำแยกแต่ละ tile index ให้มันยุ่งยาก

ปัญหามีคนแจ้งตั้งแต่ปี 2007 แต่ยังไม่มีใครการแก้เลยสะงั้น

SensorML Tools

Standard

วันนี้นำเอาเครื่องมือในการสร้าง และแก้ไข SensorML มาลงไว้เผื่อมีประโยชน์กับใคร

http://vast.uah.edu/index.php?option=com_content&view=article&id=149&Itemid=103

ลองใช้แล้วก็ถือว่าใช้งานได้ดี แต่ถ้าคนที่ไม่เคยใช้มาก่อน หรือไม่เคยทำ SensorML มาก่อนก็อาจจะงง ๆ ว่าต้องใส่อะไรบ้างหรือเพิ่มอะไรบ้าง

จุดบกพร่องก็มีบ้าง เช่น

- ไม่มี Position tag ซึ่งมีความเป็นจำเป็น

- ไม่สามารถเพิ่ม metaproperty tag ได้ ซึ่ง 52NSOS จำเป็นต้องใช้สำหรับในส่วนค่า offering

- เมื่อทำการแก้ไขค่าในไฟล์ xml แล้วหากกลับมาแก้ไขในไฟล์ของโปรแกรมก็จะลบ ข้อมูลที่แก้ไขใน XML ออกไปทำให้ต้องการทำ Customization หลังจากที่เสร็จสิ้นแล้วเท่านั้น