как перевести координаты?

0 голосов
спросил 22 Янв, 07 от DimkO (120 баллов) в категории Программные продукты Esri
Пишу аппликацию под асп.Нет, использую ArcGis.Server 9.2 .Возник вопрос : приходят координаты в формате широты и долгота, как перевести в MapPoint? 
заранее благодарен

6 Ответы

0 голосов
ответил 13 Март, 07 от Aliquis (320 баллов)
Хочу присоедениться к вопросу. Приоблема похожая: в БД SDE карта хранится уже в проекции. Следовательно, координаты возвращаются в метрах. А как получить координаты в градусах широты и долготы (нужно, чтобы передавать в другие информационные системы)?
0 голосов
ответил 13 Март, 07 от 7600702 (3,780 баллов)
хочу ответить на вопрос Wink.

используйте
ISpatialReferenceFactory.CreateGeographicCoordinateSystem
именно это там и решается в том числе
0 голосов
ответил 15 Март, 07 от Aliquis (320 баллов)
Не очень понял, при чем здесь ISpatialReferenceFactory.CreateGeographicCoordinateSystem и как это использовать...

Еще раз повторюсь. Нужно из проекции, в которой данные лежат в БД, получить градусы. Проекция в метрах.
Я делаю так (Java):

    //Получение проекции
    ProjectedCoordinateSystem projCoorSys = new ProjectedCoordinateSystem(map.getSpatialReference());              
    //Расположение центрального меридиана
    double centrMer = projCoorSys.getCentralMeridian(true);

    //Смещение по осям
    double falseEasting = projCoorSys.getFalseEasting();
    double falseNorthing = projCoorSys.getFalseNorthing();

    java.awt.Point transPoint;
    // в transPoint хранятся X и Y координаты точки в проекции, т.е. в метрах
    IUnitConverter unitConverter = new IUnitConverterProxy(serverObjectContext.createObject(UnitConverter.getClsid()));
       
    //Конвертация в градусы
    double convUnitX = unitConverter.convertUnits(transPoint.getX()-falseEasting, esriUnits.esriMeters, esriUnits.esriDecimalDegrees)+centrMer;
    double convUnitY = unitConverter.convertUnits(transPoint.getY()-falseNorthing, esriUnits.esriMeters, esriUnits.esriDecimalDegrees);

covUnitX выдает результаты, похожие на правду, а вот в convUnitY получается результат явно неправильный, погрешность которого меняется в зависимости от широты.     

Так что вопрос остается открытым, как же все-таки получить у карты, которая хранится в проекции координаты в виде градусов?    
0 голосов
ответил 15 Март, 07 от 7600702 (3,780 баллов)
хорош метод. мне всегда думалось, что
IUnitConverter необходим для изменения единиц измерения карты. так прямо в доке и написано.

а вот для задачи, которую Вы себе ставите, нужно делать именно пересчет из известной проекции А в проекцию Б
штукой, которую я выше привел

напрмиер, конвертим из А(не знаю вашу) в Б (наверное, вгс?), то тогда
их потребуется пара и метод Project для собственно пересчета

сначала установка проекции А, вызов project для точки

затем для этой же точки устанвка Б и вызов Project и все ок
0 голосов
ответил 15 Март, 07 от Aliquis (320 баллов)
В общем, project сработал, выдал правильные результаты:

//Получение проекции
ProjectedCoordinateSystem projCoorSys = new ProjectedCoordinateSystem(map.getSpatialReference());
java.awt.Point transPoint; //здесь лежит точка в координатах карты, т.е. - в метрах
//...
// Перевод из проекционных координат (метров) в WGS-84 (градусы)
IPoint pPoint = new IPointProxy(serverObjectContext.createObject(Point.getClsid()));
pPoint.setX(transPoint.getX());
pPoint.setY(transPoint.getY());
pPoint.project(projCoorSys);
pPoint.project(projCoorSys.getGeographicCoordinateSystem());
0 голосов
ответил 15 Март, 07 от 7600702 (3,780 баллов)
ура, но в этом не участвовал :)

призы в студию!

(смотрим внимательно, это сообщение будет удалено, как и многие другие мои сообщения из этого форума)
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...