рдПрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдЧрдо рдирд┐рдпрдВрддреНрд░рдг рдХреА рд╕рдорд╕реНрдпрд╛ рдереАред
рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд░реВрд╕ рдХреЗ рдХрд┐рд╕реА рднреА рдХреНрд╖реЗрддреНрд░ рд╕реЗ рдЙрд╕рдХреЗ рдЬреАрдкреАрдПрд╕ рд╕рдордиреНрд╡рдп рджреНрд╡рд╛рд░рд╛ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЙрддреНрдкрдиреНрди рд╣реБрдИ
Google API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реА рдЪреАрдЬ рд╣рдордиреЗ рд╢реБрд░реВ рдХреА рд╣реИ,
рд▓реМрдЯреЗ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдирд╛рдо рджрд░реНрдЬ рдХрд░рдиреЗ рдФрд░ рдкрд╣реБрдБрдЪ рдХреЗ рд▓рд┐рдП рднреБрдЧрддрд╛рди рдХрд░рдиреЗ (рдЕрдиреБрд░реЛрдзреЛрдВ рдкрд░ рд╕реАрдорд╛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП) рдХреЗ рдмрд╛рдж, рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд┐рдпрд╛ред
рдФрд░ рд╕рдм рдХреБрдЫ рдареАрдХ рдерд╛ рдЬрдм рддрдХ рдХрд┐ Google рдиреЗ рдЬрд╛рд░реА рдХрд┐рдпрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдкрд╣рд▓реЗ рдерд╛: рдореЛрд╕реНрдХреЛрд╡реНрд╕реНрдХрд╛рдпрд╛ рдУрдмреНрд▓рд╛рд╕реНрдЯ ', рдпрд╣ рдореЙрд╕реНрдХреЛ рдУрдмреНрд▓рд╛рд╕реНрдЯ рдмрди рдЧрдпрд╛'
рддрдм рдпрд╣ Google рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдЕрдкрдиреЗ рджрдо рдкрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рдкрд╣рд▓реА рдмрд╛рдд рдЬреЛ рдорди рдореЗрдВ рдЖрдИ рд╡рд╣ рдереА: рд▓реМрдЯреЗ рдпреИрдВрдбреЗрдХреНрд╕ рдбреЗрдЯрд╛ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ (рдпрд╛рдВрдбреЗрдХреНрд╕ рдореИрдкреНрд╕ рд╕рдВрд╕реНрдХрд░рдг 1.x рдореЗрдВ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдореЙрдбреНрдпреВрд▓ рдерд╛)
рддреЛ рдЙрдиреНрд╣реЛрдВрдиреЗ рдХрд┐рдпрд╛, рдпрд╣ 2 рдЯреЗрдмрд▓ рдирд┐рдХрд▓рд╛ред
рдПрдХ рдореЗрдВ, рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдирд╛рдо рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЧрдП рдереЗ, рджреВрд╕рд░реЗ рдореЗрдВ, рдЙрд╕ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдмрд╣реБрднреБрдЬ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХред (83 - рдХреНрд╖реЗрддреНрд░ рдФрд░ 8500 - рдЕрдВрдХ)
рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рдпрд╛ рдЧрдпрд╛ рдХрд┐ рдХреЛрдИ рдмрд┐рдВрджреБ рдмрд╣реБрднреБрдЬ рдореЗрдВ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдХреЛрдб рдХреЛ C рд╕реЗ PHP рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рд╕рд┐рд░реНрдл рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
$ sx, $ sy - рдЙрд╕ рдмрд┐рдВрджреБ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдЬреЛ рд╣рдо рдЬрд╛рдБрдЪ рд░рд╣реЗ рд╣реИрдВ
$ рдХреЛрд░реНрдбреНрд╕ - рдПрдХ рдЙрддреНрддрд▓ рдмрд╣реБрднреБрдЬ рдХреЗ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ (рдЯреНрд░реИрд╡рд░реНрд╕рд▓ рдСрд░реНрдбрд░ рдореЗрдВ рдХреНрд░рдордмрджреНрдз):
$ рдХреЛрд░реНрдбреНрд╕ = рд╕рд░рдгреА (
рд╕рд░рдгреА ('x' => 66.6634, 'y' => '66 .4433 ')
рдФрд░ рдЗрд╕реА рддрд░рд╣ред
)
$ x, $ y - рд╕рд░рдгреА рдореЗрдВ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рдирд╛рдо
public static function into_poly($sx, $sy, &$coords, $x='x', $y='y') { Profiler::start('Detect collision', __FUNCTION__); $pj=0; $pk=0; $wrkx=0; $yu = 0; $yl = 0; $n = count($coords); for ($pj=0; $pj<$n; $pj++) { $yu = $coords[$pj][$y]>$coords[($pj+1)%$n][$y]?$coords[$pj][$y]:$coords[($pj+1)%$n][$y]; $yl = $coords[$pj][$y]<$coords[($pj+1)%$n][$y]?$coords[$pj][$y]:$coords[($pj+1)%$n][$y]; if ($coords[($pj+1)%$n][$y] - $coords[$pj][$y]) $wrkx = $coords[$pj][$x] + ($coords[($pj+1)%$n][$x] - $coords[$pj][$x])*($sy - $coords[$pj][$y])/($coords[($pj+1)%$n][$y] - $coords[$pj][$y]); else $wrkx = $coords[$pj][$x]; if ($yu >= $sy) if ($yl < $sy) { if ($sx > $wrkx) $pk++; if (abs($sx - $wrkx) < 0.00001) return 1; } if ((abs($sy - $yl) < 0.00001) && (abs($yu - $yl) < 0.00001) && (abs(abs($wrkx - $coords[$pj][$x]) + abs($wrkx - $coords[($pj+1)%$n][$x]) - abs($coords[$pj][$x] - $coords[($pj+1)%$n][$x])) < 0.0001)) return 1; } if ($pk%2) return 1; else return 0; }
рдХреЙрд▓ рдЙрджрд╛рд╣рд░рдг:
$coords = array(
array('lng'=> 66.6634, 'lat' => '66.4433'),
array('lng'=> 66.6534, 'lat' => '66.4433'),
array('lng'=> 66.6434, 'lat' => '66.4433'),
array('lng'=> 66.6334, 'lat' => '66.4433'),
);
$in = into_poly(66.4455, 66.2255, &$coords, $x='lng', $y='lat');
рдпрджрд┐ рдмрд┐рдВрджреБ рдмрд╣реБрднреБрдЬ рдХреЗ рдЕрдВрджрд░ рд╕реНрдерд┐рдд рд╣реИ, рддреЛ рд╕рд╣реА рд╣реИред
рдЕрдм рдХреЗрд╡рд▓ рдЙрди рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд▓рд┐рдП рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рдХреЗ рд╣рдо рдЙрддреНрддрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред
рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рд░реВрд╕ рдХреЗ рд▓рд┐рдП рдХреНрд╖реЗрддреНрд░реАрдп рд╕реАрдорд╛рдУрдВ рдХреЗ 8500 рдЕрдВрдХ рдмрд╣реБрдд рдХрдо рд╣реИрдВред рдкреНрд░рд╕рд╛рд░ + - 50 рдХрд┐рдореА рд╣реЛрдЧрд╛
рдЕрдзрд┐рдХ рд╕рдЯреАрдХрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХреНрд╖реЗрддреНрд░реАрдп рд╕реАрдорд╛рдУрдВ рдХреЗ рдЕрдзрд┐рдХ рдмрд┐рдВрджреБрдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╡рд┐рд╢рд╛рд▓ рд╡рд┐рд╕реНрддрд╛рд░ рдХреА рдЦреЛрдЬ рдХрд░рддреЗ рд╣реБрдП, рдПрдХ рд╕рдВрд╕рд╛рдзрди рдкрд╛рдпрд╛ рдЧрдпрд╛ рдХрд┐ рдпреЗ рдЕрдВрдХ рд╣рдореЗрдВ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рджреЗрддреЗ рд╣реИрдВ:
gis-lab.info/qa/rusbounds-rosreestr.html (рдЖрдкрдХреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕рд╛рд╣реА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж)
рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, рдореИрдВрдиреЗ KML рдкреНрд░рд╛рд░реВрдк рдЪреБрдирд╛ (рд╢рд╛рдпрдж рдЗрд╕рд▓рд┐рдП рдХрд┐ рдореИрдВ рдЬрд╛рдирддрд╛ рдерд╛ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рдЦреЛрд▓рд╛ рдЬрд╛рдП - рдпрд╣ рдПрдХ рдкреНрд░рд╛рд░реВрдк рд╣реИ рдЬреЛ Google рдзрд░рддреА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ)
рдореИрдВрдиреЗ рдбреЗрдЯрд╛ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдФрд░ рдЕрдм рдЯреЗрдмрд▓реНрд╕ рдлреЗрдЯ рд░рд╣реЗ рд╣реИрдВред рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреА рд╕реАрдорд╛рдУрдВ рдХреЗ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╡рд╛рд▓реА рдПрдХ рддрд╛рд▓рд┐рдХрд╛ 620,000 рдЕрдВрдХ (34 mb) рдмрди рдЧрдИ рд╣реИ
рдЕрдм рдпрджрд┐ рдЖрдк рдкреБрд░рд╛рдиреЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдмрд┐рдВрджреБ рдХреНрд╖реЗрддреНрд░ рдмрд╣реБрднреБрдЬ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ - рдкреБрд░рд╛рдиреЗ рдХреЛрд░ 2 рдбреБрдУ рдкрд░ - рд▓рдЧрднрдЧ 70 рд╕реЗрдХрдВрдбред
рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВред рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рд╕реНрдХреЛ:
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 2,064 рдмрд╣реБрднреБрдЬ рдмрд┐рдВрджреБ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрдИ рдмрд╣реБрднреБрдЬ) рд╣реИрдВ:

рд▓реЗрдХрд┐рди рдЕрдм рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЗрд╕ рд╕рдВрднрд╛рд╡рдирд╛ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдХрд┐ рдмрд┐рдВрджреБ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдВрдХреЛрдВ рдХреЗ рдЕрдиреБрд░реЗрдЦрдг рдФрд░ рдЙрддреНрддрд▓ рдмрд╣реБрднреБрдЬ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗред
algolist.manual.ruрдпрд╣рд╛рдБ PHP рдореЗрдВ рдЗрд╕рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ:
public static function sort_points($mass, $x = 'x', $y = 'y'){ $current=0; $next=0; $p1 = $mass[0]; $mass2 = array();
рдЖрдЙрдЯрдкреБрдЯ рдкрд░, рд╣рдореЗрдВ рдЙрддреНрддрд▓ рдмрд╣реБрднреБрдЬ рдХреЗ рдмрд┐рдВрджреБрдУрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдорд┐рд▓рддреА рд╣реИред
рдорд╛рд╕реНрдХреЛ рдХреЗ рд▓рд┐рдП; 19 рдЕрдВрдХ:

рдЖрдХреГрддрд┐ рдореЗрдВ, рдкрд╣рд▓реА рдкрд░рдд рдореЙрд╕реНрдХреЛ + рдХреЗ рд╕рднреА 2500 рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдЪрд┐рдиреНрд╣рд┐рдд рдХрд░рддреА рд╣реИ рдФрд░ рдЬреЛ рдкрд░рдд рд╣рдо рдЙрддреНрддрд▓ рдмрд╣реБрднреБрдЬ рдХреА рдЧрдгрдирд╛ рдХреЗ рдмрд╛рдж рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред
рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдХреНрд╖реЗрддреНрд░ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВрдЧреЗред
рдЕрдм рд╣рдо рдЕрдкрдиреЗ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдкрд░рд┐рд╖реНрдХреГрдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рдкрд╣рд▓реЗ рдЗрд╕ рд╕рдВрднрд╛рд╡рдирд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдмрд┐рдВрджреБ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЭреВрда рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рдРрд╕реЗ рдХрдИ рдХреНрд╖реЗрддреНрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдм, рд╕рднреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЙрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓ рджреЗрдВрдЧреЗ рдЬрд┐рдирдореЗрдВ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдПрдХ рдмрд┐рдВрджреБ рдЭреВрда рд╣реИ, рдЬреЛ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред
рдХреБрд▓: рдХрдордЬреЛрд░ рдХреЛрд░ 2 рдбреБрдУ рдкрд░ 0.177 рд╡рд░реНрдЧ
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рдФрд░ рдХрдард┐рдирд╛рдИ рд╣реИ - рдпреЗ рдПрдиреНрдХреНрд▓реЗрд╡ рд╣реИрдВ (рдорд╛рд╕реНрдХреЛ рдореЙрд╕реНрдХреЛ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдЕрдВрджрд░ рд╕реНрдерд┐рдд рд╣реИ, рдкреАрдЯрд░ рдХреА рддрд░рд╣, рдпрд╣ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдкрд╣рд▓реЗ рдпрд╣ рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рдмрд┐рдВрджреБ рдореЙрд╕реНрдХреЛ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ, рдФрд░ рдлрд┐рд░ рдореЙрд╕реНрдХреЛ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ)