Карты яндекса

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4615
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

Карты яндекса

Сообщение finsoftrz »

Сегодня спросили про такую возможность. Есть список адресов, по которым доставляются товары. Надо построить маршрут и посчитать километраж. В принципе, адреса известные, можно в базе данных хранить долготу и широту. Яндекс предоставляет такой сервис, наверно, платный. Никто не реализовывал такое у себя в программах? Как я понимаю, можно встроить в кларионовскую программу через ole. Либо есть ещё вариант реализовать на php/javascript, выгрузив массив долгота/широта. Либо, может лайтовый вариант готового инструмента, чтобы достаточно туда скопипастить массив координат.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7373
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Карты яндекса

Сообщение Игорь Столяров »

Несколько лет назад тёрли эту тему, в контексте получения координат через GPRS планшета.
Но в принципе достаточно точно получить и координаты стационарного компьютера.
Статические карты в Yandex бесплатные, динамика API по подписке.
Получить карту по координатам:

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

GetYandexMap         PROCEDURE  (xPoint_,xNLoc_)
Loc:ExName           STRING(255)
Loc:URL              CSTRING(4096)
Loc:Latitude         REAL
Loc:Longitude        REAL
Loc:Layer            BYTE 
  CODE

  Loc:Latitude  = xPoint_[ 1:20]
  Loc:Longitude = xPoint_[21:40]

  If (Loc:Latitude <> 0) and (Loc:Longitude <> 0)

     Loc:Layer     = Int(xNLoc_[01:10])
     If ~InRange(Loc:Layer,1,2) then Loc:Layer = 1.

     Loc:ExName = Clip(GetRAMPath()) & Clip(GetGUID()) & '.png'  ! Имя временного файла для картинки карты
     If Exists(Clip(Left(Loc:ExName))) then Remove(Clip(Left(Loc:ExName))).
                                                               
     Loc:Url = 'http://static-maps.yandex.ru/1.x/'        & |
               '?ll=' & Clip(Left(Format(Loc:Longitude,@n-_14.6))) & ',' & Clip(Left(Format(Loc:Latitude,@n-_14.6))) & |
               '&size=650,450'                            & |
               '&z=' & Clip(Left(Format(16,@n_2)))        & |
               '&l=' & Choose(Loc:Layer,'map','map,trf')  & |
               '&pt=' & Clip(Left(Format(Loc:Longitude,@n-_14.6))) & ',' & Clip(Left(Format(Loc:Latitude,@n-_14.6))) & ',flag'

               !'&scale=1.5'                               & |
        
     If LoadFileHTTP(Loc:ExName,Loc:Url,'','',False,0)    ! Загрузка файла из Internet
        If Exists(Clip(Left(Loc:ExName)))
           Message(Loc:ExName)  ! ЗДЕСЬ КАРТИНКА С КАРТОЙ
        else
           Message('Нет доступа к картографическому сервису !','У нас проблема !',Icon:Exclamation,'&1. Закрыть')
        end
     end

     If Exists(Clip(Left(Loc:ExName))) then Remove(Clip(Left(Loc:ExName))).
  else
     Message(' Нет доступа к данным GPS / ГЛОНАСС !','У нас проблема',Icon:Exclamation,'&1. Закрыть')
  end
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4615
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

Карты яндекса

Сообщение finsoftrz »

На статических, как я понимаю, маршрут не посчитаешь?
Глянул цены на подписку, довольно высокие.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7373
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Карты яндекса

Сообщение Игорь Столяров »

finsoftrz писал(а): 07 Декабрь 2022, 13:26 маршрут не посчитаешь
Там нужно посмотреть API.
Точно помню, что была передача массива координат для расчёта длины маршрута для статики.
Яндекс в последние пол-года все что можно переводит на коммерцию - нужно смотреть по факту сейчас.
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Карты яндекса

Сообщение Admin »

Вот что я делал.

Во первых делал кастомную карту с регионами для определения района по адресу.
2022-12-07_21-37-00.png
Адреса с координатами у нас откуда то были.
Регионы сливал как то по по апи с карт к себе в MS SQL базу.
И MS SQL методами находил вхождение координат в регион.
Функционал такой вроде есть в MS SQL

Еще формировал маршрут наших автомобилей (координаты коробочки из машин к нам в MS SQL лили как то там) через сгенереный html с JS кодом. Т.е. локально открывался файл, показывал маршрут каждого автомобиля.

Расчет маршрута нам не нужен был хотя я предлагал подумать. Просто народ кто на доставке лучше знает куда и что. Моментов масса.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4615
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

Карты яндекса

Сообщение finsoftrz »

Вопрос задали конкретно про автоматический расчёт расстояния доставки, в целях исключения человеческого фактора. Типа логисты могут ошибаться, злоупотреблять, хотелось бы контролировать их работу.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7373
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Карты яндекса

Сообщение Игорь Столяров »

finsoftrz писал(а): 07 Декабрь 2022, 15:23 про автоматический расчёт расстояния доставки
Ну это только если доставка катапультой или дроном. :)
А как по карте расчитать маршрут по дорогам ?
Это только если сам сервис будет строить маршрут от А до Б и считать его ...
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Карты яндекса

Сообщение Admin »

Считает. Даже с учетом пробок.
Другой вопрос если нужно еще и время доставки учитывать.
Придется запариваться и подбирать заказы на маршрут
https://yandex.ru/dev/maps/jsapi/doc/2. ... outer.html
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Карты яндекса

Сообщение Admin »

Путь как то так рисовал
2022-12-08_09-12-13.png

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

<!DOCTYPE html>
<html>
<head>
    <title>HINO 300 - В219СЕ</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <script src="http://api-maps.yandex.ru/2.1/?lang=ru_RU" type="text/javascript"></script>
    <style>
    html, body, #map {
        width: 100%;
        height: 100%;
        padding: 0;
        margin: 0;
    }
    #controls{
          font-family:arial;
     font-size:12px;
        text-transform: uppercase;
     font-weight:bold;
      position:absolute;
     top:0px;
       left:0px;
      margin:2px;
            padding:3px;
           background:white;
      -webkit-box-shadow: 1px 1px 5px 1px rgba(0,0,0,0.25);
          -moz-box-shadow: 1px 1px 5px 1px rgba(0,0,0,0.25);
             box-shadow: 1px 1px 5px 1px rgba(0,0,0,0.25);
          opacity:0.8;
    }
    </style>
</head>
<body>
<div id="map"></div>
<script type="text/javascript">
var myMap;
var myData = [
{date: '07.12.2022',type: 'path',name: 'Фактический путь',color: "#0000FF",namecolor: 'blue',data: [[         48.46219500,        135.10121167],[         48.46241167,        135.10164167],[         48.46284667,        135.10200000],[         48.46327000,        135.10128167],[         48.46383167,        135.10190500],[         48.46390167,        135.10196667],[         48.46398500,        135.10218167],[         48.46375500,        135.10264667],[         48.46304667,        135.10234000],[         48.46251667,        135.10171500],[         48.46204667,        135.10116667],[         48.46126667,        135.10037500],[         48.46084167,        135.10104000],[         48.46086500,        135.10137500],[         48.46093000,        135.10075000],[         48.46029667,        135.09963167],[         48.45988667,        135.09897667],[         48.45963500,        135.09820500],[         48.46083667,        135.09728000],[         48.46191500,        135.09669167],[         48.46541667,        135.09625500],[         48.46945667,        135.09560667],[         48.47146667,        135.09505667],[         48.47353167,        135.09419167],[         48.47537667,        135.09279667],[         48.47775167,        135.09079000],[         48.47862000,        135.09019500],[         48.47863667,        135.09018167],[         48.47802667,        135.08902667],[         48.47721167,        135.08766667],[         48.47816667,        135.08624000],[         48.47835667,        135.08588667],[         48.47895000,        135.08504167],[         48.47964167,        135.08405167],[         48.48019167,        135.08334000],[         48.48067000,        135.08261667],[         48.47948167,        135.08057167],[         48.47840667,        135.07863667],[         48.47786667,        135.07737000],[         48.48008167,        135.07406667],[         48.48138000,        135.07233167],[         48.48237167,        135.07368000],[         48.48300500,        135.07470000],[         48.48403167,        135.07635500],[         48.48503500,        135.07796000],[         48.48582667,        135.07922167],[         48.48650667,        135.08039167],[         48.48744667,        135.08192167],[         48.48760167,        135.08246667],[         48.48813500,        135.08337000],[         48.48861500,        135.08404167],[         48.48917667,        135.08376667],[         48.49002167,        135.08379167],[         48.49015167,        135.08362167],[         48.49016667,        135.08378167],[         48.49004667,        135.08389167],[         48.49006000,        135.08399167],[         48.49027667,        135.08380500],[         48.49020167,        135.08394500],[         48.49022167,        135.08358167],[         48.49392167,        135.10467500],[         48.39661667,        135.10727167],[         48.39014667,        135.10940167],[         48.39037000,        135.10917667],[         48.36688000,        135.03200667],[         48.36692667,        135.03190667],[         48.36568667,        135.02826167],[         48.36512500,        135.02584500],[         48.36479667,        135.02338500],[         48.36446667,        135.02109167],[         48.36404667,        135.01826500],[         48.36391167,        135.01407667],[         48.36254500,        135.01055500],[         48.36053167,        135.00940167],[         48.35892167,        135.00871167],[         48.35598167,        135.00702000],[         48.35502667,        135.00855500],[         48.35460000,        135.01037000],[         48.35334667,        135.01061167],[         48.35298000,        135.01251667],[         48.35278000,        135.01304667],[         48.35259500,        135.01341000],[         48.36629667,        135.05058667],[         48.36699500,        135.05267500],[         48.36927667,        135.05495500],[         48.37052667,        135.05970000],[         48.36966167,        135.06289667],[         48.36871000,        135.06568167],[         48.36918500,        135.06962667],[         48.37127167,        135.07033167],[         48.37338667,        135.07103667],[         48.37522167,        135.07165000],[         48.37719500,        135.07259500],[         48.37895167,        135.07289167],[         48.38022500,        135.07357167],[         48.38097000,        135.07626000],[         48.38210667,        135.07855167],[         48.38394500,        135.08169167],[         48.38617167,        135.08432000],[         48.38831167,        135.08580000],[         48.39079667,        135.08747667],[         48.39674667,        135.09415667],[         48.39837667,        135.09696000],[         48.39821667,        135.09737500],[         48.39819667,        135.09783667],[         48.39880000,        135.09806667],[         48.39939667,        135.09831667],[         48.40017667,        135.09863500],[         48.40136667,        135.09916000],[         48.40082167,        135.10044167],[         48.40126667,        135.10080667],[         48.40168500,        135.10097500],[         48.40199167,        135.10120167],[         48.40197667,        135.10125500],[         48.40187667,        135.10104167],[         48.40102667,        135.10073167],[         48.40077000,        135.10051667],[         48.40132167,        135.09939500],[         48.40071667,        135.09885667],[         48.39895667,        135.09814667],[         48.39847167,        135.09792167],]},{date: '07.12.2022',type: 'route',name: 'Путевой лист 1194',color: "#FF0000",namecolor: 'red',data: ['г. Хабаровск,680007, г. Хабаровск, ул. Волочаевская, 8','г. Хабаровск,ул. Ким Ю Чена, 44','г. Хабаровск,ул Промышленная, дом 19','г. Хабаровск,ул Космическая, дом 9-б, кв. 78','г. Хабаровск,пер Инский, дом 9, кв. 29','г. Хабаровск,ул Краснореченская, дом 167, кв. 186','г. Хабаровск,г. Хабаровск, ул. Суворова, 25','г. Хабаровск,ул Краснореченская, дом 42, кв. 5','г. Хабаровск,ул Ворошилова, дом 21, кв. 29','г. Хабаровск,ул Панфиловцев, дом 47, кв. 62','г. Хабаровск,ул Малиновского, дом 37, кв. 72','г. Хабаровск,ул Автобусная, дом 14-а, кв. 33','г. Хабаровск,ул Автобусная, дом 2а, кв. 1','г. Хабаровск,пер Кадровый, дом 3, кв. 96','г. Хабаровск,пер Кедровый, дом 3, кв. 85','г. Хабаровск,р-н Хабаровский, с Краснореченское, ул Весенняя, дом 12','г. Хабаровск,ул Герцена, дом 1, кв. 15','г. Хабаровск,ул Краснореченская, дом 81, кв. 64','г. Хабаровск,ул Калинина, дом 135, кв. 114','г. Хабаровск,пер Кавалерийский, дом 2-а','г. Хабаровск,ул. Волочаевская, 8',]},
/*
      {
              date: '02.06.2017',
            type: 'path',
          name: 'Фактический путь',
               color: "#0000ff",
              namecolor: 'red',
              data: [[48.46371500, 135.10156000], [48.46371500, 135.10155667], [48.46356167, 135.10134667]]
  },
     {
              date: '02.06.2017',
            type: 'route',
         name: 'Путевой лист 1',
             color: "#006400",
              namecolor: 'darkGreen',
                data: ['г. Хабаровск, ул. Волочаевская, 8', 'г. Хабаровск,ул Оборонная, дом 8б, кв. 26', 'г. Хабаровск,пер Молдавский, дом 7, кв. 49']
  },
*/
];
ymaps.ready(function () {
    myMap = new ymaps.Map('map', {center: [48.461, 135.100], zoom: 16, controls:[]});

      for (var i = 0; i < myData.length; i++) {
        if (myData[i].type == 'path'){
            poliline = new ymaps.Polyline(myData[i].data, {balloonContent: myData[i].name}, {
                balloonCloseButton: true,
                strokeColor: myData[i].color,
                strokeWidth: 2,
                strokeOpacity: 1,
                visible:true
            });
            myMap.geoObjects.add(poliline);
              myMap.setBounds(poliline.geometry.getBounds());
            $('#controls').append('<div class="var">'+'Дата &#151; ' + myData[i].date+'</div>');
            $('#controls').append('<div class="var" style="color:'+myData[i].color+';">'+myData[i].name+' &#151; <span>'+Math.round(getDistance(poliline, myMap) / 1000)+' км.</span></div>');
        } else if (myData[i].type == 'route'){
                   var i1 = i;
            ymaps.route(myData[i1].data, {mapStateAutoApply: true}).then(function (route) {
                route.getPaths().options.set({
                    balloonContentBodyLayout: ymaps.templateLayoutFactory.createClass('$[properties.humanJamsTime]'),
                    strokeWidth: 2,
                    opacity: 0.8,
                     visible:true
                });
                var points = route.getWayPoints(),lastPoint = points.getLength() - 1;
                points.options.set('preset', 'islands#'+myData[i1].namecolor+'StretchyIcon');
                //points.get(0).properties.set('iconContent', 'Точка отправления');
                //points.get(lastPoint).properties.set('iconContent', 'Точка прибытия');
                         route.getPaths().options.set('strokeColor',myData[i1].color);
                myMap.geoObjects.add(route);
             $('#controls').append('<div class="var" style="color:'+myData[i1].color+'">'+myData[i1].name+' &#151; <span>'+Math.round(route.getLength() / 1000)+' км.</span></div>');
            });
        }
    }

});
function getDistance(polyline, map) {
    var geometry = polyline.geometry,
        points = geometry.getCoordinates(),
        coordSystem = map.options.get('projection').getCoordSystem(),
        distance = 0;
    for (var i = 0, k = geometry.getLength() - 1; i < k; i++) {
        distance += coordSystem.getDistance(points[i], points[i + 1]);
    }
    return distance;
}
</script>
<div id="controls">
</div>
</body>
</html>
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4615
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

Карты яндекса

Сообщение finsoftrz »

Мне кажется, что те, кто спросил, сами не очень понимают, что хотят. Считать километраж по интернет картам есть смысл только для приблизительной оценки, все равно деньги платить надо по факту (тахометру, например). Увидели, что соседняя контора на 1с8 подключила, но там несколько иные цели и задачи (доставка всяких дверей, бытовой техники и т.п. частным лицам). А у них оптовка, где места доставки (магазины) заранее известны. Послали их пока выяснять у соседей, что и по чем им обходится использование этого сервиса.

К слову, я когда-то давно пытался сделать в приложении стационарные карты. То есть сохраняется скрин карты, на него можно накладывать кликабельные зоны (для открытия более подробной карты), клиентов, отметки маршрута проезда. Запустить в реальную работу не состоялось.

Это скриншот окна настройки.
geogr1.jpg

Это рабочее окно.
geogr2.jpg
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7373
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Карты яндекса

Сообщение Игорь Столяров »

Мне кажется, что задача "расчёт стоимости по длине маршрута доставки" - это то что хотят продать в 1С,
а не то что нужно для работы. ;) Могу сказать по Ростову. В микрорайонах можно за день объехать 15 точек,
а в Центре можно встать в пробку и тупо стоять 2 часа. Поэтому доставка 3-4 клиентам в Центре - это супер.

Обычно город делится на зоны / районы и для них выставляется стоимость доставки.
Это и клиентам понятно и не надо что-то мудрённо высчитывать по длине дороги и т.д.

В доставке геолокация имеет смысл постфактум.
- Привезли товар - запомнили геометку со временем и т.д. для каждой точки.
Можно потом анализировать эффективность выбранного маршрута, простой машины и т.д.
- Можно делать задания (график) доставки и отслеживать его выполнение водителем.
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4615
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

Карты яндекса

Сообщение finsoftrz »

Там не в 1с дело. Что-то типа нашего ole контрола, в нем карты яндекса. Доставка по нескольким областям.
C6/C11, ШВС, tps/btrieve.
kreator
✯ Ветеран ✯
Сообщения: 4983
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 20 раз

Карты яндекса

Сообщение kreator »

Я считаю имеет смысл строить маршрут по статическим данным. Пробки, заторы, аварии не просчитать. Во всяком случае, на несколько порядков сложней. Да и то это будет на какой-то момент времени. Допустим, на начало поездки.
We are hard at work… for you. :)
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4615
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

Карты яндекса

Сообщение finsoftrz »

Клиент не слезает, пришлось делать. В результате решение такое, на бесплатном тарифе яндекса (в принципе, укладываемся). Сервер у клиента выхода в интернет не имеет, самое простое взаимодействовать с веб броузером через буфер обмена.

В учетной системе в документе "Доставка" добавили кнопку ""Копировать". После нажатия на нее в буфер обмена кладутся строки с названием грузополучателя и его адресом, разделенные символом <10>. То есть на каждого грузополучателя по 2 строки.

map1.jpg

На сайте сделана отдельная страничка для логиста. В ней текстовое поле ввода. Щелкаем на него правой кнопкой мышки, Вставить, наши строки появляются. Затем нажимаем кнопку "Оптимизировать". Яндекс не предоставляет в api средств оптимизации маршрута, а строит его в порядке следования точек в списке. Поэтому вначале преобразуем список по такому алгоритму. Берем начальную пункт отправления (он скрыт, его нет в текстовом поле), находим следующий, ближайший к нему по расстоянию (расстояние определяем запросом к яндексу). Затем за начальный принимаем этот пункт, ищем ближайший к нему среди оставшихся и т.д. После расчета обновляем текстовое поле на страничке, пункты доставки получаются в нужном порядке. Затем нажимаем кнопку "Вывести", открываем карту и наносим на нее полученный маршрут. Выводим его протяженность и время следования. В карте яндекса есть системная кнопка "Маршрут", которая открывает полученный маршрут на их страничке, вот там тоже есть кнопка "Оптимизация", но она имеет ограничение бесплатного использования 8 или 10 пунктов, этого мало.

map2.jpg

Страничка писалась на javascript. Это трудно, язык очень сложен в восприятии. То переменные определяются внутри параметров функции, то наоборот, все через collback события, рекурсия и т.п. Вообще не понимаю, как люди с этим работают. Видимо, нужна постоянная практика. Без нее очень много времени уходит. Php в этом плане намного проще и понятнее.
C6/C11, ШВС, tps/btrieve.
Stalker
Активист
Сообщения: 127
Зарегистрирован: 01 Декабрь 2005, 20:47
Откуда: Минск
Контактная информация:

Карты яндекса

Сообщение Stalker »

Вообще-то на мой взгляд, для таких специфических задач имеется свой инструментарий.
К примеру QGIS, бесплатный инструментарий со встроенным python , имеется достаточное количество библиотек для решения любых аналогичных задач. Как минус требуется установка и начальное обучение, не взаимодействует через Инет, но если задача не единичная, то себя оправдает.
Другой вариант для Инет: связка Flask-python-folium. Делаются расчеты и сервер (flask) формирует html страницу, которая прикрепляется к сайту предприятия. Координаты точек можно хранить в простом тхт файле. Как пример Flask-python-folium можно посмотреть на моем сайте:
https://stalker60.pythonanywhere.com
Но это уже без clarion.
Специализация - программы для образования, делопроизводство, складской учет
Ответить