-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-- -- $Id: cleanGeometry.sql 2008-04-24 10:30Z Dr. Horst Duester $--
-- cleanGeometry - remove self- and ring-selfintersections from -- input Polygon geometries -- http://www.sogis.ch
-- Copyright 2008 SO!GIS Koordination, Kanton Solothurn, Switzerland
-- Version 1.0
-- contact: horst dot duester at bd dot so dot ch--
-- This is free software; you can redistribute and/or modify it under-- the terms of the GNU General Public Licence. See the COPYING file.
-- This software is without any warrenty and you use it at your own risk-- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CREATE OR REPLACE FUNCTION cleanGeometry(geometry)
RETURNS geometry AS
$BODY$DECLARE
inGeom ALIAS for $1;
outGeom geometry;
tmpLinestring geometry;
Begin
outGeom := NULL;
-- Clean Process for Polygon
IF (GeometryType(inGeom) = 'POLYGON' OR GeometryType(inGeom) = 'MULTIPOLYGON') THEN
-- Only process if geometry is not valid, -- otherwise put out without change
if not isValid(inGeom) THEN
-- create nodes at all self-intersecting lines by union the polygon boundaries-- with the startingpoint of the boundary.
tmpLinestring := st_union(st_multi(st_boundary(inGeom)),st_pointn(boundary(inGeom),1));
outGeom = buildarea(tmpLinestring);
IF (GeometryType(inGeom) = 'MULTIPOLYGON') THEN
RETURN st_multi(outGeom);
ELSE
RETURN outGeom;
END IF;
else
RETURN inGeom;
END IF;
------------------------------------------------------------------------------
-- Clean Process for LINESTRINGS, self-intersecting parts of linestrings -- will be divided into multiparts of the mentioned linestring ------------------------------------------------------------------------------
ELSIF (GeometryType(inGeom) = 'LINESTRING') THEN
-- create nodes at all self-intersecting lines by union the linestrings-- with the startingpoint of the linestring.
outGeom := st_union(st_multi(inGeom),st_pointn(inGeom,1));
RETURN outGeom;
ELSIF (GeometryType(inGeom) = 'MULTILINESTRING') THEN
outGeom := multi(st_union(st_multi(inGeom),st_pointn(inGeom,1)));
RETURN outGeom;
ELSIF (GeometryType(inGeom) = '' OR GeometryType(inGeom) = 'GEOMETRYCOLLECTION') THEN
RETURN NULL;
ELSE
RAISE NOTICE 'The input type % is not supported %',GeometryType(inGeom),st_summary(inGeom);
RETURN inGeom;
END IF; End;$BODY$
LANGUAGE 'plpgsql' VOLATILE;
以上這段是要在PostgreSQL裡建立一個function,然後在進行 insert 動作的時候, 讓要 insert 的 geometry 先丟到這個function進行檢查並重整後, 回傳正確的 geometry。結束
2010年10月26日
Insert geometry 前確認是否合法
之前為專案寫了一個 shapefile 匯入程式, 匯入目標是PostgreSQL資料庫, 後來在資料庫中進行 intersect 時發生空間分析的錯誤,經過追查發現有些Geometry有 self-intersection 的狀況,接著還好在 google 找到解決方案
2010年10月24日
[Windows 7] 我不要讓「媒體櫃」成為檔案總管的「首頁」
在去年10月底上市的微軟最新作業系統 — Windows 7,裡面加入了不少新功能。尤其在顯而易見的用戶體驗方面上,像是新的檔案管理方式「媒體櫃」就是其中之一。簡單來說,媒體櫃是一個可以讓使用者用更簡便、更有彈性的方式管理硬碟中檔案的功能。另外,它也能幫助使用者在更短的時間內找到需要的檔案。
也因為這個新功能的推出,當使用者按下工作列上的「檔案總管」時,首先看到的就是媒體櫃。就好比瀏覽器有所謂的首頁,而「媒體櫃」就像是檔案總管的「首頁」一樣。
打開工作列上的檔案總管,使用者就直接被帶到「媒體櫃」▼
這項設計顯然是微軟希望使用者可以多多利用媒體櫃來整理檔案。但事實上,並不是所有人都喜歡使用媒體櫃;或者是習慣在打開檔案總管時,一開始看到的是「我的電腦」、「我的文件」、「D 槽」…等等其它位置。
所以下面要示範的是,如何更改打開檔案總管時顯示的預設位置。
第一步、在工作列上的檔案總管上按下右鍵,在彈出的選單中,在「Windows 檔案總管」上再按一次右鍵,接著點選「內容(R)」▼
第二步、在「目標」欄裡貼上我們要檔案總管開啟時的預設位置,貼上後按下確定 ▼
以下是幾個比較常用的位置。
- 我的電腦:
%SystemRoot%\explorer.exe /E,::{20D04FE0-3AEA-1069-A2D8-08002B30309D} - 我的文件:
%SystemRoot%\explorer.exe /n,::{450D8FBA-AD25-11D0-98A8-0800361B1103} - 資源回收筒:
%SystemRoot%\explorer.exe /E,::{645FF040-5081-101B-9F08-00AA002F954E} - 控制台:
%SystemRoot%\explorer.exe /E,::{26EE0668-A00A-44D7-9371-BEB064C98683} - 網路連線:
%SystemRoot%\explorer.exe /E,::{7007ACC7-3202-11D1-AAD2-00805FC1270E}
打開檔案總管時,讓「我的電腦」成為預設的目標位置 ▼
如果希望在打開檔案總管,首先進入「C 槽」、「D 槽」或是硬碟裡其它位置的話,只要在「目標」欄裡打入路徑就行了 ▼
轉貼自joaoko blog
2010年8月19日
[C#]動態取得UserControl的HTML
使用JQuery來做一些互動性高的網頁操作是非常方便的,尤其運用當中的AJAX方法可以達到逼近桌面程式的效果。前一陣子我在思考如何讓網頁上的每個區塊都是獨立的HTML,然後透過AJAX的方式逐一取得或更新,我個人想到了以下兩個方案
這樣每次若在頁面上新增UserControl就需要增加註冊資訊一次,看在我們這種龜毛工程師的眼裡真是非常不舒服的。所以如果有方法能不需註冊在頁面上就可以產生UserControl的HTML,那真是佛心來的~ 以下的程式碼正是提供這個方法的核心程式,非常簡單!
再來讓我們來看看要怎麼用它,因為現在使用.NET 3.5 進行開發,所以可以使用Lamba語法,因此在委派上可以用更簡單的作法:
string _ucHtml = HTMLHelper.RenderUserControl(
"~/inc/block/GoodCollection.ascx",
uc =>
{
uc.StorePK = 1;
uc.TypePK = 5;
}
);
這樣就不單只是叫UserControl產生HTML,也可以在UserControl設計好屬性或方法,讓UserControl依據系統需要產生適當的HTML出來囉。
- ASP.NET MVC絕對是可以輕鬆辦到這件事情的。
- 每個區塊的內容都設計成單一的ASPX網頁,再讓Jquery去依據需要透過AJAX取得網頁內容
<%@ Register src="Menu.ascx" tagname="Menu" tagprefix="uc1" %> |
public class HTMLHelper { //使用委派,可以讓我們在建立UserControl時, 可以執行一些我們需要的動作 public delegate void InitializeControlDelegate(T ControlToUse); public static string RenderUserControl (string ControlPath, InitializeControlDelegate InitControlCallback) where T : UserControl {
System.Web.UI.Page pageHolder = new Page();//建立新的頁面物件 T ControlToRender = (T)pageHolder.LoadControl(ControlPath);//從指定的位置載入UserControl,並轉換為型別T pageHolder.Controls.Add(ControlToRender); //執行指定的委派工作//將這個UserControl加入到頁面中
InitControlCallback.Invoke(ControlToRender);
//建立一個字串寫入物件
StringWriter result = new StringWriter();
System.Web.HttpContext.Current.Server.Execute(pageHolder, result, false); return result.ToString(); //回傳結果 } }//使用Server.Execute執行網頁並將網頁內容寫入到 result
string _ucHtml = HTMLHelper.RenderUserControl
"~/inc/block/GoodCollection.ascx",
uc =>
{
uc.StorePK = 1;
uc.TypePK = 5;
}
);
2010年5月27日
2010年5月25日
2009年1月5日
2008年9月11日
啞了的部落格
大半年沒有更新部落格了,覺得好像我已經變啞巴了。這段時間其實發生很多事情,很多讓人開心、讓人憂鬱、讓人緊繃、讓人悲傷的事情,我從來沒有把我的部落格當成情緒的宣洩處,都是當做我喜歡的事物分享集中營,我的部落格一直都不專業,什麼都想講什麼都想說什麼都想讓人家看,這跟我這個人的個性實在太像。
看看我自己部落格上百篇的文章,我很懷疑我之前哪來的毅力可以這麼幹,我想應該是我現在的時間都奉獻給工作與家庭了,今天中午休息時也不知道為什麼突然想寫個東西,那就上來寫吧~ 不然我要這個部落格做什麼用呢?那以後? 我也不知道,以後就讓以後再說吧。
看看我自己部落格上百篇的文章,我很懷疑我之前哪來的毅力可以這麼幹,我想應該是我現在的時間都奉獻給工作與家庭了,今天中午休息時也不知道為什麼突然想寫個東西,那就上來寫吧~ 不然我要這個部落格做什麼用呢?那以後? 我也不知道,以後就讓以後再說吧。
2008年2月13日
便宜的旅行箱
太久沒上來看自己的BLOG,結果看到一堆網友在詢問行李箱去哪買,我真的感到不好意思~ 現在說明也太晚了,因為那個攤位應該只是臨時攤位而已
所以也早就沒有再擺囉~ 如果網友有興趣的話可以參考 羅小美網友提供的網站http://www.mjholly.com 看看吧
今天帶著老婆小孩去逛愛買樓上的B&Q,而老婆想到要買行李箱,就到一樓去找了賣行李箱的攤位,想不到剛好有特價品。據那位阿桑店員說是她們在新光三越的專櫃撤了,這些是存貨要出清所以才在特價,這說是他在說,不管是真是假,那些旅行箱真的很便宜!~
這件21吋的硬殼旅行箱只要650喔~ 超便宜的~~網路上同款旅行箱要賣1390呢!(感謝女兒充當麻豆~)
兩段式伸縮把手
牌子是JUST BEETLE,說實在的我根本沒聽過啦~
要打開囉~
啥~ 裡面黑黑的那是甚麼?
哈~ 是我另外買的17吋硬殼電腦背包喔~
這個硬殼背包只要250耶!(網路價399) 看看裡面有好多內袋~ 我是買來準備要放WII的~ 當然WII專用包會比較好啦...
現場我還看到這組,在momo台賣快4000元,但特價只要1600~ 可惜對我們來說太大囉...
訂閱:
文章 (Atom)