Назначение проекции

Вопросы по свободной ГИС QGIS. Сообщения об ошибках, предложения по улучшению, локализация.
Ответить
Slinger
Гуру
Сообщения: 879
Зарегистрирован: 17 июн 2010, 23:14
Репутация: 207
Откуда: Москва

Назначение проекции

Сообщение Slinger » 25 авг 2020, 15:04

QGIS 3.10.8. Имеется кастомная проекция МСК 47, зона 2

Код: Выделить всё

+proj=tmerc +lat_0=0 +lon_0=30.95 +k=1 +x_0=2250000 +y_0=-6211057.628 +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +units=m +no_defs
имеется шейп в нужных мне координатах, но без проекции. Выбираю "Вектор - назначить проекцию", выбираю МСК-47, создаю временный слой. Проверяю, что он в нормальной, выбранной мной проекции. И попадает он туда, куда нужно мне. После чего экспортирую временный слой в нормальный шейп. Открыв шейп, обнаруживаю, что потерялся параметр towgs84. И полученная проекция выглядит так.
image.PNG
image.PNG (90.67 КБ) 5804 просмотра
Соответственно, как бы я не бился, towgs не попадает в проекцию.

1) Как быть в данном случае и правильно назначать проекцию шейпам, чтобы запоминались все настройки (эллипсоид + датум), а не только настройки проекции ?

2) Возможно ли в сам шейп прописать проекцию, как это делает ArcGis, а не оставлять всю проекцию в .prj файлах, которые подсасываются при открытии ?


Ну и да, понятно, что можно назначит проекцию и сохранить рабочее пространство кугиса. Но хотелось бы понять, в чём суть бага с кугисом.

trir
Гуру
Сообщения: 5298
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1015
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Назначение проекции

Сообщение trir » 25 авг 2020, 15:24

Забудьте про формат PROJ.4, в данном случае он больше не работает.
Про параметр TOWGS84 тем более забудьте, трансформация теперь не является атрибутом проекции.
GDAL вслед за PROJ перешёл на формат описания систем координат WKT.
https://gis-lab.info/forum/viewtopic.php?t=26178

Slinger
Гуру
Сообщения: 879
Зарегистрирован: 17 июн 2010, 23:14
Репутация: 207
Откуда: Москва

Re: Назначение проекции

Сообщение Slinger » 25 авг 2020, 16:44

Неслабо так. Я видел эту тему, но даже не предполагал, что и на обычном определении проекции это скажется. Что в данном случае предполагается делать, можно ли решить эту задачу через дефолтный кугис, не используя консоль и ogr2ogr ?

Я посмотрел пользовательские проекции. Отобразил проекцию в WKT. Получил дофига строчек

Код: Выделить всё

BOUNDCRS[
    SOURCECRS[
        PROJCRS["unknown",
            BASEGEOGCRS["unknown",
                DATUM["Unknown based on Krassovsky, 1942 ellipsoid",
                    ELLIPSOID["Krassovsky, 1942",6378245,298.3,
                        LENGTHUNIT["metre",1,
                            ID["EPSG",9001]]]],
                PRIMEM["Greenwich",0,
                    ANGLEUNIT["degree",0.0174532925199433],
                    ID["EPSG",8901]]],
            CONVERSION["unknown",
                METHOD["Transverse Mercator",
                    ID["EPSG",9807]],
                PARAMETER["Latitude of natural origin",0,
                    ANGLEUNIT["degree",0.0174532925199433],
                    ID["EPSG",8801]],
                PARAMETER["Longitude of natural origin",30.95,
                    ANGLEUNIT["degree",0.0174532925199433],
                    ID["EPSG",8802]],
                PARAMETER["Scale factor at natural origin",1,
                    SCALEUNIT["unity",1],
                    ID["EPSG",8805]],
                PARAMETER["False easting",2250000,
                    LENGTHUNIT["metre",1],
                    ID["EPSG",8806]],
                PARAMETER["False northing",-6211057.628,
                    LENGTHUNIT["metre",1],
                    ID["EPSG",8807]]],
            CS[Cartesian,2],
                AXIS["(E)",east,
                    ORDER[1],
                    LENGTHUNIT["metre",1,
                        ID["EPSG",9001]]],
                AXIS["(N)",north,
                    ORDER[2],
                    LENGTHUNIT["metre",1,
                        ID["EPSG",9001]]]]],
    TARGETCRS[
        GEOGCRS["WGS 84",
            DATUM["World Geodetic System 1984",
                ELLIPSOID["WGS 84",6378137,298.257223563,
                    LENGTHUNIT["metre",1]]],
            PRIMEM["Greenwich",0,
                ANGLEUNIT["degree",0.0174532925199433]],
            CS[ellipsoidal,2],
                AXIS["geodetic latitude (Lat)",north,
                    ORDER[1],
                    ANGLEUNIT["degree",0.0174532925199433]],
                AXIS["geodetic longitude (Lon)",east,
                    ORDER[2],
                    ANGLEUNIT["degree",0.0174532925199433]],
            ID["EPSG",4326]]],
    ABRIDGEDTRANSFORMATION["Transformation from unknown to WGS84",
        METHOD["Position Vector transformation (geog2D domain)",
            ID["EPSG",9606]],
        PARAMETER["X-axis translation",24,
            ID["EPSG",8605]],
        PARAMETER["Y-axis translation",-123,
            ID["EPSG",8606]],
        PARAMETER["Z-axis translation",-94,
            ID["EPSG",8607]],
        PARAMETER["X-axis rotation",0.02,
            ID["EPSG",8608]],
        PARAMETER["Y-axis rotation",-0.25,
            ID["EPSG",8609]],
        PARAMETER["Z-axis rotation",-0.13,
            ID["EPSG",8610]],
        PARAMETER["Scale difference",1.0000011,
            ID["EPSG",8611]]]]
Какой-то довольно хардкорный текст. Я так понимаю, мне здесь нужно что-то где-то поменять, чтобы привязать датум ? Но при этом он ведь здесь всё равно прописан, в ABRIDGEDTRANSFORMATION

Аватара пользователя
Игорь Белов
Гуру
Сообщения: 2232
Зарегистрирован: 04 янв 2011, 22:00
Репутация: 1506
Откуда: Казань

Re: Назначение проекции

Сообщение Игорь Белов » 25 авг 2020, 16:59

Slinger писал(а):
25 авг 2020, 16:44
не предполагал, что и на обычном определении проекции это скажется
Это не обычное определение проекции. Трансформации датума "Pulkovo 1942" находятся в EPSG. Нужно их просто выбирать или одну из них назначить по умолчанию.

Необычность в том, что Вы хотите использовать одну из трансформаций датума "Pulkovo 1942(83)". Можете использовать этот датум, но при экспорте в "MapInfo file" GDAL будет писать #104, а не #1001.
Slinger писал(а):
25 авг 2020, 16:44
можно ли решить эту задачу через дефолтный кугис, не используя консоль и ogr2ogr ?
Можно. Добавьте пользовательскую проекцию "MI1001 / MSK47 zone 2":

Код: Выделить всё

BOUNDCRS[
    SOURCECRS[
        PROJCRS["Pulkovo 1942 / MSK47 zone 2",
            BASEGEOGCRS["Pulkovo 1942",
                DATUM["Pulkovo 1942",
                    ELLIPSOID["Krassowsky 1942",6378245,298.3,
                        LENGTHUNIT["metre",1,
                            ID["EPSG",9001]]]],
                PRIMEM["Greenwich",0,
                    ANGLEUNIT["degree",0.0174532925199433],
                    ID["EPSG",8901]]],
            CONVERSION["MSK47 zone 2",
                METHOD["Transverse Mercator",
                    ID["EPSG",9807]],
                PARAMETER["Latitude of natural origin",0.1,
                    ANGLEUNIT["degree",0.0174532925199433],
                    ID["EPSG",8801]],
                PARAMETER["Longitude of natural origin",30.95,
                    ANGLEUNIT["degree",0.0174532925199433],
                    ID["EPSG",8802]],
                PARAMETER["Scale factor at natural origin",1,
                    SCALEUNIT["unity",1],
                    ID["EPSG",8805]],
                PARAMETER["False easting",2250000,
                    LENGTHUNIT["metre",1],
                    ID["EPSG",8806]],
                PARAMETER["False northing",-6200000,
                    LENGTHUNIT["metre",1],
                    ID["EPSG",8807]]],
            CS[Cartesian,2],
                AXIS["(E)",east,
                    ORDER[1],
                    LENGTHUNIT["metre",1,
                        ID["EPSG",9001]]],
                AXIS["(N)",north,
                    ORDER[2],
                    LENGTHUNIT["metre",1,
                        ID["EPSG",9001]]]]],
    TARGETCRS[
        GEOGCRS["WGS 84",
            DATUM["World Geodetic System 1984",
                ELLIPSOID["WGS 84",6378137,298.257223563,
                    LENGTHUNIT["metre",1]]],
            PRIMEM["Greenwich",0,
                ANGLEUNIT["degree",0.0174532925199433]],
            CS[ellipsoidal,2],
                AXIS["latitude",north,
                    ORDER[1],
                    ANGLEUNIT["degree",0.0174532925199433]],
                AXIS["longitude",east,
                    ORDER[2],
                    ANGLEUNIT["degree",0.0174532925199433]],
            ID["EPSG",4326]]],
    ABRIDGEDTRANSFORMATION["Transformation from MI1001 to WGS84",
        METHOD["Coordinate Frame rotation (geog2D domain)",
            ID["EPSG",9607]],
        PARAMETER["X-axis translation",24,
            ID["EPSG",8605]],
        PARAMETER["Y-axis translation",-123,
            ID["EPSG",8606]],
        PARAMETER["Z-axis translation",-94,
            ID["EPSG",8607]],
        PARAMETER["X-axis rotation",-0.02,
            ID["EPSG",8608]],
        PARAMETER["Y-axis rotation",0.25,
            ID["EPSG",8609]],
        PARAMETER["Z-axis rotation",0.13,
            ID["EPSG",8610]],
        PARAMETER["Scale difference",1.0000011,
            ID["EPSG",8611]]]]
Честно говоря, мне непонятно стремление непременно воспроизвести эту трансформацию. Она действует на территории Восточной Германии, а не России. Если важно передать данные в WGS 84, передавайте в WGS 84. Если же важно сохранить координаты МСК47, создайте проекцию на основе "Pulkovo 1942" без этих странных оглядок на MapInfo.
Вложения
MI1001 MSK47 zone 2.zip
(906 байт) 244 скачивания
Последний раз редактировалось Игорь Белов 26 авг 2020, 11:19, всего редактировалось 2 раза.
The purpose of computing is insight, not numbers

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

Re: Назначение проекции

Сообщение gamm » 25 авг 2020, 17:15

Игорь Белов писал(а):
25 авг 2020, 16:59
Это не обычное определение проекции.
Игорь, а нельзя ли попросить Вас написать статью на данную тему? Типа "О возможности и методах перехода от теплого лампового +proj к чудесам постмодернизма". По мере перехода на новый формат число вопросов будет расти, ИМХО ...

trir
Гуру
Сообщения: 5298
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1015
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Назначение проекции

Сообщение trir » 25 авг 2020, 17:30


Аватара пользователя
Игорь Белов
Гуру
Сообщения: 2232
Зарегистрирован: 04 янв 2011, 22:00
Репутация: 1506
Откуда: Казань

Re: Назначение проекции

Сообщение Игорь Белов » 25 авг 2020, 17:42

О статье можно подумать. Но, на мой взгляд, в данных двух темах люди хотят странного.
  • ГИС нужны для электронной картографии. В масштабе 1:1000 метр на местности соответствует миллиметру на экране/бумаге.
  • Сантиметровая точность передачи координат при передаче данных между разными ГИС может интересовать только геодезистов. На самом деле и их не интересует (см. ниже).
  • В нулевом приближении геодезисты в MapInfo не используют датум #1001, а создают проекции на основе ГОСТа. В EPSG этот ГОСТ есть.
  • Практически трансформации, в том чисте из ГОСТа, аналогичны средней температуре по больнице. Они не могут быть использованы для точной связи геодезической основы с ГНСС. Эта связь устанавливается из геодезических измерений.
  • В результате установления такой связи можно создать матрицы деформаций и использовать их в ГИС, если очень неймётся. Правда, непонятно зачем (см. пункт первый).
Резюмирую. Мне представляется бессмысленной попытка воспроизведения стандартного датума из MapInfo. Могу раскрыть это шире, но лень.
The purpose of computing is insight, not numbers

Аватара пользователя
Игорь Белов
Гуру
Сообщения: 2232
Зарегистрирован: 04 янв 2011, 22:00
Репутация: 1506
Откуда: Казань

Re: Назначение проекции

Сообщение Игорь Белов » 25 авг 2020, 17:45

trir писал(а):
25 авг 2020, 17:30
gamm писал(а):
25 авг 2020, 17:15
Вас написать статью на данную тему?
есть уже
По сути в статье о представлении проекций в WKT ничего не сказано.
The purpose of computing is insight, not numbers

trir
Гуру
Сообщения: 5298
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1015
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Назначение проекции

Сообщение trir » 25 авг 2020, 18:09

По сути в статье о представлении проекций в WKT ничего не сказано.
ага, ну так я и ссылку дал не на неё :mrgreen:

Slinger
Гуру
Сообщения: 879
Зарегистрирован: 17 июн 2010, 23:14
Репутация: 207
Откуда: Москва

Re: Назначение проекции

Сообщение Slinger » 25 авг 2020, 18:12

Понимание начинает понемногу приходить. Если я все правильно понимаю, то чтобы старые проекции, уже созданные мной в кугисе, подхватились и заработали, нужно:

1) в PROJCRS занести любое адекватное наименование
2) в BASEGEOGCRS и DATUM занести "Pulkovo 1942". Этим я объявлю хоть какой-то датум, который потом смогу скорректировать с помощью параметров в ABRIDGEDTRANSFORMATION. Не понимаю, зачем его объявлять, если я эти же семь параметров потом корректирую в ABRIDGEDTRANSFORMATION
3) в CONVERSION занести любое адекватное наименование
4) в ABRIDGEDTRANSFORMATION занести "Transformation from MI1001 to WGS84". Не пойму, то официальное наименование метода трансформации или здесь может быть любой текст ?
5) в METHOD занести "Coordinate Frame rotation (geog2D domain)". Видимо это строгое наименование метода трансформации.


После назначения и открытия шейпа я получил тот же каверзный вопрос, который задаёт QGIS при открытии файлов mapinfo в этом самом кугисе.
image2.PNG
image2.PNG (78.92 КБ) 5720 просмотров
Вопросы:

1) Что нужно выбирать, когда кугис выдаёт такое окно ? Он его выдаёт даже когда в проекте нет слоёв.
2) Слой падает куда надо, но система по-прежнему определяется как Unknown CRS. Возможно ли ему как-то обозначить, чтобы он понимал назначаемую им же проекцию ?
3) Если я хочу создать эту же проекцию с параметрами ГОСТа, я меняю параметры в разделе ABRIDGEDTRANSFORMATION, оставив при этом тот же датум ? Или есть какой-то ГОСТовский датум, где уже не надо добавлять трансформацию ABRIDGEDTRANSFORMATION ?
Игорь Белов писал(а):
25 авг 2020, 17:42
В нулевом приближении геодезисты в MapInfo не используют датум #1001, а создают проекции на основе ГОСТа. В EPSG этот ГОСТ есть
Так и есть. У нас были отдельные варианты проекции с 9999 на основе параметров ГОСТа. ИХ мы использовали, когда нужно было пересчитать в WGS. В остальные случаях, особенно в условиях кадастра, датум влияния не давал. Достаточно было правильных параметров проекции. Ведь все расчёты велись в пределах одного планового пространства, используя только различные параметры проекции. Разумеется, если переходили от датума 1942 к датуму 1995, то использовали 9999.

Slinger
Гуру
Сообщения: 879
Зарегистрирован: 17 июн 2010, 23:14
Репутация: 207
Откуда: Москва

Re: Назначение проекции

Сообщение Slinger » 25 авг 2020, 18:19

Забавно, но в проекциях моего кугиса эллипсоид записан как "Krassovsky", а у уважаемого Игоря как "Krassowsky". И в обоих случаях если нажать Validate WKT, то ошибки не будет. Чудные дела

Аватара пользователя
Игорь Белов
Гуру
Сообщения: 2232
Зарегистрирован: 04 янв 2011, 22:00
Репутация: 1506
Откуда: Казань

Re: Назначение проекции

Сообщение Игорь Белов » 25 авг 2020, 18:49

Slinger писал(а):
25 авг 2020, 18:12
система по-прежнему определяется как Unknown CRS
trir дело говорит, не используйте шейпфайлы. GeoPackage наш новый формат, и в нём полноценное описание систем координат.

ГОСТовская трансформация есть на Вашей картинке: Pulkovo 1942 to WGS 84 (20). Чтобы ей пользоваться, надо создать нормальную проекцию "Pulkovo 1942 / MSK47 zone 2":

Код: Выделить всё

PROJCRS["Pulkovo 1942 / MSK47 zone 2",
    BASEGEOGCRS["Pulkovo 1942",
        DATUM["Pulkovo 1942",
            ELLIPSOID["Krassowsky 1940",6378245,298.3,
                LENGTHUNIT["metre",1]]],
        PRIMEM["Greenwich",0,
            ANGLEUNIT["degree",0.0174532925199433]],
        ID["EPSG",4284]],
    CONVERSION["MSK47 zone 2",
        METHOD["Transverse Mercator",
            ID["EPSG",9807]],
        PARAMETER["Latitude of natural origin",0.1,
            ANGLEUNIT["degree",0.0174532925199433],
            ID["EPSG",8801]],
        PARAMETER["Longitude of natural origin",30.95,
            ANGLEUNIT["degree",0.0174532925199433],
            ID["EPSG",8802]],
        PARAMETER["Scale factor at natural origin",1,
            SCALEUNIT["unity",1],
            ID["EPSG",8805]],
        PARAMETER["False easting",2250000,
            LENGTHUNIT["metre",1],
            ID["EPSG",8806]],
        PARAMETER["False northing",-6200000,
            LENGTHUNIT["metre",1],
            ID["EPSG",8807]]],
    CS[Cartesian,2],
        AXIS["northing (X)",north,
            ORDER[1],
            LENGTHUNIT["metre",1]],
        AXIS["easting (Y)",east,
            ORDER[2],
            LENGTHUNIT["metre",1]],
    USAGE[
        SCOPE["unknown"],
        AREA["Europe - Russia - MSK47 zone 2"],
        BBOX[58.41,29.45,61.26,32.45]]]
Чтобы не отвечать на вопрос о трансформации каждый раз для данной системы координат, выберите нужную, поднимите флажок
[ ] Make default
После этого преобразование добавится в список используемых по умолчанию.

N. B.: Это нужно делать для каждой используемой проекции на данном датуме.

Если в настройках снять флажок
[ ] Ask for datum transformation if several are available
то QGIS никогда не будет спрашивать. Удобно, если работаешь в "Pulkovo 1995".
Вложения
Screenshot_2020-08-25_18-39-15.png
Screenshot_2020-08-25_18-39-15.png (106.39 КБ) 5690 просмотров
Screenshot_2020-08-25_18-39-50.png
Screenshot_2020-08-25_18-39-50.png (117.29 КБ) 5690 просмотров
Pulkovo 1942 MSK47 zone 2.zip
(644 байт) 239 скачиваний
The purpose of computing is insight, not numbers

Ответить

Вернуться в «QGIS»

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

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