рдПрдХ WebGL рдорд╛рдирдЪрд┐рддреНрд░ рдкрд░ рдлрд╛рд╕реНрдЯ рдорд╛рд░реНрдХрд░ рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг

рдЫрд╡рд┐


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


рдкреНрд░рд╛рдЧрд┐рддрд┐рд╣рд╛рд╕


2016 рдореЗрдВ, 2GIS рдиреЗ рдЕрдкрдиреА рдкрд╣рд▓реА WebGL рдкрд░рд┐рдпреЛрдЬрдирд╛, рдлрд░реНрд╢: рдЗрдорд╛рд░рддреЛрдВ рдХреА 3 рдбреА рдордВрдЬрд┐рд▓ рдпреЛрдЬрдирд╛ рд╢реБрд░реВ рдХреАред


рдЫрд╡рд┐
рдиреЛрд╡реЛрд╕рд┐рдмрд┐рд░реНрд╕реНрдХ рд╢реЙрдкрд┐рдВрдЧ рд╕реЗрдВрдЯрд░ рдЖрднрд╛ рдХреЗ рдлрд░реНрд╢


рдлрд╝реНрд▓реЛрд░рд░реНрд╕ рдХреА рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж, рд╣рдорд╛рд░реА рдЯреАрдо рдиреЗ рд╡реЗрдмрдЧреЗрд▓ рдкрд░ рдПрдХ рдкреВрд░реНрдг рддреНрд░рд┐-рдЖрдпрд╛рдореА рдХрд╛рд░реНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рдЗрдВрдЬрди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ред рдЗрдВрдЬрди рдХреЛ рдирдП рд╕рдВрд╕реНрдХрд░рдг 2gis.ru рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЕрдм рд╡рд╣ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдмреАрдЯрд╛ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИред


рдЫрд╡рд┐
рд╡реЗрдмрдЬреАрдПрд▓ рдкрд░ рд▓рд╛рд▓ рд╡рд░реНрдЧ рдЦреАрдВрдЪрд╛ рдЧрдпрд╛ред рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдкреНрд▓рд╛рди рдЕрдм рд╕реАрдзреЗ рдореИрдк рдореЗрдВ рдПрдХреАрдХреГрдд рд╣реЛ рдЧрдП рд╣реИрдВред


рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдХрд╛рд░реНрдп


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


рдЫрд╡рд┐
рдпрджрд┐ рдиреЛрд╡реЛрд╕рд┐рдмрд┐рд░реНрд╕реНрдХ рдореЗрдВ рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдПрдХ рдмрд╛рд░ рдореЗрдВ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛


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


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


рди рдХреЗрд╡рд▓ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд▓рд┐рдП, рдмрд▓реНрдХрд┐ рдорд╛рдирдЪрд┐рддреНрд░ рдкрд░ рдЦреЛрдЬ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдорд╛рд░реНрдХрд░реЛрдВ рдХреЗ рд▓рд┐рдП рднреА рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЙрд╕реНрдХреЛ рдореЗрдВ "рд╕реНрдЯреЛрд░" рдХреА рдЦреЛрдЬ рдХрд░рддреЗ рд╕рдордп, 15,000 рд╕реЗ рдЕрдзрд┐рдХ рдкрд░рд┐рдгрд╛рдо рд╣реИрдВред рдЙрди рд╕рднреА рдХреЛ рдорд╛рдирдЪрд┐рддреНрд░ рдкрд░ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдирд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред


рдЫрд╡рд┐
рд╕рднреА рдорд╛рд╕реНрдХреЛ рдирдХреНрд╢реЗ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдХреЗ рдмрд┐рдирд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ


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


рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдорд╛рд░реНрдХрд░ рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдореИрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЗ рджрд┐рдЦрд╛рдКрдВрдЧрд╛, рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдордп рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг


  1. рд╕реНрдХреНрд░реАрди рдХреЗ рд╡рд┐рдорд╛рди рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рдорд╛рд░реНрдХрд░ рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд░реЗрдВ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рдзреНрдп рдЧрдгрдирд╛ рдХрд░реЗрдВ - рдЖрдпрддрд╛рдХрд╛рд░ рдХреНрд╖реЗрддреНрд░ рдЬреЛ рдЗрд╕реЗ рд╕реНрдХреНрд░реАрди рдкрд░ рд░рдЦрддрд╛ рд╣реИред
  2. рдорд╛рд░реНрдХрд░реЛрдВ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╕реЗ рдХреНрд░рдордмрджреНрдз рдХрд░реЗрдВред
  3. рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдорд╛рд░реНрдХрд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рд╕реНрдХреНрд░реАрди рдкрд░ рд░рдЦреЗрдВ, рдЕрдЧрд░ рдпрд╣ рдЙрд╕рдХреЗ рд╕рд╛рдордиреЗ рд░рдЦреЗ рдЧрдП рдЕрдиреНрдп рдорд╛рд░реНрдХрд░реЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдЪреНрдЫреЗрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

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


рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ рдкреИрд░рд╛рдЧреНрд░рд╛рдл 3 рдореЗрдВ рд╣реИ: рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдХреА рдЧрдгрдирд╛ рдХрд╛ рд╕рдордп рдмрд╣реБрдд рд╣рдж рддрдХ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


рдорд╛рд░реНрдХрд░реЛрдВ рдХреЗ рдмреАрдЪ рдЪреМрд░рд╛рд╣реЛрдВ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХреБрдЫ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:


  1. рд╕реНрдХреНрд░реАрди рдкрд░ рдЬреЛрдбрд╝реЗ рдЧрдП рдорд╛рд░реНрдХрд░реЛрдВ рдХреА рд╕реАрдорд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред
  2. рд╕реНрдХреНрд░реАрди рдкрд░ рдПрдХ рдорд╛рд░реНрдХрд░ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ insert(marker) рд╡рд┐рдзрд┐ рд╣реИред
  3. рд╕реНрдХреНрд░реАрди рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬреЛрдбрд╝реЗ рдЧрдП рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдЪреМрд░рд╛рд╣реЗ рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдХрд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ collides(marker) рд╡рд┐рдзрд┐ред

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


 interface Marker { minX: number; maxX: number; minY: number; maxY: number; } 

рд╡рд┐рдЪрд╛рд░ рдХрд┐рдП рдЧрдП рд╕рднреА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реЛрдВрдЧреЗ:


 interface CollisionDetector { insert(item: Marker): void; collides(item: Marker): boolean; } 

рдкреНрд░рджрд░реНрд╢рди рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдорд╛рдкрд╛ рдЬрд╛рдПрдЧрд╛:


 for (const marker of markers) { if (!impl.collides(marker)) { impl.insert(marker); } } 

markers рд╕рд░рдгреА рдореЗрдВ 1920x1080 рдЖрдХрд╛рд░ рдХреЗ рд╡рд┐рдорд╛рди рдореЗрдВ 100,000 30x50 рддрддреНрд╡ рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ рд░рдЦреЗ рдЬрд╛рдПрдВрдЧреЗред


рдкреНрд░рджрд░реНрд╢рди 2012 рдореИрдХрдмреБрдХ рдПрдпрд░ рдкрд░ рдорд╛рдкрд╛ рдЬрд╛рдПрдЧрд╛ред


рд▓реЗрдЦ рдореЗрдВ рджрд┐рдП рдЧрдП рдкрд░реАрдХреНрд╖рдг рдФрд░ рдХреЛрдб рдЙрджрд╛рд╣рд░рдг GitHub рдкрд░ рднреА рдкреЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВ ред


Naive рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╡рд┐рдХрд▓реНрдк рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдЬрдм рдорд╛рд░реНрдХрд░ рдХреЛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЪрдХреНрд░ рдореЗрдВ рджреВрд╕рд░реЛрдВ рдХреЗ рд╕рд╛рде рдЪреМрд░рд╛рд╣реЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИред


 class NaiveImpl implements CollisionDetector { private markers: Marker[]; constructor() { this.markers = []; } insert(marker: Marker): void { this.markers.push(marker); } collides(candidate: Marker): boolean { for (marker of this.markers) { if ( candidate.minX <= marker.maxX && candidate.minY <= marker.maxY && candidate.maxX >= marker.minX && candidate.maxY >= marker.minY ) { return true; } } return false; } } 

100,000 рдорд╛рд░реНрдХрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдЧрдгрдирд╛ рд╕рдордп: 420 рдПрдордПрд╕ ред рдмрд╣реБрдд рдЬреНрдпрд╛рджрд╛ред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдХреА рдЧрдгрдирд╛ рдПрдХ рд╡реЗрдм рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдореЗрдВ рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдореБрдЦреНрдп рдзрд╛рдЧрд╛ рдХреЛ рдмреНрд▓реЙрдХ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рддрд░рд╣ рдХреА рджреЗрд░реА рдЖрдВрдЦ рд╕реЗ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реЛрдЧреА, рдЦрд╛рд╕рдХрд░ рдЬрдм рд╕реЗ рдпрд╣ рдСрдкрд░реЗрд╢рди рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдб рдЖрдВрджреЛрд▓рди рдХреЗ рдмрд╛рдж рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрдордЬреЛрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рд╡рд╛рд▓реЗ рдореЛрдмрд╛рдЗрд▓ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░, рджреЗрд░реА рдФрд░ рднреА рдЕрдзрд┐рдХ рд╣реЛ рд╕рдХрддреА рд╣реИред


рдЖрд░-рдЯреНрд░реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


рдЪреВрдВрдХрд┐ рдПрдХ рдирд┐рд╖реНрдХреНрд░реАрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдорд╛рд░реНрдХрд░ рдХреЛ рдкрд┐рдЫрд▓реЗ рд╕рднреА рдХреЗ рд╕рд╛рде рдЪреМрд░рд╛рд╣реЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рдЬрдЯрд┐рд▓рддрд╛ рджреНрд╡рд┐рдШрд╛рдд рд╣реИред рдЖрдк рдЖрд░-рдЯреНрд░реА рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдХреЗ рдЗрд╕реЗ рд╕реБрдзрд╛рд░ рд╕рдХрддреЗ рд╣реИрдВред R- рдЯреНрд░реА рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд░реВрдк рдореЗрдВ, RBush рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд▓реЗрдВ:


 import * as rbush from 'rbush'; export class RTreeImpl implements CollisionDetector { private tree: rbush.RBush<Marker>; constructor() { this.tree = rbush(); } insert(marker: Marker): void { this.tree.insert(marker); } collides(candidate: Marker): boolean { return this.tree.collides(candidate); } } 

100,000 рдорд╛рд░реНрдХрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдЧрдгрдирд╛ рд╕рдордп: 173 рдПрдордПрд╕ ред рдХрд╛рдлреА рдмреЗрд╣рддрд░ рд╣реИред рд╣рдордиреЗ рдлреНрд▓реЛрд░рд░реНрд╕ рдореЗрдВ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ (рдпрд╣ рдореЗрд░реЗ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛)ред


рдЫрд╡рд┐
рдЖрд░-рдЯреНрд░реА рдореЗрдВ рдЕрдВрдХреЛрдВ рдХреЗ рднрдВрдбрд╛рд░рдг рдХрд╛ рджреГрд╢реНрдпред рдЖрдпрддреЛрдВ рдореЗрдВ рд╡рд┐рдорд╛рди рдХрд╛ рдкрджрд╛рдиреБрдХреНрд░рдорд┐рдд рд╡рд┐рднрд╛рдЬрди рдЖрдкрдХреЛ рдЦреЛрдЬ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рд╕рдВрдХреАрд░реНрдг рдХрд░рдиреЗ рдФрд░ рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЫрд╛рдБрдЯрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ


рдЯрдХрд░рд╛рд╡ рдмрдлрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


рдПрдХ рдЗрдорд╛рд░рдд рдХреА рдПрдХ рдпреЛрдЬрдирд╛ рдХреЛ рдЪрд┐рддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рдирдХреНрд╢рд╛ рдЦреАрдВрдЪрдирд╛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдХрд╛рд░реНрдп рд╣реИред рдпрд╣ рднреА рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдореЗрдВ рд╣реА рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рджреБрдирд┐рдпрд╛ рдХреЗ рд╕рдмрд╕реЗ рдмрдбрд╝реЗ рд╢реЙрдкрд┐рдВрдЧ рд╕реЗрдВрдЯрд░реЛрдВ рдореЗрдВ, 1,000 рд╕рдВрдЧрдарди рд╢рд╛рдпрдж рд╣реА рдХрднреА рдПрдХ рд╣реА рдордВрдЬрд┐рд▓ рдкрд░ рд╣реЛрдВред рдЗрд╕реА рд╕рдордп, рдПрдХ рдмрдбрд╝реЗ рд╢рд╣рд░ рдореЗрдВ рдПрдХ рд╕рд░рд▓ рдЦреЛрдЬ рдХреНрд╡реЗрд░реА рд╣рдЬрд╛рд░реЛрдВ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рджрд╕рд┐рдпреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреА рд╣реИред


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


 class CollisionBufferByteImpl implements CollisionDetector { private buffer: Uint8Array; private height: number; constructor(width: number, height: number) { this.buffer = new Uint8Array(width * height); this.height = height; } insert(marker: Marker): void { const { minX, minY, maxX, maxY } = marker; for (let i = minX; i < maxX; i++) { for (let j = minY; j < maxY; j++) { buffer[i * this.height + j] = 1; } } } collides(candidate: Marker): boolean { const { minX, minY, maxX, maxY } = candidate; for (let i = minX; i < maxX; i++) { for (let j = minY; j < maxY; j++) { if (buffer[i * this.height + j]) { return true; } } } return false; } } 

100,000 рдорд╛рд░реНрдХрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдЧрдгрдирд╛ рд╕рдордп: 46 рдПрдордПрд╕ ред


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


рдЕрдиреБрдХреВрд▓рд┐рдд рдЯрдХрд╕рд╛рд▓ рдмрдлрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг


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


рд╕реНрд░реЛрдд рдХреЛрдб
 export class CollisionBufferBitImpl implements CollisionDetector { private width: number; private height: number; private buffer: Uint8Array; constructor(width: number, height: number) { this.width = Math.ceil(width / 8) * 8; this.height = height; this.buffer = new Uint8Array(this.width * this.height / 8); } insert(marker: Marker): void { const { minX, minY, maxX, maxY } = marker; const { width, buffer } = this; for (let j = minY; j < maxY; j++) { const start = j * width + minX >> 3; const end = j * width + maxX >> 3; if (start === end) { buffer[start] = buffer[start] | (255 >> (minX & 7) & 255 << (8 - (maxX & 7))); } else { buffer[start] = buffer[start] | (255 >> (minX & 7)); for (let i = start + 1; i < end; i++) { buffer[i] = 255; } buffer[end] = buffer[end] | (255 << (8 - (maxX & 7))); } } } collides(marker: Marker): boolean { const { minX, minY, maxX, maxY } = marker; const { width, buffer } = this; for (let j = minY; j < maxY; j++) { const start = j * width + minX >> 3; const end = j * width + maxX >> 3; let sum = 0; if (start === end) { sum = buffer[start] & (255 >> (minX & 7) & 255 << (8 - (maxX & 7))); } else { sum = buffer[start] & (255 >> (minX & 7)); for (let i = start + 1; i < end; i++) { sum = buffer[i] | sum; } sum = buffer[end] & (255 << (8 - (maxX & 7))) | sum; } if (sum !== 0) { return true; } } return false; } } 

100,000 рдорд╛рд░реНрдХрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдЧрдгрдирд╛ рд╕рдордп: 16 рдПрдордПрд╕ ред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рддрд░реНрдХ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдЦреБрдж рдХреЛ рд╕рд╣реА рдард╣рд░рд╛рддреА рд╣реИ рдФрд░ рд╣рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдХреА рдЧрдгрдирд╛ рдореЗрдВ рд▓рдЧрднрдЧ рддреАрди рдЧреБрдирд╛ рддреЗрдЬреА рд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред


рдЯрдХрд░рд╛рд╡ рдмрдлрд░ рд╕реАрдорд╛рдПрдВ


рдпрд╣ рд╕рдордЭрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЯрдХреНрдХрд░ рдмрдлрд░ рдЖрд░-рдЯреНрд░реА рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдирд╣реАрдВ рд╣реИред рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рдХрдо рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ рдФрд░ рдЕрдзрд┐рдХ рдкреНрд░рддрд┐рдмрдВрдз рд╣реИрдВ:


  1. рдЖрдк рд╕рдордЭ рдирд╣реАрдВ рд╕рдХрддреЗ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╛рд░реНрдХрд░ рдХрд┐рд╕рдХреЗ рд╕рд╛рде рдЕрдВрддрд░ рдХрд░рддрд╛ рд╣реИред рдмрдлрд░ рдХреЗрд╡рд▓ рдЙрди рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд┐рдХреНрд╕реЗрд▓ рд╡реНрдпрд╕реНрдд рд╣реИрдВ рдФрд░ рдЬреЛ рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдПрдХ рдСрдкрд░реЗрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ рдЬреЛ рдорд╛рд░реНрдХрд░реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджреЗрддрд╛ рд╣реИ рдЬреЛ рджрд┐рдП рдЧрдП рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдЪреНрдЫреЗрдж рдХрд░рддрд╛ рд╣реИред
  2. рдкрд╣рд▓реЗ рдЬреЛрдбрд╝реЗ рдЧрдП рдорд╛рд░реНрдХрд░ рдХреЛ рд╣рдЯрд╛ рдирд╣реАрдВ рд╕рдХрддрд╛ред рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдкрд┐рдХреНрд╕реЗрд▓ рдореЗрдВ рдХрд┐рддрдиреЗ рдорд╛рд░реНрдХрд░ рдкрд░ рдмрдлрд╝рд░ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдмрдлрд░ рд╕реЗ рдПрдХ рдорд╛рд░реНрдХрд░ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред
  3. рддрддреНрд╡реЛрдВ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдЙрдЪреНрдЪ рд╕рдВрд╡реЗрджрдирд╢реАрд▓рддрд╛ред рдпрджрд┐ рдЖрдк рдорд╛рд░реНрдХрд░реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЯрдХрд░рд╛рд╡ рдмрдлрд░ рдореЗрдВ рдкреВрд░реА рд╕реНрдХреНрд░реАрди рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рджрд░реНрд╢рди рдирд╛рдЯрдХреАрдп рд░реВрдк рд╕реЗ рдЧрд┐рд░ рдЬрд╛рдПрдЧрд╛ред
  4. рдПрдХ рд╕реАрдорд┐рдд рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕реЗ рдмрдирд╛рддреЗ рд╕рдордп рдмрдлрд░ рдХрд╛ рдЖрдХрд╛рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдореЗрдВ рдПрдХ рдорд╛рд░реНрдХрд░ рд░рдЦрдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ рдЬреЛ рдЗрд╕ рдЖрдХрд╛рд░ рд╕реЗ рдкрд░реЗ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЙрди рдорд╛рд░реНрдХрд░реЛрдВ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬреЛ рд╕реНрдХреНрд░реАрди рдкрд░ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВред

рдпреЗ рд╕рднреА рдкреНрд░рддрд┐рдмрдВрдз рдорд╛рд░реНрдХрд░ рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдирд╣реАрдВ рдХрд░рддреЗ рдереЗред рдЕрдм рдпрд╣ рд╡рд┐рдзрд┐ 2gis.ru рдХреЗ рдмреАрдЯрд╛ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдорд╛рд░реНрдХрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИред


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


рдирд┐рд╖реНрдХрд░реНрд╖


рдЫрд╡рд┐
рд▓реЗрдЦ рдЙрд╕ рдкрде рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдЬреЛ рд╣рдо рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдЕрдм рддрдХ рдЧрдП рдереЗред


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


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


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

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


All Articles