Advertisement
hackerboxes

postgis_图形操作函数学习

Jul 25th, 2012
437
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.48 KB | None | 0 0
  1. select box '((1,1),(2,3))' + point '(3,7)'; // 对点和盒子进行加操作,也可以进行“-”,“*”,“/”操作
  2. select @-@ path '((2,3),(3,2))'; // 表示计算长度
  3. select @@ circle '((10,2),23)'; // 表示圆的中心点
  4. select point '(0,0)' ## lseg '((2,0),(0,2))'; // 输出点到三点最近的点
  5. select circle '((0,3),12)' <-> circle '((2,3),23)'; //两园的距离
  6. select circle '((0,3),12)' << circle '((1,3),10)'; // 圆(1,3)是否在圆(0,3)的左边,或是右边用">>"
  7. select circle '((0,3),12)' && circle '((1,3),10)'; // 是否封闭
  8. select circle '((2,3),23)' ~ point '(2,4)'; // 圆是否包括此点,结果为ture
  9. select point '(2,3)' @ circle '((1,3),4)'; // 点在圆的上方或里面,结果为true
  10. select polygon '((1,2),(0,0))' ~= polygon '((0,0),(1,2))'; // 两个多边形是否相等,结果为true
  11. select area(box '((2,3),(2,5))'); // 计算面积
  12. select center(box '((1,1),(3,3))'); // 计算中心点
  13. select diameter(circle '((2,2),3.0)'); // 计算直经
  14. select height(box '((1,1),(6,6))'); // 水平高度
  15. select isclosed(path '((1,1),(3,4))'); // 关闭路径。结果为true
  16. select isopen(path '((1,2),(3,4))'); // 是否打开。结果为false
  17. select npoints(path '[(1,2),(2,3),(6,7)]'); //线的点数
  18. select popen(path '((1,2),(2,3))');
  19. select pclose(path '[(2,2),(2,3),(3,4)]');
  20. select radius(circle '((1,1),3)'); // 计算圆的半径
  21. select width(box '((2,3),(5,6))');
  22.  
  23. select polygon(box '((2,3),(3,4))') ~ point '(2.5,3.3)';
  24.  
  25. postgis数据类型有:
  26. point(1 1)
  27. multipoint(1 1,2 2,3 3,4 4);
  28. linestring(1 1,2 2,3 4);
  29. polygon(0 0,0 1,1 1,1 0,0 0);
  30. multipolygon((0 1,1 0,0 1),(0 1,0 2,2 0,0 1));
  31. multilinestring((1 1,2 2,3 4),(2 2,3 3,4 5));
  32. multilinestringm((0 0 1,0 1 2,1 1 3),(-1 1 1,-1 -1 2));
  33. circularstring(0 0,2 0,2 2,0 2,0 0); // 画半圆
  34. circularstring(2.5 2.5,4.5 2.5,4.5 4.5); // 画弧度
  35. curvepolygon(circularstring(0 0,2 0,2 2,0 2,0 0));// 画曲线多边形
  36.  
  37. select st_geomfromtext('circularstring(2.5 2.5,4.5 2.5,4.5 4.5)'); // 画曲线
  38. select st_npoints(st_geomfromtext('circularstring(2.5 2.5,4.5 2.5,4.5 4.5)')); // 统计点数
  39.  
  40. select st_setsrid(st_point(-77.03547,35.89123),4326);
  41. select st_transform(st_setsrid(st_point(-77.08233,23.23412),4326),900913);
  42. create schema schema_name;
  43. select addgeometrycolumn('schema_name','表的名字','字段名字',初始srid值,'Geometry数据类型(point,path,ploygon等)',参数个数);
  44.  
  45.  
  46. select st_contains(st_geomfromtext('polygon((0 0,0 1,1 1,1 0,0 0))',-1),st_geomfromtext('point(0.5 0.5)',-1)); // 一个图形是否包括另一个图形,结果为t
  47. select st_contains(st_geomfromtext('polygon((0 0,0 1,1 1,1 0,0 0))',-1),st_geomfromtext('point(1 1)',-1)); // 结果为f
  48. select st_centroid('linestring(1 2,3 4,4 5)'); // 取得中心点
  49. select st_astext(st_centroid('linestring(2 3,4 5,6 7,1 9)')); // result:"POINT(3.75615126275739 6.46309242345563)"
  50.  
  51. 格式转换函数:
  52. st_astext
  53. st_asgml
  54. st_assvg
  55. st_asgeojson
  56. st_askml
  57. st_geohash
  58. select st_geohash('point(1 1)'); // 哈希值为"s00twy01mtw037ms06g7"
  59. select st_geohash(st_geomastext('srid=900913;point(39.9042140 116.4074130)');
  60. select st_geohash('srid=900913;point(116.4074130 39.9042140)'); // 北京google坐标的哈希值为"wx4g0bm6ckdk3z4php6n" ,其中 geohash.org值为wx4g0bm6ckdk,去掉了后面的8位
  61.  
  62.  
  63. st_polygon
  64. st_point
  65. st_linestring
  66. st_curvepolygon
  67. st_circulasstring
  68. st_multicurve
  69.  
  70. select st_buffer(st_point(1,2),3);
  71.  
  72. st_contains
  73. st_intersects
  74. st_covers
  75. st_containsproperly
  76. st_touches
  77. st_crosses
  78. st_equals
  79. st_orderingequals
  80. st_overlaps //是否有重叠
  81.  
  82.  
  83. st_dwithin
  84. st_distance
  85. st_transform
  86.  
  87.  
  88. // 创建转换后的索引
  89. create index feature_data_utm
  90. on feature_data
  91. using
  92. gist(st_transform(the_geom,4326));
  93. create view vwfeature_data as
  94. select gid,st_transform(the_geom,4326) from feature_data;
  95.  
  96.  
  97.  
  98. CREATE OR REPLACE VIEW yangzhou_3km_result_ps_data_4326_test AS
  99. SELECT yangzhou_3km_result_ps_data.value, yangzhou_grid_3km_4326.the_geom, yangzhou_3km_result_ps_data.grid_id, yangzhou_ps_classification.name, yangzhou_ps_classification.type_id, yangzhou_3km_result_ps_data.lon_id, yangzhou_3km_result_ps_data.lat_id, yangzhou_3km_result_ps_data.pollutant_id, yangzhou_3km_result_ps_data.request_id
  100. FROM yangzhou_ps_classification, yangzhou_3km_result_ps_data, yangzhou_grid_3km_4326
  101. WHERE st_contains(yangzhou_grid_3km_4326.the_geom,st_point(yangzhou_3km_result_ps_data.lon_id,yangzhou_3km_result_ps_data.lat_id) ) ;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement