Openlayers и масштаб.

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Ответить
profan
Новоприбывший
Сообщения: 7
Зарегистрирован: 07 ноя 2023, 00:40
Репутация: 0
Откуда: Австрия

Openlayers и масштаб.

Сообщение profan » 07 ноя 2023, 00:55

Добрый день.
Прошу Вашей помощи со следующей задачей. Имеется карта (используется 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.

profan
Новоприбывший
Сообщения: 7
Зарегистрирован: 07 ноя 2023, 00:40
Репутация: 0
Откуда: Австрия

Re: Openlayers и масштаб.

Сообщение profan » 07 ноя 2023, 13:34

Дополню. Опытным путем было установлено, что данная формула работает, только если центр [0,0]. Вопрос, а как мне тогда рассчитывать?

AlexRomantsov
Завсегдатай
Сообщения: 316
Зарегистрирован: 24 мар 2022, 05:54
Репутация: 137
Ваше звание: хм, сам не знал
Откуда: Томск

Re: Openlayers и масштаб.

Сообщение AlexRomantsov » 07 ноя 2023, 13:37

Возможно веб-карта на OpenLayer масштабируется по уровням (типа 14, 15, 16 и далее), без произвольных межмасштабных состояний, а масштабы таких уровней не идентичны "ровным" значениям типа 1:200. Также, на экваторе (0, 0) и на широте 50 градусов есть разница масштабов.

profan
Новоприбывший
Сообщения: 7
Зарегистрирован: 07 ноя 2023, 00:40
Репутация: 0
Откуда: Австрия

Re: Openlayers и масштаб.

Сообщение profan » 07 ноя 2023, 13:57

вы правы как я понял из ответа на stackoverflow нужно использовать расстояние. но ни как не пойму как это сделать. Chat gpt не помог

gamm
Гуру
Сообщения: 4057
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1054
Ваше звание: программист
Откуда: Казань

Re: Openlayers и масштаб.

Сообщение gamm » 07 ноя 2023, 14:05

если используемая проекция - обычный для web "кривой меркатор на гуглошарике", то для нее понятие масштаба вообще не существует: у нее разный масштаб по вертикали и горизонтали, к тому же он меняется в пределах карты.

profan
Новоприбывший
Сообщения: 7
Зарегистрирован: 07 ноя 2023, 00:40
Репутация: 0
Откуда: Австрия

Re: Openlayers и масштаб.

Сообщение profan » 07 ноя 2023, 14:34

и что мне делать. проекцию изменить не могу.

gamm
Гуру
Сообщения: 4057
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1054
Ваше звание: программист
Откуда: Казань

Re: Openlayers и масштаб.

Сообщение gamm » 07 ноя 2023, 15:04

profan писал(а):
07 ноя 2023, 14:34
и что мне делать
в смысле? это объективная реальность, жить с ней :-)

profan
Новоприбывший
Сообщения: 7
Зарегистрирован: 07 ноя 2023, 00:40
Репутация: 0
Откуда: Австрия

Re: Openlayers и масштаб.

Сообщение profan » 08 ноя 2023, 12:23

ну а если серьезно...

profan
Новоприбывший
Сообщения: 7
Зарегистрирован: 07 ноя 2023, 00:40
Репутация: 0
Откуда: Австрия

Re: Openlayers и масштаб.

Сообщение profan » 08 ноя 2023, 17:52

как говорится спасение утопающих, дело самих утопающих вот решение
const scale = 200;
const currentPointResolution =
getPointResolution(currentProjection, 1 / currentMPU, currentCenter, 'm') *
currentMPU;
const result = (scale / inchesPerMeter / dpi) / currentPointResolution

Ответить

Вернуться в «Веб-картография»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 20 гостей