Shapely: рд▓рд┐рдиреЗрд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрд░ рдирд┐рдХрдЯрддрдо рдмрд┐рдВрджреБ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 18 рдЕрдХреНрддреВре░ 2014  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: Toblerity/Shapely

рдирдорд╕реНрддреЗ,
рдПрдХ рдмрд┐рдВрджреБ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдореИрдВ рдПрдХ рд▓рд┐рдиреЗрд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрд░ рдирд┐рдХрдЯрддрдо рдмрд┐рдВрджреБ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд▓рд┐рдиреЗрд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
рдкрд╛рдпрдерди 3.4.0 (рдбрд┐рдлрд╝реЙрд▓реНрдЯ, 11 рдЕрдкреНрд░реИрд▓ 2014, 13:05:11)
[рдЬреАрд╕реАрд╕реА 4.8.2] рд▓рд┐рдирдХреНрд╕ рдкрд░
рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП "рд╕рд╣рд╛рдпрддрд╛", "рдХреЙрдкреАрд░рд╛рдЗрдЯ", "рдХреНрд░реЗрдбрд┐рдЯ" рдпрд╛ "рд▓рд╛рдЗрд╕реЗрдВрд╕" рдЯрд╛рдЗрдк рдХрд░реЗрдВред

рд╢реЗрдкрд▓реА рд╕реЗредрдЬреНрдпрд╛рдорд┐рддрд┐ рдЖрдпрд╛рдд рдмрд┐рдВрджреБ, рд▓рд╛рдЗрдирд╕реНрдЯреНрд░рд┐рдВрдЧ
рд▓рд╛рдЗрди = рд▓рд╛рдЗрдирд╕реНрдЯреНрд░рд┐рдВрдЧ ([(0,0), (5,7), (12,6)])
рдкреА = рдмрд┐рдВрджреБ(4,8)
рдПрдирдкреА = рд▓рд╛рдЗрдиред рдЗрдВрдЯрд░рдкреЛрд▓реЗрдЯ (рд▓рд╛рдЗрдиред рдкреНрд░реЛрдЬреЗрдХреНрдЯ (рдкреА))
рдкреНрд░рд┐рдВрдЯ (рдПрдирдкреА)
рдмрд┐рдВрджреБ (5 7)

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рдЬрдЯрд┐рд▓ рд▓рд┐рдиреЗрд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдЗрдЪреНрдЫрд┐рдд рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣реЗ рд╣реИрдВ

рдорд╛рд░реНрдЧ = рд▓рд╛рдЗрдирд╕реНрдЯреНрд░рд┐рдВрдЧ ([(19.119318,72.902800), (19.119660,72.901455), (19.119673,72.901401), (19.119848,72.90053), (19.119975,72.89972), (19.120129,72.899675), (19.120308,72.901455), ( 72.899162), (19.121131,72.898909), (19.121597,72.898739), (19.122330,72.898471), (19.122696,72.898429), (19.123296,72.897991), (19.123680,72.897623), (19.124095,72.898739), (19.124095,72.898739), (19.124095,72.898739), ,(19.124483,72.896177),(19.124573,72.895796),(19.124585,72.895470),(19.124603,72.895014),(19.124652,72.894291),(19.124686,72.894067),(19.124929,72.893177),(19.124929,72.893177),(19.124929,72.893177),(19.124929,72.893177), 19.125097,72.892666), (19.125214,72.89233), (19.125450,72.891802), (19.125757,72.891281), (19.125951,72.890874), (19.126170,72.892666), (19.128933,72.89233), (19.12893,72.889417), (19.12893,72.889417), (19.12893,72.889417), (19.12893,72.89231), 72.886714),(19.129060,72.886402),(19.129109,72.886299),(19.129238,72.885913),(19.129302,72.885370),(19.129372,72.881686),(19.129396,72.880652),(19.129413,72.880540),(19.129413,72.880540),(19.129413,72.880540),(19.129413,72.880540) ,(19.129382,72.880070),(19.129419,72.879849),(19.129509,72.879205),(19.129709,72. 877766),(19.129969,72.876684),(19.130029,72.876511),(19.128367,72.875341),(19.127365,72.874602),(19.125882,72.873536),(19.125160,72.873014),(19.124815,72.872413,(19.124815,72.872413),(19.124815,72.872413),(19.124815,72.872413),(19.124815,72.872413), ,(19.123149,72.871568),(19.122517,72.871091),(19.122162,72.870822),(19.121981,72.870749),(19.121736,72.870651),(19.121013,72.870576),(19.119933,72.870464),(19.119533,72.870464),(19.119533,72.870464),(19.119533),

рд╕реВрдЪреА (рдорд╛рд░реНрдЧ.рдХреЛрд░реНрдбреНрд╕)
[(19.119318, 72.9028), (19.11966, 72.901455), (19.119673, 72.901401), (19.119848, 72.900553), (19.119975, 72.899972), (19.120129, 72.899675), (19.120308, 72.899385), (19.120589, 72.899162), ( 19.121131, 72.898909), (19.121597, 72.898739), (19.12233, 72.898471), (19.122696, 72.898429), (19.123296, 72.897991), (19.12368, 72.897623), (19.124095, 72.897035), (19.124402, 72.896411), (19.124402, 72.896411) 72.896177), (19.124573, 72.895796), (19.124585, 72.89547), (19.124603, 72.895014), (19.124652, 72.894291), (19.124686, 72.894067), (19.124929, 72.893177), (19.124971, 72.893049), (19.89265097, 72. , (19.125214, 72.892323), (19.12545, 72.891802), (19.125757, 72.891281), (19.125951, 72.890874), (19.12617, 72.890413), (19.126833, 72.889417), (19.127319, 72.888873), (19.128909, 72.886714), ( 19.12906, 72.886402), (19.129109, 72.886299), (19.129238, 72.885913), (19.129302, 72.88537), (19.129372, 72.881686), (19.129396, 72.880652), (19.129413, 72.88054), (19.129366, 72.880167), (19.129382, 72.88007), (19 .) .129419, 72.879849), (19.129509, 72.879205), (19.129709, 72.877766), (19.129969, 72.876684), (19.130029, 72.876511), (19.128367, 72.875341), (19.127365, 72.874602), (19.125882, 72. , 72.873014), (19.124815, 72.872761), (19.124413, 72.872457), (19.123149, 72.871568), (19.122517, 72.871091), (19.122162, 72.870822), (19.121981, 72.870749), (19.121736, 72.870651), (19.121736, 72.870651), (19.121013, 72.870651), ), (19.119933, 72.870464), (19.119596, 72.870432)]

рдЕрдВрдд = рдмрд┐рдВрджреБ (19.125150,72.893218)

рдПрдирдкреА = рдорд╛рд░реНрдЧред рдЗрдВрдЯрд░рдкреЛрд▓реЗрдЯ (рдорд╛рд░реНрдЧред рдкрд░рд┐рдпреЛрдЬрдирд╛ (рдЕрдВрдд))

рдкреНрд░рд┐рдВрдЯ (рдПрдирдкреА)
рд╕реВрддреНрд░реА (19.12493833590478 72.89314854771877)

рдореИрдВ рдкрд░рд┐рдгрд╛рдо 19.124929, 72.893177 рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рдерд╛ред рдХреНрдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рд╣реИ рдЬреЛ рдореИрдВ рдЧрд▓рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдБ? рдХрд┐рд╕реА рднреА рдорджрдж рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХреАред

рдзрдиреНрдпрд╡рд╛рдж!

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

рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛ рдмрд┐рдВрджреБ рдореВрд▓ рдмрд┐рдВрджреБ рдХреА рд░реЗрдЦрд╛ рдкрд░ рдирд┐рдХрдЯрддрдо рдмрд┐рдВрджреБ рд╣реИред рдирд┐рдХрдЯрддрдо рдмрд┐рдВрджреБ _not_ рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рд▓рд╛рдЗрдирд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдПрдХ рдореМрдЬреВрджрд╛ рд╢реАрд░реНрд╖ рд╣реИ, рдФрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдирд╣реАрдВ рд╣реИред

end = Point(19.125150,72.893218)
np = Point(19.12493833590478, 72.89314854771877)
expected = Point(19.124929, 72.893177)

print end.distance(np) # 0.000222767386696
print end.distance(expected) # 0.000224770994572

рдпрджрд┐ рдЖрдк рдирд┐рдХрдЯрддрдо рд╢реАрд░реНрд╖ рдХреЛ рдЦреЛрдЬрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд▓рд╛рдЗрдирд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдПрдХ рдорд▓реНрдЯреАрдкреЙрдЗрдВрдЯ рдЬреНрдпрд╛рдорд┐рддрд┐ рдореЗрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП, рдлрд┐рд░ nearest_points рдСрдкрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ (рдорд╛рдореВрд▓реА рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рддреНрд░реБрдЯрд┐ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ):

from shapely.ops import nearest_points
from shapely.geometry import MultiPoint
mp = MultiPoint(route)
print nearest_points(mp, end)[0] # POINT (19.124929 72.89317699999999)

рдЗрд╕ рдХреНрд╡реЗрд░реА рдХреЗ рд▓рд┐рдП рдореВрд▓ рд▓рд┐рдиреЗрд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдореВрд▓ рдмрд┐рдВрджреБ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖ рдХреЗ рдмреАрдЪ рдХреА рджреВрд░реА рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рдорд╛рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдзреАрдорд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдРрд╕рд╛ рд╣реИ рддреЛ рдЖрдкрдХреЛ rtree рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдХреНрд╡реЗрд░реА рдХреЛ рдмрд╣реБрдд рддреЗрдЬрд╝ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдирд┐рдХ рдЕрдиреБрдХреНрд░рдордг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:

http://toblerity.org/rtree/tutorial.html

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

рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛ рдмрд┐рдВрджреБ рдореВрд▓ рдмрд┐рдВрджреБ рдХреА рд░реЗрдЦрд╛ рдкрд░ рдирд┐рдХрдЯрддрдо рдмрд┐рдВрджреБ рд╣реИред рдирд┐рдХрдЯрддрдо рдмрд┐рдВрджреБ _not_ рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рд▓рд╛рдЗрдирд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдПрдХ рдореМрдЬреВрджрд╛ рд╢реАрд░реНрд╖ рд╣реИ, рдФрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдирд╣реАрдВ рд╣реИред

end = Point(19.125150,72.893218)
np = Point(19.12493833590478, 72.89314854771877)
expected = Point(19.124929, 72.893177)

print end.distance(np) # 0.000222767386696
print end.distance(expected) # 0.000224770994572

рдпрджрд┐ рдЖрдк рдирд┐рдХрдЯрддрдо рд╢реАрд░реНрд╖ рдХреЛ рдЦреЛрдЬрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд▓рд╛рдЗрдирд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдПрдХ рдорд▓реНрдЯреАрдкреЙрдЗрдВрдЯ рдЬреНрдпрд╛рдорд┐рддрд┐ рдореЗрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП, рдлрд┐рд░ nearest_points рдСрдкрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ (рдорд╛рдореВрд▓реА рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рддреНрд░реБрдЯрд┐ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ):

from shapely.ops import nearest_points
from shapely.geometry import MultiPoint
mp = MultiPoint(route)
print nearest_points(mp, end)[0] # POINT (19.124929 72.89317699999999)

рдЗрд╕ рдХреНрд╡реЗрд░реА рдХреЗ рд▓рд┐рдП рдореВрд▓ рд▓рд┐рдиреЗрд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдореВрд▓ рдмрд┐рдВрджреБ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖ рдХреЗ рдмреАрдЪ рдХреА рджреВрд░реА рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рдорд╛рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдзреАрдорд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдРрд╕рд╛ рд╣реИ рддреЛ рдЖрдкрдХреЛ rtree рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдХреНрд╡реЗрд░реА рдХреЛ рдмрд╣реБрдд рддреЗрдЬрд╝ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдирд┐рдХ рдЕрдиреБрдХреНрд░рдордг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:

http://toblerity.org/rtree/tutorial.html

рдУрд╣ рдареАрдХ рд╣реИ рдЖрдкрдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

@snorfalorpagus ред рдореИрдВ рдРрд╕рд╛ рдХреБрдЫ рдвреВрдВрдв рд░рд╣рд╛ рдерд╛ред рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рддреНрд░реБрдЯрд┐ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕реНрдорд╛рд░реНрдЯ рд╕реБрдЭрд╛рд╡? рдЗрд╕ рдЯреВрд▓ рдХреЗ рд╕рд╛рде рднреА

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

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

pvalsecc picture pvalsecc  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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

doctor-ian picture doctor-ian  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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

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