Пять процентов
Подкинули ссылочку на интересную статью в компьютерее, называется “Пять процентов”
Интересная нужно сказать теория. Тут вот думаю, к каким “пяти процентам” отношусь я?
Подкинули ссылочку на интересную статью в компьютерее, называется “Пять процентов”
Интересная нужно сказать теория. Тут вот думаю, к каким “пяти процентам” отношусь я?
Вообще жизнь интересная штука: каждый день, новая шуточка, даже интересно, а что ж завтра то будет?
В QLandkarteGT есть удобная вещь - экспорт видимой области карты со всеми отображаемыми точками, треками, измерениями и т.п. в растровый (PNG) файл.
Мне же потребовалось, что бы вся карта как есть была экспортирована. Пришлось полезть в исходники. Прямого пути сделать такое не нашлось, пришлось сделать несколько костыльно (имхо), но работоспособно (ибо нужно срочно - готовить карту к предстоящим соревнованиям).
Патч подкатом.
Сегодня столкнулся с тем, что привязывая карту в QLandkarteGT, получаю такую ошибку:
/usr/bin/gdal_translate -a_srs +proj=merc +a=6378245.0000 +b=6356863.0188 +towgs84=24,-123,-94,-0.02,0.25,0.13,1.1,0 +units=m +no_defs -gcp 108 182 inf inf -gcp 3310 189 inf inf -gcp 3308 3126 inf inf -gcp 93 3119 inf inf -gcp 1704 1657 inf inf /home/hatred/maps/1/src/K-53-26-view-raw.tiff /tmp/qt_temp.B12852
Input file size is 3402, 3428
0...10...20...30...40...50...60...70...80...90...100 - done.
/usr/bin/gdalwarp -order 1 -r cubic -dstnodata "255" /tmp/qt_temp.B12852 /tmp/qt_temp.u12852
ERROR 1: Attempt to create -2147483648x-2147483648 dataset is illegal,sizes must be larger than zero.
Creating output file that is -2147483648P x -2147483648L.
Неудачно!
Сначала было подумал, что поломано в SVN версии, однако, в релизной 1.2.4 ситуация точно такая же.
Сразу и сходу смутили параметры inf
в опции -gcp
. Так что решил поглядеть в коде, благо собираю из SVN и он у меня всегда под рукой.
Немного времени, расстановка логов, анализ привели к тому что обнаружилось двойное преобразование координат в функции
bool GPS_Math_Str_To_LongLat(const QString& str, float& lon, float& lat, const QString& srcproj, const QString& tarproj)
в файле GeoMath.cpp
Первое преобразование было в блоке кода:
if(GPS_Math_Str_To_Deg(str, lon, lat,true))
{
if(pjTar)
{
u = lon * DEG_TO_RAD;
v = lat * DEG_TO_RAD;
pj_transform(pjSrc,pjTar,1,0,&u,&v,0);
}
}
else
а второе преобразование в следующем блоке кода:
if(pjTar && pjSrc)
{
pj_transform(pjSrc,pjTar,1,0,&u,&v,0);
}
Беглый анализ привёл к мысли, что производился редизайн кода, оптимизация и убирание дублирующихся блоков кода, в результате просто недосмотрели одно место.
Сменил первый блок на такой:
if(GPS_Math_Str_To_Deg(str, lon, lat,true))
{
u = lon * DEG_TO_RAD;
v = lat * DEG_TO_RAD;
}
else
пересобрал и всё заработало отлично и замечательно.
UPD: а теперь всё то же самое, но в виде патча:
Index: src/GeoMath.cpp
===================================================================
--- src/GeoMath.cpp (revision 3010)
@@ -392,12 +392,8 @@
if(GPS_Math_Str_To_Deg(str, lon, lat,true))
{
- if(pjTar)
- {
- u = lon * DEG_TO_RAD;
- v = lat * DEG_TO_RAD;
- pj_transform(pjSrc,pjTar,1,0,&u,&v,0);
- }
+ u = lon * DEG_TO_RAD;
+ v = lat * DEG_TO_RAD;
}
else
{
PS автору письмо отправлено
Это винрарно:
Случайно наткнулся на сайт: http://www.design-pattern.ru - “Справочник “Паттерны проектирования”
Прицепом:
PS а это планирую купить: http://www.ozon.ru/context/detail/id/6108824
Весь текст подкатом
Что бы одним махом изменить версию в многомодульном проекте, достаточно использовать плагин versions, подключив его к корневому pom:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>1.2</version>
</plugin>
Установить версию после этого можно командой: mvn versions:set -DnewVersion=1.0.0-SNAPSHOT
или аналогичным образом.
Подробнее:
Делается так:
MimeMessage message = new MimeMessage(mailSession);
message.setSubject(subject, "utf-8");
сообщение в этом случае должно быть типа MimeMessage
, потому как в интерфейсе Message
нет метода setSubject()
с аргументом, указывающим кодировку.
Но можно сделать и так:
Message message = new MimeMessage(mailSession);
message.setSubject(MimeUtility.encodeText(subject, "utf-8", "Q"));
Для тела сообщения кодировка задаётся вместе с mime-типом:
message.setContent(bodyText, "text/plain;charset=UTF-8");
16 июля позвали сходить в гонку на яхте “Аккорд” в качестве откренки :) Сходил, понравилось, но ничего не понял: пока идешь от поворота до поворота, всё тихо и спокойно и как будто бы ничего не происходит, но как только поворот или, не дай божа, постановка или снятие паруса - суета, мелькание конечностей, ругань и прочая эмоция на неправильные действия. Не совсем понял, как перебираться с борта на борт, так что бы никому не помешать при повороте.
Не прошло и без аварии: сцепились с яхтой “Факт” из Славянки: проходили рядом, они свалились с волны, зацепили своим гиком, что-то порвали, произошло всё быстро, но даже если бы могли уйти влево - там тоже яхта шла.
Малость сожалею, что не сходил сегодня с ними во вторую гонку, особенно в связи с тем, что планы несколько расстроились сегодня.
Все фото: http://sfyc.ru/photo/2011/kubok-sem-futov-2011/gonki-flota/?p=1&rpp=12
Если узреете у себя такие исключения:
2011-07-14 17:11:14,652 INFO [org.jboss.resource.connectionmanager.CachedConnectionManager] (http-localhost%2F127.0.0.1-8080-1) Closing a connection for you. Please close them yourself: org.jboss.resource.adapter.jdbc.jdk6.WrappedConne
ctionJDK6@6ae0286d: java.lang.Throwable: STACKTRACE
Или около того, обратите внимание на этот документ: http://community.jboss.org/wiki/WhatDoesTheMessageDoYourOwnHousekeepingMean
А так же ознакомьтесь со следующей темой на форуме: http://community.jboss.org/thread/73267
А если коротко: если вы получаете подключение из пула, всегда обрамляйте работу с ним в конструкцию try/catch/finally примерно следующего вида:
Connection conn = null;
try
{
// работа с базой...
}
finally
{
try
{
conn.close();
}
catch (Throwable ignored)
{
}
}
Маршрут (запланированный): Владивосток-Красноармейский-Ручьи-С-З-З отрог-Читинза-С-В отрог-Базы отдыха-Красноармейский-Владивосток
Маршрут (пройденный): Владивосток-Красноармейский-Ручьи-С-З-З отрог-Читинза-родник-Партизанск (Каменка)-Партизанск (станция)-Владивосток
Участники:
На 18-19 июня запланировали поход, долго думали куда понести свои тушки вместе с рюкзаками - нужно перед Камчаткой группу малость схаживать. Первым вариантом был Голец, но прикинули, что на общественном транспорте слишком мало нам времени даётся, можем не успеть. Следующим вариантом становится Читинза (она же Скалистая) в Партизанском районе, на нём и останавливаемся. Кинули клич в рассылке, для желающих разбавить наш коллектив. В среду (15 числа) в клубе составляем раскладку, смотрим что по палаткам, котлам, распределяем коллективное имущество.
Выезд запланировали на пятничной партизанской электричке в 20.07. Сбор, как обычно, в третьем вагоне с конца.
UPD 2013-11-16: обновил список программ, добавил информацию об автоматической обрезке рамок, добавил информацию о создании многослойного JNX. Убрал текст помеченный как удалённый. За остальными подробностями - в историю изменения страницы. Вики всё же :)
UPD 2024-11-15:
Задача: сделать растровую карту для навигатора Garmin GPSMap 62s.
Инструменты:
qmt_map2jnx
(QMT - QMapTool - внешний тул из комплекта QMapShack для привязки карт). Текущая версия - 1.17.1 (ноябрь 2024).Исходные карты в формате OZFX3 (Ozi Explorer) с готовой привязкой. Если нет привязанных карт, можно почитать тут как это сделать самому. Теперь можно брать любые озиковские привязки (кроме OZFX2 и новых шифрованных OZFX3), но только если у вас версия gdal больше 1.10.0, иначе можно воспользоваться утилитой ozi2map.
NOTE: Данный способ конвертации подходит только для карт старого, некриптованного формата OZFX3 и не подходит для карт формата OZFX, OZFX2 и для нового зашифрованного OZFX3.
Оказывается сию процедуру в Linux можно сделать при помощи утилиты gdal_translate из библиотеки GDAL: gdal_translate -of GTiff 200k–n57-01_ozf.map 200k–n57-01.tiff
Получается нормальный валидный tiff. Проблема, что геоданные о привязке не всегда перевариваются другими программами, хотя и сохраняются, вот, к примеру, фрагмент вывода gdalinfo:
Coordinate System is `'
GCP Projection =
PROJCS["unnamed",
GEOGCS["Pulkovo 1942",
DATUM["Pulkovo_1942",
SPHEROID["Krassowsky 1940",6378245,298.2999999999998,
AUTHORITY["EPSG","7024"]],
AUTHORITY["EPSG","6284"]],
PRIMEM["Greenwich",0],
UNIT["degree",0.0174532925199433],
AUTHORITY["EPSG","4284"]],
PROJECTION["Transverse_Mercator"],
PARAMETER["latitude_of_origin",0],
PARAMETER["central_meridian",159],
PARAMETER["scale_factor",1],
PARAMETER["false_easting",500000],
PARAMETER["false_northing",0],
UNIT["metre",1,
AUTHORITY["EPSG","9001"]]]
GCP[ 0]: Id=1, Info=
(110,92) -> (312850.595383564,6212735.20674275,0)
GCP[ 1]: Id=2, Info=
(1325,93) -> (344034.004166507,6211493.42884751,0)
GCP[ 2]: Id=3, Info=
(2544,89) -> (375221.866305868,6210477.54231118,0)
GCP[ 3]: Id=4, Info=
(100,1538) -> (311242.069242769,6175640.4309,0)
GCP[ 4]: Id=5, Info=
(1326,1542) -> (342693.733518233,6174392.90643577,0)
GCP[ 5]: Id=6, Info=
(2557,1535) -> (374149.759678358,6173372.32291538,0)
GCP[ 6]: Id=7, Info=
(91,2985) -> (309639.985652898,6138547.1302834,0)
GCP[ 7]: Id=8, Info=
(1328,2989) -> (341358.837088592,6137294.02823664,0)
GCP[ 8]: Id=9, Info=
(2568,2983) -> (373081.95597641,6136268.88603608,0)
Задел на будущие думы.
UPDATE 2013-11-18: в статье post/2011-06-26_14.58_gotovim_rastrovuju_kartu_dlja_navigatora_garmin_gpsmap_62s рассматривается вариант конвертации с исправлением ошибки в формате геоданных.
Как-то упустил сей момент, но программа PhotoDocNG, вышедшая из-под моего пера, внезапно оказалась востребованной и используемой и доброжелатель под ником Sincerely опубликовал её на софтпедии:
http://www.softpedia.com/get/Multimedia/Graphic/Digital-Photo-Tools/PhotoDocNG.shtml
Можно и по шампанскому :)