2

Is there anyway to fill an irregular polygon with regular points but to also offset this regular point pattern with a defined angle offset from north? I make reference to an older answered post regarding the filling of polygons

Filling polygons with points or polygons

mgri
  • 16,159
  • 6
  • 47
  • 80
user95443
  • 49
  • 4
  • is this for cartographic reasons (to do stippling) or do you actually need the points e.g. to do sampling? – Steven Kay Jun 01 '17 at 17:36
  • The points are representative of a wind turbine points within an array. so i would like to adjust the angle of the points to a defined value or another layer attribute value – user95443 Jun 02 '17 at 09:13
  • @user95443 any news about the solution? – mgri Jul 02 '17 at 19:10

1 Answers1

1

You may run this code (adapted from this post I wrote some time ago) from the Python Console for controlling the spacing of your points and the inset from the North:

from qgis.core import *

# Set the spacing
spacing = 10
# Set the inset
inset_x = 5
inset_y = 5

# Get the Coordinate Reference System and the extent from the loaded layer
layer = iface.activeLayer() # load the layer as you want
crs = layer.crs().toWkt()
ext=layer.extent()

# Create a new vector point layer
points_layer = QgsVectorLayer('Point?crs=' + crs, 'grid', "memory")
prov = points_layer.dataProvider()

# Create the coordinates of the points in the grid
points = []

for ft in layer.getFeatures():
    feat_geom = ft.geometry()
    # Set the extent of the new layer
    xmin = ext.xMinimum() + inset_x
    xmax = ext.xMaximum()
    ymin = ext.yMinimum()
    ymax = ext.yMaximum() - inset_y
    y = ymax
    while y >= ymin:
        x = xmin
        while x <= xmax:
            geom = QgsGeometry().fromPoint(QgsPoint(x, y))
            feat = QgsFeature()
            point = QgsPoint(x,y)
            feat.setGeometry(QgsGeometry.fromPoint(point))
            if feat_geom.contains(feat.geometry()):
                points.append(feat)
            x += spacing
        y = y - spacing

prov.addFeatures(points)
points_layer.updateExtents()

# Add the layer to the map
QgsMapLayerRegistry.instance().addMapLayer(points_layer)

For example, using a high value for the insets (inset_x = 50 and inset_y = 30), I get this result:

enter image description here

I hope having understood what you want. If you defined an angle instead of two insets, it is easy translating it as two length values (I can also edit the answer if you add more specific information about the problem).

mgri
  • 16,159
  • 6
  • 47
  • 80
  • I have the same problem as in creating a grid that is oriented at a certain angle from the north. I have added a rotation angle but end up with just one rotate line of points. Should I create a new post or keep it here, since the original question mentions a rotation? – Techie_Gus Nov 07 '19 at 07:08