|
| 1 | +--- |
| 2 | +title: ๅฐ็็ฉบ้ด |
| 3 | +--- |
| 4 | + |
| 5 | +Databend ๆฏๆไปฅไธๅฐ็็ฉบ้ดๆฐๆฎ็ฑปๅ๏ผ็จไบๅค็็ฉบ้ดๆฐๆฎ๏ผ |
| 6 | + |
| 7 | +- **GEOMETRY**๏ผไฝฟ็จๅนณ้ขๅๆ ็ณป๏ผ็ฌๅกๅฐๅๆ ๏ผ๏ผ้็จไบ2Dๅ ไฝๅฏน่ฑกใๅๆ ่กจ็คบไธบ (X, Y) ๅฏน๏ผๅไฝ็ฑๅ
ณ่็็ฉบ้ดๅ่็ณป็ป (SRS) ็กฎๅฎใ้ป่ฎค SRID ไธบ 0๏ผไฝๅฏไปฅๆๅฎ่ชๅฎไน SRIDใ็ๆณ็จไบๅๅธๆ็็บงๅๆ็ญๅฐ่งๆจกๆต้๏ผๆไพ้ซ่ฎก็ฎ้ๅบฆๅไฝ่ตๆบไฝฟ็จ๏ผไฝๅจ่พๅคงๅบๅๅฏ่ฝๅผๅ
ฅๆพ่่ฏฏๅทฎใ |
| 8 | + |
| 9 | +- **GEOGRAPHY**๏ผไฝฟ็จๅฐ็ๅๆ ็ณป๏ผ็้ขๅๆ ๏ผ๏ผๅบไบ็บฌๅบฆ๏ผ-90ยฐ่ณ90ยฐ๏ผๅ็ปๅบฆ๏ผ-180ยฐ่ณ180ยฐ๏ผ๏ผ้ตๅพช WGS 84 (SRID 4326)ใ่ฎพ่ฎก็จไบๅ
จ็ๆๅคง่งๆจก็ฉบ้ดๆฐๆฎ๏ผๆไพๅนฟ้่ท็ฆป็ๅ็กฎๆง๏ผไฝ่ฎก็ฎๅคๆๅบฆๅ่ตๆบ้ๆฑ่พ้ซใๅฏๆ นๆฎ้่ฆ่ฝฌๆขไธบ GEOMETRYใ |
| 10 | + |
| 11 | +:::note |
| 12 | +GEOMETRY ๅ GEOGRAPHY ็ฑปๅ็ฎๅไธบๅฎ้ชๆงๅ่ฝใ่ฆไฝฟ็จ่ฟไบ็ฑปๅๅๅปบ่กจ๏ผ่ฏทๅ
ๆง่ก `SET enable_geo_create_table = 1` ไปฅๅฏ็จๅฎไปฌใ |
| 13 | +::: |
| 14 | + |
| 15 | +## ๆฏๆ็ๅฏน่ฑก็ฑปๅ |
| 16 | + |
| 17 | +Databend ๆฏๆๅค็งๅฐ็็ฉบ้ดๅฏน่ฑก็ฑปๅ๏ผ่ฝๅค็ฒพ็กฎ่กจ็คบๅๅๆๅนณ้ข๏ผGEOMETRY๏ผๅ็้ข๏ผGEOGRAPHY๏ผๅๆ ็ณป็็ฉบ้ดๆฐๆฎใ |
| 18 | + |
| 19 | +| ๅฏน่ฑก็ฑปๅ | ๆ่ฟฐ | GEOMETRY ็คบไพ | GEOGRAPHY ็คบไพ | |
| 20 | +|--------------------|-----------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------| |
| 21 | +| Point | ้ถ็ปดๅ ไฝๅฏน่ฑก๏ผ่กจ็คบ็นๅฎไฝ็ฝฎๆๅๆ ็นใ | POINT(10 20) | POINT(-122.4194 37.7749) (ๆง้ๅฑฑๅๆ ) | |
| 22 | +| LineString | ็ฑไธ็ณปๅ่ฟๆฅ็นๅฝขๆ็ไธ็ปดๅ ไฝๅฏน่ฑก๏ผ่กจ็คบ่ทฏๅพๆ็บฟๆฎตใ | LINESTRING(10 20, 30 40, 50 60) | LINESTRING(-122.4194 37.7749, -73.9352 40.7306) (ๆง้ๅฑฑๅฐ็บฝ็บฆ) | |
| 23 | +| Polygon | ไบ็ปดๅ ไฝๅฏน่ฑก๏ผๅ
ทๆๅค็ฏๅๅฏ้็ๅ
็ฏ๏ผ่กจ็คบๅบๅใ | POLYGON((10 20, 30 40, 50 60, 10 20)) | POLYGON((-122.5 37.7, -122.4 37.8, -122.3 37.7, -122.5 37.7)) (ๆง้ๅฑฑ็ไธไธชๅบๅ) | |
| 24 | +| MultiPoint | ๅคไธช้ถ็ปดๅ ไฝๅฏน่ฑก็้ๅใ | MULTIPOINT((10 20), (30 40), (50 60)) | MULTIPOINT((-122.4194 37.7749), (-73.9352 40.7306)) (ๆง้ๅฑฑๅ็บฝ็บฆ็็น) | |
| 25 | +| MultiLineString | ๅคไธช LineString ๅฏน่ฑก็้ๅใ | MULTILINESTRING((10 20, 30 40), (50 60, 70 80)) | MULTILINESTRING((-122.5 37.7, -122.4 37.8), (-122.3 37.7, -122.2 37.8)) (ๅๅธไธญ็ๅคๆก่ทฏๅพ) | |
| 26 | +| MultiPolygon | ๅคไธช Polygon ๅฏน่ฑก็้ๅ๏ผ่กจ็คบๅคไธชๅบๅๆๅบๅใ | MULTIPOLYGON(((10 20, 30 40, 50 60, 10 20)), ((15 25, 25 35, 35 45, 15 25))) | MULTIPOLYGON(((-122.5 37.7, -122.4 37.8, -122.3 37.7, -122.5 37.7))) (ๅๅธไธญ็ๅคไธชๅบๅ) | |
| 27 | +| GeometryCollection | ไธๅ็ฑปๅๅ ไฝๅฏน่ฑก็้ๅ๏ผๅฆ็นใ็บฟๅๅค่พนๅฝขใ | GEOMETRYCOLLECTION(POINT(10 20), LINESTRING(10 20, 30 40), POLYGON((10 20, 30 40, 50 60, 10 20))) | GEOMETRYCOLLECTION(POINT(-122.4194 37.7749), LINESTRING(-122.5 37.7, -122.4 37.8)) | |
| 28 | + |
| 29 | +## ๆฏๆ็่พๅบๆ ผๅผ |
| 30 | + |
| 31 | +Databend ๆฏๆๅค็งๅฐ็็ฉบ้ด่พๅบๆ ผๅผโโ[WKT (Well-Known Text)](https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry)ใEWKT (Extended Well-Known Text)ใ[WKB (Well-Known Binary)](https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry#Well-known_binary)ใEWKB (Extended Well-Known Binary) ๅ [GeoJSON](https://geojson.org/)ใEWKT ๅ EWKB ้่ฟๅ
ๅซ SRID๏ผ็ฉบ้ดๅ่็ณป็ปๆ ่ฏ็ฌฆ๏ผๆฉๅฑไบ WKT ๅ WKB๏ผไปฅๆๅฎๅๆ ๅ่็ณป็ป๏ผไพๅฆ `SRID=4326;POINT(-44.3 60.1)`ใ |
| 32 | + |
| 33 | +| ๅฏน่ฑก็ฑปๅ | WKT ็คบไพ | GeoJSON ็คบไพ | |
| 34 | +|--------------------|--------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------| |
| 35 | +| Point | `POINT(10 10)` | `{"coordinates":[10,10],"type":"Point"}` | |
| 36 | +| LineString | `LINESTRING(10 10, 20 30)` | `{"coordinates":[[10,10],[20,30]],"type":"LineString"}` | |
| 37 | +| Polygon | `POLYGON((10 10, 15 16, 22 10, 30 32))` | `{"coordinates":[[[10,10],[15,16],[22,10],[30,32],[10,10]]],"type":"Polygon"}` | |
| 38 | +| MultiPoint | `MULTIPOINT((10 20), (30 40), (50 60))` | `{"coordinates":[[10,20],[30,40],[50,60]],"type":"MultiPoint"}` | |
| 39 | +| MultiLineString | `MULTILINESTRING((10 20, 30 40), (50 60, 70 80))` | `{"coordinates":[[[10,20],[30,40]],[[50,60],[70,80]]],"type":"MultiLineString"}` | |
| 40 | +| MultiPolygon | `MULTIPOLYGON(((10 20, 30 40, 50 60, 10 20)), ((15 25, 25 35, 35 45, 15 25)))` | `{"coordinates":[[[[10,20],[30,40],[50,60],[10,20]]],[[[15,25],[25,35],[35,45],[15,25]]]],"type":"MultiPolygon"}` | |
| 41 | +| GeometryCollection | `GEOMETRYCOLLECTION(POINT(10 20), LINESTRING(10 20, 30 40), POLYGON((10 20, 30 40, 50 60, 10 20)))` | `{"coordinates":[[[10,20],[30,40],[50,60],[10,20]]],"type":"Polygon"}` | |
| 42 | + |
| 43 | +่ฆๅจ Databend ไธญๅๆขๅฐ็็ฉบ้ด่พๅบๆ ผๅผ๏ผ่ฏทไฝฟ็จ `SET geometry_output_format` ่ฎพ็ฝฎ้
็ฝฎๆ้็ๆ ผๅผใไพๅฆ๏ผ |
| 44 | + |
| 45 | +```sql |
| 46 | +SET geometry_output_format = 'geojson'; |
| 47 | +``` |
| 48 | + |
| 49 | +## ๅฝๆฐ |
| 50 | + |
| 51 | +้่ฟไปฅไธ้พๆฅๆข็ดขๆ็ฑปๅซ็ป็ป็ๆๆๅฏ็จๅฐ็็ฉบ้ดๅฝๆฐใ |
| 52 | + |
| 53 | +- [Geometry ๅฝๆฐ](../../20-sql-functions/09-geometry-functions/index.md) |
| 54 | +- [H3](../../20-sql-functions/09-geo-functions/index.md) |
| 55 | + |
| 56 | +## ็คบไพ |
| 57 | + |
| 58 | +```sql |
| 59 | +-- ๅฏ็จๅฐ็็ฉบ้ด็ฑปๅ |
| 60 | +SET enable_geo_create_table=1; |
| 61 | + |
| 62 | +-- ่ฎพ็ฝฎ่พๅบๆ ผๅผไธบ WKT |
| 63 | +SET geometry_output_format='wkt'; |
| 64 | + |
| 65 | + |
| 66 | +CREATE OR REPLACE TABLE test (id INT, geo GEOMETRY); |
| 67 | +INSERT INTO test VALUES |
| 68 | + (1, 'POINT(66 12)'), |
| 69 | + (2, 'MULTIPOINT((45 21), (12 54))'), |
| 70 | + (3, 'LINESTRING(40 60, 50 50, 60 40)'), |
| 71 | + (4, 'MULTILINESTRING((1 1, 32 17), (33 12, 73 49, 87.1 6.1))'), |
| 72 | + (5, 'POLYGON((17 17, 17 30, 30 30, 30 17, 17 17))'), |
| 73 | + (6, 'MULTIPOLYGON(((-10 0,0 10,10 0,-10 0)),((-10 40,10 40,0 20,-10 40)))'), |
| 74 | + (7, 'GEOMETRYCOLLECTION(POLYGON((-10 0,0 10,10 0,-10 0)),LINESTRING(40 60, 50 50, 60 40), POINT(99 11))'); |
| 75 | +``` |
| 76 | + |
| 77 | +```sql |
| 78 | +SELECT id, geo FROM test; |
| 79 | +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ |
| 80 | +โ id โ geo โ |
| 81 | +โโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค |
| 82 | +โ 1 โ POINT(66 12) โ |
| 83 | +โ 2 โ MULTIPOINT(45 21,12 54) โ |
| 84 | +โ 3 โ LINESTRING(40 60,50 50,60 40) โ |
| 85 | +โ 4 โ MULTILINESTRING((1 1,32 17),(33 12,73 49,87.1 6.1)) โ |
| 86 | +โ 5 โ POLYGON((17 17,17 30,30 30,30 17,17 17)) โ |
| 87 | +โ 6 โ MULTIPOLYGON(((-10 0,0 10,10 0,-10 0)),((-10 40,10 40,0 20,-10 40))) โ |
| 88 | +โ 7 โ GEOMETRYCOLLECTION(POLYGON((-10 0,0 10,10 0,-10 0)),LINESTRING(40 60,50 50,60 40),POINT(99 11)) โ |
| 89 | +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ |
| 90 | + |
| 91 | +-- ่ฝฌๆขไธบWKBๆ ผๅผ |
| 92 | +SELECT id, st_aswkb(geo) FROM test WHERE id=1; |
| 93 | +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ |
| 94 | +โ id โ st_aswkb(geo) โ |
| 95 | +โโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค |
| 96 | +โ 1 โ 010100000000000000008050400000000000002840 โ |
| 97 | +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ |
| 98 | + |
| 99 | +-- ่ฝฌๆขไธบGeoJSONๆ ผๅผ |
| 100 | +SELECT id, st_asgeojson(geo) FROM test WHERE id=1; |
| 101 | +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ |
| 102 | +โ id โ st_asgeojson(geo) โ |
| 103 | +โโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค |
| 104 | +โ 1 โ {"coordinates":[66,12],"type":"Point"} โ |
| 105 | +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ |
| 106 | + |
| 107 | +-- ่ทๅPoint็XๅYๅๆ |
| 108 | +SELECT id, st_x(geo), st_y(geo) FROM test WHERE id=1; |
| 109 | +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ |
| 110 | +โ id โ st_x(geo) โ st_y(geo) โ |
| 111 | +โโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโค |
| 112 | +โ 1 โ 66 โ 12 โ |
| 113 | +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ |
| 114 | + |
| 115 | +-- ่ทๅๆฐๆฎ็็ปดๅบฆ |
| 116 | +SELECT id, st_dimension(geo) FROM test; |
| 117 | +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ |
| 118 | +โ id โ st_dimension(geo) โ |
| 119 | +โโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโค |
| 120 | +โ 1 โ 0 โ |
| 121 | +โ 2 โ 0 โ |
| 122 | +โ 3 โ 1 โ |
| 123 | +โ 4 โ 1 โ |
| 124 | +โ 5 โ 2 โ |
| 125 | +โ 6 โ 2 โ |
| 126 | +โ 7 โ 2 โ |
| 127 | +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ |
| 128 | + |
| 129 | +-- ๅฐ็ฉบ้ดๅ่็ณป็ปไป4326่ฝฌๆขไธบ3857 |
| 130 | +SELECT id, st_transform(geo, 4326, 3857) FROM test; |
| 131 | +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ |
| 132 | +โ id โ st_transform(geo, 4326, 3857) โ |
| 133 | +โโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค |
| 134 | +โ 1 โ POINT(7347086.392356 1345708.408409) โ |
| 135 | +โ 2 โ MULTIPOINT(5009377.085697 2391878.587944,1335833.889519 7170156.294) โ |
| 136 | +โ 3 โ LINESTRING(4452779.631731 8399737.889818,5565974.539664 6446275.841017,6679169.447596 4865942.279503) โ |
| 137 | +โ 4 โ MULTILINESTRING((111319.490793 111325.142866,3562223.705385 1920825.040377),(3673543.196178 1345708.408409,8126322.827909 6274861.394007,9695927.648094 680335.356476)) โ |
| 138 | +โ 5 โ POLYGON((1892431.343486 1920825.040377,1892431.343486 3503549.843504,3339584.723798 3503549.843504,3339584.723798 1920825.040377,1892431.343486 1920825.040377)) โ |
| 139 | +โ 6 โ MULTIPOLYGON(((-1113194.907933 0,0 1118889.974858,1113194.907933 0,-1113194.907933 0)),((-1113194.907933 4865942.279503,1113194.907933 4865942.279503,0 2273030.926988,-1113194.907933 4865942.279503))) โ |
| 140 | +โ 7 โ GEOMETRYCOLLECTION(POLYGON((-1113194.907933 0,0 1118889.974858,1113194.907933 0,-1113194.907933 0)),LINESTRING(4452779.631731 8399737.889818,5565974.539664 6446275.841017,6679169.447596 4865942.279503),POINT(11020629.588534 1232106.801897)) โ |
| 141 | +โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ |
| 142 | +``` |
0 commit comments