Задание системы координат

Тема в разделе "Map 3D", создана пользователем anton253, 17 апр 2012.

  1. geod64

    geod64 Форумчанин

    А можно попадробнее, немного не понял
     
  2. sergtor

    sergtor Форумчанин

    Доброго времени суток всем! Подскажите, кто в курсе. Существует ли в "природе" список сокращенных кодов систем координат?(скрин). Утомительно, иногда, рыться в этом длинном перечне библиотеки. Спасибо!
     

    Вложения:

    • Image 010.png
      Image 010.png
      Размер файла:
      6,6 КБ
      Просмотров:
      49
  3. trir

    trir Форумчанин

    Существует, в базе Civil'а, можно вытащить через API
    А можно сделать свою "Категорию" и запихать туда все нужные
    _mapcscreate _category
     
    Inkon79 и sergtor нравится это.
  4. sergtor

    sergtor Форумчанин

    А можно более подробно. Как именно?
     
  5. trir

    trir Форумчанин

  6. sergtor

    sergtor Форумчанин

    Сложновато для меня будет. Попытался "погуглить", что же это такое API ("для чайника") и получил забавный ответ:

    Оффтоп
    "У вас есть собака. Но она не разговаривает на человеческом языке. Однако она способна "понимать" его путём команд, которым её научили в процессе дрессировки. Если сказать пёсику, знающему команду "тапки!" что-то типа "Рексик, принеси мне, пжалста, тапули мои с зайчушками", он разве что на кличку ухом поведёт, но тапки не принесёт. Так вот, API - это набор команд, с помощью которых ваш пёсик вас понимает и делает то, что вам нужно. Это очень сильно упрощённо и для чайника, но суть понятна, думаю".
     
  7. trir

    trir Форумчанин

    sergtor нравится это.
  8. sergtor

    sergtor Форумчанин

    trir, в чем может быть проблема?
     

    Вложения:

    • Image 3.png
      Image 3.png
      Размер файла:
      29 КБ
      Просмотров:
      57
    • Image 4.png
      Image 4.png
      Размер файла:
      18,7 КБ
      Просмотров:
      52
  9. trir

    trir Форумчанин

    что то ты совсем не то делаешь - такой dll'ки вообще нет, нужно подключать OSGeo.MapGuide.Geometry.dll
    C:\Program Files\Autodesk\AutoCAD 2017\Map\OSGeo.MapGuide.Geometry.dll
    --- Сообщения объединены, 17 июл 2018, Оригинальное время сообщения: 17 июл 2018 ---
    проект выложи - больше смогу подсказать
     
    Андрей Мороз и sergtor нравится это.
  10. sergtor

    sergtor Форумчанин

    Я не из проекта хочу вытащить коды. Мне нужна общая база кодов (список) систем координат. Чтобы проще было назначать нужную СК. По примеру WGS-84. Не залезая в структуру библиотеки, ввожу код: ll-84.
     

    Вложения:

    • Image 7.png
      Image 7.png
      Размер файла:
      44,7 КБ
      Просмотров:
      35
    • Image 8.png
      Image 8.png
      Размер файла:
      27 КБ
      Просмотров:
      35
  11. trir

    trir Форумчанин

    проект - в смысле проект Visual Studio
     
  12.  

    Вложения:

    • mapping.txt
      Размер файла:
      96,5 КБ
      Просмотров:
      53
    sergtor нравится это.
  13. X-Y-H

    X-Y-H Администратор Команда форума

    Только Автодеск может игнорировать EPSG - дебилы
     
  14. trir

    trir Форумчанин

    он не игнорирует - они там есть, но не у всех СК есть EPSG
     
  15. Screenshot_1.png
    Не подскажите как с этим бороться?
     
  16. trir

    trir Форумчанин

    установи права на запись
     
    Андрей Мороз нравится это.
  17. Georg Keneberg

    Georg Keneberg Форумчанин

    Добрый день!
    Попробовал попрактиковаться в обращении к библиотеке с помощью OSGeo.MapGuide...dll
    В частности, получилось выводить списки системных/пользовательских СК в текстовой файл, формировать по ним полную версию библиотеки в формате XML, уточнять WKT код системы координат (дописывать численные параметры датума, которые Сивил по умолчанию не выводит). Но есть интересная проблема- что файл XML с экспортированной библиотекой не содержит имени категории (Category.csd). В самом Сивиле это не критично, но вот из-под того же InfraWorks нереально вызвать систему координат без категории.
    Что я пытался - сменить имя категории, но там не все так просто. Как я понял все транзакции к изменению (добавлению новых определений) базы данных Библиотеки проходят только после закрытия Сивила (редактирование существующих вроде как не требует закрытия).
    Есть метод
    MgCoordinateSystemCategoryDictionary.NewCategory();
    Но даже если попробовать создать категорию внутри Сивила - то в нее обязательно нужно добавить хотя бы одно определение СК. А вот как перебирая наименования СК вытаскивать их категории или тем паче менять я вообше не понял - с вытаскиванием имен вроде бы код есть (см. ниже) но он длится бесконечно (я отрубал через пару минут)
    Имя категорий текущей СК (раскрыть)

    Код:
    public static string GetCategoriesOfCS(string CS_value)
    {
    var guid = Guid.NewGuid();
    MgCoordinateSystemFactory coordSysFactory = new MgCoordinateSystemFactory();
    MgCoordinateSystemCatalog csCatalog = coordSysFactory.GetCatalog();
    MgCoordinateSystemDictionary csDict = csCatalog.GetCoordinateSystemDictionary();
     
    MgCoordinateSystemEnum csDictEnum = csDict.GetEnum();
    int csCount = csDict.GetSize();
    MgStringCollection csNames = csDictEnum.NextName(csCount);
    MgStringCollection csCatNames;
    string csName = null;
    string csCatName = null;
    MgCoordinateSystem cs = null;
    bool csProtect;
    //string csCat = null;
    int i5 = 0;
    string writePath = $@"C:\Users\GeorgKeneberg\Documents\Temp\LOG\{guid}3.log";
    string result = null;
    //Перебираем словарь СК
    for (int i2 = 0; i2 < csCount; i2++)
    {
    csName = csNames.GetItem(i2);
    cs = csDict.GetCoordinateSystem(csName);
    csProtect = cs.IsProtected();
    csCatNames = cs.GetCategories();
    //Сравниваем с данной строкой
    if (csName == CS_value && csProtect == false) //csProtect == false && c
    {
    do
    {
    csCatName = csCatNames.GetItem(i5);
    using (StreamWriter export_file = new StreamWriter(writePath, true, Encoding.UTF8))
    {
    export_file.WriteLine(csCatName);
    export_file.Close();
    export_file.Dispose();
    }
    i5++;
    } while (csCatNames.GetItem(i5) != null);
    result = i5.ToString();
    }
    }
    result = "Не найдено";
    return result;
    }

    При том что другие операции с библиотекой категорий проходят успешно - это например вытаскивание списка категорий во внешний файл (код ниже)
    Извлечение наименований категорий (раскрыть)

    Код:
    public static string GetListAndCountOfCategories() //Работает!
    {
    var guid = Guid.NewGuid();
    MgCoordinateSystemFactory coordSysFactory = new MgCoordinateSystemFactory();
    MgCoordinateSystemCatalog csCatalog = coordSysFactory.GetCatalog();
    MgCoordinateSystemCategoryDictionary csDictCat = csCatalog.GetCategoryDictionary();
     
    MgCoordinateSystemEnum csDictCatEnum = csDictCat.GetEnum();
    int csCatCount = csDictCat.GetSize();
    MgStringCollection csCatNames = csDictCatEnum.NextName(csCatCount);
    string csCategoryName = null;
     
    string writePath = $@"C:\Users\GeorgKeneberg\Documents\Temp\LOG\{guid}.log";
     
    for (int i3 = 0; i3<csCatCount; i3++)
    {
    csCategoryName = csCatNames.GetItem(i3);
    using (StreamWriter export_file = new StreamWriter(writePath, true, Encoding.UTF8))
    {
    export_file.WriteLine(csCategoryName);
    export_file.Close();
    export_file.Dispose();
    }
    }
    return csCatCount.ToString();
    }

    Также успешно получалось переименовывать категории с помощью подобного кода:
    Переименование категорий (раскрыть)

    Код:
    public static void RenameCurrentCategory(string new_cat_name, string old_cat_name) //Работает!
    {
    MgCoordinateSystemFactory coordSysFactory = new MgCoordinateSystemFactory();
    MgCoordinateSystemCatalog csCatalog = coordSysFactory.GetCatalog();
    MgCoordinateSystemCategoryDictionary csDictCat = csCatalog.GetCategoryDictionary();
    csDictCat.Rename(old_cat_name, new_cat_name);
     
    }

    То есть обращаться к библиотеке категорий можно и менять ее - но вот как добавлять новую категорию и сразу изменить ее имя притом что для транзакции надо (?) перезапустить программу после чего естественно неименованная категория удалится, я что-то запутался :(. Ну и плюсом - как назначить СК из словаря новую категорию тоже непонятно ...

    Да, вопрос во многом экзотичный, но где еще задать его я даже не знаю
     
  18. Georg Keneberg

    Georg Keneberg Форумчанин

    Добавлю вариант .. который должен работать но он не работает. Самое интересное что ошибок нет. и счетчик выводит верное число потенциальных правок, но библиотека не меняется. Для простоты я создал категорию в Сивиле, внес в нее 1 СК и после перезапуска программы хочу внести все импортированные СК без категории в него (параметр в коде cs.IsProtected() возвращает false если система не защищена от редактирования (все пользовательские))
    Добавление списка СК в категорию (раскрыть)

    Код:
     public static string CStoCategory() //string Category_name
    {
    MgCoordinateSystemFactory coordSysFactory = new MgCoordinateSystemFactory();
    MgCoordinateSystemCatalog csCatalog = coordSysFactory.GetCatalog();
     
    MgCoordinateSystemDictionary csDict = csCatalog.GetCoordinateSystemDictionary();
     
    MgCoordinateSystemEnum csDictEnum = csDict.GetEnum();
    int csCount = csDict.GetSize();
    MgStringCollection csNames = csDictEnum.NextName(csCount);
     
     
    MgCoordinateSystem cs = null;
    string csName = null;
    bool csProtect;
     
    //Перебираем словарь СК
    int i1 = 0;
    for (int i2 = 0; i2 < csCount; i2++)
    {
    csName = csNames.GetItem(i2);
    cs = csDict.GetCoordinateSystem(csName);
    csProtect = cs.IsProtected();
     
    //Условие - если данная СК пользовательская (импортированная из XML)
    if (csProtect == false)
    {   //Пусть для примера для созданной категории с одной внесеной ск по имени "NewCategory"
    new MgCoordinateSystemFactory().GetCatalog().GetCategoryDictionary().GetCategory("NewCategory").AddCoordinateSystem(csName);
    i1++;
    }
    }
    return i1.ToString();
    }
     
  19. trir

    trir Форумчанин

    а проек можно посмотреть, а то собирать лениво...
     
  20. Georg Keneberg

    Georg Keneberg Форумчанин

    Мммм, я запускаю через Dynamo :((((( - для него просто делаю как для конечной платформы
    Если такой вариант устроит?

    Могу вот так - добавил во вложении
    --- Сообщения объединены, 10 ноя 2020, Оригинальное время сообщения: 10 ноя 2020 ---
    Сама сборочка для тренировки - на примере чего потестить - вот во вложении - распаковывать в "%LOCALAPPDATA%\Autodesk\User Geospatial Coordinate Systems"
     

    Вложения:

  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление
  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление