Вместо - fd.append( 'userfile', $('#userfile')[0].files[0]);
Использование - fd.append( 'file', $('#userfile')[0].files[0]);
Как уже упоминалось, многоугольник с отверстиями можно представить как внешнюю границу плюс ноль или более внутренних границ, все они не пересекаются *. Если вы используете ненулевое число витков для определения внутренних / внешних границ, не забудьте указать внутренние границы в направлении, противоположном внешним границам (против часовой стрелки для внешних и по часовой стрелке для внутренних или наоборот), чтобы контурные интегралы внутри отверстий равны нулю.
К вашему сведению, этот вид определения / представления был формализован в спецификации OpenGIS Simple Features Specification ( PDF ).
Что касается представления:
I Вероятно, у нас есть массив ячеек из K Nx2 матриц, где первый элемент в массиве ячеек является внешней границей, а остальные элементы (если есть) в массиве ячеек являются внутренними границами. Я бы использовал массив ячеек, потому что на каждой границе может быть не одинаковое количество точек. часть инициативы инструментов разработки моделей
Указатели на другие инструменты, поддерживающие OCL (не обязательно с открытым исходным кодом), здесь: http://modeling-languages.com/content/list-ocl-tools
Также вам может быть интересно взглянуть на другие инструменты, поддерживающие проверку синтаксиса OCL, например Octopus , созданный (?) Джосом Вармером и Аннеке Клеппе, которые являются авторы спецификаций OCL.