Добро пожаловать!

Войдите или зарегистрируйтесь сейчас!

Войти

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

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

  1. geod64

    Форумчанин

    Регистрация:
    21 фев 2013
    Сообщения:
    359
    Симпатии:
    10
    Адрес:
    GEOD64@MAIL.RU
    А можно попадробнее, немного не понял
     
    #101
  2. sergtor

    Форумчанин

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

    Вложения:

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

    Форумчанин

    Регистрация:
    25 ноя 2014
    Сообщения:
    3.253
    Симпатии:
    931
    Адрес:
    gnomtrir@mail.ru
    Существует, в базе Civil'а, можно вытащить через API
    А можно сделать свою "Категорию" и запихать туда все нужные
    _mapcscreate _category
     
    #103
    Inkon79 и sergtor нравится это.
  4. sergtor

    Форумчанин

    Регистрация:
    23 сен 2012
    Сообщения:
    1.715
    Симпатии:
    600
    Адрес:
    Ухта
    А можно более подробно. Как именно?
     
    #104
  5. trir

    Форумчанин

    Регистрация:
    25 ноя 2014
    Сообщения:
    3.253
    Симпатии:
    931
    Адрес:
    gnomtrir@mail.ru
  6. sergtor

    Форумчанин

    Регистрация:
    23 сен 2012
    Сообщения:
    1.715
    Симпатии:
    600
    Адрес:
    Ухта
    Сложновато для меня будет. Попытался "погуглить", что же это такое API ("для чайника") и получил забавный ответ:

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

    Форумчанин

    Регистрация:
    25 ноя 2014
    Сообщения:
    3.253
    Симпатии:
    931
    Адрес:
    gnomtrir@mail.ru
    #107
    sergtor нравится это.
  8. sergtor

    Форумчанин

    Регистрация:
    23 сен 2012
    Сообщения:
    1.715
    Симпатии:
    600
    Адрес:
    Ухта
    trir, в чем может быть проблема?
     

    Вложения:

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

    Форумчанин

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

    Форумчанин

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

    Вложения:

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

    Форумчанин

    Регистрация:
    25 ноя 2014
    Сообщения:
    3.253
    Симпатии:
    931
    Адрес:
    gnomtrir@mail.ru
    проект - в смысле проект Visual Studio
     
    #111
  12. Sergey13Kruglov

    Регистрация:
    22 апр 2018
    Сообщения:
    19
    Симпатии:
    32
     

    Вложения:

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

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

    Регистрация:
    18 май 2007
    Сообщения:
    21.789
    Симпатии:
    7.068
    Адрес:
    Россия
    Только Автодеск может игнорировать EPSG - дебилы
     
    #113
  14. trir

    Форумчанин

    Регистрация:
    25 ноя 2014
    Сообщения:
    3.253
    Симпатии:
    931
    Адрес:
    gnomtrir@mail.ru
    он не игнорирует - они там есть, но не у всех СК есть EPSG
     
    #114
  15. valeo

    Регистрация:
    22 фев 2011
    Сообщения:
    17
    Симпатии:
    6
    Адрес:
    Ташкент - Обнинск - Гагарин >> Москва
    Screenshot_1.png
    Не подскажите как с этим бороться?
     
    #115
  16. trir

    Форумчанин

    Регистрация:
    25 ноя 2014
    Сообщения:
    3.253
    Симпатии:
    931
    Адрес:
    gnomtrir@mail.ru
    установи права на запись
     
    #116
    Андрей Мороз нравится это.
  17. Georg Keneberg

    Форумчанин

    Регистрация:
    6 мар 2019
    Сообщения:
    61
    Симпатии:
    17
    Адрес:
    Санкт-Петербург
    Добрый день!
    Попробовал попрактиковаться в обращении к библиотеке с помощью 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);
     
    }

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

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

    Форумчанин

    Регистрация:
    6 мар 2019
    Сообщения:
    61
    Симпатии:
    17
    Адрес:
    Санкт-Петербург
    Добавлю вариант .. который должен работать но он не работает. Самое интересное что ошибок нет. и счетчик выводит верное число потенциальных правок, но библиотека не меняется. Для простоты я создал категорию в Сивиле, внес в нее 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();
    }
     
    #118
  19. trir

    Форумчанин

    Регистрация:
    25 ноя 2014
    Сообщения:
    3.253
    Симпатии:
    931
    Адрес:
    gnomtrir@mail.ru
    а проек можно посмотреть, а то собирать лениво...
     
    #119
  20. Georg Keneberg

    Форумчанин

    Регистрация:
    6 мар 2019
    Сообщения:
    61
    Симпатии:
    17
    Адрес:
    Санкт-Петербург
    Мммм, я запускаю через Dynamo :((((( - для него просто делаю как для конечной платформы
    Если такой вариант устроит?

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

    Вложения:

    #120

Поделиться этой страницей

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