Это даст результат между 0 и n - 1 как для положительных, так и для отрицательных значений x:
((x % n) + n) % n
Для Вашего второго вопроса: Вам нужен Алгоритм Обобщения Douglas-Peucker
Для Вашего первого вопроса, мог Вы вычислять область конкретного полигона и связывать каждый уровень масштабирования с конкретной минимальной областью, поэтому как Вы увеличиваете масштаб, или полигон исчезает, и маркеры появляются в зависимости от уровня масштабирования.
Для второго вопроса я использовал бы предложение Mark Bessey.
Я не знаю много aobut KML, но я думаю, что обычное решение подвергнуть сомнению № 2 включает итерацию по точкам и удаление любых линейных сегментов под определенным размером. Это вызовет некоторые "неудачные" эффекты в некоторых случаях, но это относительно быстро и легко сделать.
Я рекомендовал бы 2 вещи: - вычисляют и комбинируют полигоны, которые затрагивают. Это включает БОЛЬШУЮ обработку и твердую математику, но я сделал ее так, я знаю, что это возможно. - Создают Ваше собственное наложение вместо того, чтобы использовать KML в формате PNG, в то время как Вы комбинируете их в предыдущем предложении. Необходимо будет создать МНОГО PNGs, но это сверкает быстро на клиенте.
Удача :)
Мне было нужно решение Вашего вопроса о № 2 немного назад и после рассмотрения нескольких доступных алгоритмов упрощения строки, я создал свое собственное.
Процесс прост, и это, кажется, работает хорошо, хотя это может быть немного медленно, если Вы не реализуете его правильно:
P[0..n]
Ваш массив точек, которым Позволяют T[n]
будьте определены как треугольник, сформированный точками P[n-1], P[n], P[n+1]
Max
число очков, до которого Вы пытаетесь уменьшить эту строку.
T[1..n-1]
в наборе.T[i]
с самой маленькой областьюP[i]
по существу сглаживать треугольникT[n-1], T[n+1]
Max