У меня есть точка с заданным радиусом - допустим, 1000 м. Я вычислить радиус внутри мой стайлинг функции, как:Как вычислить координаты границы круга с помощью Openlayers 3
var givenRadius = 1000;
var coords = feature.getGeometry().getCoordinates();
var projection = map.view.getProjection();
var resolutionAtCoords = projection.getPointResolution(resolution, coords);
var featureStyleRadius = Math.round(radius/resolutionAtCoords);
style.getImage().setRadius(featureStyleRadius);
Отображаемого круг выглядит нормально - я проверил это, измеряя ее радиус на карте.
Теперь я хочу нанести на него 2 знака - по его центру и на его границе. Я делаю это так:
var center = ol.proj.transform([lon,lat], 'EPSG:4326', 'EPSG:3857');
// center point
map.previewLayer.getSource().addFeature(new ol.Feature({
geometry: new ol.geom.Point(center),
type: "dragPoint"
})
);
// border point
center[0] += givenRadius;
map.previewLayer.getSource().addFeature(new ol.Feature({
geometry: new ol.geom.Point(center),
type: "dragPoint"
})
);
Центр знак правильно установлен, но пограничный знак всегда находится внутри круга (~ 2/3 ее радиуса независимо от размера радиуса или карты масштаба) - увидеть картину. Что не так с расчетом?
Я думаю, это правильно - центральная переменная содержит координаты - в зависимости от проекции она находится в метрах. Вот почему я добавляю заданный радиус 1000 м - который я ожидаю дать мне географические координаты границы. Что касается круга, OpenLayers не может указать радиус окружности в метрах - вам нужно использовать пиксели экрана. Вот почему я пересчитываю радиус для круга каждый раз внутри функции стилизации. – user3523426
Если проекция используется в метрах, параметр 'radius' при создании' ol.geom.Circle' также будет использоваться только в метрах. Поэтому вы излишне вычисляете радиус с помощью 'resolutionAtCoords' –
Sumanth - это интересная информация для меня. Я не создаю свои функции «на лету», у меня есть geojson как источник, тип геометрии - «точка» (насколько я понимаю, геойсон не имеет типа геометрии круга), и я указываю радиус по стилю для точки. Поскольку это около 1 года проекта, радиус из стиля считался в пикселях (он не менялся во время операции масштабирования), и именно поэтому я использую расчет. – user3523426