0

I have a free shaped polygon. Now I draw a smaller polygon inside with a same form i.e buffer zone with negative width. Then put a point with in my buffer zone center. Its looks like this:

enter image description here

OK. But now I add a buffer zone with positive width and put a point in centre. I get:

enter image description here

You see that one point lies on another point. Its no good I want to see both points.

Sure I can just move a point from centre away but if I do I will have a polygon with strange shape that can go beyond the boundaries.

Can you give an advice what to do?

  • Would you be able to have another try at explaining your Question - I think it is about how to display overlapping features but am reluctant to try and advise when I am not sure what you are asking. – PolyGeo Mar 17 '14 at 11:16
  • No idea how to implement algorithm but see postgis manual : postgis.org/docs/ST_Centroid.html , ST_centroid , st_pointonsurface, st_point_on_circle. Those may give you more idea what you want. pointonsurface implementation (see postgis source/libwgeom source) could be what you are looking for – simplexio Mar 17 '14 at 11:18
  • You can use an offset for the display of your points, provided that they are placed in approximately the same way in all features (this might be a stretch though). In Arcmap there's such a functionality for point properties, and I assume there's something similar in Qgis. – Martin Mar 17 '14 at 12:00
  • 1
    If you just want an exclusion zone, you can buffer the preferred label, then difference that out of the second polygon, so the resulting centroid wouldn't overlap. – Vince Mar 17 '14 at 12:15
  • Guys sorry for bad question explanation that couse my english is terrible. – Kliver Max Mar 18 '14 at 4:56
2

A solution for complex shapes could be to create the straight skeleton of your polygons and place your two points at two different locations on these lines (e.g. 25 and 75 % of the longest line). For most shapes you can also use the medial axis or its approximation (e.g. straight skeleton lines that do not touch any edges of your polygon), but this would not work for circles and regular polygons (the "axis" is then a point).

Another solution is to split your polygons in 2 (example here) then place one point in the first part and the second point in the second part.

Note that Vince's solution seems quite robust too. A variant is to place two random points in each inside buffered polygon with a minimum allowed distance to avoid "overlaps"

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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