Из МСК-47-1 в WGS84 - искажения геометрии при правильном позиционировании
-
- Интересующийся
- Сообщения: 49
- Зарегистрирован: 16 апр 2015, 19:02
- Репутация: 0
Из МСК-47-1 в WGS84 - искажения геометрии при правильном позиционировании
Добрый день,
Преобразование МСК-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]]
Преобразование МСК-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]]
- Игорь Белов
- Гуру
- Сообщения: 2230
- Зарегистрирован: 04 янв 2011, 22:00
- Репутация: 1503
- Откуда: Казань
Re: Из МСК-47-1 в WGS84 - искажения геометрии при правильном позиционировании
Сколько на выходе десятичных знаков в градусах?
The purpose of computing is insight, not numbers
-
- Интересующийся
- Сообщения: 49
- Зарегистрирован: 16 апр 2015, 19:02
- Репутация: 0
Re: Из МСК-47-1 в WGS84 - искажения геометрии при правильном позиционировании
{"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]]]]}
[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]]]]}
- Игорь Белов
- Гуру
- Сообщения: 2230
- Зарегистрирован: 04 янв 2011, 22:00
- Репутация: 1503
- Откуда: Казань
Re: Из МСК-47-1 в WGS84 - искажения геометрии при правильном позиционировании
Вуаля! Округления в пределах ±5,6 м по широте и ±2,8 м по долготе
Последний раз редактировалось Игорь Белов 04 мар 2019, 18:58, всего редактировалось 1 раз.
The purpose of computing is insight, not numbers
-
- Интересующийся
- Сообщения: 49
- Зарегистрирован: 16 апр 2015, 19:02
- Репутация: 0
Re: Из МСК-47-1 в WGS84 - искажения геометрии при правильном позиционировании
то есть знаков после запятой должно быть 6 как минимум?
Последний раз редактировалось Zorgis 04 мар 2019, 19:01, всего редактировалось 2 раза.
- Игорь Белов
- Гуру
- Сообщения: 2230
- Зарегистрирован: 04 янв 2011, 22:00
- Репутация: 1503
- Откуда: Казань
Re: Из МСК-47-1 в WGS84 - искажения геометрии при правильном позиционировании
Просто помните, что один градус содержит примерно 10⁵ м.Zorgis писал(а): ↑04 мар 2019, 18:58то есть знаков после запятой должно быть 6?
Например, если хотите сохранить сантиметровую точность, оставляйте в градусах 5 + 2 = 7 знаков после запятой.
The purpose of computing is insight, not numbers
-
- Интересующийся
- Сообщения: 49
- Зарегистрирован: 16 апр 2015, 19:02
- Репутация: 0
Re: Из МСК-47-1 в WGS84 - искажения геометрии при правильном позиционировании
спасибо. использовал метод geotools
String geojson = new GeometryJSON().toString(resultGeom);
Он со знаками после запятой особо не церемонится.
видимо, придется писать свой парсер geojson.
String geojson = new GeometryJSON().toString(resultGeom);
Он со знаками после запятой особо не церемонится.
видимо, придется писать свой парсер geojson.
- Игорь Белов
- Гуру
- Сообщения: 2230
- Зарегистрирован: 04 янв 2011, 22:00
- Репутация: 1503
- Откуда: Казань
Re: Из МСК-47-1 в WGS84 - искажения геометрии при правильном позиционировании
Так-то ogr2ogr знает опцию COORDINATE_PRECISION:Zorgis писал(а): ↑04 мар 2019, 19:03видимо, придется писать свой парсер geojson
Код: Выделить всё
ogr2ogr -f GeoJSON parcels.json parcels.shp -lco COORDINATE_PRECISION=7
The purpose of computing is insight, not numbers
-
- Интересующийся
- Сообщения: 49
- Зарегистрирован: 16 апр 2015, 19:02
- Репутация: 0
Re: Из МСК-47-1 в WGS84 - искажения геометрии при правильном позиционировании
нашел, что в GeometryJSON() есть конструктор принимающий число знаков после запятой. по умолчанию 4. спасибо за подсказку.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 12 гостей