Shapely: рд╕рдорд╛рдирд╛рдВрддрд░_рдСрдлрд╝рд╕реЗрдЯ рдФрд░ рдмрдлрд░ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдореЛрдЪреНрдЪ рдХреЛ рдмрдВрдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 6 рдлрд╝рд░ре░ 2018  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: Toblerity/Shapely

рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░ред

рдХрднреА-рдХрднреА parallel_offset рдпрд╛ buffer , рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╕рдореЛрдЪреНрдЪ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдмрдВрдж рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд╣ рдмрд┐рдВрджреБ рдЬрд╣рд╛рдВ рд╕рдореЛрдЪреНрдЪ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдмрдВрдж рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рдореЗрд╢рд╛ рд╕рдореЛрдЪреНрдЪ рдХрд╛ рдкрд╣рд▓рд╛ / рдЕрдВрддрд┐рдо рдмрд┐рдВрджреБ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрдХ рдореБрджреНрджрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рд╢реБрд░реВ рдореЗрдВ StackExchange рдкрд░ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛

рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрджрдоред

рдпрд╣рд╛рдВ рдПрдХ рдиреНрдпреВрдирддрдо рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рдПрдХ рд╕рдореЛрдЪреНрдЪ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддрд╛ рд╣реИ рдЬреЛ parallel_offset рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдмрдВрдж рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред buffer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдПрдХ рдЧреЛрд▓ рдХрд┐рдирд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ( mitred рд╢реИрд▓реА рдХреЗ рдмрд╛рд╡рдЬреВрдж)ред
рдордЬреЗ рдХреА рдмрд╛рдд рд╣реИ, рдореЗрд░реЗ рдмрдбрд╝реЗ рдбреЗрдЯрд╛рд╕реЗрдЯ рдореЗрдВ рдЕрдиреНрдп рдмрд╣реБрдд рд╣реА рд╕рдорд╛рди рдХрдВрдЯреНрд░реЛрд╡рд░реНрд╕ рд╣реИрдВ рдЬреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдмрдВрдж рд╣реЛрддреЗ рд╣реИрдВред

import matplotlib.pyplot as plt
from shapely.geometry.polygon import LinearRing

def plot_line(ax, ob, color):
    x, y = ob.xy
    ax.plot(x, y, color=color, alpha=0.7, linewidth=3, 
            solid_capstyle='round', zorder=2)

polygon = [[-29.675, -30.675],
           [-28.4094, -29.4094],
           [-28.325, -29.325],
           [-28.325, -29.764],
           [-28.325, -29.7933],
           [-28.4587, -29.8274],
           [-28.4676, -29.8297],
           [-28.5956, -29.8814],
           [-28.6041, -29.8848],
           [-28.724, -29.953],
           [-28.732, -29.9576],
           [-28.8417, -30.0413],
           [-28.849, -30.0469],
           [-28.9466, -30.1445],
           [-28.9531, -30.151],
           [-29.0368, -30.2607],
           [-29.0424, -30.268],
           [-29.1106, -30.3879],
           [-29.1152, -30.3959],
           [-29.1669, -30.5239],
           [-29.1703, -30.5324],
           [-29.2044, -30.6661],
           [-29.2067, -30.675],
           [-29.6457, -30.675],
           [-29.675, -30.675]]

poly_line = LinearRing(polygon)
poly_line_offset = poly_line.parallel_offset(0.05, side="left", resolution=16, 
                                             join_style=2, mitre_limit=1)
# Alternative:
# poly_line_offset = poly_line.buffer(0.05, resolution=16, join_style=2, mitre_limit=1).exterior

fig = plt.figure()
ax = fig.add_subplot(111)
plot_line(ax, poly_line, "blue")
plot_line(ax, poly_line_offset, "green")
plt.show()

рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо

рд╡рд┐рдВрдбреЛрдЬ 7, рдкрд╛рдпрдерди 3.6.2

рд╢реЗрдкрд▓реА рд╡рд░реНрдЬрди рдПрдВрдб рдкреНрд░реЛрд╡реЗрдВрд╕

рд╢реЗрдкрд▓реА 1.6.3 (PyPI рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд)

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

@ рдбреЙрдХреНрдЯрд░-рдЗрдпрд╛рди рдпрд╣ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдПрдкреНрд▓реАрдХреЗрд╢рди рд╣реИ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрд░реЗ рдкрд╛рдпрдерди рдХреЛ рдХреНрд░реИрд╢ рдХрд░ рджреЗрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдБ GEOS рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдПрдХ рдмрдЧ рд╣реИред рд╕рдорд╛рдирд╛рдВрддрд░ рдСрдлрд╝рд╕реЗрдЯ рдХреЛ рдмрдВрдж рд░рд┐рдВрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХ рд╕реБрдВрджрд░ рддрд░реАрдХреЗ рд╕реЗ рд╡рд┐рдлрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдмрд╣реБрднреБрдЬ рдХрд╛ рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ рдмрдлрд░, рджреВрд╕рд░реА рдУрд░, рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

untitled

рд╕рднреА 4 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

@ рдбреЙрдХреНрдЯрд░-рдЗрдпрд╛рди рдпрд╣ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдПрдкреНрд▓реАрдХреЗрд╢рди рд╣реИ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрд░реЗ рдкрд╛рдпрдерди рдХреЛ рдХреНрд░реИрд╢ рдХрд░ рджреЗрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдБ GEOS рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдПрдХ рдмрдЧ рд╣реИред рд╕рдорд╛рдирд╛рдВрддрд░ рдСрдлрд╝рд╕реЗрдЯ рдХреЛ рдмрдВрдж рд░рд┐рдВрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХ рд╕реБрдВрджрд░ рддрд░реАрдХреЗ рд╕реЗ рд╡рд┐рдлрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдмрд╣реБрднреБрдЬ рдХрд╛ рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ рдмрдлрд░, рджреВрд╕рд░реА рдУрд░, рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

untitled

@ рд╕реЗрдЧрд┐рд▓рд┐рдЬ рдореБрдЭреЗ рдкрд╣рд▓реЗ рд╣реА рдЖрд╢рдВрдХрд╛ рдереА рдХрд┐ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕рдорд╕реНрдпрд╛ рдЖрдХрд╛рд░ рдореЗрдВ рдирд╣реАрдВ рд╣реИред рдмрдлрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ: рдпрд╣ рддрдм рднреА рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдореВрд▓реНрдп рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдирдХрд╛рд░рд╛рддреНрдордХ рдореВрд▓реНрдп рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд рдЬрдм рдЖрддреНрдо-рдЪреМрд░рд╛рд╣реЗ рд╣реЛрддреЗ рд╣реИрдВред рдпрд╣ рднреА рдПрдХ рдмрдЧ рдпрд╛ рдЗрд░рд╛рджрд╛ рд╣реИ?

рдПрдХ рдмрдЧ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИред

C-API рдореЗрдВ, GEOSOffsetCurve_r рдХреЛ рдХреЗрд╡рд▓ LINESTRINGs рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд▓реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ рд╣рдо рд░реЗрдЦреАрдпрд┐рдВрдЧ рдХреЛ рднреА рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЙрд╕ рд╕рдорд░реНрдерди рдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

ypicard picture ypicard  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ispmarin picture ispmarin  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

romainfontaine picture romainfontaine  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mikedh picture mikedh  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

FuriousRococo picture FuriousRococo  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ