J'ai une entité ponctuelle avec un rayon donné, disons 1000m. Je calcule le rayon intérieur de ma fonction de style comme:Comment calculer les coordonnées d'une bordure de cercle en utilisant 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);
cercle affiché semble correct - je l'ai vérifié en mesurant son rayon sur la carte.
Maintenant, je veux y mettre 2 marques - sur son centre et sur sa bordure. Je le fais comme ceci:
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"
})
);
La marque centrale est correctement positionné, mais la marque frontière est toujours à l'intérieur du cercle (~ 2/3 de son rayon quelle que soit la taille du rayon ou carte zoom) - voir la photo. Quel est le problème avec le calcul?
Je pense, c'est correct - la variable centrale contient des coordonnées - selon la projection c'est en mètres. C'est pourquoi j'ajoute le rayon donné de 1000m - que je m'attends à me donner des coordonnées géographiques de la frontière. En ce qui concerne le cercle, OpenLayers ne peut pas spécifier le rayon du cercle en mètres - vous devez utiliser des pixles d'écran. C'est pourquoi je recalcule le rayon du cercle à chaque fois dans la fonction de style. – user3523426
Si la projection utilisée est en mètres alors l'option 'rayon' lors de la création de' ol.geom.Circle' sera également prise en mètres seulement. Donc vous calculez inutilement le rayon en utilisant 'resolutionAtCoords' –
Sumanth - c'est une information intéressante pour moi. Je ne crée pas mes fonctionnalités "à la volée", j'ai geojson comme source, Le type geomerty est "Point" (pour autant que je comprends geojson n'a pas de type de géométrie de cercle) et je spécifie le rayon par style pour le point. Comme il s'agit d'un projet d'un an, le rayon du style a été considéré comme étant en pixels (il n'a pas changé pendant le zoom) et c'est pourquoi j'utilise le calcul. – user3523426