SpatiaLite関数一覧
===
[SpatiaLite SQL functions reference list](http://www.gaia-gis.it/gaia-sins/spatialite-sql-4.4.0.html)
## このページについて
SpatiaLiteで利用できる関数の一覧と、一部の関数については記法とともに詳細を記載しています。個人が趣味でまとめているものなので、参考程度ということで。。
SpatiaLite4.4.0-RCで利用できる関数の一覧です。
(なお、2018/12/08現在QGISに含まれているものは4.3.0です。)
[4.3、4.4、5.0の対応する関数と利用するライブラリ一覧](https://docs.google.com/spreadsheets/d/1PjNXVQwqsEg1Ca8sVXGpR5DLhqCZ2Yz2qGqw33fjGAo)
[SpatiaLiteの概要](/zsATr-xkQf-3X3cVrYCQoA)
---
## log
* 2018-12-08
Hackpadサービス終了後、DropboxPaperに放置されていたのを移行
---
# 関数一覧
---
## **SQLバージョン情報関数**
**ライブラリのバージョン確認**
* proj4_version
* geos_version
* lwgeom_version
* libxml2_version
**ライブラリがビルトインされているか確認**
* HasIconv
* HasMathSQL
* HasGeoCallbacks
* HasProj
* HasGeos
* HasGeosAdvanced
* HasGeosTrunk
* HasLwGeom
* HasLibXML2
* HasEpsg
* HasFreeXL
---
## **ジェネリックSQL関数**
**型変換(Cast)系**
* CastToInteger
整数型への変換
* CastToDouble
実数型への変換
* CastToText
文字列型への変換
* CastToBlob
バイナリ型への変換
* ForceAsNull
条件に合致する場合NULLを返す
* CreateUUID
Version 4 (random) のUUID (Universally unique identifier) を返す
---
## **数学関数(SQLite標準搭載と同じ?)**
* Abs
* Acos
* Asin
* Atan
* Ceil
* Ceiling
* Cos
* Cot
* Degrees
* Exp
* Floor
* Ln
* Log
* Log
* Log2
* Log10
* PI
* Pow
* Power
* Radians
* Round
* Sign
* Sin
* Sqrt
* Stddev_pop
* Stddev_samp
* Tan
* Var_pop
* Var_samp
---
## **エラーメッセージ・警告を取得する関数**
* GEOS_GetLastWarningMsg()
* GEOS_GetLastErrorMsg()
* GEOS_GetLastAuxErrorMsg()
* GEOS_GetCriticalPointFromMsg()
* LWGEOM_GetLastWarningMsg()
* LWGEOM_GetLastErrorMsg()
---
## **距離単位換算関数**
いずれも、引数にメートル単位の長さを指定する。
* CvtToXXX (*Double precision*)
* 例:CvtToKm(10000) ⇒ 10.000000
| CvtToKm | Kilometer |
| ---------- | ------------------------------------- |
| CvtToDm | Decimeter |
| CvtToCm | Centimeter |
| CvtToMm | Millimeter |
| CvtToKmi | International Nautical Mile |
| CvtToIn | International Inch |
| CvtToFt | International Foot |
| CvtToYd | International Yard |
| CvtToMi | International Statute Mile |
| CvtToFath | International Fathom(水深の測定単位(=6フィート)) |
| CvtToCh | International Chain(66フィートに相当) |
| CvtToLink | International Link(1/100 Chainに相当) |
| CvtToUsIn | U.S. Inch |
| CvtToUsFt | U.S. Foot |
| CvtToUsYd | U.S. Yard |
| CvtToUsMi | U.S. Statute Mile |
| CvtToUsCh | U.S. Chain |
| CvtToIndFt | Indian Foot |
| CvtToIndYd | Indian Yard |
| CvtToIndCh | Indian Chain |
---
## 座標表記を変換する関数
**十進表記から度分秒への変換**
* LongLatToDMS
* LongLatToDMS(135,40) ⇒ 40°00′00″N 135°00′00″E
**度分秒から十進表記への変換**
緯度と経度別々の関数(値には完全な座標値が必要)
* LongitudeFromDMS
* LongitudeFromDMS("40°00′00″N 135°00′00″E") ⇒ 135.000000
* LatitudeFromDMS
---
## バイナリオブジェクトのユーティリティ関数
**Is○○系 =渡すBLOBオブジェクトが○○のデータかどうかを確認する**
* IsZipBlob
* IsPdfBlob
* IsGifBlob
* IsPngBlob
* IsTiffBlob
* IsJpegBlob
* IsExifBlob
* IsExifGpsBlob
* IsWebpBlob(WebP画像フォーマット)
* GetMimeType
* 与えられたオブジェクトが下記に該当するかどうかをチェックする
* image/gif, image/png, image/jpeg, image/tiff, image/svg+xml, application/xml, application/zip,application/pdf
**Blob File系 =ファイルからのオブジェクト取得/ファイルへのオブジェクト出力**
* BlobFromFile
* BlobToFile
* CountUnsafeTriggers
* 問題のあるトリガーが含まれていないかをチェックする
---
## **ジオメトリオブジェクトのユーティリティ関数**
* GeomFromExifGpsBlob
* Exif-GPSメタデータからポイントのジオメトリデータを得る
**ジオメトリオブジェクト生成系**
* 点を生成する関数
* ST_Point(座標から点を生成)
* MakePoint(ST_Pointと同じだがSRIDの指定が可能)
* MakePointZ(XYZ形式の点データを生成)
* MakePointZM(XYZM形式の点データを生成)
* 線を生成する関数
* MakeLine(二点の結合)
* MakeLine(SinglePointGeometryのリストから生成。集計関数として機能。)
* MakeLine(マルチポイントのデータからラインストリングを生成。)
* MakeCircle(中心座標と半径から円周を得る)
* MakeEllipse(中心座標と長径短径から楕円を得る)
* MakeArc(円弧を生成)
* MakeEllipticArc(楕円弧を生成)
* 面を生成する関数
* MakeCircularSector(円弧面を生成)
* MakeEllipticSector(楕円弧面を生成)
* MakeCircularStripe(ドーナツ面の一部を生成)
**Grid生成系**
* SquareGrid(地物を内包する正方形グリッドを生成)
* TriangularGrid(地物を内包する三角形グリッドを生成)
* HexagonalGrid(地物を内包する六角形グリッドを生成)
**(Minimum Bounding Rectangle)系**
* MBRを生成する関数
* BuildMbr(二点の座標から長方形(MBR)を生成)
* BuildCircleMbr(指定された中心座標および半径からこれを内包する長方形を生成)
* Extent(与えられたジオメトリ(群)を内包する長方形を生成)
* MBRに関する座標値を取得する関数
* MbrMinX(ジオメトリから得られるMBRの左端を取得)
* MbrMinY(ジオメトリから得られるMBRの下端を取得)
* MbrMaxX(ジオメトリから得られるMBRの右端を取得)
* MbrMaxY(ジオメトリから得られるMBRの上端を取得)
* ST_MinZ(ジオメトリ内の最小Zを取得)
* ST_MaxZ(ジオメトリ内の最大Zを取得)
* ST_MinM(ジオメトリ内の最小Mを取得)
* ST_MaxM(ジオメトリ内の最大Mを取得)
**GARS(Global Area Reference System)系**
* ToGARS
* 入力(ポイント)に対応するGARSコードを返す
* GARSMbr
---
## **WKT/WKBからジオメトリオブジェクトを生成する関数**
**WKT(Well-known Text)からオブジェクトを生成する関数**
* GeomFromText
* ST_WKTToSQL
* PointFromText
* LineFromText
* LineStringFromText
* PolyFromText
* PolygonFromText
* MPointFromText
* MultiPointFromText
* MLineFromText
* MultiLineStringFromText
* MPolyFromText
* MultiPolygonFromText
* GeomCollFromText
* GeometryCollectionFromText
* BdPolyFromText
* BdMPolyFromText
**WKB(Well-known Binary)からオブジェクトを生成する関数**
* GeomFromWKB
* ST_WKBToSQL
* PointFromWKB
* LineFromWKB
* LineStringFromWKB
* PolyFromWKB
* PolygonFromWKB
* MPointFromWKB
* MultiPointFromWKB
* MLineFromWKB
* MultiLineStringFromWKB
* MPolyFromWKB
* MultiPolygonFromWKB
* GeomCollFromWKB
* GeometryCollectionFromWKB
* BdPolyFromWKB
* BdMPolyFromWKB
---
## ジオメトリオブジェクトからWKT/WKBを取得する関数
* AsText
* AsWKT
* AsBinary
---
## 種々のフォーマットでオブジェクトを得るための関数
* AsSVG
* AsKml
* GeomFromKml
* AsGml
* GeomFromGML
* AsGeoJSON
* GeomFromGeoJSON
* AsEWKB
* GeomFromEWKB
* AsEWKT
* GeomFromEWKT
* AsFGF
* GeomFromFGF
---
## ジオメトリオブジェクトに適用する関数
* Dimension(ジオメトリの次数を得る)
* CoordDimension(ジオメトリの次元数を得る)
* ST_NDims(ジオメトリの次元数を整数で得る)
* ST_Is3D(ジオメトリがZ次元を持っているかを確認する)
* ST_IsMeasured(ジオメトリがM次元を持っているかを確認する)
* GeometryType(ジオメトリのタイプを得る)
* SRID(ジオメトリのSRIDを得る)
* SetSRID(ジオメトリにSRIDを設定する)
* IsEmpty(ジオメトリが空かどうかを確認する)
* IsSimple(ジオメトリがシンプルかどうかを確認する)
* IsValid(ジオメトリがトポロジカルエラーを含むかどうかをチェックする)
* IsValidReason(ジオメトリがどのようなエラーを含むかを返す)
* IsValidDetail(ジオメトリエラーの位置を示すジオメトリを得る)
* Boundary(ジオメトリのBoundaryを得る)
* Envelope(地物のバウンディングボックスのポリゴンを得る)
* ST_Expand(地物のバウンディングボックスを広げたポリゴンを得る)
* ST_NPoints(ジオメトリに含まれる頂点を含む点の数を得る)
* ST_NRings(ジオメトリに含まれるリングの数を得る)
* ST_Reverse(ジオメトリの方向を反転する)
* ST_ForceLHR(ポリゴンのリングの方向をLeftHand-Ruleで方向づける?)
---
## 壊れたジオメトリオブジェクトを修正する関数
* SanitizeGeometry
---
## ジオメトリオブジェクトの圧縮・展開関数
* CompressGeometry
* 圧縮はLINESTRING、POLYGONのみ対応。
* UncompressGeometry
---
## ジオメトリタイプの変換(Cast)関数
いずれも( Geometry )で渡す。戻りもGeometry。変換できないとNULLが返る。
* CastToPoint
* CastToLinestring
* CastToPolygon
* CastToMultiPoint
* CastToMultiLinestring
* CastToMultiPolygon
* CastToGeometyCollection
* CastToMulti
* CastToSingle
---
## 次元変換(Cast)関数
いずれも( Geometry )で渡す。戻りもGeometry。変換できないとNULLが返る。
* CastToXY
* CastToXYZ
* CastToXYM
* CastToXYZM
---
## 各種ジオメトリオブジェクトに適用する基本関数
* Pointオブジェクトに適用する関数
* X(点のX座標を返す)
* Y(点のY座標を返す)
* Z(点のZ値を返す)
* M(点のM値を返す)
* Curve(Linestring、Ring)オブジェクトに適用する関数
* StartPoint(ジオメトリ(線)の始点を得る)
* EndPoint(ジオメトリ(線)の終点を得る)
* GLength(Linestringの長さを得る)
* Perimeter(面の周囲長を得る)
* GeodesicLength(LinestringのEllipsoid距離を得る)
* GreatCircleLength(Linestringの球面距離を得る)
* IsClosed(Linestringが閉じているかどうかをチェックする)
* IsRing(Linestringがリングであるかどうかをチェックする)
* PointOnSurface(ジオメトリ上の点を返す)
* Simplify(線の単純化)
* SimplifyPreserveTopology(線の単純化)
* Linestringオブジェクトに適用する関数
* NumPoints(Linestringに含まれる頂点の数を得る)
* PointN(Linestring上N番目の頂点を得る)
* AddPoint(Linestringに頂点を追加する)
* SetPoint(Linestringの指定した位置の頂点を置き換える)
* SetStartPoint(Linestringの始点を置換する)
* SetEndPoint(Linestringの終点を置換する)
* RemovePoint(Linestringの頂点を削除する)
* Surface(Polygon、Ring)オブジェクトに適用する関数
* Centroid(面のセントロイドを得る)
* Area(面の面積を得る)
* Polygonオブジェクトに適用する関数
* ExteriorRing(ポリゴンの外環を得る)
* NumInteriorRing(内環の数を得る)
* InteriorRingN(内環のひとつをLinestringで抽出する)
* GeometryCollectionオブジェクトに適用する関数
* NumGeometries(GeometryCollectionに含まれるジオメトリの数を得る)
* GeometryN(GeometryCollectionの特定のジオメトリを抽出する)
---
## MBRを利用して空間的関係を確認する関数
* MbrEqual
* MbrDisjoint
* MbrTouches
* MbrWithin
* MbrOverlaps
* MbrIntersects
* EnvelopesIntersects
* MbrContains
---
## SpatialRelationships関数
地物の関係性を得る関数群。
* Equals -- ( geom1 *Geometry* , geom2 *Geometry* )
* Disjoint :( geom1 *Geometry* , geom2 *Geometry* )
* Touches :( geom1 *Geometry* , geom2 *Geometry* )
* Within :( geom1 *Geometry* , geom2 *Geometry* )
* Overlaps :( geom1 *Geometry* , geom2 *Geometry* )
* Crosses :( geom1 *Geometry* , geom2 *Geometry* )
* Intersects :( geom1 *Geometry* , geom2 *Geometry* )
* Contains :( geom1 *Geometry* , geom2 *Geometry* )
* Covers :( geom1 *Geometry* , geom2 *Geometry* )
* CoveredBy :( geom1 *Geometry* , geom2 *Geometry* )
* Relate :( geom1 *Geometry* , geom2 *Geometry* , patternMatrix *String* )
---
## 距離に関する関数
* Distance(ふたつのジオメトリ間の距離を得る)
* PtDistWithin(ふたつの地物が一定の距離内にあるかどうかを確認する)
---
## 空間演算関数
* 基本関数
* Intersection(インターセクト:交差)
* Difference(差分)
* GUnion(融合)
* SymDifference(Symmetrical Difference:対称差分)
* Buffer(バッファ)
* ConvexHull(凸包)
* GEOS拡張関数
* HausdorffDistance(ハウスドルフ距離を得る)
* OffsetCurve(Linestringのオフセットバッファを得る)
* SingleSidedBuffer(Linestringの片方向へバッファしたPolygonを得る)
* SharedPaths(二つのジオメトリの共有線を抽出する)
* Line_Interpolate_Point(Linestring上の点を得る)
* Line_Interpolate_Equidistant_Points(一定間隔でLinestring上に点を得る)
* Line_Locate_Point(Pointからの距離が最短となるLinestring上の位置を得る)
* Line_Substring(Linestringの一部を抽出する)
* ClosestPoint(geom2に最も近いgeom1上の位置をPointで得る)
* ShortestLine(二つのジオメトリを最短で結ぶLinestringを得る)
* Snap(geom1の頂点をgeom2の頂点にスナップする)
* Collect(ジオメトリコレクションを生成する)
* LineMerge(複数のLinestringを一つのLinestring系ジオメトリに統一する)
* BuildArea(LinestringからPolygonを得る)
* Polygonize(LinestringからPolygonを得る)
* MakePolygon(閉環からPolygonを生成する)
* UnaryUnion(融合)
* DissolveSegments(Linestring、Ringをセグメントに分割する)
* DissolvePoints(頂点に分割する)
* LinesFromRings(ポリゴンの環からLinestringを生成する)
* LinesCutAtNodes(LinestringをPointの位置で切断する)
* RingsCutAtNodes(Polygonの環を交差部分で切断する)
* CollectionExtract(GeometryCollectionから指定した種類のサブジオメトリを抽出する)
* ExtractMultiPoint(ジオメトリからPointタイプのジオメトリを抽出する)
* ExtractMultiLinestring(ジオメトリからLinestringタイプのジオメトリを抽出する)
* ExtractMultiPolygon(ジオメトリからPolygonタイプのジオメトリを抽出する)
* ST_Locate_Along_Measure(M次元を持つジオメトリから特定のMの値で要素を抽出する)
* ST_Locate_Between_Measures(M次元を持つジオメトリから指定した範囲のMの値で要素を抽出する)
* DelaunayTriangulation(ドロネー三角形分割)
* VoronojDiagram(ボロノイ図の生成)
* ConcaveHull(凹包)
* LWGEOM拡張関数
* MakeValid(不正なジオメトリを修正する)
* MakeValidDiscarded(不正なジオメトリを修正する際に除外された要素を得る)
* Segmentize(Linestring、Ringをセグメンタイズする)
* Split(ジオメトリを他のジオメトリによって分割する)
* SplitLeft(Splitで切断されたジオメトリの左側を除外したジオメトリを生成する)
* SplitRight(Splitで切断されたジオメトリの右側を除外したジオメトリを生成する)
* Azimuth(一点から見た他の一点方向の角度)
* Project(ポイントジオメトリの位置を距離と角度に基づいて変更する)
* SnapToGrid(点や頂点を指定したグリッドにスナップする)
* GeoHash(ジオメトリのGeoHash表記を得る)
* AsX3D(ジオメトリをX3D-XMLフォーマットに変換する)
* MaxDistance(二つのジオメトリオブジェクトの最大距離を得る)
* ST_3DDistance(ジオメトリオブジェクト同士の三次元距離を得る)
* ST_3DMaxDistance(ジオメトリオブジェクト同士の最大三次元距離を得る)
* ST_3dLength(Linestringの三次元長さを得る)
* ST_Node(???)
* SelfIntersections(自己交差の位置をPointで抽出する)
---
## **座標変換**
* Transform
* SridFromAuthCRS
* ShiftCoords
* ST_Translate
* ST_Shift_Longitude
* NormalizeLonLat
* ScaleCoords
* RotateCoords
* ReflectCoords
* SwapCoords
---
## **アフィン変換およびGCPサポートに関する関数**
* アフィン変換に関する関数
* ATM_Create
* ATM_CreateTranslate
* ATM_CreateScale
* ATM_CreateRotate
* ATM_CreateXRoll
* ATM_CreateYRoll
* ATM_Multiply
* ATM_Translate
* ATM_Scale
* ATM_Rotate
* ATM_XRoll
* ATM_YRoll
* ATM_Determinant
* ATM_IsInvertible
* ATM_Invert
* ATM_IsValid
* ATM_AsText
* ATM_Transform
* GCPサポートに関する関数(GRASS GISライブラリを使用した機能)
c.f. -- [SpatiaLite: Ground Control Points](https://www.gaia-gis.it/fossil/libspatialite/wiki?name=Ground+Control+Points)
* GCP_Compute
* GCP_IsValid
* GCP_AsText
* GCP2ATM
* GCP_Transform
---
## **空間メタデータ・空間インデックスに関する関数**
* InitSpatialMetaData
* InsertEpsgSrid
* AddGeometryColumn
* RecoverGeometryColumn
* DiscardGeometryColumn
* RegisterVirtualGeometry
* DropVirtualGeometry
* CreateSpatialIndex
* CreateMbrCache
* DisableSpatialIndex
* CheckShadowedRowid
* CheckWithoutRowid
* CheckSpatialIndex
* RecoverSpatialIndex
* InvalidateLayerStatistics
* UpdateLayerStatistics
* GetLayerExtent
* CreateRasterCoveragesTable
* CreateVectorCoveragesTables
* RebuildGeometryTriggers
* UpgradeGeometryTriggers
---
## **メタカタログに関する関数**
* CreateMetaCatalogTables
* UpdateMetaCatalogStatistics
---
## **SLD/SE Styled Layersをサポートする関数**
* CreateStylingTables
* SE_RegisterVectorCoverage
* SE_UnregisterVectorCoverage
* SE_SetVectorCoverageInfos
* SE_RegisterVectorCoverageSrid
* SE_UnregisterVectorCoverageSrid
* SE_UpdateVectorCoverageExtent
* SE_RegisterVectorCoverageeKeyword
* SE_UnregisterVectorCoverageKeyword
* SE_RegisterExternalGraphic
* SE_UnregisterExternalGraphic
* SE_RegisterVectorStyle
* SE_UnregisterVectorStyle
* SE_ReloadVectorStyle
* SE_RegisterVectorStyledLayer
* SE_UnregisterVectorStyledLayer
* SE_RegisterRasterStyle
* SE_UnregisterRasterStyle
* SE_ReloadRasterStyle
* SE_RegisterRasterStyledLayer
* SE_UnregisterRasterStyledLayer
* SE_RegisterRasterCoverageSrid
* SE_UnregisterRasterCoverageSrid
* SE_UpdateRasterCoverageExtent
* SE_RegisterRasterCoverageKeyword
* SE_UnregisterRasterCoverageKeyword
* SE_SetStyledGroupInfos
* SE_UnregisterStyledGroup
* SE_RegisterStyledGroupVector
* SE_RegisterStyledGroupRaster
* SE_SetStyledGroupLayerPaintOrder
* SE_SetStyledGroupVectorPaintOrder
* SE_SetStyledGroupRasterPaintOrder
* SE_UnregisterStyledGroupLayer
* SE_UnregisterStyledGroupVector
* SE_UnregisterStyledGroupRaster
* SE_RegisterGroupStyle
* SE_UnregisterGroupStyle
* SE_ReloadGroupStyle
* SE_RegisterStyledGroupStyle
* SE_UnregisterStyledGroupStyle
---
## **ISOメタデータをサポートする関数**
* CreateIsoMetadataTables
* RegisterIsoMetadata
* GetIsoMetadataId
---
## **FDO/OGR互換の関数?**
* CheckSpatialMetaData
* AutoFDOStart
* AutoFDOStop
* InitFDOSpatialMetaData
* AddFDOGeometryColumn
* RecoverFDOGeometryColumn
* DiscardFDOGeometryColumn
---
## **OGC GeoPackage関連の関数**
* CheckGeoPackageMetaData
* AutoGPKGStart
* AutoGPKGStop
* gpkgCreateBaseTables
* gpkgInsertEpsgSRID
* gpkgCreateTilesTable
* gpkgCreateTilesZoomLevel
* gpkgAddTileTriggers
* gpkgGetNormalZoom
* gpkgGetNormalRow
* gpkgGetImageType
* gpkgAddGeomtryColumn
* gpkgAddGeometryTriggers
* gpkgAddSpatialIndex
* gpkgMakePoint
* gpkgMakePointZ
* gpkgMakePointM
* gpkgMakePointZM
* gpkgMakePointZM
* IsValidGPB
* AsGPB
* GeomFromGPB
* CastAutomagic
* GPKG_IsAssignable
---
## **SQL s for MbrCache-based queries**
* FilterMbrWithin
* FilterMbrContains
* FilterMbrIntersects
* BuildMbrFilter
---
## **R*Treeによる空間クエリ(Geometry Callbacks)**
* RTreeIntersects
* RTreeWithin
* RTreeContains
* RTreeDistWithin
---
## **XmlBLOBをサポートする関数**
* XB_Create
* XB_GetPayload
* XB_GetDocument
* XB_SchemaValidate
* XB_Compress
* XB_Uncompress
* XB_IsValid
* XB_IsCompressed
* XB_IsSchemaValidated
* XB_IsIsoMetadata
* XB_IsSldSeVectorStyle
* XB_IsSldSeRasterStyle
* XB_IsSvg
* XB_GetDocumentSize
* XB_GetEncoding
* XB_GetSchemaURI
* XB_GetInternalSchemaURI
* XB_GetFileId
* XB_SetFileId
* XB_AddFileId
* XB_GetParentId
* XB_SetParentId
* XB_AddParentId
* XB_GetTitle
* XB_GetAbstract
* XB_GetGeometry
* XB_GetLastParseError
* XB_GetLastValidateError
* XB_IsValidXPathExpression
* XB_GetLastXPathError
* XB_CacheFlush
* XB_LoadXML
* XB_StoreXML
---
## **SRIDをサポートする関数**
* SridIsGeographic
* SridIsProjected
* SridHasFlippedAxes
* SridGetSpheroid
* SridGetPrimeMeridian
* SridGetDatum
* SridGetUnit
* SridGetProjection
* SridGetAxis_1_Name
* SridGetAxis_1_Orientation
* SridGetAxis_2_Name
* SridGetAxis_2_Orientation
---
## **ジオメトリのトポロジーに関する関数**
* GetLastTopologyException
* ST_InitTopoGeo
* CreateTopology
* DropTopology
* ST_AddIsoNode
* ST_MoveIsoNode
* ST_RemIsoNode
* ST_AddIsoEdge
* ST_ChangeEdgeGeom
* ST_RemIsoEdge
* ST_NewEdgesSplit
* ST_ModEdgeSplit
* ST_NewEdgeHeal
* ST_ModEdgeHeal
* ST_AddEdgeNewFaces
* ST_AddEdgeModFace
* ST_RemEdgeNewFace
* ST_RemEdgeModFace
* ST_GetFaceGeometry
* ST_GetFaceEdges
* ST_ValidateTopoGeo
* ST_CreateTopoGeo
* GetNodeByPoint
* GetEdgeByPoint
* GetFaceByPoint
* TopoGeo_AddPoint
* TopoGeo_AddLineString
* TopoGeo_SubdivideLines
* TopoGeo_FromGeoTable
* TopoGeo_Clone
* TopoGeo_GetEdgeSeed
* TopoGeo_GetFaceSeed
* TopoGeo_UpdateSeeds
* TopoGeo_ToGeoTable
* TopoGeo_ToGeoTableGeneralize
* TopoGeo_CreateTopoLayer
* TopoGeo_InitTopoLayer
* TopoGeo_RemoveTopoLayer
* TopoGeo_ExportTopoLayer
* TopoGeo_InsertFeatureFrom
---
## **トポロジーネットワークに関する関数**
* GetLastNetworkException
* ST_InitTopoNet
* CreateNetwork
* DropNetwork
* ST_AddIsoNetNode
* ST_MoveIsoNetNode
* ST_RemIsoNetNode
* ST_AddLink
* ST_ChangeLinkGeom
* ST_RemoveLink
* ST_NewLogLinkSplit
* ST_ModLogLingSplit
* ST_NewGeoLinkSplit
* ST_ModGeoLingSplit
* ST_NewLinkHeal
* ST_ModLinkHeal
* ST_LogiNetFromTGeo
* ST_SpatNetFromTGeo
* ST_SpatNetFromGeom
* ST_ValidLogicalNet
* ST_ValidSpatialNet
* GetNetNodeByPoint
* GetLinkByPoint
* TopoNet_FromGeoTable
* TopoNet_Clone
* TopoNet_GetLinkSeed
* TopoNet_UpdateSeeds
* TopoNet_ToGeoTable
* TopoNet_ToGeoTableGeneralize
---
## データのマネジメントに関する様々な関数
* テーブルを操作する関数
* CloneTable(テーブルの複製)
* CreateClonedTable(テーブル構造のみ複製)
* CheckDuplicateRows(テーブルに重複した列が含まれるかをチェックする)
* RemoveDuplicateRows(重複する列を削除する)
* ElementaryGeometries(マルチジオメトリを要素ジオメトリに分解したテーブルを生成する)
* DropGeoTable(ジオメトリを含むテーブルを削除する)
* 外部データをインポートする関数
* ImportSHP(shpファイルのインポート)
* ImportDBF(dbfファイルのインポート)
* ImportXLS(xlsファイルのインポート)
* ImportWFS(WFSデータのインポート)
* ImportDXF(dxfファイルのインポート)
* ImportDXFfromDir(ディレクトリ内のdxfファイルのバッチインポート)
* 外部データへエクスポートする関数
* ExportSHP(shpファイルへのエクスポート)
* ExportDBF(dbfファイルへのエクスポート)
* ExportKML(KMLへのエクスポート)
* ExportGeoJSON(GeoJSONへのエクスポート)
* ExportDXF(dxfファイルへのエクスポート)
* その他の関数
* ST_Cutter(ジオメトリデータセットを他のジオメトリデータセットで切断する)
* GetCutterMessage(ST_Cutter処理による診断メッセージの取得)
---
# 個別の関数について
以下、コマンド例でカンマを先頭にしている引数はオプションです。
---
## ジオメトリオブジェクトに適用する関数
### Dimension(ジオメトリの次数を得る)
```
Dimension( -- ST_Dimensionも可
geom Geometry
) -- Integer
-- –1 for an empty geometry.
-- 0 for a geometry with no length and no area.
-- 1 for a geometry with non-zero length and zero area.
-- 2 for a geometry with non-zero
```
---
### CoordDimension(ジオメトリの次元数を得る)
```
CoordDimension(
geom Geometry
) -- String(XY, XYZ, XYM, XYZM)
```
---
### ST_NDims(ジオメトリの次元数を整数で得る)
```
ST_NDims(
geom Geometry
) -- Integer(2 for XY, 3 for XYZ/XYM, 4 for XYZM)
```
---
### ST_Is3D(ジオメトリがZ次元を持っているかを確認する)
```
ST_Is3D(
geom Geometry
) -- Integer(1 for TRUE, 0 for FALSE, -1 for UNKNOWN)
```
---
### ST_IsMeasured(ジオメトリがM次元を持っているかを確認する)
```
ST_IsMeasured(
geom Geometry
) -- Integer(1 for TRUE, 0 for FALSE, -1 for UNKNOWN)
```
---
### GeometryType(ジオメトリのタイプを得る)
```
GeometryType( -- ST_GeometryTypeも可
geom Geometry
) -- String
```
---
### SRID(ジオメトリのSRIDを得る)
```
SRID( -- ST_SRIDも可
geom Geometry
) -- Integer
```
---
### SetSRID(ジオメトリにSRIDを設定する)
```
SetSRID(
geom Geometry,
SRID Integer
) -- Integer
- 設定するだけで再投影するわけではないので注意
```
---
### IsEmpty(ジオメトリが空かどうかを確認する)
```
IsEmpty( -- ST_IsEmptyも可
geom Geometry
) -- Integer(1 for TRUE, 0 for FALSE, –1 for UNKNOWN)
```
---
### IsSimple(ジオメトリがシンプルかどうかを確認する)
```
IsSimple( -- ST_IsSimpleも可
geom Geometry
) -- Integer
```
* 「ジオメトリがシンプル」とは、自己交差やself tangency(自己接触?)が含まれないようなジオメトリ
参考:[https://www.gaia-gis.it/spatialite-2.1/SpatiaLite-manual.html#t5.2](https://www.gaia-gis.it/spatialite-2.1/SpatiaLite-manual.html#t5.2)
---
### IsValid(ジオメトリがトポロジカルエラーを含むかどうかをチェックする)
```
IsValid( -- ST_IsValidも可
geom Geometry
) -- Integer(1 for TRUE, 0 for FALSE, –1 for UNKNOWN)
```
* TRUEであれば、ジオメトリはエラーを含まない。
---
### IsValidReason(ジオメトリがどのようなエラーを含むかを返す)
```
IsValidReason( -- ST_IsValidReasonも可
geom Geometry
) -- String
- ジオメトリが正常であれば'IsValidReason'が返る
```
---
### IsValidDetail(ジオメトリエラーの位置を示すジオメトリを得る)
```
IsValidDetail( -- ST_IsValidDetailも可
geom Geometry
) -- Geometry(usually a PointGeometry)
```
---
### Boundary(ジオメトリのBoundaryを得る)
```
Boundary( -- ST_Boundaryも可
geom Geometry
) -- Geometry
- マルチジオメトリの場合は要素地物の境界が得られるような、、詳しい挙動は理解できていない
```
* サンプル地物(緑のマルチライン)からBoundaryを生成(赤の点)

---
### Envelope(地物のバウンディングボックスのポリゴンを得る)
```
Envelope( -- ST_Envelopeも可
geom Geometry
) -- PolygonGeometry
```
* ジオメトリ群のMBRを生成するExtentと似ているが、集計関数として機能しないので、各地物についてボックスを得る
* サンプル地物(緑のマルチライン)から生成

---
### ST_Expand(地物のバウンディングボックスを広げたポリゴンを得る)
```
ST_Expand(
geom Geometry,
amount Double precision
) -- PolygonGeometry
```
* サンプル地物(緑のマルチライン)からamount=300で生成
![Uploading file..._7qwiwh5xe]()
---
### ST_NPoints(ジオメトリに含まれる頂点を含む点の数を得る)
```
ST_NPoints(
geom Geometry
) -- Integer
```
---
### ST_NRings(ジオメトリに含まれるリングの数を得る)
```
ST_NRings(
geom Geometry
) -- Integer
```
---
### ST_Reverse(ジオメトリの方向を反転する)
```
ST_Reverse(
geom Geometry
) -- LinestringGeometry
```
---
### ST_ForceLHR(ポリゴンのリングの方向をLeftHand-Ruleで方向づける)
```
ST_ForceLHR(
geom Geometry
) -- Geometry
```
* よくわからない。。
---
## 点を生成する関数
---
### ST_Point(座標から点を生成)
```
ST_Point(
x Double precision,
y Double precision
) -- SinglePointGeometry
```
---
### MakePoint(ST_Pointと同じだがSRIDの指定が可能)
```
MakePoint(
x Double precision,
y Double precision
, SRID Integer
) -- SinglePointGeometry
```
---
### MakePointZ(XYZ形式の点データを生成)
```
MakePointZ(
x Double precision,
y Double precision,
z Double precision,
, SRID Integer
) -- SinglePointGeometry
```
---
### MakePointZM(XYZM形式の点データを生成)
```
MakePointZM(
x Double precision,
y Double precision,
z Double precision,
m Double precision
, SRID Integer
) -- SinglePointGeometry
```
## 線を生成する関数
---
### MakeLine(二点の結合)
```
MakeLine(
pt1 PointGeometry,
pt2 PointGeometry
) -- LinestringGeometry
```
---
### MakeLine(SinglePointGeometryのリストから生成。集計関数として機能。)
```
MakeLine(
geom PointGeometry
) -- LinestringGeometry
```
---
### MakeLine(マルチポイントのデータからラインストリングを生成。)
```
MakeLine(
geom MultiPointGeometry,
direction Boolean -- FALSE(0)を指定すると逆向きになる
) -- LinestringGeometry
```
---
### MakeCircle(中心座標と半径から円周を得る)
```
MakeCircle(
cx Double precision,
cy Double precision,
radius Double precision
, SRID Integer
, step Double precision -- 度数で指定(デフォルトは10、45度以上は45度となる。)
) -- Ring(LinestringGeometry)
```
* 半径200、step10度で生成(点は頂点を明示)

---
### MakeEllipse(中心座標と長径短径から楕円を得る)
```
-- 中心座標と長径短径から楕円を得る
MakeEllipse(
cx Double precision,
cy Double precision,
x_axis Double precision,
y_axis Double precision
, SRID Integer
, step Double precision -- 度数で指定(デフォルトは10、度数なので間隔は不均等。)
) -- Ring(LinestringGeometry)
```
* 長径200、短径100、step5度で生成

---
### MakeArc(円弧を生成)
```
MakeArc(
cx Double precision,
cy Double precision,
radius Double precision,
start Double precision, -- 開始位置を度数で指定
stop Double precision -- 終了位置を度数で指定
, SRID Integer
, step Double precision -- 度数で指定
) -- LinestringGeometry
```
* 開始45度、終了270度で生成

---
### MakeEllipticArc(楕円弧を生成)
```
MakeEllipticArc(
cx Double precision,
cy Double precision,
x_axis Double precision, -- X径
y_axis Double precision, -- Y径
start Double precision, -- 開始位置を度数で指定
stop Double precision -- 終了位置を度数で指定
, SRID Integer
, step Double precision -- 度数で指定
) -- LinestringGeometry
```
* 開始90度、終了360度、X径200、Y径100で生成

---
## 面を生成する関数
---
### MakeCircularSector(円弧面を生成)
```
MakeCircularSector(
cx Double precision,
cy Double precision,
radius Double precision,
start Double precision, -- 開始位置を度数で指定
stop Double precision -- 終了位置を度数で指定
, SRID Integer
, stepDouble precision -- 度数で指定
) -- PolygonGeometry
```
* 半径200、開始90度、終了360度、step5で生成

---
### MakeEllipticSector(楕円弧面を生成)
```
MakeEllipticSector(
cx Double precision,
cy Double precision,
x_axis Double precision, -- X径
y_axis Double precision, -- Y径
start Double precision, -- 開始位置を度数で指定
stop Double precision -- 終了位置を度数で指定
, SRID Integer
, step Double precision
) -- PolygonGeometry
```
* 開始45度、終了270度、X径200、Y径100、step5で生成

---
### MakeCircularStripe(ドーナツ面の一部を生成)
```
MakeCircularStripe(
cx Double precision,
cy Double precision,
radius_1 Double precision, -- 径1
radius_2 Double precision, -- 径2
start Double precision, -- 開始位置を度数で指定
stop Double precision -- 終了位置を度数で指定
, SRID Integer
, step Double precision
) -- PolygonGeometry
```
* 開始45度、終了270度、径200、径100、step5で生成

---
## ジオメトリ基本関数(Point)
---
### X(点のX座標を返す)
```sql
X( -- ST_Xも可
pt PointGeometry
) -- Double precision
```
---
### Y(点のY座標を返す)
```sql
Y( -- ST_Yも可
pt PointGeometry
) -- Double precision
```
---
### Z(点のZ値を返す)
```sql
Z( -- ST_Zも可
pt PointGeometry
) -- Double precision
```
---
### M(点のM値を返す)
```sql
M( -- ST_Mも可
pt PointGeometry
) -- Double precision
```
---
## ジオメトリ(Curve(Linestring、Ring))
---
### StartPoint(ジオメトリ(線)の始点を得る)
```sql
StartPoint( -- ST_StartPointも可
c LinestringGeometry
) -- PointGeometry
```

---
### EndPoint(ジオメトリ(線)の終点を得る)
```sql
EndPoint( -- ST_EndPointも可
c LinestringGeometry
) -- PointGeometry
```

---
### GLength(Linestringの長さを得る)
```sql
GLength( -- ST_Lengthも可
c LinestringGeometry
, use_ellipsoid Boolean -- 1(TRUE) or Other(FALSE)
) -- Double precision
```
* use_ellipsoid オプションを指定しない場合、ジオメトリのSRIDに応じた単位での距離が返る。
* use_ellipsoid オプションを有効にすると、メートル単位で距離が得られる。ただし、この場合Geometryの空間参照システムは緯度経度のみ有効で、投影座標を与えるとNULLが返る。
* use_ellipsoid オプションを1(TRUE)で指定すると曲面距離(Ellipsoid)、それ以外(FALSE)を指定すると球面距離(Great Circle)が得られる。
---
### Perimeter(面の周囲長を得る)
```sql
Perimeter( -- ST_Perimeterも可
s PolygonGeometry or MultiPolygonGeometry
, use_ellipsoid Boolean -- 1(TRUE) or Other(FALSE)
) -- Double precision
```
* use_ellipsoid オプションを指定しない場合、ジオメトリのSRIDに応じた単位での距離が返る。
* use_ellipsoid オプションを有効にすると、メートル単位で距離が得られる。ただし、この場合Geometryの空間参照システムは緯度経度のみ有効で、投影座標を与えるとNULLが返る。
* use_ellipsoid オプションを1(TRUE)で指定すると曲面距離(Ellipsoid)、それ以外(FALSE)を指定すると球面距離(Great Circle)が得られる。
---
### GeodesicLength(LinestringのEllipsoid距離を得る)
```sql
GeodesicLength(
c LinestringGeometry
) -- Double precision
```
* 結果はメートル単位。
* Geometryの空間参照システムは緯度経度のみ有効。投影座標を指定するとNULLが返る。
* GLengthでuse_ellipsoidを有効にし、TRUEを指定した場合と同じ
---
### GreatCircleLength(Linestringの球面距離を得る)
```sql
GreatCircleLength(
c LinestringGeometry
) -- Double precision
```
* 結果はメートル単位。
* Geometryの空間参照システムは緯度経度のみ有効。投影座標を指定するとNULLが返る。
* GLengthでuse_ellipsoidを有効にし、FALSEを指定した場合と同じ
---
### IsClosed(Linestringが閉じているかどうかをチェックする)
```sql
IsClosed( -- ST_IsClosedも可
c LinestringGeometry
) -- Integer(1 for TRUE, 0 for FALSE, –1 for UNKNOWN)
```
* TRUEの場合、Linestringの始点=終点。
---
### IsRing(Linestringがリングであるかどうかをチェックする)
```sql
IsRing( -- ST_IsRingも可
c LinestringGeometry
) -- Integer(1 for TRUE, 0 for FALSE, –1 for UNKNOWN)
```
* TRUEの場合、Linestringが閉じており、かつシンプル(始点かつ終点以外の位置で一度も交差しない)である。
---
### PointOnSurface(ジオメトリ上の点を返す)
```sql
PointOnSurface( -- ST_PointOnSurfaceも可
s PolygonGeometry/LinestringGeometry
) -- PointGeometry
```
* 必ずしも中点、重心の位置ではないことに注意。Linestringの場合は頂点のひとつが返る。

---
### Simplify(線の単純化)
```sql
Simplify( -- ST_Simplify,ST_Generalizeも可
c LinestringGeometry,
tolerance Double precision
) -- LinestringGeometry
```
* 与えられたしきい値(tolerance)に基づいて単純化されたジオメトリが返る。
* 単純化はDouglas-Peukerのアルゴリズムに基づく。
* toleranceの単位は未確認。。
tolerance=10でのサンプル

---
### SimplifyPreserveTopology(線の単純化)
```sql
SimplifyPreserveTopology( -- ST_SimplifyPreserveTopologyも可
c LinestringGeometry,
tolerance Double precision
) -- LinestringGeometry
```
* Simplifyと同様だが、トポロジが保持されたジオメトリが得られる。(適当なサンプルがないので確認できないが、得られるジオメトリがInvalidにならないということか?)
---
## ジオメトリ基本関数(Linestring)
---
### NumPoints(Linestringに含まれる頂点の数を得る)
```sql
NumPoints( -- ST_NumPointsも可
line LinestringGeometry
) -- Integer
```
---
### PointN(Linestring上N番目の頂点を得る)
```sql
PointN( -- ST_PointNも可
line LinestringGeometry,
n Integer
) -- PointGeometry
```
---
### AddPoint(Linestringに頂点を追加する)
```sql
AddPoint( -- ST_AddPointも可
line LinestringGeometry,
point PointGeometry
, position Integer -- 追加位置(0から始まるインデックス)
) -- LinestringGeometry
```
position=20とした例(青が元の線および点)

---
### SetPoint(Linestringの指定した位置の頂点を置き換える)
```sql
SetPoint( -- ST_SetPointも可
line LinestringGeometry,
position Integer, -- 置換位置(0から始まるインデックス)
point Point
) -- LinestringGeometry
```
position=20とした例(青が元の線および点)

---
### SetStartPoint(Linestringの始点を置換する)
```sql
SetStartPoint( -- ST_SetStartPointも可
line LinestringGeometry,
point Point
) -- LinestringGeometry
```
* SetPointでposition=0とした場合と同じ。

---
### SetEndPoint(Linestringの終点を置換する)
```sql
SetEndPoint( -- ST_SetEndtPointも可
line LinestringGeometry,
point Point
) -- LinestringGeometry
```
* SetPointでposition=終点位置とした場合と同じ。

---
### RemovePoint(Linestringの頂点を削除する)
```sql
RemovePoint( -- ST_RemovePointも可
line LinestringGeometry,
position Integer -- 削除位置(0から始まるインデックス)
) -- LinestringGeometry
```
position=20とした例(青が元の線および点)

---
## ジオメトリ基本関数(Surface(Polygon、Ring))
---
### Centroid(面のセントロイドを得る)
```sql
Centroid( -- ST_Centroidも可
s PolygonGeometry
) -- PointGeometry
```

---
### Area(面の面積を得る)
```sql
Area( -- ST_Areaも可
s PolygonGeometry
, use_ellipsoid Boolean -- 1(TRUE) or Other(FALSE)
) -- Double precision
```
* use_ellipsoid オプションを指定しない場合、ジオメトリのSRIDに応じた単位での面積が返る。
* use_ellipsoid オプションを有効にすると、メートル単位で距離が得られる。ただし、この場合Geometryの空間参照システムは緯度経度のみ有効で、投影座標を与えるとNULLが返る。
* use_ellipsoid オプションに1(TRUE)を指定するとEllipsoid近似での面積、それ以外(FALSE)を指定すると球面近似の面積が得られる。
---
## ジオメトリ基本関数(Polygon)
---
### ExteriorRing(ポリゴンの外環を得る)
```sql
ExteriorRing( -- ST_ExteriorRingも可
polyg PolygonGeometry
) -- LinestringGeometry
```

---
### NumInteriorRing(内環の数を得る)
```sql
NumInteriorRing( -- NumInteriorRings, ST_NumInteriorRingも可
polyg PolygonGeometry
) -- Integer
```
---
### InteriorRingN(内環のひとつをLinestringで抽出する)
```sql
InteriorRingN( -- ST_InteriorRingNも可
polyg PolygonGeometry,
n Integer
) -- LinestringGeometry
```
* N番目を指定するわけだが、リファレンスには "The order of Rings is not geometrically significant." などと書かれているので、じゃあ目当ての地物を特定するにはどうすればええねんという感じはある。
---
## ジオメトリ基本関数(GeometryCollection)
---
### NumGeometries(GeometryCollectionに含まれるジオメトリの数を得る)
```sql
NumGeometries( -- ST_NumGeometriesも可
geom GeometryCollectionCollection
) -- Integer
```
---
### GeometryN(GeometryCollectionの特定のジオメトリを抽出する)
```sql
GeometryN( -- ST_GeometryNも可
geom GeometryCollection,
n Integer
) -- Geometry
```
---
## 距離に関する基本関数
---
### Distance(ふたつのジオメトリ間の距離を得る)
```
Distance( -- ST_Distanceも可
geom1 Geometry,
geom2 Geometry
, use_ellipsoid Boolean -- 1(TRUE) or Other(FALSE)
) -- Double precision
```
* use_ellipsoid オプションを指定しない場合、ジオメトリのSRIDに応じた単位での距離が返る。
* use_ellipsoid オプションを有効にすると、メートル単位で距離が得られる。ただし、この場合Geometryの空間参照システムは緯度経度のみ有効で、投影座標を与えるとNULLが返る。
* use_ellipsoid オプションを1(TRUE)で指定すると曲面距離(Ellipsoid)、それ以外(FALSE)を指定すると球面距離(Great Circle)が得られる。
---
### PtDistWithin(ふたつの地物が一定の距離内にあるかどうかを確認する)
```
PtDistWithin(
geom1 Geometry,
geom2 Geometry,
range Double precision -- 範囲長さ
, use_spheroid Integer -- 1(TRUE) or Other(FALSE)
) -- Integer
```
* 通常、geom1およびgeom2の距離はこれらの空間参照システムに準じた値で判定される。
* ただし、geom1、geom2がシングルポイントで、かつSRIDが4326(=WGS84)である場合に限り、メートル長で判定される。
* さらに、use_spheroidオプションはこの場合にのみ有効で、TRUE指定した場合は測地距離(楕円体距離)で距離が得られる。FALSEの場合は球面距離(Great Circle Distance)で判定される。
---
## 空間演算関数(基本関数)
サンプル地物

---
### Intersection(インターセクト:交差)
```sql
Intersection( -- ST_Intersection も可
geom1 Geometry,
geom2 Geometry
) -- Geometry
```

---
### Difference(差分)
```sql
Difference( -- ST_Difference も可
geom1 Geometry,
geom2 Geometry
) -- Geometry
```

---
### GUnion(融合)
```sql
GUnion( -- ST_Union も可
geom1 Geometry
, geom2 Geometry
) -- Geometry
-- geom2を指定しない場合、集計関数として機能する。
```

---
### Symdifference(Symmetrical Difference:対称差分)
```sql
SymDifference( -- ST_SymDifference も可
geom1 Geometry,
geom2 Geometry
) -- Geometry
```

---
### Buffer(バッファ)
```sql
Buffer( -- ST_Buffer も可
geom Geometry,
dist Double precision -- バッファ距離(GeometryのCRSに準拠)
, quadrantsegments Integer
) -- Geometry
```
* quadrantsegmentsオプションは、バッファ後の角をつなぐ四分円をいくつのセグメントで表現するかを指定する。(デフォルトは30、増やすほどなめらかになる。)

(geom2のみバッファ処理した例 quadrantsegments=30)
---
### ConvexHull(凸包)
```sql
ConvexHull( -- ST_ConvexHull も可
geom Geometry
) -- Geometry
```

(geom1のみ凸包処理した例)
---
## 空間演算関数(GEOS拡張関数)
### HausdorffDistance(ハウスドルフ距離を得る)
```sql
HausdorffDistance( -- ST_HausdorffDistance も可
geom1 Geometry,
geom2 Geometry
) -- Double precision
```
* ハウスドルフ距離とは、ふたつの点群間のいずれの点からも他方の集合の少なくとも一つの点に到達できる距離。
* 参考_1:[http://en.wikipedia.org/wiki/Hausdorff_distance](http://en.wikipedia.org/wiki/Hausdorff_distance)
* 参考_2:[http://d.hatena.ne.jp/Zellij/20111206/p1](http://d.hatena.ne.jp/Zellij/20111206/p1)
---
### OffsetCurve(Linestringのオフセットバッファを得る)
```sql
OffsetCurve( -- ST_OffsetCurve も可
geom Curve(LinestringGeometry),
radius Double precision
) -- LinestringGeometry
```
* radiusには、負の値も指定可能。(正の場合と逆側になる。)

(元のLinestring(青)を処理した例(赤)。頂点数も増える。)
---
### SingleSidedBuffer(Linestringの片方向へバッファしたPolygonを得る)
```sql
SingleSidedBuffer( -- ST_SingleSidedBuffer も可
geom Curve(LinestringGeometry),
radius Double precision,
left_or_right Integer -- バッファ方向。1=Left 0=Right
) -- PolygonGeometry
```
* left_or_rightオプションで指定しても、OffsetCurveと同様にradiusに負の値を指定しても同じ結果が得られる。

(Left方向へバッファした例。)
---
### SharedPaths(二つのジオメトリの共有線を抽出する)
```sql
SharedPaths( -- ST_SharedPaths も可
geom1 Geometry,
geom2 Geomety
) -- MultiLineGeometry
```
* 得られるジオメトリはMultiLinestringであることに注意。

(赤線が結果。)
---
### Line_Interpolate_Point(Linestring上の点を得る)
```sql
Line_Interpolate_Point( -- ST_Line_Interpolate_Point も可
line Curve(LinestringGeometry),
fraction Double precision -- between 0.0 and 1.0
) -- PointGeometry
```
* fractionはLinestringの長さで正規化(0から1の値、0.5で中点)して指定する。

(fraction=0.5を指定した結果。)
---
### Line_Interpolate_Equidistant_Points(一定間隔でLinestring上に点を得る)
```sql
Line_Interpolate_Equidistant_Points( -- ST_Line_Interpolate_Equidistant_Points も可
line Curve(LinestringGeometry),
distance Double precision -- 点の間隔
) -- MultiPointGeometry(XYM)
```
* 得られるMultiPointはXYM次元であり、Mに始点からの距離が入る。

---
### Line_Locate_Point(Pointからの距離が最短となるLinestring上の位置を得る)
```sql
Line_Locate_Point( -- ST_Line_Locate_Point も可
line Curve(LinestringGeometry),
point Point
) -- Double precision ( between 0.0 and 1.0 )
```
* 結果はLinestringの長さで正規化(0から1の値、0.5で中点)した値が得られる。

(サンプルの実行結果は0.610、上記はこれをLine_Interpolate_Pointで可視化した。)
---
### Line_Substring(Linestringの一部を抽出する)
```sql
Line_Substring( -- ST_Line_Substring も可
line Curve(LinestringGeometry),
start_fraction Double precision, -- 開始点位置(between 0.0 and 1.0)
end_fraction Double precision -- 終了点位置(between 0.0 and 1.0)
) -- LinestringGeometry
```

(start=0.3、end=0.7で抽出。)
---
### ClosestPoint(geom2に最も近いgeom1上の位置をPointで得る)
```sql
ClosestPoint( -- ST_ClosestPoint も可
geom1 Geometry,
geom2 Geometry
) -- PointGeometry
```

(geom1にLinestring(青)、geom2(青)にPointを指定した結果(赤))
---
### ShortestLine(二つのジオメトリを最短で結ぶLinestringを得る)
```sql
ShortestLine( -- ST_ShortestLine も可
geom1 Geometry,
geom2 Geometry
) -- LinestringGeometry
```

(geom1にLinestring(青)、geom2(青)にPointを指定した結果(赤))
---
### Snap(geom1の頂点をgeom2の頂点にスナップする)
```sql
Snap( -- ST_Snap も可
geom1 Geometry,
geom2 Geometry,
tolerance Double precision -- スナップのしきい値
) -- Geometry
```

(元のジオメトリからsnap=10でgeom_1をスナップした結果(赤))
---
### Collect(ジオメトリコレクションを生成する)
```sql
Collect( -- ST_Collect も可
geom1 Geometry
, geom2 Geometry
) -- GeometryCollection
```
* geom2を指定しない場合、集計関数として機能する。
---
### LineMerge(複数のLinestringを一つのLinestring系ジオメトリに統一する)
```sql
LineMerge( -- ST_LineMerge も可
geom (Single/Multi)LinestringGeometry or GeometryCollection
) -- (Single/Multi)LinestringGeometry
```
* MultiLinestringやGeometryCollectionに含まれる、複数のLinestringセグメントを可能な限り一つに連結する。
* 与えたセグメントが端点を共有している場合は一つのLinestringに結合される。共有できず離れている場合は、MultiLinestringとして一つのジオメトリに統合される。
* ただ、どうやら集計関数としては機能しないので、SingleLineをGroupによって単純に結合することができない。ので、適宜Collect等を使って統合したものを結合することになる。
---
### BuildArea(LinestringからPolygonを生成する)
```sql
BuildArea( -- ST_BuildArea も可
geom LinestringGeometry
) -- PolygonGeometry
```
* 閉環など、ポリゴンが得られる場合のみ生成する。
---
### Polygonize(LinestringからPolygonを生成する)
```sql
Polygonize( -- ST_Polygonize も可
geom LinestringGeometry
) -- PolygonGeometry
```
* BuildAreaと同じ機能だが、集計関数として動作する。
---
### MakePolygon(閉環からPolygonを生成する)
```sql
MakePolygon( -- ST_MakePolygon も可
geom1 ClosedLinestringGeometry -- 外環
, geom2 ClosedLinestringGeometry -- 内環(ある場合)
) -- PolygonGeometry
```
* BuildAreaの簡易版。geom2を指定するとドーナツポリゴンになる。
* geom1、geom2とも閉環であることが条件。
* 生成するポリゴンのトポロジチェックは行われないため、トポロジが不正なインプットからはトポロジが不正なポリゴンが生成する。
---
### UnaryUnion(融合)
```sql
UnaryUnion( -- ST_UnaryUnion も可
geom SingleGeometry
) -- Geometry
```
* GUnion,ST_Unionと同じ機能だが、シングルジオメトリでのみ使用可能。
---
### DissolveSegments(Linestring、Ringをセグメントに分割する)
```sql
DissolveSegments( -- ST_DissolveSegments も可
geom LinestringGeometry/PolygonGeometry
) -- (Single/Multi)LinestringGeometry or GeometryCollection
```
* 通常、得られる各セグメントはMultiLinestringでまとめられる。
* Pointを入力に与えるとNULLが返る。
* Polygonの場合は、環(Ring)がセグメントに分割され、MultiLinestringを生成する。
---
### DissolvePoints(頂点に分割する)
```sql
DissolvePoints( -- ST_DissolvePoints も可
geom PointGeometry
) -- (Single/Multi)PointGeometry
```
* 入力ジオメトリがLinestring、Polygonの場合は、各頂点のPointGeometryが得られる。
---
### LinesFromRings(ポリゴンの環からLinestringを生成する)
```sql
LinesFromRings( -- ST_LinesFromRings も可
geom PolygonGeometry
) -- LinestringGeometry
```
* ExteriorRing関数と異なり、内環もLinstring化されて得られる。

(内環も同時にLinestring化され、MultiLinestringとして得られる。)
---
### LinesCutAtNodes(LinestringをPointの位置で切断する)
```sql
LinesCutAtNodes( -- ST_LinesCutAtNodes も可
geom1 LinestringGeometry,
geom2 PointGeometry
) -- LinestringGeometry
```
---
### RingsCutAtNodes(Polygonの環を交差部分で切断する)
```sql
RingsCutAtNodes( -- ST_RingsCutAtNodes も可
geom PolygonGeometry
) -- LinestringGeometry
```
* 環に自己交差が含まれる場合や環同士が交わっているような場合には、その位置で切断されたLinstringが得られる。
* 特に交差がない場合はLinesFromRings関数と同様の結果になる。
---
### CollectionExtract(GeometryCollectionから指定した種類のジオメトリを抽出する)
```sql
CollectionExtract( -- ST_CollectionExtract も可
geom GeometryCollection,
type Integer -- 1 = POINT-type, 2 = LINESTRING-type, 3 = POLYGON-type
) -- Geometry
```
---
### ExtractMultiPoint(ジオメトリからPointタイプのジオメトリを抽出する)
```sql
ExtractMultiPoint(
geom Geometry
) -- MultiPointGeometry
```
* 入力ジオメトリには任意のジオメトリを指定できるが、Pointタイプのサブジオメトリを含まない場合はNULLが返る。
---
### ExtractMultiLinestring(ジオメトリからLinestringタイプのジオメトリを抽出する
```sql
ExtractMultiLinestring(
geom Geometry
) -- MultiLinestringGeometry
```
* 入力ジオメトリには任意のジオメトリを指定できるが、Linestringタイプのサブジオメトリを含まない場合はNULLが返る。
---
### ExtractMultiPolygon(ジオメトリからPolygonタイプのジオメトリを抽出する)
```sql
ExtractMultiPolygon(
geom Geometry
) -- MultiPolygonGeometry
```
* 入力ジオメトリには任意のジオメトリを指定できるが、Polygonタイプのサブジオメトリを含まない場合はNULLが返る。
---
### ST_Locate_Along_Measure(M次元を持つジオメトリから特定のMの値で要素を抽出する)
```sql
ST_Locate_Along_Measure( -- ST_LocateAlong も可
geom Geometry,
m_value Double precision
) -- Geometry
```

(Line_Interpolate_Equidistant_Points関数を用いて10m単位で生成したXYM次元ポイントからM=140で抽出した結果)
---
### ST_Locate_Between_Measures(M次元を持つジオメトリから指定した範囲のMの値で要素を抽出する)
```sql
ST_Locate_Between_Measures( -- ST_LocateBetween も可
geom Geometry,
m_start Double precision,
m_end Double precision
) -- Geometry
```

(Line_Interpolate_Equidistant_Points関数を用いて10m単位で生成したXYM次元ポイントからM=100~250で抽出した結果)
---
### DelaunayTriangulation(ドロネー三角形分割)
```sql
DelaunayTriangulation( -- ST_DelaunayTriangulation も可
geom Geometry
, edges_only Boolean -- 1(TRUE)でMultiLinestringが得られる
, tolerance Double precision -- 近接した点を除外するしきい値
) -- MultiPolygonGeometry/MultiLinestringGeometry
```
* geomにラインやポリゴンを指定した場合は頂点がマルチポイント化され、これに基づく分割結果が得られる。

(オプション無しでポリゴン(青)にドロネー三角形分割を実行した結果)

(edges_only=1(TRUE)、 tolerance=10 とした結果)
---
### VoronojDiagram(ボロノイ図の生成)
```sql
VoronojDiagram( -- ST_VoronojDiagram も可
geom Geometry
, edges_only Boolean -- 1(TRUE)でMultiLinestringが得られる
, frame_extra_size Double precision -- 外枠線のサイズに影響する定数。バウンディングフレームのパーセント値を指定する。
, tolerance Double precision -- 近接した点を除外するしきい値
) -- MultiPolygonGeometry/MultiLinestringGeometry
```
* geomにラインやポリゴンを指定した場合は頂点がマルチポイント化され、これに基づくボロノイ図の生成結果が得られる。
* frame_extra_sizeのデフォルト値は5%

(オプション無しでポリゴン(青)からボロノイ図を生成した結果)

(frame_extra_size=50%、tolerance=10 で生成した結果)
---
### ConcaveHull(凹包)
```sql
ConcaveHull( -- ST_ConcaveHull も可
geom Geometry
, factor Double precision -- 標準偏差σに基づくフィルタリング強度のファクター。デフォルト値は3(σ)
, allow_holes Boolean -- 1(TRUE)で内環の生成を許可する
, tolerance Double precision -- 近接した点を除外するしきい値
) -- MultiPolygonGeometry/MultiLinestringGeometry
```

(オプション無しでポリゴン(青)に対して凹包を生成した結果 c.f.:ConvexHull(凸包))

(factor=2を指定した結果)
---
## 空間演算関数(LWGEOM/RTTOPO拡張関数)
### MakeValid(不正なジオメトリを修正する)
```sql
MakeValid( -- ST_MakeValid も可
geom Geometry
) -- Geometry
```
* ジオメトリエラーを含まないジオメトリを指定した場合は、同じジオメトリが返る。
---
### MakeValidDiscarded(不正なジオメトリを修正する際に除外された要素を得る)
```sql
MakeValidDiscarded( -- ST_MakeValidDiscarded も可
geom Geometry
) -- Geometry
```
* ジオメトリエラーを含まないジオメトリを指定した場合は、NULLが返る。
---
### Segmentize(Linestring、Ringをセグメンタイズする)
```sql
Segmentize( -- ST_Segmentize も可
geom LinestringGeometry/PolygonGeometry,
dist Double precision -- セグメントサイズのしきい値
) -- LinestringGeometry/PolygonGeometry
```
* distでセグメントの最大サイズを指定する。
* セグメント単位で切断されるわけではないため、線・環の頂点が増えるのみ。

(dist=5でポリゴンをセグメンタイズした結果)
---
### Split(ジオメトリを他のジオメトリによって分割する)
```sql
Split( -- ST_Split も可
geom Geometry, -- 分割されるジオメトリ
blade Geometry -- 切断に使用するジオメトリ
) -- Geometry
```
* 分割によって複数のジオメトリになる場合はマルチジオメトリで得られる。

(geom(赤)をblade(青:ClosedLinestring)で分割した結果。この場合、二つの要素からなるMultiPolygonが得られる。)
---
### SplitLeft(Splitで切断されたジオメトリの左側を除外したジオメトリを生成する)
```sql
SplitLeft( -- ST_SplitLeft も可
geom Geometry,
blade Geometry
) -- Geometry
```
* 切断されなかったジオメトリはそのまま保持される

(geom(赤線:Polygon)をblade(青:ClosedLinestring)で分割した結果(赤塗:Polygon))
---
### SplitRight(Splitで切断されたジオメトリの右側を除外したジオメトリを生成する)
```sql
SplitRight( -- ST_SplitRight も可
geom Geometry,
blade Geometry
) -- Geometry
```
* 切断されなかったジオメトリはそのまま保持される

(geom(赤線:Polygon)をblade(青:ClosedLinestring)で分割した結果(赤塗:Polygon))
---
### Azimuth(一点から見た他の一点方向の角度)
```sql
Azimuth( -- ST_Azimuth も可
pt1 PointGeometry,
pt2 PointGeometry
) -- Double precision
```
* 結果はラジアン値で得られることに注意
* 得られる角度は水平からの角度
* pt1およびpt2が緯度経度座標の場合に限り、楕円体に基づく計算結果が得られる。(SpatiaLite 4.1.0以降)
---
### Project(ポイントジオメトリの位置を距離と角度に基づいて変更する)
```sql
Project( -- ST_Project も可
start_point PointGeometry,
distance Double precision, -- 距離(m)
azimuth Double precision -- ラジアン角(Azimuth関数と同様)
) -- PointGeometry
```
---
### SnapToGrid(点や頂点を指定したグリッドにスナップする)
#### 記法①
```sql
SnapToGrid( -- ST_SnapToGrid も可
geom Geometry,
size Double precision
) -- Geometry
```
#### 記法②
```sql
SnapToGrid( -- ST_SnapToGrid も可
geom Geometry,
size_x Double precision,
size_y Double precision
) -- Geometry
```
#### 記法③
```sql
SnapToGrid( -- ST_SnapToGrid も可
geom Geometry,
origin_x Double precision,
origin_y Double precision,
size_x Double precision,
size_y Double precision
) -- Geometry
```
#### 記法④
```sql
SnapToGrid( -- ST_SnapToGrid も可
geom Geometry,
origin Geometry,
size_x Double precision,
size_y Double precision,
size_z Double precision,
size_m Double precision
) -- Geometry
```
* スナップの際に重複した連続点は一点に集約される。

(記法①により、size=20でスナップ)
---
### GeoHash(ジオメトリのGeoHash表記を得る)
```sql
GeoHash( -- ST_GeoHash も可
geom Geometry
, precision Integer -- determine how many characters should by used by the returned GeoHash
) -- String
```
* 与えるジオメトリは緯度経度座標のみ有効。
* GeoHashについての詳細は不明。[http://geohash.org/](http://geohash.org/)
---
### AsX3D(ジオメトリをX3D-XMLフォーマットに変換する)
```sql
AsX3D( -- ST_AsX3D も可
geom Geometry
, precision Integer
, options Integer
, refid String
) -- String
```
* オプションの詳細説明が見当たらない。
---
### MaxDistance(二つのジオメトリオブジェクトの最大距離を得る)
```sql
MaxDistance( -- ST_MaxDistance も可
geom1 Geometry,
geom2 Geometry
) -- Double precision
```
---
### ST_3DDistance(ジオメトリオブジェクト同士の三次元距離を得る)
```sql
ST_3DDistance(
geom1 Geometry,
geom2 Geometry
) -- Double precision
```
* geom1、geom2がZ次元を持つ場合のみ、三次元距離が得られる。(それ以外は二次元距離となる。)
---
### ST_3DMaxDistance(ジオメトリオブジェクト同士の最大三次元距離を得る)
```sql
ST_3DMaxDistance(
geom1 Geometry,
geom2 Geometry
) -- Double precision
```
* geom1、geom2がZ次元を持つ場合のみ、三次元距離が得られる。(それ以外は二次元距離となる。)
---
### ST_3dLength(Linestringの三次元長さを得る)
```sql
ST_3dLength(
geom (Single/Multi)LinestringGeometry
) -- Double precision
```
* geomがZ次元を持つ場合のみ、三次元距離が得られる。(それ以外は二次元距離となる。)
---
### ST_Node(?)
```sql
ST_Node(
geom (Single/Multi)LinestringGeometry
) -- LinestringGeometry
```
* 詳細不明。
* リファレンスの記載:"Fully nodes a set of linestrings using the least possible number of nodes while preserving all of the input ones."
---
### SelfIntersections(自己交差の位置をPointで抽出する)
```sql
SelfIntersections( -- ST_SelfIntersections も可
geom (Single/Multi)LinestringGeometry
) -- MultiPointGeometry
```

---
## グリッド生成系関数
---
### SquareGrid(地物を内包する正方形グリッドを生成)
```
SquareGrid( -- ST_SquareGridも可
geom ArealGeometry, -- グリッドに内包させるジオメトリを指定
size Double precision -- グリッドサイズ
, edges_only Boolean -- TRUE(1)にするとLinestringで結果が得られる。
, origing PointGeometry -- グリッド原点(点ジオメトリ)を指定可能(デフォルトは(0,0))
) -- MultiPolygonGeometry(edges_onlyを有効にした場合はMultiLinestringGeometry)
```
* サンプル地物(5000×4000)に対して300サイズのグリッドを生成(原点指定なし)

---
### TriangularGrid(地物を内包する三角形グリッドを生成)
```
TriangularGrid( -- ST_TriangularGridも可
geom ArealGeometry, -- グリッドに内包させるジオメトリを指定
size Double precision -- グリッドサイズ
, edges_only Boolean -- TRUE(1)にするとLinestringで結果が得られる。
, origing PointGeometry -- グリッド原点(点ジオメトリ)を指定可能(デフォルトは(0,0))
) -- MultiPolygonGeometry(edges_onlyを有効にした場合はMultiLinestringGeometry)
```
* サンプル地物(5000×4000)に対して300サイズのグリッドを生成(原点指定なし)

---
### HexagonalGrid(地物を内包する六角形グリッドを生成)
```
HexagonalGrid( -- ST_HexagonalGridも可
geom ArealGeometry, -- グリッドに内包させるジオメトリを指定
size Double precision -- グリッドサイズ
, edges_only Boolean -- TRUE(1)にするとLinestringで結果が得られる。
, origing PointGeometry -- グリッド原点(点ジオメトリ)を指定可能(デフォルトは(0,0))
) -- MultiPolygonGeometry(edges_onlyを有効にした場合はMultiLinestringGeometry)
```
* サンプル地物(5000×4000)に対して300サイズのグリッドを生成(原点指定なし)

---
## MBRを生成する関数
### BuildMbr(二点の座標から長方形(MBR)を生成)
```
BuildMbr(
x1 Double precision,
y1 Double precision,
x2 Double precision,
y2 Double precision
, SRID Integer
) -- PolygonGeometry
```
* (0,0) および (5000,4000) の二点でMBRを生成
![Uploading file..._4b0rez7om]()
---
### BuildCircleMbr(指定された中心座標および半径からこれを内包する長方形を生成)
```
BuildCircleMbr(
x Double precision,
y Double precision,
radius Double precision
, SRIDInteger
) -- PolygonGeometry
```
---
### Extent(与えられたジオメトリ(群)を内包する長方形を生成)
```
Extent(
geom Geometry
) -- PolygonGeometry
```
![Uploading file..._2ecafk69z]()
---
## MBRに関する座標値を取得する関数
---
### MbrMinX(ジオメトリから得られるMBRの左端を取得)
```
MbrMinX( -- ST_MinXも可
geom Geometry
) -- Double precision
```
---
### MbrMinY(ジオメトリから得られるMBRの下端を取得)
```
MbrMinY( -- ST_MinYも可
geom Geometry
) -- Double
```
---
### MbrMaxX(ジオメトリから得られるMBRの右端を取得)
```
MbrMaxX( -- ST_MaxXも可
geom Geometry
) -- Double
```
---
### MbrMaxY(ジオメトリから得られるMBRの上端を取得)
```
MbrMaxY( -- ST_MaxYも可
geom Geometry
) -- Double
```
---
### ST_MinZ(ジオメトリ内の最小Zを取得)
```
ST_MinZ(
geom Geometry
) -- Double
```
---
### ST_MaxZ(ジオメトリ内の最大Zを取得)
```
ST_MaxZ(
geom Geometry
) -- Double precision
```
---
### ST_MinM(ジオメトリ内の最小Mを取得)
```
ST_MinM(
geom Geometry
) -- Double precision
```
---
### ST_MaxM(ジオメトリ内の最大Mを取得)
```
ST_MaxM(
geom Geometry
) -- Double precision
```
## テーブルを操作する関数
---
### CloneTable(テーブルの複製)
```
CloneTable(
db-prefix Text, -- 複製元データベースのプレフィックスを指定(データベース内での複製の場合は'main'を指定する)
input_table Text, -- 複製元テーブル名
output_table Text, -- 複製先テーブル名
transaction Boolean -- 1(TRUE)でオートトランザクション(デフォルト)
, option_1 Text
, ...
, option_10 Text
) -- Integer -- 0(FALSE) or Other(TRUE) 不正な引数を指定するとNULLが返る
```
* 指定できるオプション(いずれもTextで指定する。同時に指定できるオプション数は10)
* **::with-foreign-keys::**
外部キー制約(foreign key)も同時に複製する。元テーブルに外部キー制約が無い場合、テーブルは生成されるが外部キーの設定の際などに問題が出る。
* **::with-triggers::**
トリガーの設定も同時に複製する。元テーブルにトリガーが設定されていない場合、テーブルは生成されるがトリガーの設定などに問題が出る。
* **::append::**
既に存在するテーブルに元テーブルのデータを追加する。カラム定義や制約に相違がある場合はエラーとなる。(プライマリキーにAUTOINCREMENTが設定されている場合なども注意が必要。)append先の列は、追加先テーブルに列が無い場合は列が追加され、同じ名称の列がある場合はその列にデータが挿入されるらしい。
* **::resequence::**
AUTOINCREMENTによって、プライマリキーを振り直す。(プライマリキーに対して外部キーが設定されている場合などは注意が必要。)
* **::ignore::column_name**
column_nameで指定した列を複製しない。
* **::cast2multi::geometry_column**
ジオメトリをマルチ化する(CastToMulti関数を適用する)
* 複製元テーブルがジオメトリカラムを含み、RecoverGeometryColumnが施されている場合、複製したテーブルもRecoverGeometryColumnが実行された状態で得られる。
* 外部テーブルのアタッチおよびプレフィックスの指定で、外部テーブルの複製が行えるが、複製先に外部テーブルを指定することはできない。
* DROP COLUMN をサポートしないSQLiteにおいて、CloneTable関数を利用することで同様の結果が得られる。
* 参考:
SpatiaLite: CloneTable
[https://www.gaia-gis.it/fossil/libspatialite/wiki?name=CloneTable](https://www.gaia-gis.it/fossil/libspatialite/wiki?name=CloneTable)
---
### CreateClonedTable(テーブル構造のみ複製)
```
CreateClonedTable(
db-prefix Text,
input_table Text,
output_table Text,
transaction Boolean
, option_1 Text
, ...
, option_10 Text
) -- Integer -- 0(FALSE) or Other(TRUE) 不正な引数を指定するとNULLが返る
```
* オプションの指定なども含め、記法はCloneTableと同一だが、レコードのコピーは行われず、空のテーブルが生成される。
* SpatiaLite4.4.0からの実装。
---
### CheckDuplicateRows(テーブルに重複した列が含まれるかをチェックする)
```
CheckDuplicateRows(
table Text
) -- Integer -- 重複する列数(不正な指定を行うとNULLが返る)
```
---
### RemoveDuplicateRows(重複する列を削除する)
```
RemoveDuplicateRows(
table Text
, transaction Boolean -- 1(TRUE)でオートトランザクション(デフォルト)
) -- Integer -- 削除した列数(不正な指定を行うとNULLが返る)
```
---
### ElementaryGeometries(マルチジオメトリを要素ジオメトリに分解したテーブルを生成する)
```
ElementaryGeometries(
in_table Text, -- 元テーブル名
geom_column Text, -- 元テーブルのジオメトリカラム名
out_table Text, -- 生成テーブル名
out_pk Text, -- 生成テーブルにおけるプライマリキーカラム名
out_multi_id Text -- 元テーブルのプライマリキー値を格納するカラム名
, transaction Boolean -- 1(TRUE)でオートトランザクション(デフォルト)
) -- Integer -- 生成テーブルに挿入されたレコード数(総ジオメトリ数)
```
* SpatiaLite-GUIにおいて"separating elementary Geometries"を実行するのと同じ機能。
* out_pkで、元テーブルに存在するキーカラム名を重複させることはできない。(生成されるテーブルにオリジナルカラムも含まれるため。)
---
### DropGeoTable(ジオメトリを含むテーブルを削除する)
```
DropGeoTable(
-- db-prefix Text, -- プレフィックスの指定でアタッチした外部テーブルも指定可能。
table Text
, transaction Boolean -- 1(TRUE)でオートトランザクション(デフォルト)
) -- Integer -- 0(FALSE) or Other(TRUE) 不正な引数を指定するとNULLが返る
```
* SQLite標準のDROP TABLEと異なり、空間インデックスやメタデータ等も削除される。
* 空間ビュー(Spatial View)でも利用可能。
* 空間インデックス等、空間的な追加設定を行っていない場合は、標準のDROP TABLE文でもよい。
## 外部データをインポートする関数
* ここに記載されている関数は、(セキュリティの観点により)使用する際には環境変数**SPATIALITE_SECURITY**を**relaxed**に設定する必要があります。
---
### ImportSHP(shpファイルのインポート)
```
ImportSHP(
filename Text, -- ファイル名(絶対パスまたは相対パス)
table Text, -- 作成するテーブル名
charset Text -- エンコーディング(e.g.:'UTF-8','CP932')
, srid Integer -- 空間参照システムのEPSGコード(デフォルト値-1)
, geom_column Text -- ジオメトリカラム名(デフォルト名Geometry)
, pk_column Text -- プライマリキーカラム名(dbfファイルに含まれる列名を指定)
, geometry_type Text -- ジオメトリタイプ: AUTO(デフォルト),POINT|Z|M|ZM,LINESTRING|Z|M|ZM,POLYGON|Z|M|ZM,MULTIPOINT|Z|M|ZM,MULTILINESTRING|Z|M|ZM,MULTIPOLYGON|Z|M|ZM
, coerce2D Boolean -- 二次元へのキャストを行うか(0(FALSE,デフォルト) or 1(TRUE))
, compressed Boolean -- ジオメトリの圧縮を行うか(0(FALSE,デフォルト) or 1(TRUE))
, spatial_index Boolean -- 空間インデックスを生成するか(0(FALSE,デフォルト) or 1(TRUE))
, text_dats Boolean -- dbfに含まれる日時をプレーンテキストに変換するか(0(FALSE,デフォルト=Julian Day) or 1(TRUE))
) -- Integer -- インポートしたレコード数
```
---
### ImportDBF(dbfファイルのインポート)
```
ImportDBF(
filename Text, -- インポートするdbfファイル(絶対パスまた相対パス)
table Text, -- 作成するテーブル名
charset Text -- エンコーディング(e.g.:'UTF-8','CP932')
, pk_column Text -- プライマリキーとして使用する列名
, text_dats Boolean -- 日時をプレーンテキストに変換するか(0(FALSE,デフォルト=Julian Day) or 1(TRUE))
) -- Integer -- インポートしたレコード数
```
---
### ImportXLS(xlsファイルのインポート)
```
ImportXLS(
filename Text, -- インポートするxlsファイル(絶対パスまたは相対パス)
table Text -- 生成するテーブル名
, worksheet_index Integer -- 複数のシートがある場合に、対象シートを番号で指定する。(デフォルトは0)
, first_line_titles Boolean -- 最初の行が列名であるかどうか(1(TRUE),0(FALSE,デフォルト))
) -- Integer -- インポートしたレコード数
```
---
### ImportWFS(WFSデータのインポート)
```
ImportWFS(
filename_or_url Text, -- インポートするWFSのURL(絶対パスまた相対パス)
layer_name Text, -- WFSレイヤのレイヤ名
table Text -- 生成するテーブル名
, pk_column Text -- プライマリキーを設定するカラム名
, swap_axes Boolean -- X,Y軸へのスワップ(1(TRUE),0(FALSE,デフォルト))
, page_size Integer -- WFS取得リクエストの際に地物数を指定する?(-1(デフォルト)または0で制限なし)
, spatial_index Boolean -- 空間インデックスを生成するか(0(FALSE,デフォルト) or 1(TRUE))
) -- Integer -- インポートしたレコード数
```
---
### ImportDXF(dxfファイルのインポート)
```
ImportDXF(
filename Text, -- インポートするdxfファイル(絶対パスまた相対パス)
, srid Integer -- 空間参照システムのEPSGコード(デフォルト値-1)
, append Boolean -- append(追加)モードのスイッチ(1(TRUE),0(FALSE,デフォルト))
, dimensions Text -- 次元数 AUTO,2D,3D のいずれか
, mode Text -- DISTINCT,MIXED のいずれか
, special_rings Text -- NONE,LINKED,UNLINKED のいずれか
, table_prefix Text -- テーブル名に付加する?プレフィックス(NULLで設定なし)
, layer_name Text -- インポートするDXFファイル内のレイヤ(NULLで全てインポート)
) -- Integer -- 0(FALSE) or 1(TRUE)
```
---
### ImportDXFfromDir(ディレクトリ内のdxfファイルのバッチインポート)
```
ImportDXFfromDir(
dir_path Text -- ディレクトリの指定(絶対パスまたは相対パス)
, srid Integer -- 空間参照システムのEPSGコード(デフォルト値-1)
, append Boolean -- append(追加)モードのスイッチ(1(TRUE),0(FALSE,デフォルト))
, dimensions Text -- 次元数 AUTO,2D,3D のいずれか
, mode Text -- DISTINCT,MIXED のいずれか
, special_rings Text -- NONE,LINKED,UNLINKED のいずれか
, table_prefix Text -- テーブル名に付加する?プレフィックス(NULLで設定なし)
, layer_name Text -- インポートするDXFファイル内のレイヤ(NULLで全てインポート)
) -- Integer -- 0(FALSE) or 1(TRUE)
```
## 外部データへエクスポートする関数
* ここに記載されている関数は、(セキュリティの観点により)使用する際には環境変数**SPATIALITE_SECURITY**を**relaxed**に設定する必要があります。
---
### ExportSHP(shpファイルへのエクスポート)
```
ExportSHP(
table Text, -- 出力するテーブル
geom_column Text, -- ジオメトリカラム名
filename Text, -- 出力ファイル名(絶対パスまたは相対パス)
charset Text -- エンコーディング(e.g.:'UTF-8','CP932')
, geom_type Text -- ジオメトリタイプの指定。(POINT,LINESTRING,POLYGON,MULTUPOINT)
) -- Integer -- エクスポートしたレコード数
- geom_typeオプションは、元テーブルのジオメトリの登録がされていないような場合に有用。
```
---
### ExportDBF(dbfファイルへのエクスポート)
```
ExportDBF(
table Text, -- エクスポートするテーブル名
filename Text, -- 出力ファイル名(絶対パスまたは相対パス)
charset Text -- エンコーディング(e.g.:'UTF-8','CP932')
) -- Integer -- エクスポートしたレコード数
```
---
### ExportKML(KMLへのエクスポート)
```
ExportKML(
table Text, -- 出力するテーブル
geo_column Text, -- ジオメトリカラム名
filename Text -- 出力ファイル名(絶対パスまたは相対パス)
, precision Integer -- 小数点以下の桁数(精度)を指定。デフォルトは8
, name_column Text -- KML名を含むカラムを指定
, description Text -- KMLの説明文を含むカラムを指定
) -- Integer -- エクスポートしたレコード数
```
---
### ExportGeoJSON(GeoJSONへのエクスポート)
```
ExportGeoJSON(
table Text, -- 出力するテーブル
geo_column Text, -- ジオメトリカラム名
filename Text -- 出力ファイル名(絶対パスまたは相対パス)
, format Text -- GeoJSONフォーマットの指定
, precision Integer -- 小数点以下の桁数(精度)を指定。デフォルトは8
) -- Integer -- エクスポートしたレコード数
- formatオプションで指定できるのは、none, MBR, withShortCRS, MBRwithShortCRS, withLongCRS or MBRwithLongCRS
```
---
### ExportDXF(dxfファイルへのエクスポート)
```
ExportDXF(
out_dir Text, -- 出力先ディレクトリ
filename Text, -- 生成ファイル名
sql_query Text, -- エクスポートするデータセットを得るSQLクエリ
layer_col_name Text, -- sql_queryで設定したレイヤカラム名
geom_col_name Text, -- sql_queryで設定したジオメトリカラム名
label_col_name Text, -- sql_queryで設定したラベルカラム名(NULLも可)
text_height_col_name Text, -- sql_queryで設定したテキスト高カラム名(NULLも可)
text_rotation_col_name Text, -- sql_queryで設定したテキスト回転カラム名(NULLも可)
geom_filter Geometry -- エクスポートする対象を絞る空間フィルタをジオメトリで指定(NULLも可)
, precision Integer -- 小数点以下の桁数(精度)を指定。デフォルトは3
) -- Integer -- 0(FALSE) or 1(TRUE)
```
---
## その他の関数
### ST_Cutter(ジオメトリデータセットを他のジオメトリデータセットで切断する)
```
ST_Cutter(
input-db-prefix Text,
input-table Text,
input-geometry Text,
blade-db-prefix Text,
blade-table Text,
blade-geom Text,
output-table Text
, transaction Boolean
, ram-temp-storage Boolean
) -- Integer
- SpatiaLite4.4.0からの実装。
```
---
### GetCutterMessage(ST_Cutter処理による診断メッセージの取得)
```
GetCutterMessage() -- Text
```
* SpatiaLite4.4.0からの実装。