рдкрд╣реБрдВрдЪ рдХреНрд╖реЗрддреНрд░ рдореЗрдВред рдПрдХ рдХреНрд╖реЗрддреНрд░ рд╕реЗ рдПрдХ рдмрд┐рдВрджреБ рдХреА рджреВрд░реА рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВ рдФрд░ рд░рд┐рд╡рд░реНрд╕ рдЬрд┐рдпреЛрдХреЛрдбрд┐рдВрдЧ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдХрдо рдХрд░реЗрдВ



рдПрдХ рдмрд╛рд░ рд╕реЗ рдЕрдзрд┐рдХ рдореБрдЭреЗ рдирдХреНрд╢реЗ рдкрд░ рдПрдХ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рднреМрдЧреЛрд▓рд┐рдХ рдмрд┐рдВрджреБ рд╕реЗ рджреВрд░реА рдХреА рдЧрдгрдирд╛ рдХреЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдерд╛ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЙрд╕реНрдХреЛ рд░рд┐рдВрдЧ рд░реЛрдб рдкрд░ред рдирддреАрдЬрддрди, рдореБрдЭреЗ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рдорд┐рд▓реЗ рдЬреЛ рдЕрдЪреНрдЫреЗ рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рддреЗ рдереЗ, рдФрд░ рдЕрдм рд╣рдо рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ рдЙрдиреНрд╣реЗрдВ рд▓реЗрдЦ рдХреЗ рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ред рдФрд░ рджреВрд╕рд░реЗ рдореЗрдВ рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЬрд┐рдпреЛрдХреЛрдб рдХреЛ рдХрдо рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдЬрд┐рдпреЛрдбрд╛рдЯрд╛ рдХреЛ рдХреИрд╕реЗ рдХреИрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рднрд╛рдЧ рдПрдХ рдорд╛рдирдЪрд┐рддреНрд░ рдкрд░ рдПрдХ рдХреНрд╖реЗрддреНрд░ рд╕реЗ рдПрдХ рдмрд┐рдВрджреБ рдХреА рджреВрд░реА рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ


рдпрджрд┐ рдЖрдкрдХрд╛ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЛрдмрд╛рдЗрд▓ рд╣реИ, рддреЛ рдпрд╣ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рд╕реНрдерд╛рди (рдФрд░ рдбрд┐рд╡рд╛рдЗрд╕) рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рд╕рдВрдХреЗрддрдХреЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдбрд┐рд▓реАрд╡рд░реА рд▓рд╛рдЧрдд, рдЬрдЯрд┐рд▓рддрд╛ рдХрд╛рд░рдХ, рдЖрджрд┐ред
рдиреАрдЪреЗ рдореИрдВ рд╕реНрдХрд╛рдЗрдк рдФрд░ рд╕реБрдбреМрд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдЬрдЧрд░ рдореЗрдВ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдКрдВрдЧрд╛ред
рдЬрд┐рдпреЛрдХреЛрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╣рдо Google рдореИрдкреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдФрд░ рдЙрдкрдпреЛрдЧ рдХреА рд▓рд╛рдЧрдд рджреЛрдиреЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИред рдЗрд╕ рд▓реЗрдЦрди рдХреЗ рд╕рдордп, Google рдЖрдкрдХреЛ рдкреНрд░рддрд┐ рдорд╛рд╣ рдкрд╣рд▓реЗ 20,000 рдЬрд┐рдпреЛрдХреЛрдбрд┐рдВрдЧ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рд╡рд┐рдзрд┐ 1. рд╣рдо рдмрд╣реБрднреБрдЬ рдХреЗ рдХреЛрдиреЗ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдорд╛рд░реНрдЧ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ


рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдореЗрдВ рдореЙрд╕реНрдХреЛ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдореЙрд╕реНрдХреЛ рд░рд┐рдВрдЧ рд░реЛрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд┐рдВрджреБ рд╕реЗ рджреВрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрде рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдПрдХ рдЬреНрдпрд╛рдорд┐рддреАрдп рдирд╣реАрдВред рдЗрд╕рд▓рд┐рдП, рдкрд╣рд▓реЗ рд╣рдо рдорд╛рд╕реНрдХреЛ рд░рд┐рдВрдЧ рд░реЛрдб рд╕реЗ рдирд┐рдХрд╛рд╕ рдмрд┐рдВрджреБрдУрдВ рд╕реЗ рдПрдХ рд▓реИрдВрдбрдлрд┐рд▓ рдмрдирд╛рддреЗ рд╣реИрдВ, рдФрд░ рд╡реЗ рдирдХреНрд╢реЗ рдкрд░ рд╕рдбрд╝рдХ рдХреА рд░реВрдкрд░реЗрдЦрд╛ рдХреЗ рдХреЛрдиреЗ рдХреЗ рд╕рд╛рде рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреЗ рд╣реИрдВред

exit_coordinates: List[Tuple[float, float]] latitude: float longitude: float 

рдЬреНрдпрд╛рдорд┐рддрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕реБрдбреМрд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ ред рдЗрд╕рдХреА рдорджрдж рд╕реЗ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмреНрдпрд╛рдЬ рдХреА рдмрд╛рдд рдмрд╣реБрднреБрдЬ рдХреЗ рдЕрдВрджрд░ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдпрджрд┐ рдпрд╣ рд╣реИ, рддреЛ рджреВрд░реА рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ 0 рд╣реИред

 from shapely.geometry import Polygon, Point polygon = Polygon(exit_coordinates) polygon.contains(Point(latitude,longitude)) 

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

 from scipy.spatial import KDTree kd_tree = KDTree(exits_coordinates) dists, indexes = kd_tree.query((latitude, longitude), k=3) nearest_coordinates = list() for _, index in zip(dists, indexes): nearest_coordinates.append(exits_coordinates[index]) 

рд╕рдВрдЦреНрдпрд╛ k - рдЪреЛрдЯрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ - рдмрд╣реБрдд рдЫреЛрдЯреА рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдорд╛рд╕реНрдХреЛ рд░рд┐рдВрдЧ рд░реЛрдб рд╕реЗ рдирд┐рдХрдЯрддрдо рдирд┐рдХрд╛рд╕ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдЕрд╡рд░реБрджреНрдз рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╛ рдпрд╣ рдирджреА рд╕реЗ рдкрд░реЗ рдХрд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╣рдорд╛рд░реА рдмрд╛рдд рдХрд╛ рд╕реАрдзрд╛ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВ рд╣реИред рдмрд╣реБрдд рдмрдбрд╝реА k рд╣рдорд╛рд░реЗ рд▓рд┐рдП рднреА рдмреЗрдХрд╛рд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдЙрдкрдпреБрдХреНрдд рдирд┐рдХрд╛рд╕ рдкрд╛рд╕ рдХреА рдХрдИ рдЪреЛрдЯрд┐рдпреЛрдВ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред рдЕрдм Google Maps рд╕реЗрд╡рд╛ рдХреА рдУрд░ рдореБрдбрд╝рддреЗ рд╣реИрдВред рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд┐рдВрджреБрдУрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд╕реЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдмрд┐рдВрджреБ рддрдХ рджреВрд░реА рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реИ - рджреВрд░реА рдореИрдЯреНрд░рд┐рдХреНрд╕ рдПрдкреАрдЖрдИред
рдЕрдкрдбреЗрдЯ: рджреВрд░реА рдореИрдЯреНрд░рд┐рдХреНрд╕ рдПрдкреАрдЖрдИ рд╕реЗрд╡рд╛ рдкреНрд░рддреНрдпреЗрдХ рдирд┐рдХрдЯрддрдо рдЪреЛрдЯреА рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдЧ рдХреЛ рдЕрд▓рдЧ рд╕реЗ рдмрд┐рд▓ рджреЗрддреА рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрд╣ рд╡рд┐рдзрд┐ рджреВрд╕рд░реЗ рд╕реЗ рдЕрдзрд┐рдХ рдорд╣рдВрдЧреА рд╣реИ, рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рд╣реИред рдзрдиреНрдпрд╡рд╛рдж sovetnikov

 import googlemaps gmaps_client = googlemaps.Client(key=settings.GOOGLE_MAPS_API_KEY) gmaps_client.distance_matrix( origins=nearest_coordinates, destinations=(latitude, longitude), mode='driving', ) 

рд╣рдо рдХреЗрд╡рд▓ рдЙрддреНрддрд░ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдорддреМрд░ рдкрд░ рдЗрд╕рдХреЗ рдХрдИ рдорд╛рд░реНрдЧ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рд╣рдореЗрд╢рд╛ рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЙрдЪрд┐рдд рдореВрд▓реНрдп рдЪреБрдирддреЗ рд╣реИрдВред

рд╡рд┐рдзрд┐ 2. рд╣рдо рд▓реИрдВрдбрдлрд┐рд▓ рдХреЗ рдХреЗрдВрджреНрд░ рд╕реЗ рдорд╛рд░реНрдЧ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ


рдЕрдм, рдмрд╣реБрднреБрдЬ рдХреЗ рдХреЛрдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдЗрд╕рдХреЗ рдЕрдВрджрд░ рдХреБрдЫ рдмрд┐рдВрджреБ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рд╣рдо Google рдорд╛рдирдЪрд┐рддреНрд░ рдХреЗ рд╕рднреА рдорд╛рд░реНрдЧреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВрдЧреЗред рд╣рдо рджрд┐рд╢рд╛ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдорд╛рд░реНрдЧ рдмрдирд╛рдПрдВрдЧреЗ, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рд╕рдмрд╕реЗ рдХрдо рдХрд╛ рдЪрдпрди рдХрд░реЗрдВрдЧреЗред

 start_point: Tuple[float, float], destination: Tuple[float, float] polygon: shapely.geometry.Polygon gmaps_client = googlemaps.Client(key=settings.GOOGLE_MAPS_API_KEY) driving_path = gmaps_client.directions(start_point, destination) 

рд╣рдо рдкрде рдХреЗ рдЦрдВрдбреЛрдВ рдХреА рд▓рдВрдмрд╛рдИ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрдд рд╕реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рдЦрдВрдб рдХреА рд╢реБрд░реБрдЖрдд рдХрд╛ рд╕рдордиреНрд╡рдп рдмрд╣реБрднреБрдЬ рдХреЗ рдЕрдВрджрд░ рдирд╣реАрдВ рд╣реЛрддрд╛ (рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдЫреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ):

 for step in reversed(driving_path): start_point = step['start_location']['lat'], step['start_location']['lng'] if is_inside_polygon(start_point, self.polygon): end_point = step['end_location']['lat'], step['end_location']['lng'] distance += get_part_outside_polygon( get_line(start_point, end_point), polygon ) * step['distance']['value'] break distance += step['distance']['value'] 

рд╣рдо рдХреЗрд╡рд▓ рдмрд╣реБрднреБрдЬ рдХреЗ рдмрд╛рд╣рд░ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдХрд╛рд░ рдХреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдкрде рдХреЗ рдЖрд░рдВрдн рдФрд░ рдЕрдВрдд рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рдмреАрдЪ рдПрдХ рдЬреНрдпрд╛рдорд┐рддреАрдп рд░реЗрдЦрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдкрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕рдХреА рд▓рдВрдмрд╛рдИ рдмрд╣реБрднреБрдЬ рдХреЗ рдмрд╛рд╣рд░ рдХрд┐рддрдиреА рд╣реИред рд▓рдВрдмрд╛рдИ рдХреЗ рд╕рдорд╛рди рдкреНрд░рддрд┐рд╢рдд рдХреА рдЧрдгрдирд╛ рдкрде рдХреЗ рдкреНрд░рд╛рдкреНрдд рдЦрдВрдб рдХреЗ рд▓рд┐рдП рдХреА рдЬрд╛рддреА рд╣реИред
рдПрдХ рд░рд╛рд╕реНрддрд╛ рдкреНрд░рд╛рдХреГрддрд┐рдХ рд╡рдХреНрд░рддрд╛ рд╡рд╛рд▓реА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдбрд╝рдХреЛрдВ рдкрд░ рдПрдХ рднреВ-рднрд╛рдЧ рдорд╛рд░реНрдЧ рд╣реИред рдпрджрд┐ рдпрд╣ рдПрдХ рд▓рдВрдмреА рд╕реАрдзреА рд░реЗрдЦрд╛ (рдПрд╡реЗрдиреНрдпреВ рдпрд╛ рд╣рд╛рдИрд╡реЗ) рд╣реИ, рддреЛ рд╣рдорд╛рд░рд╛ рдЕрдиреБрдорд╛рди рд╣рдореЗрдВ рдорд╛рд░реНрдЧ рдХреА рдЧрдгрдирд╛ рдкреНрд░рддрд┐рд╢рдд рдХреЗ рд╣рд┐рд╕рд╛рдм рд╕реЗ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
рдпрджрд┐ рд▓реИрдВрдбрдлрд┐рд▓ рдХреЛ рдкрд╛рд░ рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╕рдбрд╝рдХ рдкрд░реНрдпрд╛рдкреНрдд рдШреБрдорд╛рд╡рджрд╛рд░ рд╣реИ, рддреЛ рдРрд╕рд╛ рдЕрдиреБрдорд╛рди рдЧрд▓рдд рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди Google рдорд╛рдирдЪрд┐рддреНрд░ рдорд╛рд░реНрдЧ рдореЗрдВ рдШреБрдорд╛рд╡рджрд╛рд░ рднрд╛рдЧ рдЖрдорддреМрд░ рдкрд░ рдЫреЛрдЯреЗ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдЙрдирдХреА рдЧрдгрдирд╛ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреАред

 from shapely.geometry import LineString, Polygon line = LineString(point1, point2) part_outside_len = float(line.difference(polygon).length) / float(line.length) 

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

рднрд╛рдЧ рджреЛ рд░рд┐рд╡рд░реНрд╕ рдЬрд┐рдпреЛрдХреЛрдбрд┐рдВрдЧ рдЕрдиреБрд░реЛрдз рд╕рд╣реЗрдЬреЗрдВ


рдЕрдХреНрд╕рд░ рд╣рдореЗрдВ рдЙрди рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдкрддреЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдкрд╛рд╕ рд╣реИрдВ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдПрдХ рд╡рд╕реНрддреБ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВред рд╣рд░ рдмрд╛рд░, рдмрд╛рд╣рд░реА рдЬрд┐рдпреЛрдХреЛрдбрд┐рдВрдЧ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдпрд╣рд╛рдБ рдХреЛрдЪрд┐рдВрдЧ рдХрд╛ рд╕рд╡рд╛рд▓ рдпрдереЛрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрдарддрд╛ рд╣реИред
рдЖрдорддреМрд░ рдкрд░, рдХреНрд▓рд╛рдЗрдВрдЯ рдЕрддреНрдпрдзрд┐рдХ рд╕рдЯреАрдХрддрд╛ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рднреЗрдЬрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 59.80447691, 30.39570337ред рд▓реЗрдХрд┐рди рднрд┐рдиреНрдирд╛рддреНрдордХ рднрд╛рдЧ рдореЗрдВ рдХрд┐рддрдиреЗ рдЪрд┐рдиреНрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛрдВрдЧреЗ?
рдЖрд▓рд╕реА рдХреЗ рд▓рд┐рдП рдФрд░ рдЬрд▓реНрджреА рдореЗрдВ, рдЬрд╡рд╛рдм рдЪрд╛рд░ рд╣реИред рдмрд╛рдХреА рд╕рднреА рдХреЗ рд▓рд┐рдП, рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЛ рджреЗрдЦреЗрдВред

рдкрд╣рд▓рд╛, рдереЛрдбрд╝рд╛ рднреВрдЧреЛрд▓ред


  • рднреВрдордзреНрдп рд░реЗрдЦрд╛ 40,075.696 рдХрд┐рдореА рд▓рдВрдмреА рд╣реИ, рдФрд░ рдпрд╣ рд╢реВрдиреНрдп рдЕрдХреНрд╖рд╛рдВрд╢ рд╣реИред
  • рдореЗрд░рд┐рдбрд┐рдпрди рджреЗрд╢рд╛рдВрддрд░ рдХреА рд░реЗрдЦрд╛рдПрдВ рд╣реИрдВ, рдЕрдХреНрд╖рд╛рдВрд╢ рдХреА рд░реЗрдЦрд╛рдУрдВ рдХреЗ рд▓рдВрдмрд╡рддред рдХрд┐рд╕реА рднреА рдордзреНрдпрд╛рд╣реНрди рд░реЗрдЦрд╛ рдХреА рд▓рдВрдмрд╛рдИ 40,008.55 рдХрд┐рдореА рд╣реИ
  • рдЕрдХреНрд╖рд╛рдВрд╢ рдХреА рдбрд┐рдЧреНрд░реА - 40,008.55 рдХрд┐рдореА / 360 = 111.134861111 рдХрд┐рдореАред рддреЛ, рдПрдХ рд╕реМрд╡рд╛рдВ рдПрдХ рдХрд┐рд▓реЛрдореАрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рджреЗрддрд╛ рд╣реИ, рдФрд░ рдПрдХ рджрд╕ рд╣рдЬрд╛рд░рд╡рд╛рдВ 10 рдореАрдЯрд░ рдХрд╛ рдкрд░рд┐рд╡рд░реНрддрди рджреЗрддрд╛ рд╣реИред
  • рдЕрдХреНрд╖рд╛рдВрд╢ рд╕реЗ рд░реЗрдЦрд╛ рдХреА рдкрд░рд┐рдзрд┐ рднреВрдордзреНрдп рд░реЗрдЦрд╛ рд╕реЗ рдШрдЯрддреА рд╣реИ, рдФрд░ рдЕрдХреНрд╖рд╛рдВрд╢ рдХреЗ рдХреЛрдг рдХреЗ рдХреЛрд╕рд╛рдЗрди рд╕реЗ рдЧреБрдгрд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП, 60 рдбрд┐рдЧреНрд░реА рдЕрдХреНрд╖рд╛рдВрд╢ (рд╕реЗрдВрдЯ рдкреАрдЯрд░реНрд╕рдмрд░реНрдЧ рдХреЗ рдЕрдХреНрд╖рд╛рдВрд╢) рдХреЗ рд▓рд┐рдП, рд▓рдВрдмрд╛рдИ рд▓рдЧрднрдЧ 2% рд╕реЗ рдХрдо рд╣реИред рдлрд┐рд░ рджреЗрд╢рд╛рдВрддрд░ рдХреА рдбрд┐рдЧреНрд░реА 40,075.696 * 0.5 / 360 = 55.66066888 рдХрд┐рдореА, рдпрд╛ рдПрдХ рджрд╕ рд╣рдЬрд╛рд░рд╡рд╛рдВ 5 рдореАрдЯрд░ рд╣реИред

1/10000 рдбрд┐рдЧреНрд░реА рдХреА рдПрдХ рддреНрд░реБрдЯрд┐ 5-10 рдореАрдЯрд░ рдХреА рддреНрд░реБрдЯрд┐ 10 рдореАрдЯрд░ рдХреА рдЖрдпрдд рджреЗрддреА рд╣реИред рдпрд╣ рд╣рдореЗрдВ рдЗрдорд╛рд░рдд рдореЗрдВ "рдкреНрд░рд╛рдкреНрдд" рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдЗрдорд╛рд░рдд рдмрд┐рдВрджреБ рд╕реЗ рдмрд╣реБрдд рдмрдбрд╝реА рд╣реИред рдФрд░ рдЕрдЧрд░, рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рдХрд╛рд░рдг, рдмрд┐рдВрджреБ рдЗрдорд╛рд░рдд рдореЗрдВ рдирд╣реАрдВ рдЧрд┐рд░рддрд╛ рд╣реИ, рддреЛ Google рдЕрднреА рднреА рдЗрд╕рдХреЗ рд╕рдмрд╕реЗ рдХрд░реАрдм рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░реЗрдЧрд╛ред
рддреАрди рд╡рд░реНрдгреЛрдВ рддрдХ рдЧреЛрд▓рд╛рдИ рдЬреЛрдЦрд┐рдо рднрд░рд╛ рд╣реИ, рд╕рдЯреАрдХрддрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдлреА рдХрдо рд╣реИред рдФрд░ рдкрд╛рдБрдЪ рддрдХ - рдЗрд╕рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЬреАрдкреАрдПрд╕-рдЯреНрд░рд╛рдВрд╕рдореАрдЯрд░ рдХреА рд╕рдЯреАрдХрддрд╛ рдХреЗрд╡рд▓ рдХреБрдЫ рдореАрдЯрд░ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрджрд┐ рдХреБрдВрдЬреА рдореЗрдВ рдХреИрд╢ рдореЗрдВ рдПрдХ рдорд╛рди "рдкрддрд╛: 59.8045,30.3957" рд╣реИ, рддреЛ рд╕рднреА рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ, рдЬрдм 4 рд╡рд░реНрдгреЛрдВ рдХреЛ рдЧреЛрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХ рд╣реА рдХреБрдВрдЬреА рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИ, рдПрдХ рдЬрд┐рдпреЛрдХреЛрдбреЗрдб рдкрддреЗ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрддрд╛ рд╣реИред рд╣рдо рдХрдо рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ - рд╣рдо рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЬрд┐рдпреЛрдХреЛрдбрд┐рдВрдЧ рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рднреБрдЧрддрд╛рди рдХрд░рддреЗ рд╣реИрдВред рд▓рд╛рдн!

Source: https://habr.com/ru/post/hi486066/


All Articles