查询或存储过程以获取定义多边形/多多边形的点



我有一个SQL Server 2012表,其中有一个地理类型列,包含多边形或多多边形。有些多极子上有洞。我想要一个查询或存储过程,它可以获取定义形状的所有点,以及该点属于多极子的哪个环。

请注意,其中一些形状有数千个点,使用递归CTE可能会产生问题。

我没有使用查询或存储过程来完成这项工作,而是编写了代码。我使用的是实体框架,SchoolDistrict是SQL Server中表的对象。DistrictLocation是地理类型字段。这是我在VB.NET中得到的代码。它返回一个坐标集列表,每个坐标集都是多极子中的一个环。

Public Function SchoolDistrictVertices() As List(Of List(Of Coordinate))
If SchoolDistrict Is Nothing OrElse SchoolDistrict.DistrictLocation Is Nothing Then
  Return Nothing
Else
  'get the points that define the shape by parsing the shape's WKT
  Dim result = New List(Of List(Of Coordinate))
  Dim wkt = SchoolDistrict.DistrictLocation.Location.WellKnownValue().WellKnownText
  Dim startPos = wkt.IndexOf("((")
  Do Until startPos = -1
    Dim list = New List(Of Coordinate)
    Dim endPos = wkt.IndexOf(")", startPos)
    Dim piece = wkt.Substring(startPos + 1, endPos - (startPos + 1))
    Dim coords = piece.Split(","c)
    For Each item In coords
      item = item.Trim().Replace("(", "")
      Dim parts = item.Split(" "c)
      Dim lng = parts(0)
      Dim lat = parts(1)
      Dim coord = New Coordinate()
      coord.Latitude = Convert.ToDouble(lat)
      coord.Longitude = Convert.ToDouble(lng)
      list.Add(coord)
    Next
    result.Add(list)
    startPos = wkt.IndexOf("(", endPos)
  Loop
  Return result
End If
End Function
Public Structure Coordinate
  Public Property Latitude As Double
  Public Property Longitude As Double
End Structure

最新更新