Dell Axim x51v c windows mobile 6.1 тоже жалуется на карту Москвы… Может ее от области отделить?
Уррра! Заработало!
Дальнейшие исследования карт показали, что на карте города-героя Ярославля = 2Мб, прибавляя кусочками по 5-10 км, можно построить взи амопересек ающийся маршрут (в форме звезды) общей длиной более 150 Км(!). Может и дальше можно было бы, но прямого кусочка и нехватки памяти на этот раз добиться не удалось даже до этой длины.
Тревога была напрасной! У меня всё работает, и маршруты прокладываю тся по дорогам.
Это таки да из-за карты, вернее из-за её размера.
Исследования показали, что, прибавляя по небольшому кусочку к маршруту, в Москве маршрут прокладывае тся по дорогам до длины в один километр, далее начинает говорить, что не хват. памяти и просит выгрузить лишние программы и начинает маршрут класть по прямой. Карта сентябрь 2009=6,9Мб.
В Питере прокладывае тся таким же образом до длины 15 Км, далее начинает класть по прямой. Карта июнь2010=6,5Мб.
По современной же карте Москвы июнь 2010 =10,6 Мб первый же кусочек длиной 26 м уже вызывает реальную перегрузку и кладется сразу по прямой!
Странно, что ни у кого больше такой проблемы не возникает!
Zkir, а можно сделать для тех, у кого пока не ХР в машине, ещё одну карту Москвы, без области в прямоугольнике в который вписан мкад с зазором в 5 Км? Если обрежутся при этом загородные районы Москвы типа Митина и Жулебина, не страшно. Главное, чтоб размерчик был мааааленкий!
Можно конечно.
Хотя для эксперимента ты и сам можешь ее сделать - открой файл в GME, и обрежь (Tools - Trim outside)
Я им пользоваться не умею, даже не знаю кто такой gme. наверно какойто greatest map editor? Знающему человеку быстро, а я на розыск, установку и изучение три дня потрачу…
а потом, я всё равно ее повесить на твоём сайте не смогу, да и обновляться она не будет, а может еще кому пригодится, маленькая карта одной москвы.
вот там выше ещё тоже кто-то просил сделать москву без области,- не все же из-за города на работу ездят, многие - на соседнюю улицу.
Вот я, например, в основном по москве езжу, в пределах мкад, мне область постоянно загруженная и не нужна вовсе.
Область на карте Москвы нужна - факт. В добрую половину городов на расстоянии 5-10 км от МКАДа и даже в пределах МКАДа часто удобнее проехать не “тупо прямо”, а “слегка в объезд”. От Волоколамки до Марьино, когда на МКАДе пробка, то всегда еду в объезд через область (кроме куска Калужское ш. - Бутово, там объезда нет). Экономия по времени до 2-х часов. На фоне того, что от Рублёвки до Можайки можно ехать час, а потом от Можайки до Тёплого стана ещё полтара - это не кислый выигрыш
Zkir, повесь пожалуйста маленькую карту москвы я сам не умею резать.
Повешу в понедельник, сейчас я вдали от цивилизации.
Собрал mp2rus на nc10/debian-squeeze-i386 (gcc-4.4).
Карта ЛО (с тремя из шести полос классификации в южной Карелии, еще не стертых к времени гислабовских поправок) занимает 15.7 Мб, и
сгенерировалась весьма шустро (превед лузерам из СГ 8)
и прекрасно работает на моем htcleo. Гармин 76Cx с этой картой, надо честно признать, тормозит.
Роутингом я не озадачивался, так что если у кого есть соображения, пишите сюда.
По крайней мере функциональность “магической” версии 27 мы будем иметь в опенсоурсном варианте.
Вот патч, который добавляет потерянный HuffmanCode.h, удаляет обкуренный синтаксис microsoft С++ и поддержку левых датумов:
diff -urN mp2rus/mapedit/HuffmanCode.h mp2rus-debian/mapedit/HuffmanCode.h
--- mp2rus/mapedit/HuffmanCode.h 1970-01-01 01:00:00.000000000 +0100
+++ mp2rus-debian/mapedit/HuffmanCode.h 2010-06-19 17:05:41.000000000 +0400
@@ -0,0 +1,91 @@
+# ifndef __HuffmanCode_H_
+# define __HuffmanCode_H_
+
+ //
+ // Huffman code table builder utility.
+ //
+ // NOTE: resulting codes lengths are assumed to be no longer then 32 bit.
+ //
+
+class CHuffmanCodeTable {
+ public:
+ CHuffmanCodeTable () :
+ m_cN (0),
+ m_pcP (NULL),
+ m_pcLen (NULL),
+ m_pdwCode (NULL),
+ m_cNonEmptyCodes (0)
+// m_bFlat (false),
+// m_bCanBeFlat (false)
+ {}
+ CHuffmanCodeTable (size_t _cN, bool _bCanBeFlat = false) {Init (_cN);}
+ ~CHuffmanCodeTable () {
+ delete [] m_pcP;
+ delete [] m_pcLen;
+ delete [] m_pdwCode;
+ }
+
+ void Init (size_t _cN) {
+ m_cN = _cN;
+ m_cNonEmptyCodes = 0;
+
+ m_pcP = new size_t [_cN*2];
+ m_pcLen = new size_t [_cN];
+ m_pdwCode = new DWORD [_cN];
+ ::memset (m_pcP, 0, sizeof (* m_pcP)*_cN*2);
+ ::memset (m_pcLen, 0, sizeof (* m_pcLen)*_cN);
+ ::memset (m_pdwCode, 0, sizeof (* m_pdwCode)*_cN);
+// m_bCanBeFlat = _bCanBeFlat;
+ }
+
+ void AddValue (size_t _cValue) {
+ assert (_cValue < m_cN);
+ if (m_pcP [_cValue] == 0) {
+ ++ m_cNonEmptyCodes;
+ assert (m_cNonEmptyCodes <= m_cN);
+ }
+ ++ m_pcP [_cValue];
+ }
+
+ void Build ();
+
+ size_t GetCodes () const {return m_cN;}
+ size_t GetNonEmptyCodes () const {return m_cNonEmptyCodes;}
+
+ bool IsCodePresent (size_t _cValue) const {
+ assert (_cValue < m_cN);
+ // NOTE: it is possible to have just one value in the table => with code len=0.
+ return GetCodeLen (_cValue) > 0 || m_pcP [_cValue] != 0;
+ }
+ size_t GetCodeLen (size_t _cValue) const {
+ assert (_cValue < m_cN);
+ return m_pcLen [_cValue];
+ }
+ const BYTE * GetCode (size_t _cValue) const {
+ assert (_cValue < m_cN);
+ return reinterpret_cast<const BYTE *> (& m_pdwCode [_cValue]);
+ }
+ const DWORD GetCodeValue (size_t _cValue) const {
+ assert (_cValue < m_cN);
+ return m_pdwCode [_cValue];
+ }
+
+ void BuildFlat ();
+// bool IsFlat () const {return m_bFlat;}
+ private:
+ bool _BuildTree ();
+ void _VisitNode (size_t * _pTreeLeft, size_t * _pTreeRight, size_t _cNode, DWORD _dwCode, size_t _cLen);
+
+ size_t m_cN;
+ size_t * m_pcP;
+
+ size_t * m_pcLen;
+ DWORD * m_pdwCode;
+
+ size_t m_cNonEmptyCodes;
+ size_t m_c17BitCodes;
+// bool m_bFlat;
+// bool m_bCanBeFlat;
+};
+
+# endif // __HuffmanCode_H_
diff -urN mp2rus/modified/TxtLoader.cpp mp2rus-debian/modified/TxtLoader.cpp
--- mp2rus/modified/TxtLoader.cpp 2009-09-26 12:50:52.000000000 +0400
+++ mp2rus-debian/modified/TxtLoader.cpp 2010-06-19 16:55:31.000000000 +0400
@@ -142,7 +142,7 @@
return i->second;
}
- std::auto_ptr<CTransformationBase> m_pDatumTransformation;
+// std::auto_ptr<CTransformationBase> m_pDatumTransformation;
};
LoadStatus_t loadTxt(const char * _strFileName, map_t * _pMap) {
@@ -206,7 +206,7 @@
const char * _GetValue (const char * _pKey, const char * _pEnd) {
if (_pKey >= _pEnd)
return _pEnd;
- const char * const p = reinterpret_cast<char *> (::memchr (_pKey, '=', _pEnd - _pKey));
+ const char * p = (const char *)memchr (_pKey, '=', _pEnd - _pKey);
return p ? p + 1 : _pEnd;
}
@@ -219,7 +219,7 @@
const char * p = _pBegin;
while (p + _cDelimiterLen <= _pEnd) {
- p = reinterpret_cast<char *> (::memchr (_pBegin, * _strDelimiter, _pEnd - p));
+ p = (const char *)memchr (_pBegin, * _strDelimiter, _pEnd - p);
if (p == NULL)
return _pEnd;
if (::memcmp (p + 1, _strDelimiter + 1, _cDelimiterLen - 1) == 0)
@@ -276,7 +276,7 @@
ReportWarning (_pValue - m_pStart, "The inverse flattening is expected to be about 300.");
CEllipsoid e (NULL, fA, 1/fInvFlattening);
- m_pDatumTransformation = std::auto_ptr<CTransformationBase> (new CMolodensky_To_WGS84 (e, fDX, fDY, fDZ));
+// m_pDatumTransformation = std::auto_ptr<CTransformationBase> (new CMolodensky_To_WGS84 (e, fDX, fDY, fDZ));
return true;
}
@@ -660,14 +660,14 @@
HasPrefix (_p + 2, pNextLine, "IMAGE,\"", 7) ||
HasPrefix (_p + 2, pNextLine, "FILE,\"", 6)
) {
- const char * strFileNameBegin = reinterpret_cast<char *> (::memchr (_p + 2, '\"', pNextLine - _p - 1));
+ const char * strFileNameBegin = (const char *)memchr (_p + 2, '\"', pNextLine - _p - 1);
if (strFileNameBegin)
++ strFileNameBegin;
else {
ReportWarning (_p - m_pStart, "Unexpected format of attachment definition.");
break;
}
- const char * const strFileNameEnd = reinterpret_cast<char *> (::memchr (strFileNameBegin, '\"', pNextLine - strFileNameBegin - 1));
+ const char * strFileNameEnd = (const char *)memchr (strFileNameBegin, '\"', pNextLine - strFileNameBegin - 1);
if (strFileNameEnd == NULL || strFileNameEnd > strFileNameBegin + MAX_PATH) {
ReportWarning (_p - m_pStart, "Unexpected format of attachment definition.");
break;
@@ -1502,7 +1502,7 @@
m_RoadID2Object.clear ();
m_NodeID2Node.clear ();
- m_pDatumTransformation = std::auto_ptr<CTransformationBase> (NULL);
+// m_pDatumTransformation = std::auto_ptr<CTransformationBase> (NULL);
m_pComment = NULL;
m_pLastSectionEnd = m_pStart;
@@ -1540,10 +1540,10 @@
// Transform datum, if any.
//
- if (m_pDatumTransformation.get ()) {
- ReportText ("Performing custom datum transformation to WGS 84...");
- m_pMap->TransformPoints (* m_pDatumTransformation.get ());
- }
+// if (m_pDatumTransformation.get ()) {
+// ReportText ("Performing custom datum transformation to WGS 84...");
+// m_pMap->TransformPoints (* m_pDatumTransformation.get ());
+// }
//
// Post-processing of [RESTRICT]'s.
diff -urN mp2rus/ported/Globals.h mp2rus-debian/ported/Globals.h
--- mp2rus/ported/Globals.h 2006-03-27 21:37:14.000000000 +0400
+++ mp2rus-debian/ported/Globals.h 2010-05-19 19:26:49.000000000 +0400
@@ -1,5 +1,6 @@
# include <StdAfx.h>
+#define MAX_PATH 4096
const float c_PI = 3.14159265358979f;
const float c_Sqrt4 = 1.189207115f;
usm78-gis, если не сложно, выложи куда-нибудь .deb или тарболл с бинарниками - интересно, однако
Исходники лежат здесь:
http://gisrussa.ru/ru/open_rus
Прямой линк:
http://sim77.ws/downloads/mp2rus.rar
Распаковывате архив, сохраняете патч mp2rus.diff , и делаете
patch -p1 < mp2rus.diff в директории mp2rus/
Потом ‘make’, и получаете mp2rus и checkmp.
Вот и вся наука.
Я бы вообще-то предпочел как-нибудь задокументировать формат (latex с картинками) и
потом написать модульный GPL компилятор/декомпилятор на C.
Вот это был бы реально кошерный пакет для debian (osm2rus).
За основу можно взять buildmap_osm из проекта roadmap.
usm78-gis, я не вполне понял, а готовый mp2rus.exe можешь выложить? и там запреты поворотов все-таки работают?
Эта версия для Линукса, я windows уже много годов не пользуюсь, а устанавливать кросс-компилятор для i386
слишком заморочно. Могу скомпилировать версию для wince-arm, но это врядли будет работать для
больших карт. А вот для linux-arm aka android вполне реально.
Запреты поворотов в исходниках mp2rus обрабатываются, и сохраняются в .rus
Для тех, кто не помнит историю gisrussa, этим компилятором (+они там что-то замутили с шифрованием карты, но врядли сильно заумное, типа pcks#12) были процессированы карты телеатласа для руссы.
Если же роутинговый баг в самой руссе, то без ее исходников сделать мало что можно.
Тот кто соберет (и потестирует) mp2rus.exe для виндоуз заслужит благодарность пользователей автоматических сборок (Osm-russa.narod.ru), потому я ее поставлю в процесс, потому что gme 27 теряет запреты.
Account suspended
http://narod.ru/disk/22056885000/mp2rus.rar.html
а патч выложенный на форуме “скушал” все табуляции
вот правильный патч:
http://narod.ru/disk/22057258000/mp2rus.diff.html
Быстро работают однако.
Значит наш форум читают и уважают 8)
mp2rus не понимает utf8, надо поправить (сама русса использует utf16)
В смысле не поддерживает? У меня нормально вроде отконвертилось.
У меня слетели все умляуты в финских названиях. mp2rus вроде как только делает cp1251->utf16
А, ну тогда понятно, у меня только русские надписи были.
сделайте кто-нибудь пожалуйста Московскую область Рязанскую область одним файлом, чтобы маршрут прокладывала.
16MB предел распространяется только на определенные 24bit оффсеты, так что еще не все потеряно,
может удастся и бОльшую карту создать. Сможет ли ее использовать русса - более сложный вопрос,
надо будет пробовать.