Я использую Openlayers 4.6 и машинописный текст.
Когда я создаю простой векторный слой для визуализации простых черных точек на карте, я могу предоставить ему URL-адрес, например:
export interface Options {
features: string;
url: string;
text: string;
font: string;
textBaseline: string;
fillColor: string;
}
...
constructor(private options: Options) {
const { features, url, text, font, textBaseline, fillColor } = this.options;
const format = new ol.format.GeoJSON();
this._layer = new ol.layer.Vector({
source: new ol.source.Vector({
format,
url
}),
style: new ol.style.Style({
text: new ol.style.Text({
text,
font,
textBaseline,
fill: new ol.style.Fill({
color: fillColor
})
})
})
});
...
и он отлично работает:
Однако я хочу предоставить (те же) данные в формате простой строки, которые могут быть проанализированы до фактического объекта GeoJSON, например:
export interface Options {
features: string;
url: string;
text: string;
font: string;
textBaseline: string;
fillColor: string;
}
...
constructor(private options: Options) {
const { features, url, text, font, textBaseline, fillColor } = this.options;
const format = new ol.format.GeoJSON();
this._layer = new ol.layer.Vector({
source: new ol.source.Vector({
features: new ol.format.GeoJSON().readFeatures(features)
}),
style: new ol.style.Style({
text: new ol.style.Text({
text,
font,
textBaseline,
fill: new ol.style.Fill({
color: fillColor
})
})
})
});
...
Строка, переданная в features
, читается вызовом
private readTextFile(file: string): string {
let rawFile = new XMLHttpRequest();
let result: string = '';
rawFile.open('GET', file, false);
rawFile.onreadystatechange = () => {
if (rawFile.readyState === 4) {
if (rawFile.status === 200 || rawFile.status === 0) {
result = rawFile.responseText;
}
}
};
rawFile.send(null);
return result;
}
предоставление url
в качестве параметра file
.
Это работает должным образом. Пошаговое выполнение конструктора с помощью отладчика Chrome приводит к считыванию правильных данных в правильном формате и т. Д.
Что касается визуализации, карта выглядит так:
что явно неверно ... Уменьшив масштаб, можно увидеть точки прямо у берегов Африки. При повторном увеличении (очень большом!) Точки снова расходятся:
Теперь я прочитал в нескольких сообщениях здесь, на SO и других форумах, что мне может понадобиться дать прогноз данных / функций. Итак, я попробовал:
export interface Options {
features: string;
url: string;
text: string;
font: string;
textBaseline: string;
fillColor: string;
}
...
constructor(private options: Options) {
const { features, url, text, font, textBaseline, fillColor } = this.options;
const format = new ol.format.GeoJSON();
this._layer = new ol.layer.Vector({
source: new ol.source.Vector({
features: new ol.format.GeoJSON().readFeatures(features, {
dataProjection: 'EPSG:3857',
featureProjection: 'EPSG:3857'
})
}),
style: new ol.style.Style({
text: new ol.style.Text({
text,
font,
textBaseline,
fill: new ol.style.Fill({
color: fillColor
})
})
})
});
...
Но результат остается прежним. Вид имеет такую же проекцию.
Что мне здесь не хватает? Почему данные, которые вы предоставляете по URL-адресу, верны, а те же данные, предоставленные строкой, неверны?