Можно ли сгладить линии/ребра для многоугольника? В настоящее время он очень резкий и угловатый, и было бы здорово, если бы эти углы имели кривизну. Есть идеи?API Карт Google V3 - многоугольники SMOOTHED
2
A
ответ
0
Добавить дополнительные очки в ваш многоугольник. Чем больше точек нанесено, тем более постепенной будет кривая.
+0
Но тогда вам нужно перетащить каждую добавленную точку в ее новое местоположение вручную. Лучше использовать какой-то алгоритм (было бы неплохо, если бы у Maps API был встроенный). – Fraggle
0
Вот алгоритм сглаживания на основе BSPLINE, который работал для меня на Android вдохновлен https://johan.karlsteen.com/2011/07/30/improving-google-maps-polygons-with-b-splines/
public List<LatLng> bspline(List<LatLng> poly) {
if (poly.get(0).latitude != poly.get(poly.size()-1).latitude || poly.get(0).longitude != poly.get(poly.size()-1).longitude){
poly.add(new LatLng(poly.get(0).latitude,poly.get(0).longitude));
}
else{
poly.remove(poly.size()-1);
}
poly.add(0,new LatLng(poly.get(poly.size()-1).latitude,poly.get(poly.size()-1).longitude));
poly.add(new LatLng(poly.get(1).latitude,poly.get(1).longitude));
Double[] lats = new Double[poly.size()];
Double[] lons = new Double[poly.size()];
for (int i=0;i<poly.size();i++){
lats[i] = poly.get(i).latitude;
lons[i] = poly.get(i).longitude;
}
double ax, ay, bx, by, cx, cy, dx, dy, lat, lon;
float t;
int i;
List<LatLng> points = new ArrayList<>();
// For every point
for (i = 2; i < lats.length - 2; i++) {
for (t = 0; t < 1; t += 0.2) {
ax = (-lats[i - 2] + 3 * lats[i - 1] - 3 * lats[i] + lats[i + 1])/6;
ay = (-lons[i - 2] + 3 * lons[i - 1] - 3 * lons[i] + lons[i + 1])/6;
bx = (lats[i - 2] - 2 * lats[i - 1] + lats[i])/2;
by = (lons[i - 2] - 2 * lons[i - 1] + lons[i])/2;
cx = (-lats[i - 2] + lats[i])/2;
cy = (-lons[i - 2] + lons[i])/2;
dx = (lats[i - 2] + 4 * lats[i - 1] + lats[i])/6;
dy = (lons[i - 2] + 4 * lons[i - 1] + lons[i])/6;
lat = ax * Math.pow(t + 0.1, 3) + bx * Math.pow(t + 0.1, 2) + cx * (t + 0.1) + dx;
lon = ay * Math.pow(t + 0.1, 3) + by * Math.pow(t + 0.1, 2) + cy * (t + 0.1) + dy;
points.add(new LatLng(lat, lon));
}
}
return points;
}
Смежные вопросы
- 1. API Карт Google v3
- 2. API Карт Google V3 Omnibox
- 3. API Карт Google v3 - maxZoomService
- 4. API Карт Google V3: fromContainerPixelToLatLng
- 5. Rails API Карт Google V3
- 6. API Карт Google v3 - Геокодирование
- 7. API Карт Google V3 Чтение файла KML
- 8. Не отображен маркер карт Google (API Карт Google v3)
- 9. MarkerLight для API Карт Google v3
- 10. REQUEST_DENIED API Карт Google v3 Ошибка мест
- 11. Необъяснима дополнительная полилиния - API Карт Google v3
- 12. API Карт Google v3/Получить близлежащие улицы
- 13. API Карт Google v3 ... не мобильный?
- 14. API Карт Google v3 - Как указать «VehicleType»
- 15. API Карт Google V3 Закрытие InfoBox
- 16. Как начать с API Карт Google V3.
- 17. Карты добавления/обновления API Карт Google (v3)
- 18. API Карт Google V3 - управление полилинией
- 19. Удалить маркер из API Карт Google V3
- 20. API Карт Google не v3 показывать маркеры
- 21. API Карт Google v3: Диспетчер рисования
- 22. API Карт Google v3 getPanoramaByLocation (StreetView)
- 23. Маркер API Google Карт Javascript v3
- 24. API Карт Google v3 Для цикла Trouble
- 25. API Карт Google v3 - сектор круга
- 26. Геокодирование с использованием API Карт Google v3?
- 27. Графические маркеры в API Карт Google V3
- 28. API Карт Google v3 - Карта не загружается
- 29. API Карт Google v3 и геокодирование
- 30. API Карт Google v3 удалить все полилинии
Я в этом нуждаются тоже так, дайте мне знать, если вы нашли хороший способ сделать это. Я предполагаю, что вам нужно передать массив точек (вершины полигона, который был отображен), в алгоритм сглаживания/подгонки кривой, который затем сгенерировал бы новый набор точек (более вероятный, чем исходный набор), который вы можете отобразить на карта. – Fraggle