Openlayers и масштаб.
-
- Новоприбывший
- Сообщения: 7
- Зарегистрирован: 07 ноя 2023, 00:40
- Репутация: 0
- Откуда: Австрия
Openlayers и масштаб.
Добрый день.
Прошу Вашей помощи со следующей задачей. Имеется карта (используется openlayers), так вот, нужно устанавливать mapResolution в соответствии с тем какой масштаб вводит пользователь (например 1:200 ). Единственный более менее релевантный ответ был дан тут https://stackoverflow.com/questions/509 ... enlayers-4. Но я что то не вьеду как мне это использовать.
У самого openlayers есть такая штука как ScaleLine которая отображает текущий масштаб.
Используется вот эта функция:
getScaleForResolution() {
const resolution = getPointResolution(
this.viewState_.projection,
this.viewState_.resolution,
this.viewState_.center,
'm'
);
const dpi = this.dpi_ || DEFAULT_DPI;
const inchesPerMeter = 1000 / 25.4;
return resolution * inchesPerMeter * dpi;
}
Но почему когда я пытаюсь сделать так 200(масштаб выбранный пользователем) / (inchesPerMeter * dpi). И после использую полученной значание то в ScaleLine отображается 1:136.
Прошу Вашей помощи со следующей задачей. Имеется карта (используется openlayers), так вот, нужно устанавливать mapResolution в соответствии с тем какой масштаб вводит пользователь (например 1:200 ). Единственный более менее релевантный ответ был дан тут https://stackoverflow.com/questions/509 ... enlayers-4. Но я что то не вьеду как мне это использовать.
У самого openlayers есть такая штука как ScaleLine которая отображает текущий масштаб.
Используется вот эта функция:
getScaleForResolution() {
const resolution = getPointResolution(
this.viewState_.projection,
this.viewState_.resolution,
this.viewState_.center,
'm'
);
const dpi = this.dpi_ || DEFAULT_DPI;
const inchesPerMeter = 1000 / 25.4;
return resolution * inchesPerMeter * dpi;
}
Но почему когда я пытаюсь сделать так 200(масштаб выбранный пользователем) / (inchesPerMeter * dpi). И после использую полученной значание то в ScaleLine отображается 1:136.
-
- Новоприбывший
- Сообщения: 7
- Зарегистрирован: 07 ноя 2023, 00:40
- Репутация: 0
- Откуда: Австрия
Re: Openlayers и масштаб.
Дополню. Опытным путем было установлено, что данная формула работает, только если центр [0,0]. Вопрос, а как мне тогда рассчитывать?
-
- Завсегдатай
- Сообщения: 328
- Зарегистрирован: 24 мар 2022, 05:54
- Репутация: 141
- Ваше звание: хм, сам не знал
- Откуда: Томск
Re: Openlayers и масштаб.
Возможно веб-карта на OpenLayer масштабируется по уровням (типа 14, 15, 16 и далее), без произвольных межмасштабных состояний, а масштабы таких уровней не идентичны "ровным" значениям типа 1:200. Также, на экваторе (0, 0) и на широте 50 градусов есть разница масштабов.
-
- Новоприбывший
- Сообщения: 7
- Зарегистрирован: 07 ноя 2023, 00:40
- Репутация: 0
- Откуда: Австрия
Re: Openlayers и масштаб.
вы правы как я понял из ответа на stackoverflow нужно использовать расстояние. но ни как не пойму как это сделать. Chat gpt не помог
-
- Гуру
- Сообщения: 4068
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1062
- Ваше звание: программист
- Откуда: Казань
Re: Openlayers и масштаб.
если используемая проекция - обычный для web "кривой меркатор на гуглошарике", то для нее понятие масштаба вообще не существует: у нее разный масштаб по вертикали и горизонтали, к тому же он меняется в пределах карты.
-
- Новоприбывший
- Сообщения: 7
- Зарегистрирован: 07 ноя 2023, 00:40
- Репутация: 0
- Откуда: Австрия
Re: Openlayers и масштаб.
и что мне делать. проекцию изменить не могу.
-
- Гуру
- Сообщения: 4068
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1062
- Ваше звание: программист
- Откуда: Казань
-
- Новоприбывший
- Сообщения: 7
- Зарегистрирован: 07 ноя 2023, 00:40
- Репутация: 0
- Откуда: Австрия
Re: Openlayers и масштаб.
ну а если серьезно...
-
- Новоприбывший
- Сообщения: 7
- Зарегистрирован: 07 ноя 2023, 00:40
- Репутация: 0
- Откуда: Австрия
Re: Openlayers и масштаб.
как говорится спасение утопающих, дело самих утопающих вот решение
const scale = 200;
const currentPointResolution =
getPointResolution(currentProjection, 1 / currentMPU, currentCenter, 'm') *
currentMPU;
const result = (scale / inchesPerMeter / dpi) / currentPointResolution
const scale = 200;
const currentPointResolution =
getPointResolution(currentProjection, 1 / currentMPU, currentCenter, 'm') *
currentMPU;
const result = (scale / inchesPerMeter / dpi) / currentPointResolution
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя