Tapestry Objects - for GIS Developers

Tapestry Objects is a spatially enabled ActiveX DLL that provides Spatial Adjustment and Topological processing capabilities to any Windows GIS Clients capable of interfacing to COM objects.

Tapestry Objects enables GIS systems to carry out all the automated adjustment functions supplied by SAM, whether it be adjusting vector layers to Orthophotos or CAD Drawings, or moving utility, annotation and polygon layers from an older inaccurate cadastre to a newer more accurate cadastre.

Tapestry Objects also enables GIS systems to carry out automated topological testing, cleaning and snapping functions supplied by Topo Manager. Themes can be tested for cleanliness or lack of vertical topology, or cleaned up internally removing gaps and overlaps, dangles bowties and other topological anomolies. Themes can also be snapped to other themes, and vertical topology regained.

Tapestry Objects currently:

  • Generates and reports Shift Vectors between two Digital Cadastres/Parcel Maps.
  • Adjust the Source Digital Cadastre and many Utility and Zoning Layers to a Destination Cadastre.
  • Report the new coordinates for inclusion for inclusion in the original themes.
  • Carry out Topo Test, Topo Clean and Topo Snapping functions.

Technical compatibility

Tapestry Objects is an ActiveX DLL and as such can be called from a wide variety of windows applications. It has been designed to be GIS Vendor free, and should work within ArcGIS, Manifold GIS, CadCorp GIS, and many other GIS applications.

Beta Program

Please contact Spatial Tapestry if you would like to be on the Beta Program.

The Software Evaluation Licensing Agreement will need to be signed, and faxed to our offices.

 

 

The following is sample VB6 code which carries out a small adjustment of a small utility from one digital cadastre to another.


Dim FClass1 As New ST_Topo.Cls_Topo
Dim TDestName As String, TSrceName As String, Success As Boolean
Dim TShftName As String, TUtilName As String
Dim EastAdj As Double, NrthAdj As Double

TDestName = "Dest"
Success = FClass1.AddNewTheme(TDestName, ThemeClassification.DestDCad, ThemeGeomType.PGon)

' set the number of features
Success = FClass1.SetFeatureCount(TDestName, 1)

' add feature 1
Success = FClass1.SetFeatureAttribute(TDestName, 1, "Feat01")
Success = FClass1.SetFeatureGeometry(TDestName, 1, ThemeGeomType.PGon, 1)
Success = FClass1.SetPartGeometry(TDestName, 1, 1, ThemeGeomType.PGon, 5)
Success = FClass1.SetFeatureCoordinate(TDestName, 1, 1, 1, 500#, 500#)
Success = FClass1.SetFeatureCoordinate(TDestName, 1, 1, 2, 500#, 600#)
Success = FClass1.SetFeatureCoordinate(TDestName, 1, 1, 3, 540#, 600#)
Success = FClass1.SetFeatureCoordinate(TDestName, 1, 1, 4, 540#, 500#)
Success = FClass1.SetFeatureCoordinate(TDestName, 1, 1, 5, 500#, 500#)

TSrceName = "Srce"
Success = FClass1.AddNewTheme(TSrceName, ThemeClassification.SrceDCad, ThemeGeomType.PGon)

' set the number of features
Success = FClass1.SetFeatureCount(TSrceName, 1)

' add feature 1
Success = FClass1.SetFeatureAttribute(TSrceName, 1, "Feat01")
Success = FClass1.SetFeatureGeometry(TSrceName, 1, ThemeGeomType.PGon, 1)
Success = FClass1.SetPartGeometry(TSrceName, 1, 1, ThemeGeomType.PGon, 5)
Success = FClass1.SetFeatureCoordinate(TSrceName, 1, 1, 1, 600#, 500#)
Success = FClass1.SetFeatureCoordinate(TSrceName, 1, 1, 2, 600#, 600#)
Success = FClass1.SetFeatureCoordinate(TSrceName, 1, 1, 3, 640#, 600#)
Success = FClass1.SetFeatureCoordinate(TSrceName, 1, 1, 4, 640#, 500#)
Success = FClass1.SetFeatureCoordinate(TSrceName, 1, 1, 5, 600#, 500#)

TUtilName = "Util"
Success = FClass1.AddNewTheme(TUtilName, ThemeClassification.Utility, ThemeGeomType.PGon)

' set the number of features
Success = FClass1.SetFeatureCount(TUtilName, 1)

' add feature 1
Success = FClass1.SetFeatureAttribute(TUtilName, 1, "Util01")
Success = FClass1.SetFeatureGeometry(TUtilName, 1, ThemeGeomType.PGon, 1)
Success = FClass1.SetPartGeometry(TUtilName, 1, 1, ThemeGeomType.PGon, 5)
Success = FClass1.SetFeatureCoordinate(TUtilName, 1, 1, 1, 590#, 490#)
Success = FClass1.SetFeatureCoordinate(TUtilName, 1, 1, 2, 590#, 610#)
Success = FClass1.SetFeatureCoordinate(TUtilName, 1, 1, 3, 630#, 610#)
Success = FClass1.SetFeatureCoordinate(TUtilName, 1, 1, 4, 630#, 480#)
Success = FClass1.SetFeatureCoordinate(TUtilName, 1, 1, 5, 580#, 490#)


TShftName = "Shifts"
Success = FClass1.AddNewTheme(TShftName, ThemeClassification.ShiftVector, ThemeGeomType.Link)
FClass1.iDistPgon2Pgon = 120
FClass1.iMax_DiffDist = 3
FClass1.iMax_DiffAngle = 10
Success = FClass1.RunTopoJoins(TSrceName, TDestName, TShftName, TopoRoutines.PolygonTags)
Debug.Print FClass1.GetJoinCount(TShftName)
Dim NumJoins As Long, Cntr As Long, ControlTable As String, CtrlPntNo As Long, BasePntNo1 As Long, Score2Beat As Single, DistBetween As Single, CreatedBy As String, NumPntsUsed As Integer
NumJoins = FClass1.GetJoinCount(TShftName)
For Cntr = 1 To NumJoins
If FClass1.GetJoin(TShftName, Cntr, ControlTable, CtrlPntNo, BasePntNo1, Score2Beat, DistBetween, CreatedBy, NumPntsUsed) Then
Debug.Print ControlTable, CtrlPntNo, BasePntNo1, Score2Beat, DistBetween, CreatedBy, NumPntsUsed
End If
Next Cntr
Success = FClass1.RunIterativeBestGuess(TShftName, 50)

Success = FClass1.getFeatureCoordinateAdj(TUtilName, 1, 1, 1, EastAdj, NrthAdj)
Debug.Print EastAdj, NrthAdj
Success = FClass1.getFeatureCoordinateAdj(TUtilName, 1, 1, 2, EastAdj, NrthAdj)
Debug.Print EastAdj, NrthAdj
Success = FClass1.getFeatureCoordinateAdj(TUtilName, 1, 1, 3, EastAdj, NrthAdj)
Debug.Print EastAdj, NrthAdj
Success = FClass1.getFeatureCoordinateAdj(TUtilName, 1, 1, 4, EastAdj, NrthAdj)
Debug.Print EastAdj, NrthAdj
Success = FClass1.getFeatureCoordinateAdj(TUtilName, 1, 1, 5, EastAdj, NrthAdj)
Debug.Print EastAdj, NrthAdj