Create Random Circular Polygons

A Polygon is a kind of ogc feature that represents a continuous geographic area that is identified by a closed curve that is comprised of linear segments. A Polygon with mutliple parts is a MultiPolygon. They are usually used to represent areas like states, counties, lakes or continents. The code below chooses a random central location and radius and then generates a circular polygon described by 36 separate points for each polygon feature. Features represent a coupling of geometric shapes with non-geometric attributes. In this case the elevation value corresponds to an attribute of the integer data type. Each feature has exactly one measured elevation value, regardless of the number of coordinates in the geometric shape.

polygon1.png

Imports MapWindow.Data
Imports MapWindow.Geometries
Imports MapWindow.Projections
Private Sub BuildPolygon()
    ' Setup a new "shapefile" by using the featureset object
    Dim fs As New FeatureSet(FeatureTypes.Line)
    ' You can control things like the projection with this object
    fs.Projection = KnownCoordinateSystems.Projected.UtmNad1983.NAD1983UTMZone11N
    ' The DataTable is a standard .Net DataTable, so you can add columns the normal way and use with DataGrid controls
    fs.DataTable.Columns.Add("Elevation", GetType(Integer))
    
    ' Set up the specs for creating random points.  If you already know the point values from a file this is not necessary.
    Dim rnd As New Random(DateTime.Now.Millisecond)
    Const  YMIN As Integer = 0
    Const  YSPAN As Integer = 1000
    Const  XMIN As Integer = 0
    Const  XSPAN As Integer = 1000
    
    ' In a loop we are creating 100 different points using the box established above.
    For i As Integer = 0 To 9
        ' random center
        Dim center As New Coordinate(XMIN + rnd.NextDouble() * XSPAN, YMIN + rnd.NextDouble() * YSPAN)
        ' random radius from 10 to 100
        Dim radius As Double = 10 + rnd.[Next]() * 90
        ' An array of coordinates that defines a single, continuous line
        Dim coords As Coordinate() = New Coordinate(35) {}
        ' Filled regions are defined by ArcGIS as clockwise
        For j As Integer = 35 To 0 Step -1
            ' A coordinate is the simple X and Y location
            coords(j) = New Coordinate(center.X + radius * Math.Cos(j * Math.PI / 18), center.Y + radius * Math.Sin(j * Math.PI / 18))
        Next
        
        
        ' A point has geoemtry capabilities like testing intersection with polygons etc.
        Dim pg As New Polygon(coords)
        ' A feature also has attributes related to the featureset
        ' Features can be created directly, passing the point into the constructor, but there is a glitch
        ' right now that may not update the DataRow property of the feature correctly once it is added.
        Dim currentFeature As IFeature = fs.AddFeature(pg)
        
        ' Working with the current feature allows you to control attribute content as well as the feature content.
        currentFeature.DataRow("Elevation") = rnd.[Next](0, 100)
    Next
    fs.SaveAs("C:\test.shp", True)
End Sub

Last edited Feb 26, 2010 at 11:34 PM by Shade1974, version 3

Comments

No comments yet.