9

In QGIS, I have a layer containing 62 equal-sized, quadratic polygons:

enter image description here

I want to split each polygon regularly into 9 quadratic sub-polygons and tried the polygon divider tool. Results are fine for upright polygons, but somewhat rotated input polygons get non-quadratic sub-polygons:

enter image description here

Problematic are the irregular alginment and rotation of the input polygons; the sub-polygons should fit the input polygons (e.g. have the same rotation).

However, perhaps someone can indicate a solution to this problem?

1 Answer 1

4

The solution is as follows: (the original data is abstract, as I understand it is a table of free-rotating equal polygons in the form of squares: see Figure 1)

enter image description here

1) In QGIS, run the Vector tool - "Geometry processing" - "Extract nodes" Result table exper_pol_to_poi see figure 2;

enter image description here

2) In the pgAdmin, create a table for lines with the LineString type, for example: CREATE TABLE exper_linestrings (    gid serial NOT NULL,    name text,    my_linestrings geometry (LineString),    CONSTRAINT exper_linestrings_pkey PRIMARY KEY (gid) ) WITH (    OIDS = FALSE ); ALTER TABLE exper_linestrings    OWNER TO postgres;   And from your points create and insert in table 2 adjacent lines

INSERT INTO exper_linestrings (gid, my_linestrings) VALUES (1, ST_GeomFromText ('LineString ( 55.2351515108097 35.6899496191, 54.2351516092924 37.4220004525878) ', 4326)) ;

INSERT INTO exper_linestrings (gid, my_linestrings) VALUES (2, ST_GeomFromText ('LineString ( 56.9672023710924 36.6899494742072, 55.2351515108097 35.6899496191 ) ', 4326)) ; Result 2 lines forming a right angle, see figure 3;

enter image description here

4) Knowing the size of your polygon as a square, you need to create 3 parallel lines relative to your 2 source lines using this SQL code for my data, specify it for your example:

create table my_linestrings_exper as SELECT ST_OffsetCurve (my_linestrings, 0.667) geom FROM exper_linestrings UNION ALL SELECT ST_OffsetCurve (my_linestrings, 1.334) my_linestrings FROM exper_linestrings UNION ALL SELECT ST_OffsetCurve (my_linestrings, 2.0) my_linestrings FROM exper_linestrings UNION ALL SELECT my_linestrings FROM exper_linestrings; The result is the my_linestrings_exper table, see figure 4;

enter image description here

5) Then you need to get internal points of intersection of 4 internal lines as an option, run the SQL:

create table my_exper_poi as SELECT a.my_linestrings as a, b.my_linestrings as b, st_intersection (a.my_linestrings, b.my_linestrings) FROM my_linestrings_exper as a, my_linestrings_exper as b WHERE st_crosses (a.my_linestrings, b.my_linestrings); Result table my_exper_poi, see figure 5

enter image description here

6) In QGIS, run the Vector tool - "Geometry processing" - "Extract nodes" into the my_linestrings_exper table, as a result the result of the exper_pol_to_poi_all table and merge all the points obtained in the general table, see figure 6;

enter image description here

7) On your exper_pol_to_poi_all table, run the Delaunay Triangulation tool and get the following table, for example: exper_pol_triangl, see figure 7?

enter image description here

8) In QGIS in the "Pencil" editing mode, in the exper_pol_triangl table, select the triangles that fall into the area of interest, use the "Vector" tool - "Geoprocessing" - "Merge by feature" (check "only selected objects" "Classification" - by all indications) result exper_pol_triangl 1 see figure 8-9;

enter image description here

enter image description here

9) Perform this operation 8 more times and combine 9 small squares in the source polygon, for example, SQL: create table datageo_exper_pol as SELECT id, geom FROM exper_pol_triangl 1 exper_pol_triangl all SELECT id, geom FROM exper_pol_triangl 2 exper_pol_triangl all SELECT id, geom FROM exper_pol_triangl 3 exper_pol_triangl all SELECT id, geom FROM exper_pol_triangl 4 exper_pol_triangl all SELECT id, geom FROM exper_pol_triangl 5 exper_pol_triangl all SELECT id, geom FROM exper_pol_triangl 6 exper_pol_triangl all SELECT id, geom FROM exper_pol_triangl 7 exper_pol_triangl all SELECT id, geom FROM exper_pol_triangl 8 exper_pol_triangl all SELECT id, geom FROM exper_pol_triangl 9; We are looking at the result, here are your polygons with 9 squares, and they behave very well  see figure 10,

enter image description here

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.