2014年9月29日 星期一

Test spatialite function within()


●我再重新定義一下,因為定義真的滿重要的,而接下來也是照個這個步驟

◎1.定義存放比對運用的table,geometry type = "polygon" ,The second is create geometry column


  • create table on_areas(id integer not null primary key autoincrement,name text , type text ,long text,comments text )
  • select addgeometrycolumn('on_areas','geometry',4326,'polygon','xy')
●跟spatialite cookbook 不太一樣,到底是怎樣定義預設值,我也不清楚,所以這邊自行想辦法抓出,大概預設的BUFFER() 是多少等於1km

!!我很想吼髒話,因該是很想大喊,長度預設到底是啥,就是跟別人不一樣,根本就完全沒有頭緒,到底buffer()的預設長度到底是啥....

好吧,我也不太熟QGIS,那個長度測量的東西,也不知道在量個甚麼朋友,算了,開Google Map Engin來量一段1km,至少也要大概知道,1km大約等於多少預設

又搞了一個早上ˋˊ...

insert into on_areas (geometry)  select st_buffer(geometry,0.009)from test4326 where pk_uid = 2

抓出來 雖然可能不太準,但是有甚麼東西 *0.009會等於1KM的 ,有知道可以提供我一下

這篇可能看得出來吧,但先不看了,很煩
http://stackoverflow.com/questions/23266230/conversion-latitude-longitude-into-distance


●如果within()如果point 壓在線上會出現甚麼事情

insert into test4326 (geometry)  values(geomfromtext('point(121.536859 25.068363)',4326))
建立一個point↑
如果要把這個point 壓在需要within()的區塊上 ,其實只要select這個區塊,有非常多的位置組成,其中一個拿來當新增point座標就好了,記得SRID別給錯
以上這條可能有點錯誤,因為我也不了解為什麼qgis開起來方到非常大的時候,point會跑到areas裡面,我也很無言

SELECT a.* FROM test4326 as a
join on_areas as b
where within(a.geometry,b.geometry)

這是測試within()的example command↑

!!結果是:在線上的點位是算的!!使用within()

3.找出如果壓在線上不算的函式(我會順便測試期它的函式)
disjoint(point.geometry,polygon.geometry)
找出不在範圍內的(壓在邊界線上的也算在範圍內喔!!)

第3點又花一下午,暫時先放棄

下面是使用者手動建立的command::
insert into on_areas (geometry)  values(geomfromtext('polygon(121.540719 25.078527,21.545769 25.078398,21.545415 25.073445,21.540719 25.078527)',4326))



以下可參考::
http://stackoverflow.com/questions/16838896/sqlite-insert-into-table-select-from

http://www.gaia-gis.it/gaia-sins/spatialite-cookbook/html/railways-buf.html

http://stackoverflow.com/questions/12204834/get-distance-in-meters-instead-of-degrees-in-spatialite




沒有留言:

張貼留言