2016-12-09 4 views
3

В OpenLayers я использую ol.style.Text, чтобы добавить текстовую метку к полигонам федеральных штатов. Государства имеют имена разной длины, а также многоугольники разных размеров. Это выглядит следующим образом:Только печатать ol.style.Text для полигона, если текстовая метка находится внутри его геометрии

enter image description here

Можно ли печатать только текст маркера, если он помещается внутри своего многоугольника (например, после масштабирования)? Например, в приведенном выше примере Гессен, Тюринген, Саксония и Бавария будут напечатаны, но Rheinland-Pfalz, Saarland и Baden-Württemberg будут опущены, потому что текст выходит за рамки геометрии своей функции ...

Я знаю, что могу задайте font property of ol.style.Text до определенного размера, основываясь на resolution, но это не поможет здесь, так как текст иногда будет перекрывать границы ...

ответ

2

В настоящее время это невозможно сделать с помощью библиотеки. Но вы можете использовать CanvasRenderingContext2D#measureText() в своем векторном слое stlyeFunction, чтобы получить ширину метки, и сравните ее с шириной ширины полигона при определенном разрешении и решите на основе того, нужно ли рендерить или нет. Вы также можете получить умнее, чем использовать ширину экстента, но, вероятно, это достаточно хорошее приближение для многих случаев.

+0

Thx! Но как мне получить ширину экстента в горизонтальном выравнивании, где текст должен быть напечатан? Сначала мне нужно знать, где печатается текст (не всегда средний). Как? А затем 2-ая протяженность многоугольника на этой очень горизонтальной линии? Опять как? – nachtigall

+2

Точка метки для многоугольника - это точка, которую вы получаете с помощью 'ol.geom.Polygon # getInteriorPoint()'. Если вы посмотрите исходный код 'ol.geom.flat.interiorpoint.linearRings', вы увидите переменную с именем' maxSegmentLength'. Это ширина, которую вы можете использовать для маркировки. – ahocevar

+1

Спасибо! Попробуем это (и если у меня что-то работает, а затем отправьте ответ здесь) – nachtigall