Функция OpenLayers 5 RegularShape смещена от указанных координат
Я размещаю пользовательские маркеры на векторном слое, но чем ниже точка координат от верхнего края карты, тем больше форма маркера смещена вверх от этой точки.
Я использую другую картографическую проекцию (EPSG:5514), поэтому, вероятно, здесь есть связь.
Что мне нужно знать, это то, что нужно изменить в моем коде, чтобы центрировать форму маркера по указанным координатам.
Соответствующая часть кода:
var stroke = new ol.style.Stroke({color: 'red', width: 1});
var fill = new ol.style.Fill({color: 'red'});
function styleFunction(feature, text) {
feature.displayText = text;
return [
new ol.style.Style({
image: new ol.style.RegularShape({
fill: fill,
stroke: stroke,
points: 3,
radius: 8,
rotation: 0,
angle: 0
}),
text: new ol.style.Text({
font: '14px Calibri,sans-serif',
fill: new ol.style.Fill({ color: markerTextColor }),
stroke: new ol.style.Stroke({
color: textcolor_DKM, width: 1
}),
textAlign: 'left',
offsetX: 10,
offsetY: -2,
text: text
})
})
];
}
var vectorSource = new ol.source.Vector();
var markerVectorLayer = new ol.layer.Vector({
title: 'Notes',
visible: false,
source: vectorSource
});
var feature = new ol.Feature({
geometry: new ol.geom.Point(
ol.proj.fromLonLat([Number(lon), Number(lat)], 'EPSG:5514')
)
});
feature.setStyle(styleFunction(feature, desc));
vectorSource.addFeature(feature);
Если вам нужна дополнительная информация, дайте мне знать.
1 ответ
Решение
Используйте последнюю библиотеку proj4.js со строкой OGC WKT. Получите proj4.js здесь:
https://cdnjs.cloudflare.com/ajax/libs/proj4js/2.5.0/proj4.js
и вы можете использовать следующую строку кода для определения проекции:
proj4.defs('EPSG:5514', 'PROJCS["S-JTSK / Krovak East North",GEOGCS["S-JTSK",DATUM["System_Jednotne_Trigonometricke_Site_Katastralni",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[589,76,480,0,0,0,0],AUTHORITY["EPSG","6156"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4156"]],PROJECTION["Krovak"],PARAMETER["latitude_of_center",49.5],PARAMETER["longitude_of_center",24.83333333333333],PARAMETER["azimuth",30.28813972222222],PARAMETER["pseudo_standard_parallel_1",78.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",0],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["X",EAST],AXIS["Y",NORTH],AUTHORITY["EPSG","5514"]]');
затем, когда вам нужно использовать проекцию, перейдите с:
var proj = ol.proj.get('EPSG:5514');