Вот на js накидал, вроде как работает даже на вогнутых многоугольниках
polygon - L.LatLng[]
point - L.LatLng
function MIN(a,b){return (a<b)?a:b;}
function MAX(a,b){return (a>b)?a:b;}
function isInPoly(polygon,point)
{
var i=1,N=polygon.length,isIn=false,
p1=polygon[0],p2;
for(;i<=N;i++)
{
p2 = polygon[i % N];
if (point.lng > MIN(p1.lng,p2.lng))
{
if (point.lng <= MAX(p1.lng,p2.lng))
{
if (point.lat <= MAX(p1.lat,p2.lat))
{
if (p1.lng != p2.lng)
{
xinters = (point.lng-p1.lng)*(p2.lat-p1.lat)/(p2.lng-p1.lng)+p1.lat;
if (p1.lat == p2.lat || point.lat <= xinters)
isIn=!isIn;
}
}
}
}
p1 = p2;
}
return isIn;
}