A
- AccessControlEntry.ConditionToIdentities
- Access.Database
- ActiveDirectory.Domains
- AdobeAnalytics.Cubes
- AdoDotNet.DataSource
- AdoDotNet.Query
- AnalysisServices.Database
- AnalysisServices.Databases
- AzureStorage.BlobContents
- AzureStorage.Blobs
- AzureStorage.DataLake
- AzureStorage.DataLakeContents
- AzureStorage.Tables
B
- BinaryFormat.Binary
- BinaryFormat.Byte
- BinaryFormat.ByteOrder
- BinaryFormat.Choice
- BinaryFormat.Decimal
- BinaryFormat.Double
- BinaryFormat.Group
- BinaryFormat.Length
- BinaryFormat.List
- BinaryFormat.Null
- BinaryFormat.Record
- BinaryFormat.SignedInteger16
- BinaryFormat.SignedInteger32
- BinaryFormat.SignedInteger64
- BinaryFormat.Single
- BinaryFormat.Text
- BinaryFormat.Transform
- BinaryFormat.UnsignedInteger16
- BinaryFormat.UnsignedInteger32
- BinaryFormat.UnsignedInteger64
- BinaryFormat.7BitEncodedSignedInteger
- BinaryFormat.7BitEncodedUnsignedInteger
- Binary data
- Binary.ApproximateLength
- Binary.Buffer
- Binary.Combine
- Binary.Compress
- Binary.Decompress
- Binary.From
- Binary.FromList
- Binary.FromText
- Binary.InferContentType
- Binary.Length
- Binary.Range
- Binary.Split
- Binary.ToList
- Binary.ToText
- Binary.View
- Binary.ViewError
- Binary.ViewFunction
- Byte.From
C
- Cdm.Contents
- Character.FromNumber
- Character.ToNumber
- Combiner.CombineTextByDelimiter
- Combiner.CombineTextByEachDelimiter
- Combiner.CombineTextByLengths
- Combiner.CombineTextByPositions
- Combiner.CombineTextByRanges
- Comparer.FromCulture
- Comparer.Ordinal
- Comparer.OrdinalIgnoreCase
- Controlling byte order
- Csv.Document
- Cube.AddAndExpandDimensionColumn
- Cube.AddMeasureColumn
- Cube.ApplyParameter
- Cube.AttributeMemberId
- Cube.AttributeMemberProperty
- Cube.CollapseAndRemoveColumns
- Cube.Dimensions
- Cube.DisplayFolders
- Cube.MeasureProperties
- Cube.MeasureProperty
- Cube.Measures
- Cube.Parameters
- Cube.Properties
- Cube.PropertyKey
- Cube.ReplaceDimensions
- Cube.Transform
- Currency.From
D
- DateTime.AddZone
- DateTime.Date
- DateTime.FixedLocalNow
- DateTime.From
- DateTime.FromFileTime
- DateTime.FromText
- DateTime.IsInCurrentHour
- DateTime.IsInCurrentMinute
- DateTime.IsInCurrentSecond
- DateTime.IsInNextHour
- DateTime.IsInNextMinute
- DateTime.IsInNextNHours
- DateTime.IsInNextNMinutes
- DateTime.IsInNextNSeconds
- DateTime.IsInNextSecond
- DateTime.IsInPreviousHour
- DateTime.IsInPreviousMinute
- DateTime.IsInPreviousNHours
- DateTime.IsInPreviousNMinutes
- DateTime.IsInPreviousNSeconds
- DateTime.IsInPreviousSecond
- DateTime.LocalNow
- DateTime.Time
- DateTime.ToRecord
- DateTime.ToText
- Date.AddDays
- Date.AddMonths
- Date.AddQuarters
- Date.AddWeeks
- Date.AddYears
- Date.Day
- Date.DayOfWeek
- Date.DayOfWeekName
- Date.DayOfYear
- Date.DaysInMonth
- Date.EndOfDay
- Date.EndOfMonth
- Date.EndOfQuarter
- Date.EndOfWeek
- Date.EndOfYear
- Date.From
- Date.FromText
- Date.IsInCurrentDay
- Date.IsInCurrentMonth
- Date.IsInCurrentQuarter
- Date.IsInCurrentWeek
- Date.IsInCurrentYear
- Date.IsInNextDay
- Date.IsInNextMonth
- Date.IsInNextNDays
- Date.IsInNextNMonths
- Date.IsInNextNQuarters
- Date.IsInNextNWeeks
- Date.IsInNextNYears
- Date.IsInNextQuarter
- Date.IsInNextWeek
- Date.IsInNextYear
- Date.IsInPreviousDay
- Date.IsInPreviousMonth
- Date.IsInPreviousNDays
- Date.IsInPreviousNMonths
- Date.IsInPreviousNQuarters
- Date.IsInPreviousNWeeks
- Date.IsInPreviousNYears
- Date.IsInPreviousQuarter
- Date.IsInPreviousWeek
- Date.IsInPreviousYear
- Date.IsInYearToDate
- Date.IsLeapYear
- Date.Month
- Date.MonthName
- Date.QuarterOfYear
- Date.StartOfDay
- Date.StartOfMonth
- Date.StartOfQuarter
- Date.StartOfWeek
- Date.StartOfYear
- Date.ToRecord
- Date.ToText
- Date.WeekOfMonth
- Date.WeekOfYear
- Date.Year
- DB2.Database
- Decimal.From
- Diagnostics.ActivityId
- Diagnostics.Trace
- DirectQueryCapabilities.From
- Double.From
- Duration.Days
- Duration.From
- Duration.FromText
- Duration.Hours
- Duration.Minutes
- Duration.Seconds
- Duration.ToRecord
- Duration.TotalDays
- Duration.TotalHours
- Duration.TotalMinutes
- Duration.TotalSeconds
- Duration.ToText
E
F
G
H
I
L
- Lines.FromBinary
- Lines.FromText
- Lines.ToBinary
- Lines.ToText
- List.Accumulate
- List.AllTrue
- List.Alternate
- List.AnyTrue
- List.Average
- List.Buffer
- List.Combine
- List.ConformToPageReader
- List.Contains
- List.ContainsAll
- List.ContainsAny
- List.Count
- List.Covariance
- List.Dates
- List.DateTimes
- List.DateTimeZones
- List.Difference
- List.Distinct
- List.Durations
- List.FindText
- List.First
- List.FirstN
- List.Generate
- List.InsertRange
- List.Intersect
- List.IsDistinct
- List.IsEmpty
- List.Last
- List.LastN
- List.MatchesAll
- List.MatchesAny
- List.Max
- List.MaxN
- List.Median
- List.Min
- List.MinN
- List.Mode
- List.Modes
- List.NonNullCount
- List.Numbers
- List.Percentile
- List.PositionOf
- List.PositionOfAny
- List.Positions
- List.Product
- List.Random
- List.Range
- List.RemoveFirstN
- List.RemoveItems
- List.RemoveLastN
- List.RemoveMatchingItems
- List.RemoveNulls
- List.RemoveRange
- List.Repeat
- List.ReplaceMatchingItems
- List.ReplaceRange
- List.ReplaceValue
- List.Reverse
- List.Select
- List.Single
- List.SingleOrDefault
- List.Skip
- List.Sort
- List.Split
- List.StandardDeviation
- List.Sum
- List.Times
- List.Transform
- List.TransformMany
- List.Union
- List.Zip
- Logical.From
- Logical.FromText
What is WKT?
Well-known text (WKT) is a text markup language used to represent vector geometry objects such as points, lines, and polygons. WKT is an open format that is widely used in geographic information systems (GIS) and is supported by many software packages. The WKT format is human-readable and easy to parse, making it an ideal choice for data exchange and interoperability.
Understanding the Geometry.ToWellKnownText Function
The Geometry.ToWellKnownText function is used to convert a geometry object to a well-known text (WKT) representation. The function takes a geometry object as input and returns a text string in WKT format. The syntax for the function is as follows:
Geometry.ToWellKnownText(geometry as any) as text
The `geometry` parameter is the input geometry object, which can be of any type that implements the `IGeometry` interface. The function returns a text string in WKT format.
The M Code Behind Geometry.ToWellKnownText
The M code behind the Geometry.ToWellKnownText function is relatively simple and easy to understand. The function is defined as follows:
let
toWKT = (geometry as any) as text =>
let
wktType =
if Type.Is(geometry, type function (type nullable any) as nullable any) then
Type.RecordFields(Type.AsNullable(geometry)){0}[Type],
else if Type.Is(geometry, type nullable any) then
Type.RecordFields(Type.AsNullable(geometry)){0}[Type],
else
type nullable any,
coordinateSystem =
if Type.Is(geometry, type function (type nullable any) as nullable any) then
Type.RecordFields(Type.AsNullable(geometry)){0}[CoordinateSystem],
else if Type.Is(geometry, type nullable any) then
Type.RecordFields(Type.AsNullable(geometry)){0}[CoordinateSystem],
else
null,
toWKTType =
if wktType = type nullable any then
null
else
wktType,
toWKTCS =
if coordinateSystem = null then
“”
else
“SRID=” & Number.ToText(CoordinateSystem.Identifier(coordinateSystem)) & “;”,
toWKTString =
if Type.Is(geometry, type function (type nullable any) as nullable any) then
Function.Invoke(geometry, {toWKTType, toWKTCS}),
else if Type.Is(geometry, type nullable any) then
Record.Field(geometry, “Value”),
else
“”,
result =
if toWKTString = “” then
null
else
Text.Replace(toWKTString, “,”, ” “)
in
result
in
toWKT
The function is defined using the `let` expression, which allows for the creation of local variables. The function takes a `geometry` object as input and returns a string in WKT format.
The first step in the function is to determine the type of the geometry object. This is done using the `Type.Is` function, which checks if the input object is of a specific type. If the geometry object is of type `function`, then the function returns the type of the output of the function. If the geometry object is of any other type, then the function returns the type of the object.
The next step is to determine the coordinate system of the geometry object. This is done using the `CoordinateSystem` function, which returns the coordinate system of a spatial object. If the input object is of type `function`, then the function returns the coordinate system of the output of the function. If the input object is of any other type, then the function returns the coordinate system of the object.
The next step is to create the WKT string. This is done using the `Function.Invoke` function, which calls a function with the specified arguments. If the input object is of type `function`, then the function calls the input function with the WKT type and coordinate system as arguments. If the input object is of any other type, then the function returns the value of the input object.
The final step in the function is to replace the commas in the WKT string with spaces. This is done using the `Text.Replace` function, which replaces all occurrences of a specified string with another specified string.
The Geometry.ToWellKnownText function is a powerful tool in the Power Query M language, allowing users to convert geometry objects to well-known text (WKT) format. The M code behind the function is relatively simple and easy to understand, making it accessible to users of all levels of expertise. By understanding the M code behind this function, users can gain a deeper understanding of the Power Query M language and unlock new possibilities in their data analysis workflows.