Je dois trouver tous les points à l'intérieur et sur un polygone.Extraire toutes les coordonnées à l'intérieur d'un polygone à partir d'un polygone en forme de Python
Entrée:
from shapely.geometry import Polygon, mapping
sh_polygon = Polygon(((0,0), (2,0), (2,2), (0,2)))
Sortie:
(0,0) , (1,0) , (2,0) , (0,1) , (1,1) , (2,1) , (0,2) , (1,2) , (2,2).
S'il vous plaît indiquer s'il y a une meilleure façon sans utiliser shapely
.
J'ai écrit ce morceau de code qui donne des points à l'intérieur du polygone, mais il ne donne pas de points dessus. Aussi est-il une meilleure façon de faire la même chose:
from shapely.geometry import Polygon, Point
def get_random_point_in_polygon(poly):
(minx, miny, maxx, maxy) = poly.bounds
minx = int(minx)
miny = int(miny)
maxx = int(maxx)
maxy = int(maxy)
print("poly.bounds:", poly.bounds)
a = []
for x in range(minx, maxx+1):
for y in range(miny, maxy+1):
p = Point(x, y)
if poly.contains(p):
a.append([x, y])
return a
p = Polygon([(0,0), (2,0), (2,2), (0,2)])
point_in_poly = get_random_point_in_polygon(p)
print(len(point_in_poly))
print(point_in_poly)
Sortie:
poly.bounds: (0.0, 0.0, 2.0, 2.0)
1
[[1, 1]]
J'ai simplifié mon problème. En fait, j'ai besoin de trouver tous les points à l'intérieur et sur un carré avec des coins: (77,97), (141,101), (136,165), (73,160).
Pourriez-vous simplement augmenter votre maximum de 1 et diminuer votre min de 1? – SirParselot
@SirParselot Thansk. Je l'ai changé. Mais, je reçois la même sortie exacte. – Beginner
C'est parce que vous avez 'si poly.contains (p)'. Ce n'est vrai que si le polygone a le point à l'intérieur de celui-ci et non sur celui-ci. Vous ne devriez pas avoir à vérifier si c'est à l'intérieur du polygone si vos boucles sont entre les limites. Ignorez mon premier commentaire si vous supprimez 'si poly.contains (p)' – SirParselot