Из МСК-47-1 в WGS84 - искажения геометрии при правильном позиционировании

Системы координат, проекции, преобразования, привязка
Ответить
Zorgis
Интересующийся
Сообщения: 39
Зарегистрирован: 16 апр 2015, 19:02
Репутация: 0

Из МСК-47-1 в WGS84 - искажения геометрии при правильном позиционировании

Сообщение Zorgis » 04 мар 2019, 18:24

Добрый день,
Преобразование МСК-47-1 в WGS84 проходит корректно через ogr2ogr. При использовании geotools
объект нормально позиционируется на местности, но точки относительно друг друга искажаются без видимой закономерности. В чем может быть дело?

CoordinateReferenceSystem targetCs = CRS.decode("EPSG:4326");
this.fromCurrentCSToWGS84 = CRS.findMathTransform(coordinateSystemSeparator.coordSys, targetCs, true);
Geometry resultGeom = JTS.transform(geom, fromCurrentCSToWGS84);

Как должно быть
Изображение

Как трансформируется
Изображение

Исходная СК задается из WKT:

PROJCS["МСК-47 зона 1",
GEOGCS["MI Custom",
DATUM["MI Custom",
SPHEROID["Krassowsky 1940", 6378245.0, 298.3, AUTHORITY["EPSG","7024"]],
TOWGS84[23.57, -140.95, -79.8, 0.0, 0.35, 0.79, -0.22]],
PRIMEM["Greenwich", 0.0],
UNIT["degree", 0.017453292519943295],
AXIS["Longitude", EAST],
AXIS["Latitude", NORTH]],
PROJECTION["Transverse_Mercator"],
PARAMETER["central_meridian", 27.95],
PARAMETER["latitude_of_origin", 0.0],
PARAMETER["scale_factor", 1.0],
PARAMETER["false_easting", 1250000.0],
PARAMETER["false_northing", -6211057.628],
UNIT["m", 1.0],
AXIS["x", EAST],
AXIS["y", NORTH]]

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

Re: Из МСК-47-1 в WGS84 - искажения геометрии при правильном позиционировании

Сообщение Игорь Белов » 04 мар 2019, 18:32

Сколько на выходе десятичных знаков в градусах?

Zorgis
Интересующийся
Сообщения: 39
Зарегистрирован: 16 апр 2015, 19:02
Репутация: 0

Re: Из МСК-47-1 в WGS84 - искажения геометрии при правильном позиционировании

Сообщение Zorgis » 04 мар 2019, 18:38

{"type":"MultiPolygon","coordinates":[[[[28.9298,60.6334],[28.9302,60.6336],[28.9305,60.6338],[28.9306,60.6338],[28.9308,60.6338],[28.9312,60.6337],
[28.9315,60.6337],[28.9319,60.6336],[28.9322,60.6336],[28.9322,60.6336],[28.9325,60.6336],[28.9326,60.6336],[28.933,60.6335],[28.933,60.6335],
[28.9333,60.6334],[28.9336,60.6334],[28.934,60.6333],[28.9344,60.6333],[28.9344,60.6333],[28.9346,60.6333],[28.9347,60.6333],
[28.935,60.6332],[28.9351,60.6332],[28.9354,60.6331],[28.9359,60.6331],[28.9359,60.6331],[28.9358,60.633],[28.935,60.6328],[28.9348,60.6328],[28.9344,60.6328],[28.934,60.6328],
[28.9337,60.6329],[28.9333,60.6329],[28.933,60.633],[28.9324,60.6331],[28.9324,60.6331],[28.932,60.6331],[28.9316,60.6332],[28.9312,60.6332],[28.9312,60.6332],[28.9309,60.6332],
[28.9305,60.6333],[28.9301,60.6333],[28.9298,60.6334],[28.9298,60.6334]]],[[[28.9321,60.6361],[28.932,60.6359],[28.9316,60.6354],[28.9312,60.6346],[28.931,60.6343],
[28.9297,60.6334],[28.9297,60.6334],[28.9296,60.6334],[28.9281,60.6336],[28.9281,60.6335],[28.9283,60.6335],[28.9281,60.6333],[28.9281,60.6333],[28.9281,60.6333],
[28.9282,60.6333],[28.9284,60.6335],[28.9289,60.6334],[28.9294,60.6334],[28.9294,60.6333],[28.9293,60.6332],[28.9291,60.633],[28.9289,60.6329],[28.9288,60.6328],
[28.9285,60.6326],[28.9288,60.6325],[28.9289,60.6325],[28.9287,60.6326],[28.9288,60.6327],[28.929,60.6329],[28.9292,60.633],[28.9294,60.6332],[28.9295,60.6333],
[28.9296,60.6333],[28.93,60.6333],[28.9306,60.6332],[28.9304,60.633],[28.9302,60.6329],[28.93,60.6327],[28.9298,60.6325],[28.9296,60.6324],[28.9295,60.6322],
[28.9293,60.6321],[28.9294,60.6321],[28.9294,60.6321],[28.9294,60.6321],[28.9296,60.6323],[28.9296,60.6323],[28.9298,60.6325],[28.9301,60.6327],[28.9304,60.6329],
[28.9307,60.6331],[28.9311,60.6331],[28.9311,60.6331],[28.9317,60.6331],[28.9317,60.633],[28.9315,60.6328],[28.9314,60.6328],[28.9312,60.6326],[28.9308,60.6323],
[28.9306,60.6321],[28.9303,60.632],[28.9304,60.6319],[28.9307,60.6321],[28.9308,60.6322],[28.931,60.6321],[28.9311,60.6322],[28.9308,60.6322],[28.9311,60.6325],
[28.9312,60.6326],[28.9314,60.6327],[28.9315,60.6327],[28.9318,60.633],[28.9318,60.633],[28.9321,60.633],[28.9322,60.633],[28.9328,60.6329],[28.9328,60.6329],
[28.9327,60.6328],[28.9327,60.6328],[28.9325,60.6326],[28.9323,60.6324],[28.9321,60.6323],[28.9319,60.6321],[28.9317,60.632],[28.9315,60.6318],[28.9314,60.6317],[28.9316,60.6316],
[28.9316,60.6317],[28.9317,60.6318],[28.9318,60.632],[28.932,60.6321],[28.932,60.6321],[28.9322,60.6323],[28.9322,60.6323],[28.9324,60.6324],[28.9326,60.6326],
[28.9328,60.6327],[28.9329,60.6329],[28.933,60.6329],[28.9334,60.6328],[28.9339,60.6328],[28.934,60.6327],[28.9338,60.6326],[28.9336,60.6324],[28.9334,60.6323],[28.9332,60.6321],
[28.933,60.6319],[28.9329,60.6318],[28.9327,60.6317],[28.9326,60.6317],[28.9324,60.6315],[28.9326,60.6315],[28.9328,60.6317],[28.933,60.6318],[28.9332,60.632],
[28.9334,60.6321],[28.9336,60.6323],[28.9337,60.6324],[28.9339,60.6326],[28.9341,60.6327],[28.9347,60.6327],[28.9348,60.6327],[28.9348,60.6327],[28.9358,60.633],
[28.9358,60.633],[28.9361,60.6331],[28.936,60.6332],[28.936,60.6331],[28.9356,60.6332],[28.9352,60.6332],[28.9351,60.6332],[28.9348,60.6333],[28.9348,60.6333],
[28.9347,60.6334],[28.9344,60.6334],[28.9341,60.6334],[28.934,60.6334],[28.9337,60.6334],[28.9334,60.6335],[28.9331,60.6335],[28.933,60.6336],[28.9324,60.6336],
[28.932,60.6337],[28.9316,60.6337],[28.9313,60.6338],[28.9309,60.6338],[28.9307,60.6339],[28.9306,60.6339],[28.9308,60.6341],[28.9311,60.6343],[28.9312,60.6343],
[28.9315,60.6342],[28.9319,60.6342],[28.9319,60.6342],[28.9322,60.6341],[28.9322,60.6341],[28.9326,60.6341],[28.933,60.634],[28.933,60.634],[28.9334,60.634],[28.9334,60.634],
[28.9337,60.634],[28.934,60.6339],[28.9341,60.6339],[28.9342,60.6337],[28.9343,60.6337],[28.9344,60.6336],[28.9341,60.634],[28.9334,60.634],[28.9334,60.6341],
[28.9332,60.6341],[28.9327,60.6341],[28.9316,60.6343],[28.9314,60.6343],[28.9312,60.6343],[28.9313,60.6346],[28.9314,60.6348],[28.9319,60.6347],[28.9318,60.6346],
[28.9323,60.6347],[28.9322,60.6348],[28.9319,60.6348],[28.9315,60.6349],[28.9316,60.6351],[28.9317,60.6354],[28.9321,60.6353],[28.9326,60.6353],[28.9327,60.6353],
[28.9325,60.6353],[28.9321,60.6354],[28.9318,60.6355],[28.9319,60.6357],[28.9321,60.6359],[28.9321,60.6359],[28.9325,60.6359],[28.9328,60.6358],[28.9333,60.6358],
[28.9335,60.6358],[28.9329,60.6359],[28.9325,60.6359],[28.9322,60.636],[28.9322,60.636],[28.9322,60.636],[28.9326,60.6362],[28.9327,60.6362],[28.9331,60.6364],[28.9331,60.6364],
[28.9332,60.6364],[28.9333,60.6363],[28.9334,60.6362],[28.9337,60.6361],[28.9337,60.6361],[28.9338,60.6361],[28.9335,60.6363],[28.9332,60.6365],[28.9331,60.6365],
[28.933,60.6365],[28.933,60.6365],[28.9321,60.6361],[28.9321,60.6361]]]]}

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

Re: Из МСК-47-1 в WGS84 - искажения геометрии при правильном позиционировании

Сообщение Игорь Белов » 04 мар 2019, 18:52

Вуаля! Округления в пределах ±5,6 м по широте и ±2,8 м по долготе 8)
Последний раз редактировалось Игорь Белов 04 мар 2019, 18:58, всего редактировалось 1 раз.

Zorgis
Интересующийся
Сообщения: 39
Зарегистрирован: 16 апр 2015, 19:02
Репутация: 0

Re: Из МСК-47-1 в WGS84 - искажения геометрии при правильном позиционировании

Сообщение Zorgis » 04 мар 2019, 18:58

то есть знаков после запятой должно быть 6 как минимум?
Последний раз редактировалось Zorgis 04 мар 2019, 19:01, всего редактировалось 2 раза.

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

Re: Из МСК-47-1 в WGS84 - искажения геометрии при правильном позиционировании

Сообщение Игорь Белов » 04 мар 2019, 19:00

Zorgis писал(а):
04 мар 2019, 18:58
то есть знаков после запятой должно быть 6?
Просто помните, что один градус содержит примерно 10⁵ м.
Например, если хотите сохранить сантиметровую точность, оставляйте в градусах 5 + 2 = 7 знаков после запятой.

Zorgis
Интересующийся
Сообщения: 39
Зарегистрирован: 16 апр 2015, 19:02
Репутация: 0

Re: Из МСК-47-1 в WGS84 - искажения геометрии при правильном позиционировании

Сообщение Zorgis » 04 мар 2019, 19:03

спасибо. использовал метод geotools

String geojson = new GeometryJSON().toString(resultGeom);

Он со знаками после запятой особо не церемонится.
видимо, придется писать свой парсер geojson.

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

Re: Из МСК-47-1 в WGS84 - искажения геометрии при правильном позиционировании

Сообщение Игорь Белов » 04 мар 2019, 19:20

Zorgis писал(а):
04 мар 2019, 19:03
видимо, придется писать свой парсер geojson
Так-то ogr2ogr знает опцию COORDINATE_PRECISION:

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

ogr2ogr -f GeoJSON parcels.json parcels.shp -lco COORDINATE_PRECISION=7

Zorgis
Интересующийся
Сообщения: 39
Зарегистрирован: 16 апр 2015, 19:02
Репутация: 0

Re: Из МСК-47-1 в WGS84 - искажения геометрии при правильном позиционировании

Сообщение Zorgis » 04 мар 2019, 19:44

нашел, что в GeometryJSON() есть конструктор принимающий число знаков после запятой. по умолчанию 4. спасибо за подсказку.

Ответить

Вернуться в «Координаты и привязка»

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

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