/sportwatcher/trunk/src/wmsselectorwidgetbase.ui |
---|
0,0 → 1,408 |
<?xml version="1.0" encoding="UTF-8"?> |
<ui version="4.0"> |
<class>wmsSelectorWidgetBase</class> |
<widget class="QDialog" name="wmsSelectorWidgetBase"> |
<property name="geometry"> |
<rect> |
<x>0</x> |
<y>0</y> |
<width>677</width> |
<height>392</height> |
</rect> |
</property> |
<property name="windowTitle"> |
<string>WMS Selector</string> |
</property> |
<property name="windowIcon"> |
<iconset> |
<normaloff>hi16-app-sportwatcher.png</normaloff>hi16-app-sportwatcher.png</iconset> |
</property> |
<property name="locale"> |
<locale language="English" country="UnitedStates"/> |
</property> |
<layout class="QGridLayout" name="gridLayout"> |
<item row="0" column="0" colspan="4"> |
<widget class="KUrlRequester" name="urlWMS"/> |
</item> |
<item row="2" column="0" rowspan="6" colspan="2"> |
<widget class="QGroupBox" name="groupBox"> |
<property name="title"> |
<string>Waypoint in WGS84 date</string> |
</property> |
<layout class="QGridLayout" name="gridLayout_2"> |
<item row="0" column="0"> |
<widget class="QLabel" name="label"> |
<property name="text"> |
<string>Latitude</string> |
</property> |
</widget> |
</item> |
<item row="0" column="1"> |
<widget class="KDoubleNumInput" name="edLat"> |
<property name="minimum"> |
<double>-90.000000000000000</double> |
</property> |
<property name="maximum"> |
<double>90.000000000000000</double> |
</property> |
<property name="decimals"> |
<number>6</number> |
</property> |
</widget> |
</item> |
<item row="1" column="0"> |
<widget class="QLabel" name="label_2"> |
<property name="text"> |
<string>Longitude</string> |
</property> |
</widget> |
</item> |
<item row="1" column="1"> |
<widget class="KDoubleNumInput" name="edLon"> |
<property name="minimum"> |
<double>-180.000000000000000</double> |
</property> |
<property name="maximum"> |
<double>180.000000000000000</double> |
</property> |
<property name="decimals"> |
<number>6</number> |
</property> |
</widget> |
</item> |
<item row="2" column="0"> |
<widget class="QLabel" name="label_3"> |
<property name="text"> |
<string>Capital city</string> |
</property> |
</widget> |
</item> |
<item row="2" column="1"> |
<widget class="KComboBox" name="cbCities"/> |
</item> |
</layout> |
</widget> |
</item> |
<item row="2" column="2" colspan="2"> |
<widget class="KPushButton" name="pbGetCapabilities"> |
<property name="text"> |
<string>Get capabilities</string> |
</property> |
</widget> |
</item> |
<item row="6" column="2" colspan="2"> |
<widget class="KPushButton" name="pbDetails"> |
<property name="text"> |
<string>Details about WMS server</string> |
</property> |
</widget> |
</item> |
<item row="7" column="2" rowspan="2" colspan="2"> |
<widget class="QLabel" name="lbPreview"> |
<property name="minimumSize"> |
<size> |
<width>300</width> |
<height>0</height> |
</size> |
</property> |
<property name="autoFillBackground"> |
<bool>false</bool> |
</property> |
<property name="frameShape"> |
<enum>QFrame::StyledPanel</enum> |
</property> |
<property name="frameShadow"> |
<enum>QFrame::Sunken</enum> |
</property> |
<property name="text"> |
<string/> |
</property> |
</widget> |
</item> |
<item row="8" column="0"> |
<widget class="KActionSelector" name="actionLayer"> |
<property name="minimumSize"> |
<size> |
<width>0</width> |
<height>200</height> |
</size> |
</property> |
</widget> |
</item> |
<item row="9" column="0" colspan="4"> |
<widget class="QDialogButtonBox" name="buttonBox"> |
<property name="orientation"> |
<enum>Qt::Horizontal</enum> |
</property> |
<property name="standardButtons"> |
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> |
</property> |
</widget> |
</item> |
<item row="3" column="2" rowspan="3" colspan="2"> |
<widget class="QFrame" name="frame"> |
<property name="frameShape"> |
<enum>QFrame::NoFrame</enum> |
</property> |
<property name="frameShadow"> |
<enum>QFrame::Plain</enum> |
</property> |
<layout class="QGridLayout" name="gridLayout_3"> |
<item row="0" column="0"> |
<widget class="QLabel" name="label_4"> |
<property name="text"> |
<string>Bands</string> |
</property> |
</widget> |
</item> |
<item row="0" column="1"> |
<widget class="KIntSpinBox" name="edBands"> |
<property name="minimum"> |
<number>1</number> |
</property> |
<property name="maximum"> |
<number>4</number> |
</property> |
</widget> |
</item> |
<item row="1" column="0"> |
<spacer name="horizontalSpacer"> |
<property name="orientation"> |
<enum>Qt::Horizontal</enum> |
</property> |
<property name="sizeHint" stdset="0"> |
<size> |
<width>199</width> |
<height>20</height> |
</size> |
</property> |
</spacer> |
</item> |
<item row="1" column="1"> |
<widget class="QCheckBox" name="cbStyles"> |
<property name="text"> |
<string>Set styles</string> |
</property> |
</widget> |
</item> |
</layout> |
</widget> |
</item> |
</layout> |
</widget> |
<customwidgets> |
<customwidget> |
<class>KIntSpinBox</class> |
<extends>QSpinBox</extends> |
<header>knuminput.h</header> |
</customwidget> |
<customwidget> |
<class>KUrlRequester</class> |
<extends>QFrame</extends> |
<header>kurlrequester.h</header> |
</customwidget> |
<customwidget> |
<class>KDoubleNumInput</class> |
<extends>QWidget</extends> |
<header>knuminput.h</header> |
</customwidget> |
<customwidget> |
<class>KPushButton</class> |
<extends>QPushButton</extends> |
<header>kpushbutton.h</header> |
</customwidget> |
<customwidget> |
<class>KComboBox</class> |
<extends>QComboBox</extends> |
<header>kcombobox.h</header> |
</customwidget> |
<customwidget> |
<class>KActionSelector</class> |
<extends>QWidget</extends> |
<header>kactionselector.h</header> |
</customwidget> |
</customwidgets> |
<tabstops> |
<tabstop>urlWMS</tabstop> |
<tabstop>cbCities</tabstop> |
<tabstop>buttonBox</tabstop> |
<tabstop>pbGetCapabilities</tabstop> |
<tabstop>edBands</tabstop> |
<tabstop>cbStyles</tabstop> |
<tabstop>pbDetails</tabstop> |
</tabstops> |
<resources/> |
<connections> |
<connection> |
<sender>buttonBox</sender> |
<signal>accepted()</signal> |
<receiver>wmsSelectorWidgetBase</receiver> |
<slot>accept()</slot> |
<hints> |
<hint type="sourcelabel"> |
<x>246</x> |
<y>384</y> |
</hint> |
<hint type="destinationlabel"> |
<x>157</x> |
<y>274</y> |
</hint> |
</hints> |
</connection> |
<connection> |
<sender>buttonBox</sender> |
<signal>rejected()</signal> |
<receiver>wmsSelectorWidgetBase</receiver> |
<slot>reject()</slot> |
<hints> |
<hint type="sourcelabel"> |
<x>314</x> |
<y>384</y> |
</hint> |
<hint type="destinationlabel"> |
<x>286</x> |
<y>274</y> |
</hint> |
</hints> |
</connection> |
<connection> |
<sender>pbDetails</sender> |
<signal>clicked()</signal> |
<receiver>wmsSelectorWidgetBase</receiver> |
<slot>slotDetails()</slot> |
<hints> |
<hint type="sourcelabel"> |
<x>672</x> |
<y>152</y> |
</hint> |
<hint type="destinationlabel"> |
<x>485</x> |
<y>50</y> |
</hint> |
</hints> |
</connection> |
<connection> |
<sender>pbGetCapabilities</sender> |
<signal>clicked()</signal> |
<receiver>wmsSelectorWidgetBase</receiver> |
<slot>slotGetCapabilities()</slot> |
<hints> |
<hint type="sourcelabel"> |
<x>387</x> |
<y>49</y> |
</hint> |
<hint type="destinationlabel"> |
<x>386</x> |
<y>73</y> |
</hint> |
</hints> |
</connection> |
<connection> |
<sender>actionLayer</sender> |
<signal>added(QListWidgetItem*)</signal> |
<receiver>wmsSelectorWidgetBase</receiver> |
<slot>slotAdded(QListWidgetItem*)</slot> |
<hints> |
<hint type="sourcelabel"> |
<x>345</x> |
<y>322</y> |
</hint> |
<hint type="destinationlabel"> |
<x>370</x> |
<y>334</y> |
</hint> |
</hints> |
</connection> |
<connection> |
<sender>actionLayer</sender> |
<signal>removed(QListWidgetItem*)</signal> |
<receiver>wmsSelectorWidgetBase</receiver> |
<slot>slotRemoved(QListWidgetItem*)</slot> |
<hints> |
<hint type="sourcelabel"> |
<x>338</x> |
<y>286</y> |
</hint> |
<hint type="destinationlabel"> |
<x>370</x> |
<y>296</y> |
</hint> |
</hints> |
</connection> |
<connection> |
<sender>actionLayer</sender> |
<signal>movedDown(QListWidgetItem*)</signal> |
<receiver>wmsSelectorWidgetBase</receiver> |
<slot>slotDown(QListWidgetItem*)</slot> |
<hints> |
<hint type="sourcelabel"> |
<x>348</x> |
<y>252</y> |
</hint> |
<hint type="destinationlabel"> |
<x>371</x> |
<y>260</y> |
</hint> |
</hints> |
</connection> |
<connection> |
<sender>actionLayer</sender> |
<signal>movedUp(QListWidgetItem*)</signal> |
<receiver>wmsSelectorWidgetBase</receiver> |
<slot>slotUp(QListWidgetItem*)</slot> |
<hints> |
<hint type="sourcelabel"> |
<x>345</x> |
<y>209</y> |
</hint> |
<hint type="destinationlabel"> |
<x>370</x> |
<y>214</y> |
</hint> |
</hints> |
</connection> |
<connection> |
<sender>cbCities</sender> |
<signal>currentIndexChanged(QString)</signal> |
<receiver>wmsSelectorWidgetBase</receiver> |
<slot>slotCities(QString)</slot> |
<hints> |
<hint type="sourcelabel"> |
<x>310</x> |
<y>142</y> |
</hint> |
<hint type="destinationlabel"> |
<x>369</x> |
<y>166</y> |
</hint> |
</hints> |
</connection> |
<connection> |
<sender>cbStyles</sender> |
<signal>toggled(bool)</signal> |
<receiver>wmsSelectorWidgetBase</receiver> |
<slot>slotStyles(bool)</slot> |
<hints> |
<hint type="sourcelabel"> |
<x>615</x> |
<y>112</y> |
</hint> |
<hint type="destinationlabel"> |
<x>677</x> |
<y>104</y> |
</hint> |
</hints> |
</connection> |
</connections> |
<slots> |
<slot>slotURLChanged()</slot> |
<slot>slotDetails()</slot> |
<slot>slotGetCapabilities()</slot> |
<slot>slotAdded(QListWidgetItem*)</slot> |
<slot>slotRemoved(QListWidgetItem*)</slot> |
<slot>slotDown(QListWidgetItem*)</slot> |
<slot>slotUp(QListWidgetItem*)</slot> |
<slot>slotCities(QString)</slot> |
<slot>slotStyles(bool)</slot> |
</slots> |
</ui> |
/sportwatcher/trunk/src/wmsbase.h |
---|
36,6 → 36,7 |
/*$PUBLIC_SLOTS$*/ |
virtual void bpCancelSlot(); |
virtual void bpSaveSlot(); |
virtual void slotGetCapabilities(); |
protected: |
/*$PROTECTED_FUNCTIONS$*/ |
/sportwatcher/trunk/src/wmscapabilitieswidgetbase.ui |
---|
0,0 → 1,302 |
<?xml version="1.0" encoding="UTF-8"?> |
<ui version="4.0"> |
<class>wmsCapabilitiesWidgetBase</class> |
<widget class="QDialog" name="wmsCapabilitiesWidgetBase"> |
<property name="geometry"> |
<rect> |
<x>0</x> |
<y>0</y> |
<width>517</width> |
<height>609</height> |
</rect> |
</property> |
<property name="windowTitle"> |
<string>Capabilities</string> |
</property> |
<property name="locale"> |
<locale language="English" country="UnitedStates"/> |
</property> |
<layout class="QGridLayout" name="gridLayout_2"> |
<item row="1" column="0" colspan="2"> |
<widget class="QGroupBox" name="groupBox_2"> |
<property name="title"> |
<string>Get capabilities</string> |
</property> |
<layout class="QGridLayout" name="gridLayout_3"> |
<item row="0" column="0"> |
<widget class="QLabel" name="label_6"> |
<property name="text"> |
<string>Get</string> |
</property> |
</widget> |
</item> |
<item row="0" column="2"> |
<widget class="KLineEdit" name="edCapabilitiesGet"> |
<property name="readOnly"> |
<bool>true</bool> |
</property> |
</widget> |
</item> |
<item row="1" column="0"> |
<widget class="QLabel" name="label_7"> |
<property name="text"> |
<string>Post</string> |
</property> |
</widget> |
</item> |
<item row="1" column="2"> |
<widget class="KLineEdit" name="edCapabilitiesPost"> |
<property name="readOnly"> |
<bool>true</bool> |
</property> |
</widget> |
</item> |
<item row="2" column="2"> |
<widget class="KLineEdit" name="edFormat"> |
<property name="readOnly"> |
<bool>true</bool> |
</property> |
</widget> |
</item> |
<item row="2" column="0"> |
<widget class="QLabel" name="label_11"> |
<property name="text"> |
<string>Format</string> |
</property> |
</widget> |
</item> |
</layout> |
</widget> |
</item> |
<item row="2" column="0" colspan="2"> |
<widget class="QGroupBox" name="groupBox_3"> |
<property name="title"> |
<string>Get map</string> |
</property> |
<layout class="QGridLayout" name="gridLayout_4"> |
<item row="0" column="0"> |
<widget class="QLabel" name="label_8"> |
<property name="text"> |
<string>Get</string> |
</property> |
</widget> |
</item> |
<item row="0" column="1" colspan="2"> |
<widget class="KLineEdit" name="edMapGet"> |
<property name="readOnly"> |
<bool>true</bool> |
</property> |
</widget> |
</item> |
<item row="1" column="0"> |
<widget class="QLabel" name="label_9"> |
<property name="text"> |
<string>Post</string> |
</property> |
</widget> |
</item> |
<item row="1" column="1" colspan="2"> |
<widget class="KLineEdit" name="edMapPost"> |
<property name="readOnly"> |
<bool>true</bool> |
</property> |
</widget> |
</item> |
<item row="2" column="0"> |
<widget class="QLabel" name="label_10"> |
<property name="text"> |
<string>Formats</string> |
</property> |
</widget> |
</item> |
<item row="2" column="1" rowspan="2"> |
<widget class="KListWidget" name="liFormats"> |
<property name="selectionMode"> |
<enum>QAbstractItemView::NoSelection</enum> |
</property> |
</widget> |
</item> |
<item row="3" column="0"> |
<spacer name="verticalSpacer"> |
<property name="orientation"> |
<enum>Qt::Vertical</enum> |
</property> |
<property name="sizeHint" stdset="0"> |
<size> |
<width>20</width> |
<height>123</height> |
</size> |
</property> |
</spacer> |
</item> |
<item row="3" column="2"> |
<spacer name="horizontalSpacer"> |
<property name="orientation"> |
<enum>Qt::Horizontal</enum> |
</property> |
<property name="sizeHint" stdset="0"> |
<size> |
<width>177</width> |
<height>78</height> |
</size> |
</property> |
</spacer> |
</item> |
</layout> |
</widget> |
</item> |
<item row="3" column="0"> |
<spacer name="horizontalSpacer_2"> |
<property name="orientation"> |
<enum>Qt::Horizontal</enum> |
</property> |
<property name="sizeHint" stdset="0"> |
<size> |
<width>430</width> |
<height>22</height> |
</size> |
</property> |
</spacer> |
</item> |
<item row="3" column="1"> |
<widget class="KPushButton" name="pbCancel"> |
<property name="text"> |
<string>Cancel</string> |
</property> |
</widget> |
</item> |
<item row="0" column="0" colspan="2"> |
<widget class="QGroupBox" name="groupBox"> |
<property name="title"> |
<string>Contact person primary</string> |
</property> |
<layout class="QGridLayout" name="gridLayout"> |
<item row="0" column="0"> |
<widget class="QLabel" name="label"> |
<property name="text"> |
<string>Contact person</string> |
</property> |
</widget> |
</item> |
<item row="0" column="1"> |
<widget class="KLineEdit" name="edPerson"> |
<property name="acceptDrops"> |
<bool>false</bool> |
</property> |
<property name="readOnly"> |
<bool>true</bool> |
</property> |
</widget> |
</item> |
<item row="1" column="0"> |
<widget class="QLabel" name="label_2"> |
<property name="text"> |
<string>Contact organisation</string> |
</property> |
</widget> |
</item> |
<item row="1" column="1"> |
<widget class="KLineEdit" name="edOrg"> |
<property name="readOnly"> |
<bool>true</bool> |
</property> |
</widget> |
</item> |
<item row="2" column="0"> |
<widget class="QLabel" name="label_3"> |
<property name="text"> |
<string>Voice telephone</string> |
</property> |
</widget> |
</item> |
<item row="2" column="1"> |
<widget class="KLineEdit" name="edPhone"> |
<property name="readOnly"> |
<bool>true</bool> |
</property> |
</widget> |
</item> |
<item row="3" column="0"> |
<widget class="QLabel" name="label_4"> |
<property name="text"> |
<string>Facsimile telephone</string> |
</property> |
</widget> |
</item> |
<item row="3" column="1"> |
<widget class="KLineEdit" name="edFax"> |
<property name="readOnly"> |
<bool>true</bool> |
</property> |
</widget> |
</item> |
<item row="4" column="0"> |
<widget class="QLabel" name="label_5"> |
<property name="text"> |
<string>Electronic mail address</string> |
</property> |
</widget> |
</item> |
<item row="4" column="1"> |
<widget class="KLineEdit" name="edMail"> |
<property name="readOnly"> |
<bool>true</bool> |
</property> |
</widget> |
</item> |
</layout> |
</widget> |
</item> |
</layout> |
</widget> |
<customwidgets> |
<customwidget> |
<class>KListWidget</class> |
<extends>QListWidget</extends> |
<header>klistwidget.h</header> |
</customwidget> |
<customwidget> |
<class>KPushButton</class> |
<extends>QPushButton</extends> |
<header>kpushbutton.h</header> |
</customwidget> |
<customwidget> |
<class>KLineEdit</class> |
<extends>QLineEdit</extends> |
<header>klineedit.h</header> |
</customwidget> |
</customwidgets> |
<tabstops> |
<tabstop>edPerson</tabstop> |
<tabstop>edOrg</tabstop> |
<tabstop>edPhone</tabstop> |
<tabstop>edFax</tabstop> |
<tabstop>edMail</tabstop> |
<tabstop>edCapabilitiesGet</tabstop> |
<tabstop>edCapabilitiesPost</tabstop> |
<tabstop>edFormat</tabstop> |
<tabstop>edMapGet</tabstop> |
<tabstop>edMapPost</tabstop> |
<tabstop>liFormats</tabstop> |
<tabstop>pbCancel</tabstop> |
</tabstops> |
<resources/> |
<connections> |
<connection> |
<sender>pbCancel</sender> |
<signal>clicked()</signal> |
<receiver>wmsCapabilitiesWidgetBase</receiver> |
<slot>accept()</slot> |
<hints> |
<hint type="sourcelabel"> |
<x>460</x> |
<y>587</y> |
</hint> |
<hint type="destinationlabel"> |
<x>517</x> |
<y>566</y> |
</hint> |
</hints> |
</connection> |
</connections> |
</ui> |
/sportwatcher/trunk/src/wmsselectorwidget.h |
---|
0,0 → 1,263 |
// |
// C++ Interface: |
// |
// Description: |
// |
// |
// Author: Andreas Theofilu <andreas@theosys.at>, (C) 2009 |
// |
// Copyright: See COPYING file that comes with this distribution |
// |
// |
#ifndef WMSSELECTORWIDGET_H |
#define WMSSELECTORWIDGET_H |
#include <QDialog> |
#include <QString> |
#include <QLabel> |
#include <QHttp> |
#include <QFile> |
#include <QXmlReader> |
#include <KUrlRequester> |
#include <KActionSelector> |
#include <KProgressDialog> |
#include <KDoubleNumInput> |
#include "ui_wmsselectorwidgetbase.h" |
typedef struct |
{ |
QString Name; |
QString Title; |
QString Abstract; |
QString OnlineResource; |
QString Type; |
QString ContactPerson; |
QString ContactOrganisation; |
QString ContactPosition; |
QString AddressType; |
QString Address; |
QString City; |
QString StateOrProvince; |
QString PostCode; |
QString Country; |
QString ContactVoiceTelephone; |
QString ContactFacsimileTelephone; |
QString ContactElectronicMailAddress; |
QString Fees; |
QString AccessConstraints; |
}SERVICE; |
typedef struct |
{ |
QStringList Format; |
QString Get; |
QString Post; |
}GET; |
typedef struct |
{ |
GET GetCapabilities; |
GET GetMap; |
GET GetFeatureInfo; |
}REQUEST; |
typedef struct |
{ |
double maxx; |
double minx; |
double maxy; |
double miny; |
QString SRS; |
}BOX; |
typedef struct STYLE |
{ |
QString Name; |
QString Title; |
QString Format; |
QString LegendURL; |
STYLE *next; |
}STYLE; |
typedef struct LAYER |
{ |
bool opaque; |
bool noSubsets; |
bool queryable; |
bool cascaded; |
QString Name; |
QString Title; |
QString Abstract; |
QStringList SRS; |
QStringList CRS; |
BOX LatLon; |
BOX Bounding; |
double scaleMin; |
double scaleMax; |
STYLE *style; |
LAYER *next; |
}LAYER; |
typedef struct |
{ |
QString city; |
double lon; |
double lat; |
}CITIES; |
class wmsSelectorWidget : public QDialog, |
public QXmlDefaultHandler, |
private Ui::wmsSelectorWidgetBase |
{ |
Q_OBJECT |
public: |
enum ELEMENT |
{ |
el_none, |
el_WMT_MS_Capabilities, |
el_Service, |
el_Name, |
el_Title, |
el_Abstract, |
el_KeywordList, |
el_Keyword, |
el_OnlineResource, |
el_ContactInformation, |
el_ContactPersonPrimary, |
el_ContactPerson, |
el_ContactOrganisation, |
el_ContactPosition, |
el_ContactAddress, |
el_AddressType, |
el_Address, |
el_City, |
el_StateOrProvince, |
el_PostCode, |
el_Country, |
el_ContactVoiceTelephone, |
el_ContactFacsimileTelephone, |
el_ElectronicMailAddress, |
el_Fees, |
el_AccessConstraints, |
el_Capability, |
el_Request, |
el_GetCapabilities, |
el_Format, |
el_DCPType, |
el_HTTP, |
el_Get, |
el_Post, |
el_GetMap, |
el_GetFeatureInfo, |
el_DescribeLayer, |
el_GetLegendGraphic, |
el_GetStyles, |
el_Exception, |
el_VendorSpecificCapabilities, |
el_UserDefinedSymbolization, |
el_Layer, |
el_SRS, |
el_LatLonBoundingBox, |
el_BoundingBox, |
el_ScaleHint, |
el_Style, |
el_LegendURL, |
el_MetadataURL |
}; |
enum ATTRIBUTE |
{ |
at_none, |
at_Name, |
at_Title, |
at_Abstract, |
at_ContactPerson, |
at_ContactOrganisation, |
at_ContactPosition, |
at_AddressType, |
at_Address, |
at_City, |
at_StateOrProvince, |
at_PostCode, |
at_Country, |
at_ContactVoiceTelephone, |
at_ContactFacsimileTelephone, |
at_ContactElectronicMailAddress, |
at_Fees, |
at_AccessConstraints, |
at_Format, |
at_SRS, |
at_CRS |
}; |
public: |
wmsSelectorWidget (QWidget* parent = 0, Qt::WFlags fl = 0); |
~wmsSelectorWidget(); |
/*$PUBLIC_FUNCTIONS$*/ |
// Functions to parse the XML file |
bool startDocument (); |
bool startElement (const QString&, const QString&, const QString& , const QXmlAttributes&); |
bool endElement (const QString&, const QString&, const QString&); |
bool characters (const QString&); |
public slots: |
/*$PUBLIC_SLOTS$*/ |
virtual void slotGetCapabilities(); |
virtual void slotDetails(); |
virtual void slotAdded(QListWidgetItem *); |
virtual void slotRemoved(QListWidgetItem *); |
virtual void slotUp(QListWidgetItem *); |
virtual void slotDown(QListWidgetItem *); |
virtual void slotCities(QString); |
virtual void slotStyles(bool); |
protected: |
/*$PROTECTED_FUNCTIONS$*/ |
void getCapabilities(); |
bool parseWMS(); |
bool grabPicture(double, double, double, double); |
private slots: |
// Functions called during downloading the capabilities of a WMS-server |
void WMSrequestFinished(int, bool); |
void updateDataReadProgress(int, int); |
void readResponseHeader(const QHttpResponseHeader &); |
void slotAuthenticationRequired(const QString &, quint16, QAuthenticator *); |
#ifndef QT_NO_OPENSSL |
void sslErrors(const QList<QSslError> &); |
#endif |
void cancelDownload(); // The cancel button in progress dialog |
private: |
void initializeParser(); |
LAYER *allocateLayer(); |
STYLE *allocateStyle(); |
STYLE *findLastStyle(LAYER *); |
bool writeWMSTag(double, double, double, double, int, int); |
void setDimension(double &, double &, double &, double &, QListWidgetItem *); |
private: |
int id; // ID used during download |
QString Data, MAP; |
QHttp *http; |
bool httpRequestAborted; |
bool StyleCommas; |
QFile file; |
KProgressDialog *progressDialog; |
ELEMENT element, el2; |
ATTRIBUTE attribute; |
QStringList Exception; // List of exceptions of WMS server |
QString WMSVersion; // Version, WMS server supports |
SERVICE Service; |
REQUEST Request; |
LAYER *Layer, *firstLayer; |
int line; // actual line number during parsing |
int lcount; // counts the deepnes of layers |
}; |
#endif |
/sportwatcher/trunk/src/wmscapabilitieswidget.cpp |
---|
0,0 → 1,30 |
// |
// C++ Implementation: |
// |
// Description: |
// |
// |
// Author: Andreas Theofilu <andreas@theosys.at>, (C) 2009 |
// |
// Copyright: See COPYING file that comes with this distribution |
// |
// |
#include "wmscapabilitieswidget.h" |
wmsCapabilitiesWidget::wmsCapabilitiesWidget (QWidget* parent, Qt::WFlags fl) |
: QDialog (parent, fl), Ui::wmsCapabilitiesWidgetBase() |
{ |
setupUi (this); |
} |
wmsCapabilitiesWidget::~wmsCapabilitiesWidget() |
{ |
} |
/*$SPECIALIZATION$*/ |
#include "wmscapabilitieswidget.moc" |
/sportwatcher/trunk/src/GDALError.h |
---|
0,0 → 1,24 |
// |
// C++ Interface: GDALError |
// |
// Description: |
// |
// |
// Author: Andreas Theofilu <andreas@theosys.at>, (C) 2009 |
// |
// Copyright: See COPYING file that comes with this distribution |
// |
// |
#ifndef _GDALERROR_H |
#define _GDALERROR_H |
#include <QString> |
#if defined HAVE_GDAL |
void spwErrorHandler(CPLErr, int, const char *); |
void destroyErrors(); |
QString catGDALError(); |
#endif // HAVE_GDAL |
#endif // _GDALERROR_H |
/sportwatcher/trunk/src/CMakeLists.txt |
---|
13,15 → 13,20 |
sportwatcher.cpp |
sportwatcherwidget.cpp |
transform.cpp |
wmsbase.cpp) |
wmsbase.cpp |
wmscapabilitieswidget.cpp |
wmsselectorwidget.cpp) |
set(sportwatcher_UI |
authenticationdialog.ui |
coordinateswidgetbase.ui |
progresswidgetbase.ui |
settingswidgetbase.ui |
shapewidgetbase.ui |
sportwatcherwidgetbase.ui |
wmswidgetbase.ui) |
wmscapabilitieswidgetbase.ui |
wmswidgetbase.ui |
wmsselectorwidgetbase.ui) |
add_definitions(-fvisibility=default -pedantic -fexceptions -Wextra -D_REENTRANT) |
/sportwatcher/trunk/src/wmswidgetbase.ui |
---|
7,7 → 7,7 |
<x>0</x> |
<y>0</y> |
<width>513</width> |
<height>637</height> |
<height>657</height> |
</rect> |
</property> |
<property name="windowTitle"> |
97,7 → 97,7 |
<string>Server settings</string> |
</property> |
<layout class="QGridLayout"> |
<item row="6" column="3"> |
<item row="6" column="3" colspan="2"> |
<spacer name="spacer5"> |
<property name="orientation"> |
<enum>Qt::Horizontal</enum> |
182,7 → 182,7 |
</property> |
</widget> |
</item> |
<item row="1" column="1" colspan="3"> |
<item row="1" column="1" colspan="4"> |
<widget class="KLineEdit" name="edLayer"> |
<property name="toolTip"> |
<string>If you need or want to specify layers, do it here.</string> |
215,7 → 215,7 |
</property> |
</widget> |
</item> |
<item row="7" column="1" colspan="3"> |
<item row="7" column="1" colspan="4"> |
<widget class="KLineEdit" name="edStyles"> |
<property name="toolTip"> |
<string>In case you've entered layers, you must enter one style for every layer!</string> |
232,7 → 232,7 |
</property> |
</widget> |
</item> |
<item row="4" column="2" colspan="2"> |
<item row="4" column="2" colspan="3"> |
<spacer name="spacer4"> |
<property name="orientation"> |
<enum>Qt::Horizontal</enum> |
248,7 → 248,7 |
</property> |
</spacer> |
</item> |
<item row="9" column="2" colspan="2"> |
<item row="9" column="2" colspan="3"> |
<spacer name="spacer7"> |
<property name="orientation"> |
<enum>Qt::Horizontal</enum> |
274,7 → 274,7 |
</property> |
</widget> |
</item> |
<item row="3" column="3"> |
<item row="3" column="3" colspan="2"> |
<spacer name="spacer3"> |
<property name="orientation"> |
<enum>Qt::Horizontal</enum> |
300,7 → 300,7 |
</property> |
</widget> |
</item> |
<item row="8" column="3"> |
<item row="8" column="3" colspan="2"> |
<spacer name="spacer6"> |
<property name="orientation"> |
<enum>Qt::Horizontal</enum> |
358,7 → 358,7 |
</property> |
</widget> |
</item> |
<item row="0" column="1" colspan="3"> |
<item row="0" column="1" colspan="4"> |
<widget class="KUrlRequester" name="edServerURL"> |
<property name="acceptDrops"> |
<bool>true</bool> |
378,7 → 378,7 |
</property> |
</widget> |
</item> |
<item row="5" column="3"> |
<item row="5" column="3" colspan="2"> |
<spacer name="spacer18"> |
<property name="orientation"> |
<enum>Qt::Horizontal</enum> |
518,7 → 518,7 |
</property> |
</widget> |
</item> |
<item row="2" column="3"> |
<item row="2" column="3" colspan="2"> |
<spacer name="spacer2"> |
<property name="orientation"> |
<enum>Qt::Horizontal</enum> |
547,6 → 547,13 |
</property> |
</widget> |
</item> |
<item row="10" column="4"> |
<widget class="KPushButton" name="pbGetCapabilities"> |
<property name="text"> |
<string>Get capabilities</string> |
</property> |
</widget> |
</item> |
</layout> |
</widget> |
</item> |
816,19 → 823,14 |
<layoutdefault spacing="6" margin="11"/> |
<customwidgets> |
<customwidget> |
<class>KComboBox</class> |
<extends>QComboBox</extends> |
<header>kcombobox.h</header> |
</customwidget> |
<customwidget> |
<class>KIntSpinBox</class> |
<extends>QSpinBox</extends> |
<header>knuminput.h</header> |
</customwidget> |
<customwidget> |
<class>KLineEdit</class> |
<extends>QLineEdit</extends> |
<header>klineedit.h</header> |
<class>KUrlRequester</class> |
<extends>QFrame</extends> |
<header>kurlrequester.h</header> |
</customwidget> |
<customwidget> |
<class>KPushButton</class> |
836,11 → 838,16 |
<header>kpushbutton.h</header> |
</customwidget> |
<customwidget> |
<class>KUrlRequester</class> |
<extends>QFrame</extends> |
<header>kurlrequester.h</header> |
<class>KLineEdit</class> |
<extends>QLineEdit</extends> |
<header>klineedit.h</header> |
</customwidget> |
<customwidget> |
<class>KComboBox</class> |
<extends>QComboBox</extends> |
<header>kcombobox.h</header> |
</customwidget> |
<customwidget> |
<class>Q3GroupBox</class> |
<extends>QGroupBox</extends> |
<header>Qt3Support/Q3GroupBox</header> |
859,6 → 866,7 |
<tabstop>cbTile</tabstop> |
<tabstop>edDepth</tabstop> |
<tabstop>edOverview</tabstop> |
<tabstop>pbGetCapabilities</tabstop> |
<tabstop>chSquare</tabstop> |
<tabstop>chOffline</tabstop> |
<tabstop>chAdvice</tabstop> |
896,8 → 904,8 |
<slot>bpSaveSlot()</slot> |
<hints> |
<hint type="sourcelabel"> |
<x>20</x> |
<y>20</y> |
<x>147</x> |
<y>648</y> |
</hint> |
<hint type="destinationlabel"> |
<x>20</x> |
912,8 → 920,8 |
<slot>bpCancelSlot()</slot> |
<hints> |
<hint type="sourcelabel"> |
<x>20</x> |
<y>20</y> |
<x>334</x> |
<y>648</y> |
</hint> |
<hint type="destinationlabel"> |
<x>20</x> |
921,5 → 929,24 |
</hint> |
</hints> |
</connection> |
<connection> |
<sender>pbGetCapabilities</sender> |
<signal>clicked()</signal> |
<receiver>wmsWidgetBase</receiver> |
<slot>slotGetCapabilities()</slot> |
<hints> |
<hint type="sourcelabel"> |
<x>412</x> |
<y>347</y> |
</hint> |
<hint type="destinationlabel"> |
<x>510</x> |
<y>370</y> |
</hint> |
</hints> |
</connection> |
</connections> |
<slots> |
<slot>slotGetCapabilities()</slot> |
</slots> |
</ui> |
/sportwatcher/trunk/src/wmsbase.cpp |
---|
25,6 → 25,7 |
#include <qdir.h> |
#include <qcheckbox.h> |
#include "wmsbase.h" |
#include "wmsselectorwidget.h" |
wmsbase::wmsbase ( QWidget* parent, Qt::WFlags fl ) |
: QDialog(parent, fl), Ui::wmsWidgetBase () |
37,7 → 38,7 |
KConfig cfg (QString("sportwatcher.rc"), KConfig::SimpleConfig); |
KConfigGroup ic (&cfg, "WMS"); |
edServerURL->setUrl (ic.readEntry("ServerURL", "http://onearth.jpl.nasa.gov/wms.cgi")); |
edLayer->setText (ic.readEntry("Layer", QString(""))); |
edLayer->setText (ic.readEntry("Layer", QString("modis,global_mosaic"))); |
cbSRS->setCurrentIndex (ic.readEntry("SRS", 0)); |
cbCRS->setCurrentIndex (ic.readEntry("CRS", 0)); |
edBands->setValue (ic.readEntry("Bands", 3)); |
49,8 → 50,8 |
edOverview->setValue (ic.readEntry("Overview", 10)); |
chSquare->setChecked (ic.readEntry("Square", false)); |
chOffline->setChecked (ic.readEntry("Offline", false)); |
chAdvice->setChecked (ic.readEntry("Advice", false)); |
chVerify->setChecked (ic.readEntry("Verify", true)); |
chAdvice->setChecked (ic.readEntry("Advice", true)); |
chVerify->setChecked (ic.readEntry("Verify", false)); |
edCorrX->setValue (ic.readEntry("CorrX", 0)); |
edCorrY->setValue (ic.readEntry("CorrY", 0)); |
} |
60,6 → 61,15 |
} |
/*$SPECIALIZATION$*/ |
void wmsbase::slotGetCapabilities() |
{ |
wmsSelectorWidget *dlg = new wmsSelectorWidget(this); |
if (dlg->exec() == QDialog::Accepted) |
{ |
} |
} |
void wmsbase::bpCancelSlot() |
{ |
done(QDialog::Rejected); |
/sportwatcher/trunk/src/wmsselectorwidget.cpp |
---|
0,0 → 1,1491 |
// |
// C++ Implementation: |
// |
// Description: |
// |
// |
// Author: Andreas Theofilu <andreas@theosys.at>, (C) 2009 |
// |
// Copyright: See COPYING file that comes with this distribution |
// |
// |
#include <iostream> |
#include <QPixmap> |
#include <QBitmap> |
#include <QDir> |
#include <QFile> |
#include <QImage> |
#include <QtNetwork> |
#include <QListWidget> |
#include <QPainter> |
#include <QCheckBox> |
#include <KStandardDirs> |
#include <KConfig> |
#include <KLocale> |
#include <KMessageBox> |
#include <KGlobalSettings> |
#include <KConfigGroup> |
#include <KIconLoader> |
#include <KUrl> |
#include <KUrlRequester> |
#include <KFile> |
#include "config.h" |
#if defined HAVE_GDAL |
#include <gdal/gdal_priv.h> |
#include <gdal/ogr_spatialref.h> |
#include <gdal/ogrsf_frmts.h> |
#include <gdal/gdalwarper.h> |
#include <gdal/ogrsf_frmts.h> |
#include "GDALError.h" |
#endif |
#include "wmsselectorwidget.h" |
#include "ui_authenticationdialog.h" |
#include "wmscapabilitieswidget.h" |
// The capital cities from all countries of the world |
// Source: Wikipedia, Google |
CITIES Cities[] = { |
{ "Abidjan", 5.3363, -4.0277 }, |
{ "Abu Dhabi", 24.4758, 54.3714 }, |
{ "Abuja", 9.0578, 7.4892 }, |
{ "Accora", 5.5555, -0.196 }, |
{ "Addis Abeba", 9.0164, 38.7579 }, |
{ "Algier", 36.7527, 3.0422 }, |
{ "Amman", 31.9565, 35.9457 }, |
{ "Amsterdam", 52.3737, 4.8911 }, |
{ "Andorra la Vella", 42.5074, 1.5219 }, |
{ "Ankara", 39.9438, 32.856 }, |
{ "Antananarivo", -18.915, 47.5318 }, |
{ "Apia", -13.8314, -171.7516 }, |
{ "Aschgabat", 37.9501, 58.3802 }, |
{ "Asmara", 15.3324, 38.9261 }, |
{ "Astana", 51.1798, 71.4466 }, |
{ "Asuncion", -25.3003, -57.6363 }, |
{ "Athen", 37.9792, 23.7166 }, |
{ "Bagdad", 33.3158, 44.3921 }, |
{ "Baku", 40.4167, 49.8236 }, |
{ "Bamako", 12.6529, -7.9865 }, |
{ "Bandar Seri Begawan", 4.9431, 114.9424 }, |
{ "Bankok", 13.7211, 100.4765 }, |
{ "Bangui", 4.3616, 18.556 }, |
{ "Banjul", 13.4548, -16.579 }, |
{ "Basseterre", 17.2968, -62.7137 }, |
{ "Beirut", 33.8886, 35.4954 }, |
{ "Belgrad", 44.8024, 20.4651 }, |
{ "Belmopan", 17.2617, -88.7785 }, |
{ "Berlin", 52.5234, 13.4105 }, |
{ "Bern", 46.9479, 7.4479 }, |
{ "Bratislava", 48.1483, 17.1068 }, |
{ "Bridgetown", 13.0935, -59.6106 }, |
{ "Brüssel", 50.8462, 4.3545 }, |
{ "Budapest", 47.4984, 19.0403 }, |
{ "Buenos Aires", -34.6084, -58.3733 }, |
{ "Bukarest", 44.4304, 26.1225 }, |
{ "Den Haag", 52.0782, 4.3134 }, |
{ "Dublin", 53.3441, -6.2677 }, |
{ "Helsinki", 60.1698, 24.9379 }, |
{ "Kopenhagen", 55.6762, 12.5678 }, |
{ "Lissabon", 38.7071, -9.1357 }, |
{ "Ljubljana", 46.0514, 14.5055 }, |
{ "London", 51.5001, -0.1262 }, |
{ "Luxemburg", 49.8152, 6.1286 }, |
{ "Madrid", 40.4167, -3.7036 }, |
{ "Mexiko City", 19.427, -99.128 }, |
{ "Minsk", 53.8996, 27.5753 }, |
{ "Monaco", 43.7326, 7.4189 }, |
{ "Moskau", 55.7554, 37.6203 }, |
{ "Oslo", 59.9136, 10.7394 }, |
{ "Ottawa", 45.4218, -75.6964 }, |
{ "Paris", 48.856, 2.3515 }, |
{ "Peking", 39.9077, 116.3994 }, |
{ "Prag", 50.088, 14.4217 }, |
{ "Reykjavik", 64.1352, -21.8951 }, |
{ "Riga", 56.9462, 24.1049 }, |
{ "Rom", 41.8945, 12.4826 }, |
{ "San Marino", 43.9322, 12.4484 }, |
{ "Sofia", 42.6963, 23.3236 }, |
{ "Stockholm", 59.3329, 18.0652 }, |
{ "Tirana", 41.3309, 19.8325 }, |
{ "Tokio", 35.688, 139.6932 }, |
{ "Vaduz", 47.1407, 9.5218 }, |
{ "Valletta", 35.9009, 14.5154 }, |
{ "Vilnius", 54.6888, 25.2801 }, |
{ "Warschau", 52.2291, 21.0123 }, |
{ "Washington D.C.", 38.8917, -77.0239 }, |
{ "Wien", 48.2091, 16.3727 }, |
{ "Zagreb", 45.8149, 15.9784 }, |
{ "", 0.0, 0.0 } |
}; |
wmsSelectorWidget::wmsSelectorWidget (QWidget* parent, Qt::WFlags fl) |
: QDialog (parent, fl), Ui::wmsSelectorWidgetBase() |
{ |
// Initialize some variables |
http = 0; |
httpRequestAborted = false; |
progressDialog = 0; |
id = 0; |
Layer = 0; |
firstLayer = 0; |
initializeParser(); |
// Initialize the GUI elements |
setupUi (this); |
// Initialize the environment |
urlWMS->setMode(KFile::File | KFile::ExistingOnly); |
KConfig cfg (QString("sportwatcher.rc"), KConfig::SimpleConfig); |
KConfigGroup ic (&cfg, "WMS"); |
urlWMS->setUrl (ic.readEntry("ServerURL", "http://onearth.jpl.nasa.gov/wms.cgi")); |
Data = ic.readEntry("Data", QDir::home().absolutePath() + "/.sportwatcher"); |
MAP = ic.readEntry("MAP", QDir::home().absolutePath() + "/.sportwatcher/track.wms"); |
file.setFileName(Data + "/capabilities.xml"); // File to save WMS capabilities |
edBands->setValue(ic.readEntry("Bands", 3)); |
StyleCommas = true; |
cbStyles->setChecked(StyleCommas); |
// Fill the cities combo box |
int i = 0; |
while (!Cities[i].city.isEmpty()) |
{ |
cbCities->addUrl(KUrl(Cities[i].city)); |
i++; |
} |
// Connect the http module |
progressDialog = new KProgressDialog(this); |
http = new QHttp(this); |
connect(http, SIGNAL(requestFinished(int, bool)), this, SLOT(WMSrequestFinished(int, bool))); |
connect(http, SIGNAL(dataReadProgress(int, int)), this, SLOT(updateDataReadProgress(int, int))); |
connect(http, SIGNAL(responseHeaderReceived(const QHttpResponseHeader &)), this, SLOT(readResponseHeader(const QHttpResponseHeader &))); |
connect(http, SIGNAL(authenticationRequired(const QString &, quint16, QAuthenticator *)), |
this, SLOT(slotAuthenticationRequired(const QString &, quint16, QAuthenticator *))); |
connect(progressDialog, SIGNAL(cancelClicked()), this, SLOT(cancelDownload())); |
#ifndef QT_NO_OPENSSL |
connect(http, SIGNAL(sslErrors(const QList<QSslError> &)), this, SLOT(sslErrors(const QList<QSslError> &))); |
#endif |
getCapabilities(); |
} |
wmsSelectorWidget::~wmsSelectorWidget() |
{ |
if (file.exists()) |
file.remove(); |
destroyErrors(); |
} |
/*$SPECIALIZATION$*/ |
void wmsSelectorWidget::slotGetCapabilities() |
{ |
actionLayer->availableListWidget()->clear(); |
actionLayer->selectedListWidget()->clear(); |
getCapabilities(); |
} |
void wmsSelectorWidget::slotDetails() |
{ |
wmsCapabilitiesWidget *dlg = new wmsCapabilitiesWidget(this); |
dlg->setPerson(Service.ContactPerson); |
dlg->setOrg(Service.ContactOrganisation); |
dlg->setPhone(Service.ContactVoiceTelephone); |
dlg->setFax(Service.ContactFacsimileTelephone); |
dlg->setMail(Service.ContactElectronicMailAddress); |
dlg->setCapabilitiesGet(Request.GetCapabilities.Get); |
dlg->setCapabilitiesPost(Request.GetCapabilities.Post); |
if (Request.GetCapabilities.Format.size() > 0) |
dlg->setFormat(Request.GetCapabilities.Format.at(0)); |
dlg->setMapGet(Request.GetMap.Get); |
dlg->setMapPost(Request.GetMap.Post); |
for (int i = 0; i < Request.GetMap.Format.size(); ++i) |
dlg->addFormats(Request.GetMap.Format.at(i)); |
dlg->exec(); |
delete dlg; |
} |
void wmsSelectorWidget::slotAdded(QListWidgetItem *item) |
{ |
double minx, miny, maxx, maxy; |
setDimension(minx, miny, maxx, maxy, item); |
grabPicture(minx, miny, maxx, maxy); |
} |
void wmsSelectorWidget::slotRemoved(QListWidgetItem *item) |
{ |
double minx, miny, maxx, maxy; |
setDimension(minx, miny, maxx, maxy, item); |
grabPicture(minx, miny, maxx, maxy); |
} |
void wmsSelectorWidget::slotUp(QListWidgetItem *item) |
{ |
double minx, miny, maxx, maxy; |
setDimension(minx, miny, maxx, maxy, item); |
grabPicture(minx, miny, maxx, maxy); |
} |
void wmsSelectorWidget::slotDown(QListWidgetItem *item) |
{ |
double minx, miny, maxx, maxy; |
setDimension(minx, miny, maxx, maxy, item); |
grabPicture(minx, miny, maxx, maxy); |
} |
void wmsSelectorWidget::slotCities(QString city) |
{ |
int i = 0; |
double minx, miny, maxx, maxy; |
while (!Cities[i].city.isEmpty()) |
{ |
if (Cities[i].city == city) |
{ |
edLat->setValue(Cities[i].lat); |
edLon->setValue(Cities[i].lon); |
break; |
} |
i++; |
} |
if (actionLayer->selectedListWidget()->count() > 0) |
{ |
setDimension(minx, miny, maxx, maxy, 0); |
grabPicture(minx, miny, maxx, maxy); |
} |
} |
void wmsSelectorWidget::slotStyles(bool mode) |
{ |
StyleCommas = mode; |
} |
/* |
* This functions try to get a small example picture from the WMS server |
*/ |
bool wmsSelectorWidget::grabPicture(double minx, double miny, double maxx, double maxy) |
{ |
#if defined HAVE_GDAL |
QPixmap pm; |
GDALDataset *poDataset = 0; |
GDALRasterBand *poBand = 0; |
unsigned char *pafScanline = 0; |
unsigned char *pafScanlineRed = 0; |
unsigned char *pafScanlineGreen = 0; |
unsigned char *pafScanlineBlue = 0; |
unsigned char *pafScanlineAlpha = 0; |
int nXSize, nYSize; |
int width, height; |
bool Fgeo = false; |
QPainter paint; |
QApplication::setOverrideCursor (QCursor(Qt::WaitCursor)); |
width = lbPreview->width(); |
height = lbPreview->height() - 2; |
nXSize = nYSize = 0; |
if (!writeWMSTag(minx, miny, maxx, maxy, width, height)) |
{ |
QApplication::restoreOverrideCursor(); |
KMessageBox::error(this, i18n("Error writing a tag file!")); |
return false; |
} |
// set the dimensions of the pixmap |
pm = QPixmap(width, height); |
// start painting the map |
paint.begin(&pm); |
QColor background(220, 220, 220); |
paint.fillRect(0, 0, width, height, background); |
if ((poDataset = (GDALDataset *)GDALOpen (MAP.toAscii().constData(), GA_ReadOnly)) != NULL) |
{ |
int nRasterCount = poDataset->GetRasterCount(); |
int nXBlock, nYBlock; |
GDALColorTable *pCT, *pCTb, *pCTr, *pCTg, *pCTa; |
int bGotMin, bGotMax; |
int tTypeLen, tColor, tColorEntrys; |
GDALDataType tRasterType; |
double adfMinMax[2]; |
pCT = pCTb = pCTr = pCTg = pCTa = 0; |
tTypeLen = 0; |
pafScanlineRed = pafScanlineGreen = pafScanlineBlue = pafScanlineAlpha = 0; |
Fgeo = true; |
for (int a = 1; a <= nRasterCount; a++) |
{ |
if (!Fgeo) |
break; |
if (!(poBand = poDataset->GetRasterBand (a))) |
{ |
paint.end(); |
QApplication::restoreOverrideCursor(); |
KMessageBox::error(this, i18n("Error getting a raster band:\n%1").arg(catGDALError())); |
if (pafScanlineRed) |
delete pafScanlineRed; |
if (pafScanlineGreen) |
delete pafScanlineGreen; |
if (pafScanlineBlue) |
delete pafScanlineBlue; |
if (pafScanlineAlpha) |
delete pafScanlineAlpha; |
GDALClose (poDataset); |
poDataset = 0; |
return false; |
} |
poBand->GetBlockSize (&nXBlock, &nYBlock); |
nXSize = poBand->GetXSize(); |
nYSize = poBand->GetYSize(); |
tRasterType = poBand->GetRasterDataType (); |
tTypeLen = GDALGetDataTypeSize (tRasterType) / 8; // We need Bytes not Bits! |
tColor = poBand->GetColorInterpretation (); |
adfMinMax[0] = poBand->GetMinimum (&bGotMin); |
adfMinMax[1] = poBand->GetMaximum (&bGotMax); |
if (!(bGotMin && bGotMax)) |
GDALComputeRasterMinMax ((GDALRasterBandH)poBand, TRUE, adfMinMax); |
if ((pCT = poBand->GetColorTable()) != NULL) |
tColorEntrys = poBand->GetColorTable()->GetColorEntryCount(); |
switch (a) |
{ |
case 1: pafScanlineRed = new unsigned char[tTypeLen * nXSize * nYSize]; pafScanline = pafScanlineRed; pCTr = pCT; break; |
case 2: pafScanlineGreen = new unsigned char[tTypeLen * nXSize * nYSize]; pafScanline = pafScanlineGreen; pCTg = pCT; break; |
case 3: pafScanlineBlue = new unsigned char[tTypeLen * nXSize * nYSize]; pafScanline = pafScanlineBlue; pCTb = pCT; break; |
case 4: pafScanlineAlpha = new unsigned char[tTypeLen * nXSize * nYSize]; pafScanline = pafScanlineAlpha; pCTa = pCT; break; |
} |
if (!pafScanline) |
{ |
paint.end(); |
QApplication::restoreOverrideCursor(); |
KMessageBox::error(this, i18n("Not enough memory for a raster operation!")); |
if (pafScanlineRed) |
delete pafScanlineRed; |
if (pafScanlineGreen) |
delete pafScanlineGreen; |
if (pafScanlineBlue) |
delete pafScanlineBlue; |
if (pafScanlineAlpha) |
delete pafScanlineAlpha; |
GDALClose (poDataset); |
poDataset = 0; |
return false; |
} |
memset (pafScanline, 0, tTypeLen * nXSize * nYSize); |
/* |
* Get the image (from the server) and put the tiles together. |
* |
* The function reads only one raster band. This is, |
* because the function is called for every raster band and |
* every raster band is stored into a separate array. |
*/ |
if (poBand->RasterIO (GF_Read, 0, 0, nXSize, nYSize, pafScanline, nXSize, nYSize, tRasterType, 0, 0) == CE_Failure) |
{ |
paint.end(); |
QApplication::restoreOverrideCursor(); |
KMessageBox::error(this, i18n("Error reading a raster band:\n%1").arg(catGDALError())); |
QApplication::setOverrideCursor (QCursor(Qt::WaitCursor)); |
paint.begin(&pm); |
Fgeo = false; |
break; |
} |
else |
Fgeo = true; |
} |
/* |
* Only if Fgeo is TRUE, we've read successfully all raster |
* bands. Now we have to put the bands together to get |
* an image. |
*/ |
if (Fgeo) |
{ |
unsigned char *pCombinedBytes = new unsigned char[(tTypeLen * nXSize * nYSize * nRasterCount)]; |
unsigned char *ptr_dest, *ptr_src; |
int j, x1, y1, a; |
ptr_dest = ptr_src = 0; |
/* |
* We need two nested loops to set the pixels in the wanted |
* order. |
*/ |
for (a = 0, j = 0; a < (nXSize * nYSize * nRasterCount); a += nRasterCount, j++) |
{ |
int k = a; |
for (int m = nRasterCount - 1; m >= 0; m--, k++) |
{ |
unsigned char *pBytes = 0; |
switch (m) |
{ |
case 3: pBytes = pafScanlineAlpha; pCT = pCTa; break; |
case 2: pBytes = pafScanlineBlue; pCT = pCTb; break; |
case 1: pBytes = pafScanlineGreen; pCT = pCTg; break; |
default: pBytes = pafScanlineRed; pCT = pCTr; |
} |
ptr_dest = pCombinedBytes + k; |
unsigned char b = pBytes[j]; |
/* |
* If we have a color table, the pixels are pointers |
* to the color table. We need to convert them into |
* 24 bit pixels plus an optional alpha channel. |
*/ |
if (pCT != NULL) |
{ |
GDALColorEntry ce; |
unsigned int c = (unsigned int)b; |
c = pCT->GetColorEntryAsRGB (c, &ce); |
if (m == 0) c = ce.c1; |
if (m == 1) c = ce.c2; |
if (m == 2) c = ce.c3; |
if (m == 3) c = ce.c4; |
b = (unsigned char)c; |
} |
ptr_src = &b; |
memcpy (ptr_dest, ptr_src, 1); |
} |
} |
x1 = y1 = 0; |
/* |
* The following loop is QT specific! It sets the pixels |
* of the raw image, pixel by pixel. This may be slow, but |
* everything else didn't work :-( |
* |
* FIXME: We need a more effective routine to put the |
* raw image into QT's "painter" class. |
*/ |
for (a = 0; a < (nXSize * nYSize * nRasterCount); a += nRasterCount) |
{ |
if (x1 < width && y1 < height) |
{ |
if (nRasterCount == 3) |
paint.setPen (QPen(QColor((int)pCombinedBytes[a+2], (int)pCombinedBytes[a+1], (int)pCombinedBytes[a]), Qt::SolidLine)); |
else if (nRasterCount > 3) |
paint.setPen (QPen(QColor(qRgba((int)pCombinedBytes[a+3], (int)pCombinedBytes[a+2], (int)pCombinedBytes[a+1], (int)pCombinedBytes[a])), Qt::SolidLine)); |
else if (nRasterCount == 2) |
paint.setPen (QPen(QColor((int)pCombinedBytes[a+1], (int)pCombinedBytes[a], (int)pCombinedBytes[a+1]), Qt::SolidLine)); |
else if (nRasterCount == 1) |
paint.setPen (QPen(QColor((int)pCombinedBytes[a], (int)pCombinedBytes[a], (int)pCombinedBytes[a]), Qt::SolidLine)); |
paint.drawPoint(x1, y1); |
} |
x1++; |
if (x1 >= nXSize) |
{ |
x1 = 0; |
y1++; |
} |
} |
delete pCombinedBytes; |
pCombinedBytes = 0; |
} |
if (pafScanlineRed) |
delete pafScanlineRed; |
if (pafScanlineGreen) |
delete pafScanlineGreen; |
if (pafScanlineBlue) |
delete pafScanlineBlue; |
if (pafScanlineAlpha) |
delete pafScanlineAlpha; |
GDALClose (poDataset); |
poDataset = 0; |
} |
else |
{ |
paint.end(); |
lbPreview->setPixmap(pm); |
QApplication::restoreOverrideCursor(); |
KMessageBox::error(this, i18n("Error initializing GDAL:\n%1").arg(catGDALError())); |
return false; |
} |
paint.end(); |
lbPreview->setPixmap(pm); |
QApplication::restoreOverrideCursor(); |
#endif |
return true; |
} |
/* |
* This part is a parser, able to read an XML-file produced by a WMS-server. |
* The file contains informations about the layers and styles the server |
* supports. |
*/ |
bool wmsSelectorWidget::startDocument() |
{ |
initializeParser(); |
Exception.clear(); |
WMSVersion.clear(); |
element = el2 = el_none; |
attribute = at_none; |
line = 0; |
lcount = 0; |
return true; |
} |
bool wmsSelectorWidget::startElement( const QString&, const QString&, |
const QString& qName, |
const QXmlAttributes& att) |
{ |
int index; |
attribute = at_none; |
if (qName.toLower() == QString("wmt_ms_capabilities")) |
{ |
element = el_WMT_MS_Capabilities; |
if ((index = att.index(QString("version"))) != -1) |
WMSVersion = att.value(index); |
} |
else if (qName.toLower() == QString("service")) |
element = el_Service; |
else if (qName.toLower() == QString("name")) |
attribute = at_Name; |
else if (qName.toLower() == QString("title")) |
attribute = at_Title; |
else if (qName.toLower() == QString("onlineresource")) |
{ |
if (element == el_Service) |
{ |
if ((index = att.index(QString("href"))) != -1) |
Service.OnlineResource = att.value(index); |
if ((index = att.index(QString("type"))) != -1) |
Service.Type = att.value(index); |
} |
else if (element == el_GetCapabilities && el2 == el_Get) |
{ |
if ((index = att.index(QString("href"))) != -1) |
Request.GetCapabilities.Get = att.value(index); |
} |
else if (element == el_GetCapabilities && el2 == el_Post) |
{ |
if ((index = att.index(QString("href"))) != -1) |
Request.GetCapabilities.Post = att.value(index); |
} |
else if (element == el_GetMap && el2 == el_Get) |
{ |
if ((index = att.index(QString("href"))) != -1) |
Request.GetMap.Get = att.value(index); |
} |
else if (element == el_GetMap && el2 == el_Post) |
{ |
if ((index = att.index(QString("href"))) != -1) |
Request.GetMap.Post = att.value(index); |
} |
else if (element == el_GetFeatureInfo && el2 == el_Get) |
{ |
if ((index = att.index(QString("href"))) != -1) |
Request.GetFeatureInfo.Get = att.value(index); |
} |
else if (element == el_GetFeatureInfo && el2 == el_Post) |
{ |
if ((index = att.index(QString("href"))) != -1) |
Request.GetFeatureInfo.Post = att.value(index); |
} |
} |
else if (qName.toLower() == QString("contactinformation")) |
element = el_ContactInformation; |
else if (qName.toLower() == QString("contactpersonprimary")) |
element = el_ContactPersonPrimary; |
else if (qName.toLower() == QString("contactperson")) |
attribute = at_ContactPerson; |
else if (qName.toLower() == QString("contactorganisation")) |
attribute = at_ContactOrganisation; |
else if (qName.toLower() == QString("contactposition")) |
attribute = at_ContactPosition; |
else if (qName.toLower() == QString("contactaddress")) |
element = el_ContactAddress; |
else if (qName.toLower() == QString("addresstype")) |
attribute = at_AddressType; |
else if (qName.toLower() == QString("address")) |
attribute = at_Address; |
else if (qName.toLower() == QString("city")) |
attribute = at_City; |
else if (qName.toLower() == QString("stateorprovince")) |
attribute = at_StateOrProvince; |
else if (qName.toLower() == QString("postcode")) |
attribute = at_PostCode; |
else if (qName.toLower() == QString("country")) |
attribute = at_Country; |
else if (qName.toLower() == QString("contactvoicetelephone")) |
attribute = at_ContactVoiceTelephone; |
else if (qName.toLower() == QString("contactfacsimiletelephone")) |
attribute = at_ContactFacsimileTelephone; |
else if (qName.toLower() == QString("contactelectronicmailaddress")) |
attribute = at_ContactElectronicMailAddress; |
else if (qName.toLower() == QString("fees")) |
attribute = at_Fees; |
else if (qName.toLower() == QString("accessconstraints")) |
attribute = at_AccessConstraints; |
else if (qName.toLower() == QString("capability")) |
element = el_Capability; |
else if (qName.toLower() == QString("request")) |
element = el_Request; |
else if (qName.toLower() == QString("getcapabilities")) |
element = el_GetCapabilities; |
else if (qName.toLower() == QString("format")) |
attribute = at_Format; |
else if (qName.toLower() == QString("dcptype")) |
el2 = el_DCPType; |
else if (qName.toLower() == QString("http")) |
el2 = el_HTTP; |
else if (qName.toLower() == QString("get")) |
el2 = el_Get; |
else if (qName.toLower() == QString("post")) |
el2 = el_Post; |
else if (qName.toLower() == QString("getmap")) |
element = el_GetMap; |
else if (qName.toLower() == QString("getfeatureinfo")) |
element = el_GetFeatureInfo; |
else if (qName.toLower() == QString("exception")) |
element = el_Exception; |
else if (qName.toLower() == QString("layer")) |
{ |
LAYER *akt; |
element = el_Layer; |
lcount++; |
akt = allocateLayer(); |
if (firstLayer == 0) |
firstLayer = akt; |
if ((index = att.index(QString("opaque"))) != -1) |
akt->opaque = (att.value(index).toInt() == 0) ? false : true; |
if ((index = att.index(QString("noSubsets"))) != -1) |
akt->noSubsets = (att.value(index).toInt() == 0) ? false : true; |
if ((index = att.index(QString("queryable"))) != -1) |
akt->queryable = (att.value(index).toInt() == 0) ? false : true; |
if ((index = att.index(QString("cascaded"))) != -1) |
akt->cascaded = (att.value(index).toInt() == 0) ? false : true; |
} |
else if (qName.toLower() == QString("srs")) |
attribute = at_SRS; |
else if (qName.toLower() == QString("crs")) |
attribute = at_CRS; |
else if (qName.toLower() == QString("abstract")) |
attribute = at_Abstract; |
else if (qName.toLower() == QString("latlonboundingbox")) |
{ |
if (lcount < 1) |
{ |
KMessageBox::error(this, i18n("Error at line %1: Element LatLonBoundingBox was found outside of a Layer element!").arg(line)); |
return false; |
} |
if (!Layer || !firstLayer) |
{ |
KMessageBox::error(this, i18n("Fatal error at line %1: Layer was not initialized!").arg(line)); |
return false; |
} |
if ((index = att.index(QString("maxx"))) != -1) |
Layer->LatLon.maxx = att.value(index).toDouble(); |
if ((index = att.index(QString("maxy"))) != -1) |
Layer->LatLon.maxy = att.value(index).toDouble(); |
if ((index = att.index(QString("minx"))) != -1) |
Layer->LatLon.minx = att.value(index).toDouble(); |
if ((index = att.index(QString("miny"))) != -1) |
Layer->LatLon.miny = att.value(index).toDouble(); |
} |
else if (qName.toLower() == QString("boundingbox")) |
{ |
if (lcount < 1) |
{ |
KMessageBox::error(this, i18n("Error at line %1: Element BoundingBox was found outside of a Layer element!").arg(line)); |
return false; |
} |
if (!Layer || !firstLayer) |
{ |
KMessageBox::error(this, i18n("Fatal error at line %1: Layer was not initialized!").arg(line)); |
return false; |
} |
if ((index = att.index(QString("maxx"))) != -1) |
Layer->Bounding.maxx = att.value(index).toDouble(); |
if ((index = att.index(QString("maxy"))) != -1) |
Layer->Bounding.maxy = att.value(index).toDouble(); |
if ((index = att.index(QString("minx"))) != -1) |
Layer->Bounding.minx = att.value(index).toDouble(); |
if ((index = att.index(QString("miny"))) != -1) |
Layer->Bounding.miny = att.value(index).toDouble(); |
if ((index = att.index(QString("srs"))) != -1) |
Layer->Bounding.SRS = att.value(index); |
} |
else if (qName.toLower() == QString("metadataurl")) |
element = el_MetadataURL; |
else if (qName.toLower() == QString("legendurl")) |
element = el_LegendURL; |
else if (qName.toLower() == QString("style")) |
{ |
element = el_Style; |
if (!Layer || !firstLayer) |
{ |
KMessageBox::error(this, i18n("Fatal error at line %1: Layer was not initialized!").arg(line)); |
return false; |
} |
if (!Layer->style) |
Layer->style = allocateStyle(); |
else |
{ |
STYLE *akt = findLastStyle(Layer); |
akt->next = allocateStyle(); |
} |
} |
else if (qName.toLower() == QString("scalehint")) |
{ |
if (lcount < 1) |
{ |
KMessageBox::error(this, i18n("Error at line %1: Element ScaleHint was found outside of a Layer element!").arg(line)); |
return false; |
} |
if (!Layer || !firstLayer) |
{ |
KMessageBox::error(this, i18n("Fatal error at line %1: Layer was not initialized!").arg(line)); |
return false; |
} |
if ((index = att.index(QString("min"))) != -1) |
Layer->scaleMin = att.value(index).toDouble(); |
if ((index = att.index(QString("max"))) != -1) |
Layer->scaleMax = att.value(index).toDouble(); |
} |
return true; |
} |
bool wmsSelectorWidget::endElement( const QString&, const QString&, const QString& qName) |
{ |
attribute = at_none; |
if (qName.toLower() == QString("wmt_ms_Capabilities")) |
element = el_none; |
else if (qName.toLower() == QString("service")) |
element = el_WMT_MS_Capabilities; |
else if (qName.toLower() == QString("keywordlist")) |
element = el_Service; |
else if (qName.toLower() == QString("contactinformation")) |
element = el_Service; |
else if (qName.toLower() == QString("contactpersonprimary")) |
element = el_ContactInformation; |
else if (qName.toLower() == QString("contactaddress")) |
element = el_ContactInformation; |
else if (qName.toLower() == QString("capability")) |
element = el_WMT_MS_Capabilities; |
else if (qName.toLower() == QString("request")) |
element = el_Capability; |
else if (qName.toLower() == QString("getcapabilities")) |
element = el_Request; |
else if (qName.toLower() == QString("dcptype")) |
el2 = el_none; |
else if (qName.toLower() == QString("http")) |
el2 = el_DCPType; |
else if (qName.toLower() == QString("get")) |
el2 = el_HTTP; |
else if (qName.toLower() == QString("post")) |
el2 = el_HTTP; |
else if (qName.toLower() == QString("getmap")) |
element = el_Request; |
else if (qName.toLower() == QString("getfeatureinfo")) |
element = el_Request; |
else if (qName.toLower() == QString("exception")) |
element = el_Capability; |
else if (qName.toLower() == QString("layer")) |
{ |
lcount--; |
if (lcount == 0) |
element = el_Capability; |
else |
element = el_Layer; |
} |
else if (qName.toLower() == QString("metadataurl")) |
element = el_Layer; |
else if (qName.toLower() == QString("legendurl")) |
element = el_Layer; |
else if (qName.toLower() == QString("style")) |
element = el_Layer; |
return true; |
} |
bool wmsSelectorWidget::characters (const QString& chraw) |
{ |
if (chraw.at(0) == QChar('\n')) |
{ |
line++; |
return true; |
} |
QString ch = chraw.trimmed(); |
if (ch.length() == 0) |
return true; |
if (element == el_Service || element == el_ContactInformation || |
element == el_ContactPersonPrimary || element == el_ContactAddress) |
{ |
if (attribute == at_Name) |
Service.Name = ch; |
else if (attribute == at_Title) |
Service.Title = ch; |
else if (attribute == at_Abstract) |
Service.Abstract = ch; |
else if (attribute == at_ContactPerson) |
Service.ContactPerson = ch; |
else if (attribute == at_ContactOrganisation) |
Service.ContactOrganisation = ch; |
else if (attribute == at_ContactElectronicMailAddress) |
Service.ContactElectronicMailAddress = ch; |
else if (attribute == at_ContactPosition) |
Service.ContactPosition = ch; |
else if (attribute == at_AddressType) |
Service.AddressType = ch; |
else if (attribute == at_Address) |
Service.Address = ch; |
else if (attribute == at_City) |
Service.City = ch; |
else if (attribute == at_StateOrProvince) |
Service.StateOrProvince = ch; |
else if (attribute == at_PostCode) |
Service.PostCode = ch; |
else if (attribute == at_Country) |
Service.Country = ch; |
else if (attribute == at_ContactVoiceTelephone) |
Service.ContactVoiceTelephone = ch; |
else if (attribute == at_ContactFacsimileTelephone) |
Service.ContactFacsimileTelephone = ch; |
else if (attribute == at_Fees) |
Service.Fees = ch; |
else if (attribute == at_AccessConstraints) |
Service.AccessConstraints = ch; |
} |
else if (element == el_GetCapabilities) |
{ |
if (attribute == at_Format) |
Request.GetCapabilities.Format << ch; |
} |
else if (element == el_GetMap) |
{ |
if (attribute == at_Format) |
Request.GetMap.Format << ch; |
} |
else if (element == el_GetFeatureInfo) |
{ |
if (attribute == at_Format) |
Request.GetFeatureInfo.Format << ch; |
} |
else if (element == el_Exception) |
{ |
if (attribute == at_Format) |
Exception << ch; |
} |
else if (element == el_Layer) |
{ |
if (attribute == at_Name) |
Layer->Name = ch; |
else if (attribute == at_Title) |
Layer->Title = ch; |
else if (attribute == at_Abstract) |
Layer->Abstract = ch; |
else if (attribute == at_SRS) |
Layer->SRS << ch; |
else if (attribute == at_CRS) |
Layer->CRS << ch; |
} |
else if (element == el_Style) |
{ |
STYLE *akt = findLastStyle(Layer); |
if (!Layer->style) |
{ |
Layer->style = allocateStyle(); |
akt = Layer->style; |
} |
if (!akt) |
{ |
KMessageBox::error(this, i18n("Fatal error at line %1: No, or unable to allocate memory for a style!").arg(line)); |
return false; |
} |
if (attribute == at_Name) |
akt->Name = ch; |
else if (attribute == at_Title) |
akt->Title = ch; |
} |
return true; |
} |
void wmsSelectorWidget::getCapabilities() |
{ |
if (file.exists()) |
file.remove(); |
if (!file.open(QIODevice::WriteOnly)) |
{ |
KMessageBox::information(this, |
i18n("Unable to save the file %1: %2.").arg(file.fileName()).arg(file.errorString()), |
i18n("WMS capabilities")); |
return; |
} |
#ifndef QT_NO_OPENSSL |
QHttp::ConnectionMode mode = (urlWMS->url().protocol().toLower() == "https") ? QHttp::ConnectionModeHttps : QHttp::ConnectionModeHttp; |
#else |
QHttp::ConnectionMode mode = QHttp::ConnectionModeHttp; |
#endif |
http->setHost(urlWMS->url().host(), mode, (urlWMS->url().port() == -1) ? 0 : urlWMS->url().port()); |
if (!urlWMS->url().user().isEmpty()) |
http->setUser(urlWMS->url().user(), urlWMS->url().pass()); |
httpRequestAborted = false; |
id = http->get(urlWMS->url().url() + "?VERSION=1.1.1&REQUEST=GetCapabilities&SERVICE=WMS", &file); |
// Show a progress dialog |
progressDialog->setVisible(true); |
progressDialog->setWindowTitle(i18n("Getting capabilities")); |
progressDialog->setLabelText(i18n("Downloading capabilities.")); |
} |
bool wmsSelectorWidget::parseWMS() |
{ |
QXmlSimpleReader reader; |
LAYER *aktLayer; |
QXmlInputSource source (&file); |
reader.setContentHandler (this); |
reader.parse (source); |
// Put the result into the elements of the mask |
aktLayer = firstLayer; |
while (aktLayer) |
{ |
if (!aktLayer->Name.isEmpty()) // Do we have a valid layer? |
actionLayer->availableListWidget()->addItem(aktLayer->Name); |
aktLayer = aktLayer->next; |
} |
return true; |
} |
void wmsSelectorWidget::cancelDownload() |
{ |
httpRequestAborted = true; |
http->abort(); |
} |
void wmsSelectorWidget::WMSrequestFinished(int requestId, bool error) |
{ |
if (requestId != id) |
return; |
if (httpRequestAborted) |
{ |
file.close(); |
file.remove(); |
progressDialog->hide(); |
return; |
} |
progressDialog->hide(); |
file.close(); |
if (error) |
{ |
file.remove(); |
KMessageBox::information(this, i18n("Download failed: %1.").arg(http->errorString()), i18n("WMS capabilities")); |
} |
else |
{ |
parseWMS(); |
} |
} |
void wmsSelectorWidget::readResponseHeader(const QHttpResponseHeader &responseHeader) |
{ |
switch (responseHeader.statusCode()) |
{ |
case 200: // Ok |
case 301: // Moved Permanently |
case 302: // Found |
case 303: // See Other |
case 307: // Temporary Redirect |
// these are not error conditions |
break; |
default: |
KMessageBox::information(this, |
i18n("Download failed: %1.").arg(responseHeader.reasonPhrase()), |
i18n("WMS capabilities")); |
httpRequestAborted = true; |
progressDialog->hide(); |
http->abort(); |
} |
} |
void wmsSelectorWidget::updateDataReadProgress(int bytesRead, int totalBytes) |
{ |
if (httpRequestAborted) |
return; |
progressDialog->progressBar()->setMaximum(totalBytes); |
progressDialog->progressBar()->setValue(bytesRead); |
} |
void wmsSelectorWidget::slotAuthenticationRequired(const QString &hostName, quint16, QAuthenticator *authenticator) |
{ |
QDialog dlg; |
Ui::Dialog ui; |
ui.setupUi(&dlg); |
dlg.adjustSize(); |
ui.siteDescription->setText(i18n("%1 at %2").arg(authenticator->realm()).arg(hostName)); |
if (dlg.exec() == QDialog::Accepted) |
{ |
authenticator->setUser(ui.userEdit->text()); |
authenticator->setPassword(ui.passwordEdit->text()); |
} |
} |
#ifndef QT_NO_OPENSSL |
void wmsSelectorWidget::sslErrors(const QList<QSslError> &errors) |
{ |
QString errorString; |
foreach (const QSslError &error, errors) |
{ |
if (!errorString.isEmpty()) |
errorString += ", "; |
errorString += error.errorString(); |
} |
if (KMessageBox::warningContinueCancel(this, |
i18n("One or more SSL errors has occurred: %1").arg(errorString), |
i18n("WMS capabilities")) == KMessageBox::Continue) |
{ |
http->ignoreSslErrors(); |
} |
} |
#endif |
void wmsSelectorWidget::initializeParser() |
{ |
LAYER *aktLayer; |
Service.Name.clear(); |
Service.Title.clear(); |
Service.Abstract.clear(); |
Service.OnlineResource.clear(); |
Service.Type.clear(); |
Service.ContactPerson.clear(); |
Service.ContactOrganisation.clear(); |
Service.ContactPosition.clear(); |
Service.AddressType.clear(); |
Service.Address.clear(); |
Service.City.clear(); |
Service.StateOrProvince.clear(); |
Service.PostCode.clear(); |
Service.Country.clear(); |
Service.ContactVoiceTelephone.clear(); |
Service.ContactFacsimileTelephone.clear(); |
Service.ContactElectronicMailAddress.clear(); |
Service.Fees.clear(); |
Service.AccessConstraints.clear(); |
Request.GetCapabilities.Format.clear(); |
Request.GetCapabilities.Get.clear(); |
Request.GetCapabilities.Post.clear(); |
Request.GetMap.Format.clear(); |
Request.GetMap.Get.clear(); |
Request.GetMap.Post.clear(); |
Request.GetFeatureInfo.Format.clear(); |
Request.GetFeatureInfo.Get.clear(); |
Request.GetFeatureInfo.Post.clear(); |
if (Layer) |
{ |
LAYER *nl; |
aktLayer = Layer; |
while (aktLayer) |
{ |
aktLayer->opaque = false; |
aktLayer->noSubsets = false; |
aktLayer->queryable = false; |
aktLayer->cascaded = false; |
aktLayer->Name.clear(); |
aktLayer->Title.clear(); |
aktLayer->Abstract.clear(); |
aktLayer->SRS.clear(); |
aktLayer->LatLon.maxx = 0.0; |
aktLayer->LatLon.maxy = 0.0; |
aktLayer->LatLon.minx = 0.0; |
aktLayer->LatLon.miny = 0.0; |
aktLayer->Bounding.maxx = 0.0; |
aktLayer->Bounding.maxy = 0.0; |
aktLayer->Bounding.minx = 0.0; |
aktLayer->Bounding.miny = 0.0; |
aktLayer->scaleMin = 0.0; |
aktLayer->scaleMax = 0.0; |
if (aktLayer->style) |
{ |
STYLE *ns, *akt; |
akt = aktLayer->style; |
while (akt) |
{ |
akt->Name.clear(); |
akt->Title.clear(); |
akt->Format.clear(); |
akt->LegendURL.clear(); |
ns = akt->next; |
delete akt; |
akt = ns; |
} |
aktLayer->style = 0; |
} |
nl = aktLayer->next; |
delete aktLayer; |
aktLayer = nl; |
} |
Layer = 0; |
firstLayer = 0; |
} |
} |
LAYER *wmsSelectorWidget::allocateLayer() |
{ |
LAYER *aktLayer, *last; |
if (Layer) |
{ |
last = Layer; |
while (last) |
{ |
if (!last->next) |
break; |
last = last->next; |
} |
aktLayer = new LAYER; |
aktLayer->next = 0; |
last->next = aktLayer; |
Layer = aktLayer; |
} |
else |
{ |
aktLayer = new LAYER; |
aktLayer->next = 0; |
Layer = last = firstLayer = aktLayer; |
} |
aktLayer->opaque = false; |
aktLayer->noSubsets = false; |
aktLayer->queryable = false; |
aktLayer->cascaded = false; |
aktLayer->Name.clear(); |
aktLayer->Title.clear(); |
aktLayer->Abstract.clear(); |
aktLayer->SRS.clear(); |
aktLayer->LatLon.maxx = 0.0; |
aktLayer->LatLon.maxy = 0.0; |
aktLayer->LatLon.minx = 0.0; |
aktLayer->LatLon.miny = 0.0; |
aktLayer->LatLon.SRS.clear(); |
aktLayer->Bounding.maxx = 0.0; |
aktLayer->Bounding.maxy = 0.0; |
aktLayer->Bounding.minx = 0.0; |
aktLayer->Bounding.miny = 0.0; |
aktLayer->Bounding.SRS.clear(); |
aktLayer->scaleMin = 0.0; |
aktLayer->scaleMax = 0.0; |
aktLayer->style = 0; |
return aktLayer; |
} |
STYLE *wmsSelectorWidget::allocateStyle() |
{ |
STYLE *akt; |
akt = new STYLE; |
akt->Name.clear(); |
akt->Title.clear(); |
akt->Format.clear(); |
akt->LegendURL.clear(); |
akt->next = 0; |
return akt; |
} |
STYLE *wmsSelectorWidget::findLastStyle(LAYER *l) |
{ |
STYLE *akt; |
if (!l) |
return 0; |
akt = l->style; |
while (akt) |
{ |
if (!akt->next) |
return akt; |
akt = akt->next; |
} |
return 0; |
} |
bool wmsSelectorWidget::writeWMSTag(double llat, double llon, double rlat, double rlon, int width, int height) |
{ |
#if defined HAVE_GDAL |
QFile fl(MAP); |
QString xml, s, srs, crs, styles, bSize, ext; |
QDir dir = QDir::home(); |
QString path = dir.absolutePath(); |
int item; |
double _llat, _llon, _rlat, _rlon; |
if (!fl.open(QIODevice::ReadWrite | QIODevice::Truncate)) |
{ |
KMessageBox::error (this, i18n("Error opening or creating the WMS tag file!\nPlease check file name and/or permissions.")); |
return false; |
} |
KConfig cfg (QString("sportwatcher.rc"), KConfig::SimpleConfig); |
KConfigGroup wms (&cfg, "WMS"); |
xml = "<GDAL_WMS>\n"; |
xml += " <Service name=\"WMS\">\n"; |
xml += " <Version>" + WMSVersion + "</Version>\n"; |
xml += " <ServerURL>" + urlWMS->url().url() + "?</serverURL>\n"; |
_llon = llon; |
_llat = llat; |
_rlon = rlon; |
_rlat = rlat; |
if (firstLayer && firstLayer->SRS.size()) |
srs = firstLayer->SRS.at(0); |
else |
srs = QString("EPSG:4326"); |
xml += " <SRS>" + srs + "</SRS>\n"; |
if (firstLayer && firstLayer->CRS.size()) |
crs = firstLayer->CRS.at(0); |
else |
crs = QString("EPSG:4326"); |
xml += " <CRS>" + crs + "</CRS>\n"; |
xml += " <ImageFormat>image/"; |
xml += "png"; |
ext = QString(".png"); |
xml += "</ImageFormat>\n"; |
xml += " <Layers>"; |
QListWidget *lw = actionLayer->selectedListWidget(); |
s.clear(); |
for (int i = 0; i < lw->count(); i++) |
{ |
QListWidgetItem *lwi; |
if (i > 0 && i < lw->count()) |
{ |
xml += ","; |
s += ","; |
} |
lwi = lw->item(i); |
xml += lwi->text(); |
} |
xml += "</Layers>\n"; |
if (StyleCommas) |
xml += " <Styles>" + s + "</Styles>\n"; |
else |
xml += " <Styles></Styles>\n"; |
xml += " <BBoxOrder>xyXY</BBoxOrder>\n"; |
xml += " </Service>\n"; |
xml += " <DataWindow>\n"; |
s.sprintf ("%f", _llat); |
xml += " <UpperLeftX>" + s + "</UpperLeftX>\n"; |
s.sprintf ("%f", _llon); |
xml += " <UpperLeftY>" + s + "</UpperLeftY>\n"; |
s.sprintf ("%f", _rlat); |
xml += " <LowerRightX>" + s + "</LowerRightX>\n"; |
s.sprintf ("%f", _rlon); |
xml += " <LowerRightY>" + s + "</LowerRightY>\n"; |
s.sprintf ("%d", width); |
xml += " <SizeX>" + s + "</SizeX>\n"; |
s.sprintf ("%d", height); |
xml += " <SizeY>" + s + "</SizeY>\n"; |
xml += " </DataWindow>\n"; |
xml += " <Projection>" + srs + "</Projection>\n"; |
xml += " <BandsCount>" + QString("%1").arg(edBands->value()) + "</BandsCount>\n"; |
item = wms.readEntry("Tile", 2); |
switch (item) |
{ |
case 0: bSize = QString("64"); break; |
case 1: bSize = QString("128"); break; |
case 2: bSize = QString("256"); break; |
case 3: bSize = QString("512"); break; |
case 4: bSize = QString("1024"); break; |
default: bSize = QString("256"); |
} |
xml += " <BlockSizeX>" + bSize + "</BlockSizeX>\n"; |
xml += " <BlockSizeY>" + bSize + "</BlockSizeY>\n"; |
xml += " <OverviewCount>" + wms.readEntry("Overview", QString("10")) + "</OverviewCount>\n"; |
xml += " <Cache>\n"; |
xml += " <Path>" + path + "/.gdalwmscache" + "</Path>\n"; |
xml += " <Depth>" + wms.readEntry("Depth", QString("2")) + "</Depth>\n"; |
xml += " <Extension>" + ext + "</Extension>\n"; |
xml += " </Cache>\n"; |
QString adv((wms.readEntry("Advice", true)) ? "true" : "false"); |
QString ver((wms.readEntry("Verify", false)) ? "true" : "false"); |
xml += " <OfflineMode>false</OfflineMode>\n"; |
xml += " <AdviseRead>" + adv + "</AdviseRead>\n"; |
xml += " <VerifyAdviseRead>" + ver + "</VerifyAdviseRead>\n"; |
xml += "</GDAL_WMS>\n"; |
write (fl.handle(), xml.toAscii().data(), strlen (xml.toAscii().data())); |
fl.close(); |
#endif |
return true; |
} |
void wmsSelectorWidget::setDimension(double &minx, double &miny, double &maxx, double &maxy, QListWidgetItem *item = 0) |
{ |
double cx, cy; |
/*LAYER *akt; |
if (!firstLayer) |
return; |
//std::cout << "minx: " << firstLayer->LatLon.minx << "miny: " << firstLayer->LatLon.miny << "maxx: " << firstLayer->LatLon.maxx << "maxy: " << firstLayer->LatLon.maxy << std::endl; |
cx = cy = 0.0; |
akt = firstLayer; |
while (akt) |
{ |
cx = akt->LatLon.minx + (akt->LatLon.maxx - akt->LatLon.minx) / 2.0; |
cy = akt->LatLon.miny + (akt->LatLon.maxy - akt->LatLon.miny) / 2.0; |
if ((cx != 0.0 || cy != 0.0) && !item) |
break; |
if (item && item->text() == akt->Name && cx != 0.0 && cy != 0.0) |
break; |
akt = akt->next; |
} |
if (cx == 0.0 && cy == 0.0) |
{ // Schloss Schönbrunn in Vienna |
cx = 16.298223 + (0.014108 / 2.0); |
cy = 48.177103 + (0.003554 / 2.0); |
} |
*/ |
cx = edLat->value(); |
cy = edLon->value(); |
minx = cx - (0.014108 / 2.0); |
maxx = cx + (0.014108 / 2.0); |
miny = cy + (0.003554 / 2.0); |
maxy = cy - (0.003554 / 2.0); |
// edLat->setValue(cx); |
// edLon->setValue(cy); |
} |
#include "wmsselectorwidget.moc" |
/sportwatcher/trunk/src/sportwatcherwidget.cpp |
---|
56,6 → 56,7 |
#include <gdal/ogrsf_frmts.h> |
#include <gdal/gdalwarper.h> |
#include <gdal/ogrsf_frmts.h> |
#include "GDALError.h" |
#endif |
#include "garmin.h" |
78,6 → 79,16 |
double lat; |
} posn_type; |
#if defined HAVE_GDAL |
typedef struct ERRMSG |
{ |
char msg[4096]; |
ERRMSG *next; |
}ERRMSG; |
ERRMSG *firstError; |
#endif |
sportwatcherWidget::sportwatcherWidget(QWidget *parent) |
{ |
ui_sportwatcherWidgetBase.setupUi(this); |
84,6 → 95,7 |
#if defined HAVE_GDAL |
mFactor = 10; // Factor to calculate square pixels |
firstError = 0; |
#endif |
mama = parent; |
gmn = 0; |
125,6 → 137,11 |
MAP = ic.readEntry("MAP", QDir::home().absolutePath() + "/.sportwatcher/track.wms"); |
Units = ic.readEntry("Units", 0); |
MapType = ic.readEntry("MapType", 7); |
#ifdef HAVE_GDAL |
// set our own error handler here |
CPLSetErrorHandler((CPLErrorHandler)spwErrorHandler); |
#endif |
} |
sportwatcherWidget::~sportwatcherWidget() |
131,6 → 148,10 |
{ |
destroy(); |
delete kl; |
#ifdef HAVE_GDAL |
// destroy the error handler here |
CPLSetErrorHandler(NULL); |
#endif |
} |
void sportwatcherWidget::destroy() |
675,6 → 696,7 |
// We dont care about page margins of a printer. Instead we assume |
// a frame from about 20mm arround the page. European paper size is |
// A4 (210x297mm) and the output is optimized for this. |
totdist = 0; |
extMil[0] = 20.0; |
extMil[1] = 20.0; |
extMil[2] = 210.0 - 20.0; |
2914,7 → 2936,9 |
if (mapLap != lap) |
mapLap = lap; |
y2 = x2 = 0; |
#if defined HAVE_GDAL |
nXSize = nYSize = 0; |
KConfig cfg (QString("sportwatcher.rc"), KConfig::SimpleConfig); |
KConfigGroup wms (&cfg, "WMS"); |
bool square = wms.readEntry("Square", false); |
3112,6 → 3136,8 |
GDALDataType tRasterType; |
double adfMinMax[2]; |
pCT = pCTb = pCTr = pCTg = pCTa = 0; |
tTypeLen = 0; |
pafScanlineRed = pafScanlineGreen = pafScanlineBlue = pafScanlineAlpha = 0; |
Fgeo = true; |
/* |
3768,11 → 3794,11 |
// Information on left side |
if (cuType == 0) |
paint.drawText((height + 4) * -1, 3, height - 2, lineHeight, Qt::AlignCenter, i18n((Units == 1) ? "Elevation (ft)" : "Elevation (m)")); |
paint.drawText((height + 4) * -1, 3, height - 2, lineHeight, Qt::AlignCenter, i18n("Elevation (%1)").arg((Units == 1) ? "ft" : "m")); |
else if (cuType == 1) |
paint.drawText((height + 4) * -1, 3, height - 2, lineHeight, Qt::AlignCenter, i18n((Units == 1) ? "Speed (mph)" : "Speed (km/h)")); |
paint.drawText((height + 4) * -1, 3, height - 2, lineHeight, Qt::AlignCenter, i18n("Speed (%1)").arg((Units == 1) ? "mph" : "km/h")); |
else |
paint.drawText((height + 4) * -1, 3, height - 2, lineHeight, Qt::AlignCenter, i18n((Units == 1) ? "Elevation (ft)" : "Elevation (m)")); |
paint.drawText((height + 4) * -1, 3, height - 2, lineHeight, Qt::AlignCenter, i18n("Elevation (%1)").arg((Units == 1) ? "ft" : "m")); |
if (cuType == 2) |
paint.setPen(QPen(red, 1, Qt::SolidLine)); |
3783,7 → 3809,7 |
if (cuType < 2) |
paint.drawText((height + 4) * -1, width - 1 - lineHeight, height - 2, lineHeight, Qt::AlignCenter, i18n("Heart Rate (bpm)")); |
else |
paint.drawText((height + 4) * -1, width - 1 - lineHeight, height - 2, lineHeight, Qt::AlignCenter, i18n((Units == 1) ? "Speed (mph)" : "Speed (km/h)")); |
paint.drawText((height + 4) * -1, width - 1 - lineHeight, height - 2, lineHeight, Qt::AlignCenter, i18n("Speed (%1)").arg((Units == 1) ? "mph" : "km/h")); |
paint.restore(); |
paint.setPen(QPen(mark, 1, Qt::SolidLine)); |
4278,10 → 4304,9 |
{ |
QPainter ptHR, ptElevation, ptSpeed; |
int width, height, wdHR, htHR, wdElev, htElev, wdSpeed, htSpeed; |
int i, secs, cuType; |
int i, secs; |
int lineHeight, margin_left, margin_right, margin_bottom; |
int x1, y1, x2, y2; // Coordinates |
bool meterHR; |
double maxHeight, minHeight, maxSpeed, minSpeed; |
int maxHr, minHr, rh, rhHR, rhElev, rhSpeed; |
POINT *point; |
4300,6 → 4325,9 |
if (!ActivePrint && (!DIRTY || curTab != 2)) |
return; |
w_tick = h_tick = 0.0; |
rh = 0; |
width = height = 0; |
// Get the dimensions of the available draw area |
// First for heart rate |
if (!ActivePrint) |
4519,8 → 4547,8 |
// Information on right side |
ptHR.drawText((htHR + 4) * -1, wdHR - 1 - lineHeight, htHR - 2, lineHeight, Qt::AlignCenter, i18n("Heart Rate (bpm)")); |
ptElevation.drawText((htElev + 4) * -1, wdElev - 1 - lineHeight, htElev - 2, lineHeight, Qt::AlignCenter, i18n((Units == 1) ? "Elevation (ft)" : "Elevation (m)")); |
ptSpeed.drawText((htSpeed + 4) * -1, wdSpeed - 1 - lineHeight, htSpeed - 2, lineHeight, Qt::AlignCenter, i18n((Units == 1) ? "Speed (mph)" : "Speed (km/h)")); |
ptElevation.drawText((htElev + 4) * -1, wdElev - 1 - lineHeight, htElev - 2, lineHeight, Qt::AlignCenter, i18n("Elevation (%1)").arg((Units == 1) ? "ft" : "m")); |
ptSpeed.drawText((htSpeed + 4) * -1, wdSpeed - 1 - lineHeight, htSpeed - 2, lineHeight, Qt::AlignCenter, i18n("Speed (%1)").arg((Units == 1) ? "mph" : "km/h")); |
// restore to normal |
ptHR.restore(); |
4701,23 → 4729,11 |
x1 = margin_left + 1; |
x2 = wdHR - margin_right - 1; |
if (meterHR) |
{ |
double hrscale = rh / (double)(maxHr - minHr); |
ay1 = (double)rh - (double)(lower1 - minHr) * hrscale; |
ay2 = (double)rh - (double)(lower2 - minHr) * hrscale; |
ay3 = (double)rh - (double)(lower3 - minHr) * hrscale; |
ay4 = (double)rh - (double)(upper3 - minHr) * hrscale; |
ay5 = (double)rh - (double)(avg_hr - minHr) * hrscale; |
} |
else |
{ |
ay1 = (double)rh - (double)(lower1 - minHr) * htiHR; |
ay2 = (double)rh - (double)(lower2 - minHr) * htiHR; |
ay3 = (double)rh - (double)(lower3 - minHr) * htiHR; |
ay4 = (double)rh - (double)(upper3 - minHr) * htiHR; |
ay5 = (double)rh - (double)(avg_hr - minHr) * htiHR; |
} |
ay1 = (double)rh - (double)(lower1 - minHr) * htiHR; |
ay2 = (double)rh - (double)(lower2 - minHr) * htiHR; |
ay3 = (double)rh - (double)(lower3 - minHr) * htiHR; |
ay4 = (double)rh - (double)(upper3 - minHr) * htiHR; |
ay5 = (double)rh - (double)(avg_hr - minHr) * htiHR; |
ptHR.setPen(QPen(barcol2, 1, Qt::DashLine)); // color for limits |
4801,7 → 4817,7 |
avgHlast = avgHeight; |
// If wanted, even the lines |
if (Contour && hEc > 0 && cuType != 0) |
if (Contour && hEc > 0) |
{ |
double alt[100], avg, avg1, avg2, avg3, avg4; |
int a, pos; |
5857,5 → 5873,89 |
#endif |
#ifdef HAVE_GDAL |
void spwErrorHandler(CPLErr err, int num, const char *msg) |
{ |
ERRMSG *akt; |
char et[32], hv0[4096]; |
if (err == CE_None || !msg) |
return; |
if (err == CE_Fatal) |
std::cerr << "ERROR " << num << ": " << msg << endl; |
if (!firstError) |
{ |
firstError = new ERRMSG; |
memset (firstError, 0, sizeof(ERRMSG)); |
akt = firstError; |
} |
else |
{ |
akt = firstError; |
while (akt) |
{ |
if (!akt->next) |
break; |
akt = akt->next; |
} |
akt->next = new ERRMSG; |
akt = akt->next; |
memset (akt, 0, sizeof(ERRMSG)); |
} |
switch (err) |
{ |
case CE_None: strcpy (et, "None"); break; |
case CE_Debug: strcpy (et, "DEBUG"); break; |
case CE_Warning: strcpy (et, "Warning"); break; |
case CE_Failure: strcpy (et, "Failure"); break; |
case CE_Fatal: strcpy (et, "Fatal"); break; |
} |
memset(hv0, 0, sizeof(hv0)); |
strncpy (hv0, msg, 4000); |
sprintf (akt->msg, "ERROR TYPE %s - %d: %s", et, num, hv0); |
} |
void destroyErrors() |
{ |
ERRMSG *akt; |
if (!firstError) |
return; |
akt = firstError; |
while (akt) |
{ |
firstError = akt->next; |
delete akt; |
akt = firstError; |
} |
firstError = 0; |
} |
QString catGDALError() |
{ |
QString err; |
ERRMSG *akt = firstError; |
while (akt) |
{ |
err += QString(akt->msg) + "\n"; |
akt = akt->next; |
} |
destroyErrors(); |
return err; |
} |
#endif |
#include "sportwatcherwidget.moc" |
/sportwatcher/trunk/src/wmscapabilitieswidget.h |
---|
0,0 → 1,53 |
// |
// C++ Interface: |
// |
// Description: |
// |
// |
// Author: Andreas Theofilu <andreas@theosys.at>, (C) 2009 |
// |
// Copyright: See COPYING file that comes with this distribution |
// |
// |
#ifndef WMSCAPABILITIESWIDGET_H |
#define WMSCAPABILITIESWIDGET_H |
#include <QDialog> |
#include <QString> |
#include <KLineEdit> |
#include <KListWidget> |
#include "ui_wmscapabilitieswidgetbase.h" |
class wmsCapabilitiesWidget : public QDialog, private Ui::wmsCapabilitiesWidgetBase |
{ |
Q_OBJECT |
public: |
wmsCapabilitiesWidget (QWidget* parent = 0, Qt::WFlags fl = 0); |
~wmsCapabilitiesWidget(); |
/*$PUBLIC_FUNCTIONS$*/ |
void setPerson(QString s) { edPerson->setText(s); }; |
void setOrg(QString s) { edOrg->setText(s); }; |
void setPhone(QString s) { edPhone->setText(s); }; |
void setFax(QString s) { edFax->setText(s); }; |
void setMail(QString s) { edMail->setText(s); }; |
void setCapabilitiesGet(QString s) { edCapabilitiesGet->setText(s); }; |
void setCapabilitiesPost(QString s) { edCapabilitiesPost->setText(s); }; |
void setFormat(QString s) { edFormat->setText(s); }; |
void setMapGet(QString s) { edMapGet->setText(s); }; |
void setMapPost(QString s) { edMapPost->setText(s); }; |
void addFormats(QString s) { liFormats->addItem(s); }; |
public slots: |
/*$PUBLIC_SLOTS$*/ |
protected: |
/*$PROTECTED_FUNCTIONS$*/ |
protected slots: |
/*$PROTECTED_SLOTS$*/ |
}; |
#endif |
/sportwatcher/trunk/ChangeLog |
---|
1,3 → 1,34 |
Version: 0.7 |
============ |
Fixed the labels of speed and elevation curves. Now they are translateable |
into any language. |
Fixed the initializing of variables. Now the compiler does not warn anymore |
about uninitialized variables. |
Added printing support. Every loaded activity can be print. The page selection |
of the printing dialog is honored. |
Added support for OSM files. Now a map can be created directly out of an OSM |
file. This will work only, if the OSM plugin was installed with Mapnik! |
Added support for PostGIS databases. |
Added support for ESRI shape files. Created some Mapfiles to support some |
shape files out of the box. |
Added a parser to interpret a mapfile and set the options to Mapnik. This is |
the precondition for supporting vektor data sources. |
Version: 0.6 |
============ |
Added support for TCX-Files as the Garmin TrainingCenter produces. |
Stabilized the import of TCX-Files. |
Fixed a bug in export of TCX file. Now a lap contains the correct number of |
tracks. Even the very last track is also exported now. |
/sportwatcher/trunk/TODO |
---|
0,0 → 1,23 |
Planned: |
======== |
* Completing the last tab. |
* An interpreter who can parse the index output of a WMS server. It shows |
the found layers and styles in a dialog box and allows the user to select |
them. The user should see the result of the selection immediatly in a |
small example map in the same dialog box. |
Nice to have: |
============= |
* Automatic detection of the contents of a shape file. The found contents |
can than be used in a kind of editor. |
* An editor to "click" the contents of a mapfile together. This editor |
should allow an user to simply select unique tags of a shape file and |
put them in order. Everything simply with the mouse. No need to name |
anything. |
This editor could be used to create mapfiles for GIS databases too. |
/sportwatcher/trunk/doc/de/index.docbook |
---|
1,6 → 1,5 |
<?xml version="1.0" ?> |
<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.1.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [ |
<!ENTITY sportwatcher "<application>SportWatcher 0.6</application>"> |
<!ENTITY sportwatcher "<application>SportWatcher 0.7</application>"> |
<!ENTITY kappname "&sportwatcher;"><!-- Do *not* replace kappname--> |
<!ENTITY package "kde-module"><!-- kdebase, kdeadmin, etc --> |
<!ENTITY % addindex "IGNORE"> |
36,8 → 35,8 |
and in the FDL itself on how to use it. --> |
<legalnotice>&FDLNotice;</legalnotice> |
<date>2009-07-30</date> |
<releaseinfo>0.6</releaseinfo> |
<date>2009-09-18</date> |
<releaseinfo>0.7</releaseinfo> |
<abstract> |
<para>&sportwatcher; ist ein Programm zum Auslesen der Daten aus einem Garmin Forerunner. Unterstützt werden alle GPS-Sportuhren, die über einen USB-Anschluß verfügen, wie der Garmin Forerunner 305.</para> |
48,6 → 47,7 |
<keyword>SportWatcher</keyword> |
<keyword>Garmin</keyword> |
<keyword>GDAL</keyword> |
<keyword>Mapnik</keyword> |
</keywordset> |
</bookinfo> |
55,8 → 55,9 |
<title>Einleitung<!-- anchor id="cha.Einleitung" --></title> |
<para>&sportwatcher; ist in erster Linie ein Programm zum Auslesen von diversen GPS-Empfängern. Ich habe das Programm entwickelt als ich festgestellt habe, dass es für den von mir erworbenen Garmin Forerunner305 keine unter Linux lauffähige Software gibt. Da ich ausschließlich Linux verwende, kam das einzige unterstützte Betriebssystem Windows natürlich nicht in Frage. Also habe ich mich mit diesem, speziell für sportliches Training geeigneten GPS-Empfänger, etwas näher beschäftigt. Wie die meisten GPS-Empfänger von Garmin, verwendet auch dieser das NMEA-Protokoll zur Datenübertragung. Zu dem fand ich (eher zufällig) eine Bibliothek von "Dave Bailey" (<dave <at> daveb <dot> net>), welche einen Forerunner305 auslesen konnte. Den Sourcecode habe ich, mit freudlicher Genehmigung von Dave, als Basis für &sportwatcher; verwendet. Dadurch ist &sportwatcher; nun in der Lage, speziell den Garmin Forerunner305 und alle mit ihm kompatiblen GPS-Empfänger auszulesen.</para><sect1 id='sec.Untersttzte-GPS-Empfnger' > |
<title>Unterstützte GPS-Empfänger<!-- anchor id="sec.Untersttzte-GPS-Empfnger" --></title> |
<para>Grundsätzlich wird jeder GPS-Empfänger unterstützt, welcher über das NMEA-Protokoll verfügt. Derzeit getestet sind jedoch nur folgende Geräte:</para><itemizedlist> |
<listitem><para>Garmin Forerunner305</para></listitem><listitem><para>Garmin Forerunner205</para></listitem></itemizedlist><para>Wenn Sie ein anderes Gerät haben, welches mit &sportwatcher; funktioniert, dann senden Sie bitte ein E-Mail an: andreas <at> theosys <dot> at.</para></sect1></chapter><chapter id='cha.Installation' > |
<para>Grundsätzlich wird jeder GPS-Empfänger unterstützt, welcher über das NMEA-Protokoll verfügt und über eine USB-Schnittstelle verfügt. Derzeit getestet sind jedoch nur folgende Geräte:</para><itemizedlist> |
<listitem><para>Garmin Forerunner305</para></listitem><listitem><para>Garmin Forerunner205</para></listitem></itemizedlist><para>Wenn Sie ein anderes Gerät haben, welches mit &sportwatcher; funktioniert, dann senden Sie bitte ein E-Mail an: andreas <at> theosys <dot> at.</para> |
<note><para>Derzeit nicht unterstützt werden Geräte, welche einen ANT-Stick zur drahtlosen Datenübertragung verwenden. Leider hat Garmin das dafür verwendete Protokoll bisher nicht freigegeben, weshalb, bis auf Weiteres, keine Unterstützung möglich ist.</para></note></sect1></chapter><chapter id='cha.Installation' > |
<title>Installation<!-- anchor id="cha.Installation" --></title> |
<para>&sportwatcher; ist in C++ für die Desktopoberfläche KDE geschrieben. Die Entwicklung fand ausschließlich unter Linux statt, wodurch die GNU Utilities ausgiebig verwendet wurden. <emphasis>SportWatcher ist open source!</emphasis> Das bedeutet, dass der Quellcode des Programms frei zugänglich ist. Der Quellcode, und damit das gesamte Programm, steht unter der <emphasis>GNU General Public License Version 3</emphasis>.</para><sect1 id='sec.Download' > |
<title>Download<!-- anchor id="sec.Download" --></title> |
68,10 → 69,10 |
]]></screen><para>Sie können auf das <ulink url="http://www.theosys.at/websvn/listing.php?repname=repos+1&path=/sportwatcher/trunk/&rev=0&sc=0">Repository</ulink> mit dem garantiert aktuellsten Quellcode auch mit Ihrem Browser zugreifen.</para><sect2 id='sec.Bentigte-Komponenten' > |
<title>Benötigte Komponenten<!-- anchor id="sec.Bentigte-Komponenten" --></title> |
<para>Um &sportwatcher; erfolgreich übersetzen zu können, benötigen Sie einige Softwarekomponenten, welche zuerst installiert werden müssen:</para><itemizedlist> |
<listitem><para><ulink url="http://www.kde.org">KDE 4.1.x</ulink></para></listitem><listitem><para><ulink url="http://www.gdal.org">GDAL 1.5.x</ulink> (optional)</para></listitem></itemizedlist><sect3 id='sec:KDE-4.1.x' > |
<title>KDE 4.1.x<!-- anchor id="sec:KDE-4.1.x" --></title> |
<para>Ab der Version 0.6 benötigt SportWatcher mindestens die Version 4.1.0 von KDE. Mit älteren KDE-Versionen kann der Code nicht mehr übersetzt werden!</para></sect3><sect3 id='sec:GDAL-1.5.x' > |
<title>GDAL 1.5.x<!-- anchor id="sec:GDAL-1.5.x" --></title> |
<listitem><para><ulink url="http://www.kde.org">KDE 4.1.x</ulink></para></listitem><listitem><para><ulink url="http://www.gdal.org">GDAL 1.5.x</ulink> (optional)</para></listitem></itemizedlist><sect3 id='sec.KDE-4.1.x' > |
<title>KDE 4.1.x<!-- anchor id="sec.KDE-4.1.x" --></title> |
<para>Ab der Version 0.6 benötigt SportWatcher mindestens die Version 4.1.0 von KDE. Mit älteren KDE-Versionen kann der Code nicht mehr übersetzt werden!</para></sect3><sect3 id='sec.GDAL-1.5.x' > |
<title>GDAL 1.5.x<!-- anchor id="sec.GDAL-1.5.x" --></title> |
<para>&sportwatcher; ist in der Lage, einen Track mit einer Landkarte zu unterlegen. Diese Funktion wird über die Bibliothek GDAL realisiert. Die Verwendung von GDAL ist jedoch optional. &sportwatcher; kann auch ohne GDAL erfolgreich übersetzt werden. Allerdings fehlt dann die Möglichkeit, Landkarten zu verwenden. Unter Debian testing steht derzeit die Version 1.5.4 von GDAL zur Verfügung (Debian Squeeze im Juli 2009), welche für die Entwicklung von &sportwatcher; verwendet wurde. Unter Ubuntu ist bis einschließlich Version 8.04 LTS (Hardy Heron) nur die Version 1.4.x von GDAL enthalten. Diese und ältere Versionen sind nicht für &sportwatcher; geeignet. Ab Ubuntu 9.04 ist jedoch GDAL 1.5.x enthalten.</para> |
<para>Es ist jedoch kein Problem, die neuere Version 1.6.0 zu verwenden. Falls Ihre Distribution bereits über diese neuere Version verfügt, sollte das Übersetzen problemlos möglich sein. </para> |
<para>openSUSE 11.0 stellt GDAL leider gar nicht zur Verfügung. Zwar findet man GDAL als fertiges RPM dafür leicht im Netz, aber es ist nicht leicht die benötigten Abhängigkeiten zu erfüllen. Aus diesem Grund habe ich bei der Version 0.5 von SportWatcher auf die Einbindung von GDAL für openSUSE verzichtet.</para> |
100,14 → 101,14 |
<title>Installation des Sourcecodes<!-- anchor id="sec.Installation-des-Sourcecodes" --></title> |
<para>Soll SportWatcher für alle Benutzer installiert werden, dann sind unbedingt Administratorrechte (root) notwendig. Andernfalls kann das Programm auch in das lokale Verzeichnis installiert werden. Mit &sportwatcher; wird auch eine Datei Namens INSTALL mitgeliefert, in der sich die genaue Beschreibung des Installationsprozesses befindet. Unter Anderem finden Sie dort auch die Beschreibung für die Installation in ein anderes, als das Standardverzeichnis. Um &sportwatcher; für alle Benutzer zu installieren, melden Sie sich als Superuser root an und geben Sie folgenden Befehl auf der Kommandozeile ein:</para><screen> |
<![CDATA[# make install |
]]></screen><para>Nach der Installation können Sie das Programm mit <emphasis><application>sportwatcher</application></emphasis> von der Kommandozeile aus aufrufen, oder über das Menü <emphasis><guimenu>Dienstprogramme</guimenu>--><guimenuitem>Sportwatcher</guimenuitem></emphasis> aufrufen (gilt nur für KDE!).</para></sect3></sect2></sect1><sect1 id='sec.Einstellungen-unter-Linux' > |
]]></screen><para>Nach der Installation können Sie das Programm mit <emphasis><command>sportwatcher</command></emphasis> von der Kommandozeile aus aufrufen, oder über das Menü <emphasis><guimenu>Dienstprogramme</guimenu>--><guimenuitem>Sportwatcher</guimenuitem></emphasis> aufrufen (gilt nur für KDE!).</para></sect3></sect2></sect1><sect1 id='sec.Einstellungen-unter-Linux' > |
<title>Einstellungen unter Linux<!-- anchor id="sec.Einstellungen-unter-Linux" --></title> |
<para>&sportwatcher;greift direkt auf das USB-Port zu, an dem Sie Ihren <hardware>Forerunner 305</hardware> angeschlossen haben. Allerdings fehlen einem normalen Anwender dafür in der Regel die Berechtigungen, so das beim Versuch die Daten aus der Uhr auszulesen, eine Fehlermeldung erscheint. Startet man das Programm jedoch als Benutzer root, funktioniert das Auslesen von Daten einwandfrei. Diesem Problem kann man nun auf zwei Arten begegnen. Man kann SportWatcher immer als <emphasis>root</emphasis> ausführen, wovon ich jedoch dringend abrate, oder man manipuliert einmal die Einstellungen von <emphasis>udev</emphasis> und vergibt die notwendigen Berechtigungen. Im Folgenden wird Schritt für Schritt erklärt, wie man die benötigten Berechtigungen einstellt. </para><sect2 id='sec.Fr-Debian-und' > |
<para>&sportwatcher; greift direkt auf das USB-Port zu, an dem Sie Ihren <hardware>Forerunner 305</hardware> angeschlossen haben. Allerdings fehlen einem normalen Anwender dafür in der Regel die Berechtigungen, so das beim Versuch die Daten aus der Uhr auszulesen, eine Fehlermeldung erscheint. Startet man das Programm jedoch als Benutzer root, funktioniert das Auslesen von Daten einwandfrei. Diesem Problem kann man nun auf zwei Arten begegnen. Man kann SportWatcher immer als <emphasis>root</emphasis> ausführen, wovon ich jedoch dringend abrate, oder man manipuliert einmal die Einstellungen von <emphasis>udev</emphasis> und vergibt die notwendigen Berechtigungen. Im Folgenden wird Schritt für Schritt erklärt, wie man die benötigten Berechtigungen einstellt. </para><sect2 id='sec.Fr-Debian-und' > |
<title>Für Debian und (K)Ubuntu<!-- anchor id="sec.Fr-Debian-und" --></title> |
<para>Öffnen Sie eine Kommandozeile (Shell) und werden Sie root. Dann tippen Sie ein: </para><screen> |
<![CDATA[# cd /etc/udev/rules.d |
# vi z60-garmin.rules |
]]></screen><para>Statt <emphasis><application>vi</application></emphasis> können Sie natürlich jeden beliebigen Texteditor verwenden. Tippen Sie nun folgende Zeilen in die neue Datei ein:</para><screen> |
]]></screen><para>Statt <emphasis><command>vi</command></emphasis> können Sie natürlich jeden beliebigen Texteditor verwenden. Tippen Sie nun folgende Zeilen in die neue Datei ein:</para><screen> |
<![CDATA[SYSFS{idVendor}=="091e", SYSFS{idProduct}=="0003", MODE="0666" |
ATTRS{idVendor}=="091e", ATTRS{idProduct}=="0003", MODE="0666" |
]]></screen><para>Speichern Sie die Datei und starten Sie UDEV mit folgendem Befehl neu:</para><screen> |
114,7 → 115,7 |
<![CDATA[# /etc/init.d/udev restart |
]]></screen><para>Ab jetzt sollte der direkte Zugriff auf jenes <hardware>USB-Port</hardware> erlaubt sein, an dem Sie Ihren <hardware>Forerunner305</hardware> angeschlossen haben.</para></sect2><sect2 id='sec.Andere-Distributionen' > |
<title>Andere Distributionen<!-- anchor id="sec.Andere-Distributionen" --></title> |
<para>Wenn Ihre Linuxdistribution UDEV verwendet, sollte die Beschreibung unter <xref linkend="sec.Fr-Debian-und" />gelten. Andernfalls fragen Sie Ihren Systemadministrator, oder lesen Sie die Dokumentation über das Berechtigungssystem für Schnittstellen, speziell <hardware>USB-Ports</hardware>.</para></sect2><sect2 id='sec.Es-funktioniert-immer' > |
<para>Wenn Ihre Linuxdistribution UDEV verwendet, sollte die Beschreibung unter <xref linkend="sec.Fr-Debian-und" /> gelten. Andernfalls fragen Sie Ihren Systemadministrator, oder lesen Sie die Dokumentation über das Berechtigungssystem für Schnittstellen, speziell <hardware>USB-Ports</hardware>.</para></sect2><sect2 id='sec.Es-funktioniert-immer' > |
<title>Es funktioniert immer noch nicht<!-- anchor id="sec.Es-funktioniert-immer" --></title> |
<para>Falls die obigen Anweisungen keinen Erfolg bringen, prüfen Sie die Vendor- und Produktnummer Ihres <hardware>GPS−Empfängers</hardware>. Falls diese nicht den oben angegebenen entsprechen, setzen Sie die korrekten Nummern ein. Um die Nummern heraus zu bekommen, stecken Sie Ihren <hardware>GPS-Empfänger</hardware> an und tippen Sie folgenden Befehl auf der Befehlszeile ein:</para><screen> |
<![CDATA[$ lsusb |
154,7 → 155,7 |
<title>Der Menüpunkt <guimenu>Öffnen</guimenu><!-- anchor id="sec.Das-Men-ffnen" --></title> |
<para>Nach dem Klick auf diesen Menüpunkt öffnet sich ein Dateidialogfenster. Es werden alle Dateien mit der Endung <literal role="extension">.gmn</literal> angezeigt, sofern welche vorhanden sind. Bei diesen Dateien handelt es sich um das von &sportwatcher; intern verwendete Dateiformat. Haben Sie Dateien in diesem Format vorliegen, können Sie diese einlesen und Ihren Aufzeichnungen hinzufügen.</para></sect3><sect3> |
<title>Der Menüpunkt <guimenuitem>Importieren</guimenuitem></title> |
<para>&sportwatcher; ist in der Lage, Dateien im Format <literal role="extension">.tcx</literal> einzulesen. Dieses Format wird vom Programm <emphasis><application>Traningcenter</application></emphasis>, jener Software die von Garmin mit den Sportuhren mitgeliefert wird, erzeugt. Allerdings können auch andere Programme dieses Format ausgeben.</para> |
<para>&sportwatcher; ist in der Lage, Dateien im Format <literal role="extension">.tcx</literal> einzulesen. Dieses Format wird vom Programm <emphasis><command>Traningcenter</command></emphasis>, jener Software die von Garmin mit den Sportuhren mitgeliefert wird, erzeugt. Allerdings können auch andere Programme dieses Format ausgeben.</para> |
<para>Es öffnet sich ein Dateidialog. Wählen Sie die gewünschte Datei aus. &sportwatcher; liest die Datei ein und fügt sie den bestehenden Aktivitäten hinzu.</para></sect3></sect2><sect2 id='sec.Daten-exportieren' > |
<title>Daten exportieren<!-- anchor id="sec.Daten-exportieren" --></title> |
<para>SportWatcher ist in der Lage, die gespeicherten Daten in verschiedene Formate zu exportieren. Dadurch können die Daten in verschiedenen anderen Programmen verarbeitet werden und dort nach weiteren, vielleicht für das entsprechende Programm einzigartigen Methoden, Arten visualisiert werden.</para><sect3> |
162,8 → 163,8 |
<para>SportWatcher unterstützt derzeit folgende Formate:</para><itemizedlist> |
<listitem><para>TCX - Garmin Trainig Center</para></listitem><listitem><para>GPX - GPS Exchange Format</para></listitem><listitem><para>OSM - Open Street Map Format</para></listitem><listitem><para>HRM - Polar Heart Rate Monitor Format</para></listitem></itemizedlist><para>Das Format GPX kann von diversen Programmen zum Bearbeiten und Darstellen von Landkarten verwendet werden.</para> |
<para>OSM wird von <ulink url="http://www.openstreetmap.org">Open Street Map</ulink> verwendet, um Landkarten in Form von Vektordaten zu speichern.</para> |
<para>Die mit den Pulsuhren von Polar mitgelieferten Programme erzeugen das Format HRM und können es auch einlesen. SportWatcher kann dieses Format zwar exportieren, jedoch nicht einlesen. Wählen Sie den Menüpunkt <guimenuitem>Puls speichern</guimenuitem>, um die Pulsdaten im HRM-Format zu speichern.</para></sect3><sect3 id='sec.Menpunkt.-Speichern-unter-17' > |
<title>Das Menü <guimenuitem>Speichern als ...</guimenuitem><!-- anchor id="sec.Menpunkt.-Speichern-unter-17" --></title> |
<para>Die mit den Pulsuhren von Polar mitgelieferten Programme erzeugen das Format HRM und können es auch einlesen. SportWatcher kann dieses Format zwar exportieren, jedoch nicht einlesen. Da dieses Format keine Geodaten enthält, würde auch keinen Sinn ergeben, dieses Format importieren zu wollen. Wählen Sie den Menüpunkt <guimenuitem>Puls speichern</guimenuitem>, um die Pulsdaten im HRM-Format zu speichern.</para></sect3><sect3 id='sec.Menpunkt.-Speichern-unter-1' > |
<title>Das Menü <guimenuitem>Speichern als ...</guimenuitem><!-- anchor id="sec.Menpunkt.-Speichern-unter-1" --></title> |
<para>Unter diesem Menüpunkt öffnet sich ein Dateidialog, welcher eine Datei unter den Formaten TCX (Standard), GPX, oder OSM speichert.</para> |
<screenshot> |
<screeninfo>Speichern unter</screeninfo> |
196,7 → 197,7 |
</screenshot> |
<para>Mit Hilfe des Menüpunktes <guimenuitem>Umbenennen</guimenuitem>, kann der Name einer Aktivität geändert werden. Es öffnet sich ein Dialogfenster, in dem der aktuelle Name erscheint. Da ein individueller Name lediglich 15 Zeichen lang sein kann, erscheint der generierte Name, bestehend aus Datum und Uhrzeit, gekürzt. Tippen Sie den gewünschten Namen ein und klicken Sie auf den Button <keycombo action="click"><mousebutton>Ok</mousebutton></keycombo>. Der neue Name erscheint sofort im Verzeichnisbaum und ist automatisch permanent gespeichert.</para></sect2></sect1><sect1 id='sec.Eventuell-notwendige-Einstellungen' > |
<title>Das Menü <guimenu>Einstellungen</guimenu><!-- anchor id="sec.Eventuell-notwendige-Einstellungen" --></title> |
<para>&sportwatcher;muss nicht extra eingestellt werden um sinnvoll verwendet werden zu können. Es kann jedoch notwendig sein, den Pfad in dem SportWatcher seine Daten ablegt, einzustellen. Zum Beispiel, wenn mehrere Benutzer mit einer Uhr Trainieren und es eine gemeinsame Datenbasis geben soll. Auch um eine Landkarte darzustellen, sind sehr wahrscheinlich einige Einstellungen notwendig. Das hängt ganz davon ab, welche Art von Landkarte Sie verwenden wollen. Die folgenden Punkte zeigen Schritt für Schritt, welche Einstellungen in &sportwatcher; möglich sind und wie Sie damit umgehen.</para> |
<para>&sportwatcher; muss nicht extra eingestellt werden um sinnvoll verwendet werden zu können. Es kann jedoch notwendig sein, den Pfad in dem SportWatcher seine Daten ablegt, einzustellen. Zum Beispiel, wenn mehrere Benutzer mit einer Uhr Trainieren und es eine gemeinsame Datenbasis geben soll. Auch um eine Landkarte darzustellen, sind sehr wahrscheinlich einige Einstellungen notwendig. Das hängt ganz davon ab, welche Art von Landkarte Sie verwenden wollen. Die folgenden Punkte zeigen Schritt für Schritt, welche Einstellungen in &sportwatcher; möglich sind und wie Sie damit umgehen.</para> |
<screenshot> |
<screeninfo>Menü Einstellungen</screeninfo> |
<mediaobject> |
226,16 → 227,16 |
<![CDATA[<Max. HF> = 220 - <Lebensalter> |
]]></screen><para>Von dieser maximalen Herzfrequenz werden nun die Schwellen (Limits oder Zonen) wie folgt berechnet (x% von HF):</para> |
<informaltable><tgroup cols="4" colsep="1" rowsep="1"> |
<colspec colname="col0" align="left"/> |
<colspec colname="col1" align="left"/> |
<colspec colname="col2" align="left"/> |
<colspec colname="col3" align="left"/> |
<colspec colname="col0" align="left" /> |
<colspec colname="col1" align="left" /> |
<colspec colname="col2" align="left" /> |
<colspec colname="col3" align="left" /> |
<tbody> |
<row> |
<entry align="left" valign="top">Zone</entry> |
<entry align="left" valign="top">Intensität</entry> |
<entry align="left" valign="top">Laufen</entry> |
<entry align="left" valign="top">Radfahren</entry> |
<entry align="center" valign="top">Zone</entry> |
<entry align="center" valign="top">Intensität</entry> |
<entry align="center" valign="top">Laufen</entry> |
<entry align="center" valign="top">Radfahren</entry> |
</row> |
<row> |
<entry align="left" valign="top">0 (<1)</entry> |
287,7 → 288,7 |
<title>HRM-Dateien<!-- anchor id="sec.HRM-Dateien" --></title> |
<para>SportWatcher ist in der Lage, die von Ihrem GPS-Empfänger gelesenen Pulsdaten in eine Polar-kompatible Datei zu speichern. Dabei wird Ihnen das hier angegebene Verzeichnis vorgeschlagen. Da die Spoftware von Polar die Dateien ebenfalls in einem bestimmten Verzeichnis ablegt, können Sie hier dieses Verzeichnis angeben und die Pulsdaten dann dort ablegen. Dadurch ist es möglich, auch mit der Polar eigenen Software die Daten einzulesen und darzustellen.</para></sect3><sect3 id='sec.Landkartendatei' > |
<title>Landkartendatei<!-- anchor id="sec.Landkartendatei" --></title> |
<para>Hier wird eine Datei angegeben, welche entweder direkt eine Landkarte enthält, oder eine Steuerdatei ist, welche SportWatcher anweist, eine Landkarte zu laden. Tatsächlich wird durch den Map type (siehe <xref linkend="sec.Landkartentyp" />) festgelegt, um welche Art von Landkarte es sich handelt. Raster images sind bilder in verschiedenen Formaten, die eine Landkarte darstellen können. Damit SportWatcher solche Karten verwenden kann, müssen die Geokoordinaten der linken oberen und der rechten unteren Ecke bekannt sein. Lediglich das Format "TIFF" beinhaltet die Möglichkeit Geokoordinaten direkt in der Datei zu speichern. Liegt eine solche Datei vor, müssen keine Geokoordinaten angegegeben werden. In jedem Fall haben Rasterimages den Nachteil, dass sie lediglich eine bestimmte Auflösung haben und nur jeweils ein bestimmtes Gebiet anzeigen. Liegt die Rad- oder Laufroute außerhalb der Karte, kann eben keine Karte unterlegt werden. Dem kann man zuvorkommen, in dem man z.B. Vektordateien, wie SHP (derzeit noch nicht unterstützt!) oder einen WMS-Server verwendet. Besonders letzterer bietet sich hier besonders an, da der Aufwand am geringsten ist. Hat man einmal einen WMS-Server (im Internet) gefunden, welcher die gewünschten Gebiete anzeigt, erledigt SportWatcher den Rest.</para></sect3><sect3 id='sec.Landkartentyp' > |
<para>Hier wird eine Datei angegeben, welche entweder direkt eine Landkarte enthält, oder eine Steuerdatei ist, welche SportWatcher anweist, eine Landkarte zu laden. Tatsächlich wird durch den Map type (siehe <xref linkend="sec.Landkartentyp" />) festgelegt, um welche Art von Landkarte es sich handelt. Raster images sind Bilder in verschiedenen Formaten, die eine Landkarte darstellen können. Damit SportWatcher solche Karten verwenden kann, müssen die Geokoordinaten der linken oberen und der rechten unteren Ecke bekannt sein. Lediglich das Format "TIFF" beinhaltet die Möglichkeit Geokoordinaten direkt in der Datei zu speichern. Liegt eine solche Datei vor, müssen keine Geokoordinaten angegegeben werden. In jedem Fall haben Rasterimages den Nachteil, dass sie lediglich eine bestimmte Auflösung haben und nur jeweils ein bestimmtes Gebiet anzeigen. Liegt die Rad- oder Laufroute außerhalb der Karte, kann eben keine Karte unterlegt werden. Dem kann man zuvorkommen, in dem man z.B. Vektordateien, wie SHP (derzeit noch nicht unterstützt!) oder einen WMS-Server verwendet. Besonders letzterer bietet sich hier besonders an, da der Aufwand am geringsten ist. Hat man einmal einen WMS-Server (im Internet) gefunden, welcher die gewünschten Gebiete anzeigt, erledigt SportWatcher den Rest.</para></sect3><sect3 id='sec.Landkartentyp' > |
<title>Landkartentyp<!-- anchor id="sec.Landkartentyp" --></title> |
<para>Hier kann der zu verwendende Landkartentyp eingestellt werden. &sportwatcher; verwendet die Bibliothek GDAL um die angegebenen Landkarten (siehe <xref linkend="sec.Landkartendatei" />) zu verarbeiten. Zumeist unterstützt GDAL erheblich mehr Formate als &sportwatcher; zur Verfügung stellt. Da jedoch jedes der Formate einen gewissen Aufwand bedeutet, werden derzeit nur einige der wichtigsten Formate zur Verfügung gestellt.</para></sect3><sect3 id='sec.Einheiten' > |
<title>Einheiten<!-- anchor id="sec.Einheiten" --></title> |
376,16 → 377,457 |
<title>Landkarte aus Rasterimage<!-- anchor id="sec.Landkarte-aus-Raster" --></title> |
<para>Liegt eine Landkarte in Form von Rasterdaten vor, benötigt SportWatcher geographische Bezugspunkte. Formate wie PNG (Portable Network Graphics), BMP (Bitmap), GIF (Graphics Image Format), etc., gelten als Raster Images. Die Landkarten liegen also in Form von Rasterdaten vor. Zunächst gilt es, eine Landkarte des gewünschten Gebiets, in der gewünschten Auflösung zu finden. Ist das geschafft, muss heraus gefunden werden, in welchem geodätischen Datum die Karte gezeichnet ist. Das kann schon schwieriger sein, ist aber unbedingt erforderlich! Weis man endlich das geodätische Datum, müssen die linke obere und die rechte untere Ecke der Landkarte in Form von Geokoordinaten ermittelt werden. Erst jetzt können die Einstellungen sinnvoll in SportWatcher vorgenommen werden. Unter 4.1.3.6 Map file kann nun der Pfad und der Dateiname der Datei, welche die Landkarte beinhaltet, eingegeben werden. Unter <xref linkend="sec.Landkartentyp" /> muss noch der entsprechende Dateityp ausgewählt werden. Damit ist es beinahe geschafft. Zuletzt müssen noch die Geokoordinaten der Eckpunkte der Landkarte eingegeben werden. Diese werden, wie unter <xref linkend="sec.Grafikkoordinaten" /> beschrieben, eingegeben. Nun sollte der Track bereits mit einer Landkarte unterlegt dargestllt werden. Es ist nicht notwendig, dass die Landkarte genau die Größe des Tracks hat. Die Landkarte sollte viel mehr Ihr gesamtes Trainingsgebiet umfassen. SportWatcher schneidet den benötigten Teil selbstständig aus der Landkarte aus, zieht ihn für die Darstellung am Bildschirm zurecht und zeigt die Landkarte an.</para></sect1><sect1 id='sec.Shape-Dateien' > |
<title>Shape Dateien<!-- anchor id="sec.Shape-Dateien" --></title> |
<para>Bei Shape Dateien handelt es sich um eine Art Datenbankdatei, welche eine Landkarte in Form von Vektoren enthält. SportWatcher zeichnet eine Landkarte also auf Grund von Vektorkoordinaten.</para> |
<note><para>Dieses Format ist derzeit nicht implementiert!</para></note></sect1><sect1 id='sec.PostGIS-Datenbank' > |
<para>Bei Shape Dateien handelt es sich um eine Art Datenbankdatei, welche eine Landkarte in Form von Vektoren enthält. Mit Hilfe der Bibliothek <emphasis>Mapnik</emphasis> ist &sportwatcher; in der Lage, eine Landkarte aus Vektordaten zu zeichnen. Damit das funktioniert, benötigt man zunächtst einige Shape-Dateien, welche die Landkartendaten der gewünschten Region beinhalten. Zumeist befinden sich die Dateien in einer ZIP-Datei (oder anderem Format) gepackt. Sie müssen die Dateien in der Regel also zuerst in ein Verzeichnis entpacken.</para> |
<para>Sind die Shape-Dateien vorhanden, braucht &sportwatcher; noch eine <emphasis>Beschreibungsdatei</emphasis> (Mapdatei), welche angibt wie die Inhalte der Shape-Dateien zu interpretieren sind. Die folgenden Punkte werden anhand der Shape-Dateien der <ulink url="http://download.geofabrik.de/osm/">Geofabrik</ulink> erklären, wie die Beschreibungsdatei aufgebaut ist.</para><sect2 id='sec.Quellen-fr-Shape-Dateien' > |
<title>Quellen für Shape-Dateien<!-- anchor id="sec.Quellen-fr-Shape-Dateien" --></title> |
<itemizedlist> |
<listitem><para><ulink url="http://downloads.cloudmade.com/">Cloudmade</ulink></para></listitem><listitem><para><ulink url="http://download.geofabrik.de/osm/">Geofabrik</ulink></para></listitem></itemizedlist><para>Unter <xref linkend="sec.Mapdatei" /> ist der Aufbau der Beschreibungsdatei (Mapdatei) beschrieben.</para></sect2></sect1><sect1 id='sec.PostGIS-Datenbank' > |
<title>PostGIS Datenbank<!-- anchor id="sec.PostGIS-Datenbank" --></title> |
<para>Eine weitere Möglichkeit eine Landkarte in Form von Vektoren zu speichern, ist eine Datenbank. Speziell die Datenbank PostgreSQL eignet sich dafür hervorragend, da sie über die Erweiterungsmöglichkeit PostGIS verfügt. Diese Erweiterung stattet die Datenbank mit der Fähigkeit aus, Geokoordinaten direkt zu verarbeiten und damit diverse Berechnungen anzustellen. SportWatcher ist mit Hilfe von Mapnik in der Lage, auf eine OSM konforme Datenbank zuzugreifen und diese in eine Landkarte zu konvertieren.</para> |
<note><para>Diese Funktion ist derzeit nicht implementiert!</para></note></sect1></chapter><chapter id='cha.Credits' > |
<para>Eine weitere Möglichkeit eine Landkarte in Form von Vektoren zu speichern, ist eine Datenbank. Speziell die Datenbank <emphasis>PostgreSQL</emphasis> eignet sich dafür hervorragend, da sie über die Erweiterungsmöglichkeit <emphasis>PostGIS</emphasis> verfügt. Diese Erweiterung stattet die Datenbank mit der Fähigkeit aus, Geokoordinaten direkt zu verarbeiten und damit diverse Berechnungen anzustellen. SportWatcher ist mit Hilfe von Mapnik in der Lage, auf eine OSM (Open Street Map) konforme Datenbank zuzugreifen und diese in eine Landkarte zu konvertieren.</para> |
<para>Damit das funktioniert, wird jedoch eine Beschreibungsdatei (Mapdatei) benötigt. Diese Datei beinhaltet ein Regelwerk welches beschreibt, wie die einzelnen Komponenten einer Landkarte zu zeichnen sind. Für eine Beschreibung des Aufbaus einer Mapdatei siehe <xref linkend="sec.Mapdatei" />.</para></sect1><sect1 id='sec.OSM-Dateien' > |
<title>OSM Dateien<!-- anchor id="sec.OSM-Dateien" --></title> |
<para>OpenStreetMap ist ein freies Projekt, welches für jeden frei nutzbare Geodaten sammelt. Mit Hilfe dieser Daten können Weltkarten gerendert oder Spezialkarten abgeleitet werden. Auch auf der <ulink url="http://www.openstreetmap.org">OpenStreetMap-Startseite</ulink> ist eine solche Karte abrufbar.</para> |
<para>Der Kern des Projekts ist eine wiki-ähnliche Datenbank mit geographischen Daten. Diese dürfen gemäß der <action>Creative Commons Attribution-ShareAlike 2.0-Lizenz</action> verwendet werden. Dadurch ist eine Einbindung in Drucke, Webseiten und Anwendungen wie Navigationssoftware möglich, ohne durch restriktive Lizenzen beschränkt zu sein oder Entgelte zahlen zu müssen.</para> |
<para>Die Datenbank befindet sich derzeit im Aufbau. Für Deutschland und Österreich gibt es in größeren und insbesondere Uni-Städten schon eine sehr gute Abdeckung, oft sogar detailreicher als bei kommerziellen Anbietern. So sind Fahrrad- und Wanderwege bei OpenStreetMap mit hoher Genauigkeit erfasst. Dagegen ist etwa in ländlichen Bereichen der Datenbestand noch lückenhaft.</para> |
<para>Die fertigen Kartendaten werden im „.osm“-Format ausgetauscht, einem XML-Format, dessen Syntax den Ausgaben der OpenStreetMap-API entspricht. Kopien der gesamten Datenbank werden wöchentlich zur Verfügung gestellt („planet file“). Ebenso gibt es tägliche und stündliche Updates sowie Ausschnitte für einzelne Länder.</para> |
<para>&sportwatcher; ist in der Lage, eine OSM-Datei direkt zu verarbeiten, sofern das entsprechende Plugin vorhanden ist (Standard unter Debian). Damit &sportwatcher; weis wie die Karte zu zeichnen ist, benötigt es eine Beschreibungsdatei (Mapdatei). Diese Datei beinhaltet ein Regelwerk welches beschreibt, wie die einzelnen Komponenten einer Landkarte zu zeichnen sind. Für eine Beschreibung des Aufbaus einer Mapdatei siehe <xref linkend="sec.Mapdatei" />.</para></sect1><sect1 id='sec.Mapdatei' > |
<title>Mapdatei<!-- anchor id="sec.Mapdatei" --></title> |
<para>Eine Mapdatei (Beschreibungsdatei für Shape-Dateien) ist eine Datei im Format XML. Sie kann daher mit einem XML-Editor erstellt werden, oder auch mit einem beliebigen Texteditor. Sowohl der Sourcedistribution als auch der Binärdistribution von &sportwatcher; liegen Mapdateien für die unter <xref linkend="sec.Shape-Dateien" /> beschriebenen Quellen bei. In der Binärdistribution befinden sich diese im Verzeichnis <filename class="directory">/usr/share/sportwatcher</filename>.</para> |
<para>Eine Mapdatei gliedert sich in Abschnitte und Unterabschnitte. Dabei spielt die Reihenfolge eine gewisse Bedeutung. Die folgende Struktur zeigt den grundsätzlichen Aufbau der Datei:</para><screen> |
<![CDATA[<?xml version = '1.0' encoding = 'utf-8'?> |
<!DOCTYPE Map> |
<Map> |
<Style> |
<Rule> |
<CssParameter></CssParameter> |
<Symbolizer/> |
</Rule> |
</Style> |
<Layer> |
<StyleName></StyleName> |
<DataSource> |
<Parameter></Parameter> |
</Datasource> |
</Layer> |
</Map> |
]]></screen><para>Die einzelnen Elemente (<command>Map</command>, <command>Style</command>, ...) können Attribute enthalten. Die folgenden Punkte erklären jedes einzelne Element und seine Anwendung.</para><sect2 id='sec.Dateikopf' > |
<title>Dateikopf<!-- anchor id="sec.Dateikopf" --></title> |
<para>Der Kopf der Datei sieht immer gleich aus. Er definiert die Datei als XML-Datei. Die folgenden beiden Zeilen sind also ungeändert zu übernehmen:</para><screen> |
<![CDATA[<?xml version = '1.0' encoding = 'utf-8'?> |
<!DOCTYPE Map> |
]]></screen></sect2><sect2 id='sec.Element-Map' > |
<title>Element: <markup>Map</markup><!-- anchor id="sec.Element-Map" --></title> |
<para>Das Element Map leitet die Definition einer Landkarte ein. Dieses Element darf nur einmal in der Datei vorkommen.</para><itemizedlist> |
<listitem><para>Element: <command>Map</command></para></listitem><listitem><para>Element type: Root Element</para></listitem><listitem><para>Attribute:</para><itemizedlist> |
<listitem><para><command>bgcolor</command>: HTML-Farbcode für den Hintergrund der Landkarte (zum Beispiel <command>#000000</command>)</para></listitem><listitem><para><command>srs</command>: Koordinatensystem in dem die Landkarte erzeugt wurde (zum Beispiel <userinput>'+proj=latlong+datum=WGS84'</userinput> für das geografische Koordinatensystem WGS84)</para></listitem><listitem><para><command>buffer_size</command>: Standard: 0; Eine gute Zahl ist die Hälfte der zu darstellenden Fläche um das Abschneiden von Bezeichnungen zu minimieren. Das beeinflusst den “Envelope”, welcher vom Plazierdetektor verwendet wird ( wie <command>'avoid_edges'</command> Parameter)</para></listitem></itemizedlist></listitem><listitem><para>Kinder:</para><itemizedlist> |
<listitem><para><command>Style</command> (siehe <xref linkend="sec.Element-Style" />)</para></listitem><listitem><para><command>Layer</command> (siehe <xref linkend="sec.Element-Layer" />)</para></listitem></itemizedlist></listitem></itemizedlist></sect2><sect2 id='sec.Element-Style' > |
<title>Element: <markup>Style</markup><!-- anchor id="sec.Element-Style" --></title> |
<para>Das Element Style definiert wie ein Objekt gezeichnet werden soll. Dieses Element kann beliebig oft verwendet werden. Das Element Layer greift auf die Style-Elemente zurück und sorgt so dafür, dass diese überhaupt gezeichnet werden.</para><itemizedlist> |
<listitem><para>Element: <command>Style</command></para></listitem><listitem><para>Element type: Sammlung von <command>Rules</command></para></listitem><listitem><para>Attribute</para><itemizedlist> |
<listitem><para><command>name</command>: Name des Style-Elements. Der Name muss innerhalb der Datei eindeutig sein. Auf ein <command>Style</command> wird innerhalb eines <command>Layers</command> referenziert. Ist ein <command>Style</command> in keinem <command>Layer</command> referenziert, wird es ignoriert. </para></listitem></itemizedlist></listitem><listitem><para>Kinder:</para><itemizedlist> |
<listitem><para><command>Rule</command> (siehe <xref linkend="sec.Element-Rule" />)</para></listitem></itemizedlist></listitem></itemizedlist></sect2><sect2 id='sec.Element-Rule' > |
<title>Element: <markup>Rule</markup><!-- anchor id="sec.Element-Rule" --></title> |
<para>Das Element <command>Rule</command> definiert wie ein Detail eines Objektes (siehe <xref linkend="sec.Element-Style" />) gezeichnet werden soll. Innerhalb eines <command>Style</command>-Elements können beliebig viele <command>Rule</command>-Elemente vorkommen.</para><itemizedlist> |
<listitem><para>Element: <command>Rule</command></para></listitem><listitem><para>Element type: Definiert wie ein Detail zu zeichnen ist.</para></listitem><listitem><para>Attribute</para><itemizedlist> |
<listitem><para><command>name</command>: Der Name des Rule-Elements. Dieser Name ist optional und kann weggelassen werden. Wird er angegeben, muss er inner halb der Datei eindeutig sein.</para></listitem><listitem><para><command>title</command>: Der Titel des Rule-Elements. Der Titel ist optional und kann weggelassen werden. Der Titel darf auch mehrfach in einem Dokument vorkommen.</para></listitem></itemizedlist></listitem><listitem><para>Kinder:</para><itemizedlist> |
<listitem><para><command>Filter</command> (siehe <xref linkend="sec.Element-Filter" />)</para></listitem><listitem><para><command>ElseFilter</command> (siehe <xref linkend="sec.Element-ElseFilter" />)</para></listitem><listitem><para><command>MinScaleDenominator</command> (siehe <xref linkend="sec.Element-MinScaleDenominator" />)</para></listitem><listitem><para><command>MaxScaleDenominator</command> (siehe <xref linkend="sec.Element-MaxScaleDenominator" />)</para></listitem><listitem><para><command>PointSymbolizer</command> (siehe <xref linkend="sec.Element-PointSymbolizer" />)</para></listitem><listitem><para><command>LinePatternSymbolizer</command> (siehe <xref linkend="sec.Element-LinePatternSymbolizer" />)</para></listitem><listitem><para><command>PolygonPatternSymbolizer</command> (siehe <xref linkend="sec.Element-PolygonPatternSymbolizer" />)</para></listitem><listitem><para><command>TextSymbolizer</command> (siehe <xref linkend="sec.Element-TextSymbolizer" />)</para></listitem><listitem><para><command>ShieldSymbolizer</command> (siehe <xref linkend="sec.Element-ShieldSymbolizer" />)</para></listitem><listitem><para><command>LineSymbolizer</command> (siehe <xref linkend="sec.Element-LineSymbolizer" />)</para></listitem><listitem><para><command>PolygonSymbolizer</command> (siehe <xref linkend="sec.Element-PolygonSymbolizer" />)</para></listitem></itemizedlist></listitem></itemizedlist></sect2><sect2 id='sec.Element-Filter' > |
<title>Element: <markup>Filter</markup><!-- anchor id="sec.Element-Filter" --></title> |
<para>Filter dienen dazu, nur bestimmte Objekte zu zeichnen. Damit können zum Beispiel alle als “Autobahn” gekennzeichnten Einträge herausgefiltert werden und entsprechend gezeichnet werden. Das Element <command>Filter</command> kann innerhalb eines <command>Rule</command>-Elements nur einmal vorkommen. Ein <command>Filter</command> unterliegt einer bestimmten Syntax, welche von &sportwatcher; penibel geprüft wird. Neben einfachen Vergleichsausdrücken, können auch reguläre Ausdrücke verwendet werden. Da in XML-Dateien die Zeichen < (kleiner als) und > (größer als) bereits mit anderen Bedeutungen belegt sind, können sie nicht direkt verwendet werden. Statt dessen sind folgende <emphasis>Vergleichsoperatoren</emphasis> zu verwenden:</para><itemizedlist> |
<listitem><para>Größer als: &gt;</para></listitem><listitem><para>Kleiner als: &lt;</para></listitem><listitem><para>Gleich: = </para></listitem></itemizedlist><sect3 id='sec.Vergleich' > |
<title>Vergleich<!-- anchor id="sec.Vergleich" --></title> |
<para>Ein einfacher Vergleich besteht immer aus einer <Variable>, welche sich auf den Spaltennamen der Shape-Datei bezieht und auf einen Möglichen Inhalt der Spalte (<value>). Der Spaltennamen (<variable>) muss immer in Eckige Klammen ([]) eingeschlossen werden. Der Mögliche Inhalt, welche das Filterkriterium bildet, muss in einfachen Hochkomma ('') eingeschlossen werden. Zwischen der <variable> und der <value> befindet sich der Vergeichsoperator.</para><screen> |
<![CDATA[<Filter>[<variable>] = '<value>'</Filter> |
]]></screen><para>Mehrere Vergleiche können mit “and” oder “or” verknüpft werden:</para><screen> |
<![CDATA[<Filter>[CARTO] >= 2 and [CARTO] < 5</Filter> |
]]></screen></sect3><sect3 id='sec.Vergleichsoperatoren' > |
<title>Vergleichsoperatoren<!-- anchor id="sec.Vergleichsoperatoren" --></title> |
<para>Die Vergleichsoperatoren &lt; und &gt; können mit = kombiniert werden. Dadurch ergeben sich insgesamt folgende Vergleichsoperatoren:</para> |
<informaltable> |
<tgroup cols="2" colsep="1" rowsep="1"> |
<colspec colname="col0" align="center" /> |
<colspec colname="col1" align="center" /> |
<tbody> <row> |
<entry align="center" valign="top">Operator</entry> |
<entry align="center" valign="top">Bedeutung</entry> |
</row> |
<row> |
<entry align="center" valign="top">&lt;</entry> |
<entry align="left" valign="top">Kleiner als</entry> |
</row> |
<row> |
<entry align="center" valign="top">&gt;</entry> |
<entry align="left" valign="top">Größer als</entry> |
</row> |
<row> |
<entry align="center" valign="top">=</entry> |
<entry align="left" valign="top">Gleich</entry> |
</row> |
<row> |
<entry align="center" valign="top">&lt;=</entry> |
<entry align="left" valign="top">Kleiner oder gleich</entry> |
</row> |
<row> |
<entry align="center" valign="top">&gt;=</entry> |
<entry align="left" valign="top">Größer oder gleich</entry> |
</row> |
<row> |
<entry align="center" valign="top">&lt;&gt;</entry> |
<entry align="left" valign="top">Ungleich</entry> |
</row> |
<row> |
<entry align="center" valign="top">not</entry> |
<entry align="left" valign="top">Umkehrung des folgenden Ausdrucks</entry> |
</row> </tbody> |
</tgroup> |
</informaltable><screen> |
<![CDATA[<Filter>[waterway]='canal' and not ([tunnel] = 'yes' or [tunnel] ='true')</Filter> |
]]></screen><para>Zudem können reguläre Ausdrücke verwendet werden:</para><screen> |
<![CDATA[<Filter>[place] = 'town' and [population].match('[5-9]\d\d\d\d')</Filter> |
]]></screen><para>Siehe auch: <xref linkend="sec.Element-ElseFilter" /></para></sect3></sect2><sect2 id='sec.Element-ElseFilter' > |
<title>Element: <markup>ElseFilter</markup><!-- anchor id="sec.Element-ElseFilter" --></title> |
<para>Dieses Element gehört zum Element <command>Filter</command> und stellt den Teil dar, der angewendet wird wenn der Filter nicht zutrifft. Innerhalb des Elements <command>Rule</command> kann <command>ElseFilter</command> nur einmal vorkommen. Es können aber beliebig viele <command>Rule</command>-Elemente mit einem <command>ElseFilter</command>, statt einem <command>Filter</command>, verwendet werden.</para> |
<para>Beispiel:</para><screen> |
<![CDATA[<Style name="contours"> |
<Rule> |
<Filter>[major] = 1</Filter> |
<MaxScaleDenominator>25000</MaxScaleDenominator> |
<MinScaleDenominator>100</MinScaleDenominator> |
<LineSymbolizer> |
<CssParameter name="stroke">#fb9b67</CssParameter> |
</LineSymbolizer> |
</Rule> |
<Rule> |
<ElseFilter/> |
<MaxScaleDenominator>25000</MaxScaleDenominator> |
<MinScaleDenominator>5000</MinScaleDenominator> |
<LineSymbolizer> |
<CssParameter name="stroke">#f45906</CssParameter> |
</LineSymbolizer> |
</Rule> |
<Rule> |
<ElseFilter/> |
<MaxScaleDenominator>5000</MaxScaleDenominator> |
<MinScaleDenominator>100</MinScaleDenominator> |
<LineSymbolizer> |
<CssParameter name="stroke">#f4062A</CssParameter> |
</LineSymbolizer> |
</Rule> |
</Style> |
]]></screen></sect2><sect2 id='sec.Element-MinScaleDenominator' > |
<title>Element: <markup>MinScaleDenominator</markup><!-- anchor id="sec.Element-MinScaleDenominator" --></title> |
<para>Will man eine digitale Landkarte machen und ermitteln welche Skalierung diese hat, dann gibt es zwei Aspekte die eine Rolle spielen: Die verwendete Projektion und die Auflösung die zum Anzeigen der Karte verwendet wird.</para><sect3 id='sec.Skalierung' > |
<title>Skalierung<!-- anchor id="sec.Skalierung" --></title> |
<para>Traditionell ist die Skalierung die Art, wie die wirkliche Welt auf Papier abgebildet wird. Sehen wir also eine Skalierung von 1:10.000 dann bedeutet das, ein Zentimeter am Papier entspricht 10.000 Zentimeter in der realen Welt. Da jede Lankarte auf Papier das Ergebnis einer Projektion ist, und da Projektionen oft nicht perfekt sind, wird eine Karte der echten Welt immer einige Störungen mit sich bringen. Zum Beispiel haben Karten der “British Ordnance Survey”, welche mit einer Skalierung von 1:50.000 gefertigt wurden, eine tatsächliche Sklaierung die variiert, abhängig von der Position. So beträgt die Abweichung gegen Osten zwischen 1:49.980 und 1:50.025. Dieser Unterschied ist klein und wird kaum Störungen verursachen.</para> |
<para>Je größer die Karte aber ist, desto größer wird die Störung. Betrachten wir zum Beispiel die folgende Karte der gesamten Erde wird klar, dass dafür kein Massstab angegeben werden kann. Auf dieser Karte ist Afrika gleich groß wie Grönland. In Wirklichkeit ist es aber gut 14 mal so groß. Die pinken Kreise markieren Bereiche von gleicher Größe in der realen Welt. &sportwatcher; verwendet intern dennoch eine Skalierung für solche Projektionen, aber es sollte klar sein, dass diese Skalierung keinen Wert hat, oder zumindest nur für einen bestimmten Bereich gilt.</para> |
<screenshot> |
<screeninfo>Weltkarte</screeninfo> |
<mediaobject> |
<imageobject> |
<imagedata fileref="Tissot_mercator.png" format="PNG"></imagedata> |
</imageobject> |
<textobject> |
<phrase>Weltkarte</phrase> |
</textobject> |
</mediaobject> |
</screenshot> |
<para>Für weitere Details bezüglich Skalierung von Landkarten, siehe <ulink url="http://trac.mapnik.org/wiki/ScaleAndPpi"></ulink>.</para></sect3><sect3 id='sec.ScaleDenominator' > |
<title>ScaleDenominator<!-- anchor id="sec.ScaleDenominator" --></title> |
<para>Der Wert des <command>MinScaleDenominator</command> wird mit 1e-6 multipliziert. Ist die aktuelle Skalierung größer oder gleich dem angegebenen Wert (hoch 1e-6), dann wird die Anweisung gezeichnet. Andernfalls wird sie ignoriert.</para> |
<para>Beispiel:</para><screen> |
<![CDATA[<Style name="text"> |
<Rule> |
<Filter>[place] = 'city'</Filter> |
<MaxScaleDenominator>10000000</MaxScaleDenominator> |
<MinScaleDenominator>2000000</MinScaleDenominator> |
<TextSymbolizer name="name" face_name="DejaVu Sans Book" size="10" fill="#000" dy="0" halo_radius="1" wrap_width="0"/> |
</Rule> |
</Style> |
]]></screen><para>Der Wert 2.000.000 des obigen Beispiels wird mit 1e-6 multipliziert und das Ergebnis mit dem aktuellen Skalierungsfaktor verglichen. Ist der aktuelle Skalierungsfaktor größer oder gleich dem Ergebnis (2), wird Text ausgegeben. Andernfalls nicht.</para></sect3></sect2><sect2 id='sec.Element-MaxScaleDenominator' > |
<title>Element: <markup>MaxScaleDenominator</markup><!-- anchor id="sec.Element-MaxScaleDenominator" --></title> |
<para>Der Wert des <command>MaxScaleDenominator</command> wird mit 1e-6 multipliziert. Ist die aktuelle Skalierung kleiner oder gleich dem angegebenen Wert (hoch 1e-6), dann wird die Anweisung gezeichnet. Andernfalls wird sie ignoriert. Für weitere Details über Sklaierung siehe <xref linkend="sec.Element-MinScaleDenominator" />.</para></sect2><sect2 id='sec.Element-PointSymbolizer' > |
<title>Element: <markup>PointSymbolizer</markup><!-- anchor id="sec.Element-PointSymbolizer" --></title> |
<para>Ein <command>PointSymbolizer</command> definiert wie etwas an einem bestimmten Punkt gezeichnet werden soll. Innerhalb eines <command>Rule</command>-Elements können beliebig viele <command>PointSymbolizer</command> definiert werden.</para><itemizedlist> |
<listitem><para>Element: <command>PointSymbolizer</command></para></listitem><listitem><para>Elementtype: Zeichnet einen bestimmten Punkt</para></listitem><listitem><para>Attribute:</para><itemizedlist> |
<listitem><para><command>file</command>: Pfad zu einem Rasterbild in einem der Formate PNG oder JPG</para></listitem><listitem><para><command>width</command>: Breite des Rasterimage in Pixel</para></listitem><listitem><para><command>height</command>: Höhe des Rasterimage in Pixel</para></listitem><listitem><para><command>type</command>: Type des Rasterimage (png, jpg, tiff)</para></listitem><listitem><para><command>allow_overlap</command>: Standard: false; Wenn auf “true” gesetzt, dann dürfen sich die Punkte überlappen</para></listitem><listitem><para><command>opacity</command>: Standard: 1; Gibt die Transparenz des Bildes an, wobei 0.0 vollkommen durchsichtig ist und 1.0 vollkommen undurchsichtig ist. Werte außerhalb dieses Bereichs sind nicht erlaubt.</para></listitem></itemizedlist></listitem></itemizedlist><para>Beispiel:</para><screen> |
<![CDATA[<PointSymbolizer file="/tmp/pub.png" width="16" height="16" type="png" /> |
]]></screen></sect2><sect2 id='sec.Element-LinePatternSymbolizer' > |
<title>Element: <markup>LinePatternSymbolizer</markup><!-- anchor id="sec.Element-LinePatternSymbolizer" --></title> |
<para>Zeichnet eine Linie in dem es das angegebene Rasterimage ständig wiederholt.</para><itemizedlist> |
<listitem><para>Element: <command>LinePatternSymbolizer</command></para></listitem><listitem><para>Elementtype: Zeichnet eine Linie mit einem Rasterimage</para></listitem><listitem><para>Attribute:</para><itemizedlist> |
<listitem><para><command>file</command>: Pfad zu einem Rasterimage in einem der Formate PNG oder JPG</para></listitem><listitem><para><command>width</command>: Breite des Rasterimage in Pixel</para></listitem><listitem><para><command>heigh</command>t: Höhe des Rasterimage in Pixel</para></listitem><listitem><para><command>type</command>: Type des Rasterimage (png, jpg, tiff)</para></listitem></itemizedlist></listitem></itemizedlist><para>Beispiel:</para><screen> |
<![CDATA[<LinePatternSymbolizer width="16" height="16" type="png" file="/path/to/icon.png"/> |
]]></screen></sect2><sect2 id='sec.Element-PolygonPatternSymbolizer' > |
<title>Element: <markup>PolygonPatternSymbolizer</markup><!-- anchor id="sec.Element-PolygonPatternSymbolizer" --></title> |
<para>Zeichnet eine Fläche mit einer Hintergrundfarbe und verteilt das Rasterimage gleichmäßig über die Fläche.</para> |
<screenshot> |
<screeninfo>PolygonPatternSymbolizer</screeninfo> |
<mediaobject> |
<imageobject> |
<imagedata fileref="polygon_pattern.png" format="PNG"></imagedata> |
</imageobject> |
<textobject> |
<phrase>PolygonPatternSymbolizer</phrase> |
</textobject> |
</mediaobject> |
</screenshot><itemizedlist> |
<listitem><para>Element: <command>PolygonPatternSymbolizer</command></para></listitem><listitem><para>Elementtype: Zeichnet eine Fläche mit einem Rasterimage</para></listitem><listitem><para>Attribute:</para><itemizedlist> |
<listitem><para><command>file</command>: Pfad zu einem Rasterimage in einem der Formate PNG oder JPG</para></listitem><listitem><para><command>width</command>: Breite des Rasterimage in Pixel</para></listitem><listitem><para><command>height</command>: Höhe des Rasterimage in Pixel</para></listitem><listitem><para><command>type</command>: Type des Rasterimage (png, jpg, tiff)</para></listitem></itemizedlist></listitem></itemizedlist><para>Beispiel:</para><screen> |
<![CDATA[<PolygonPatternSymbolizer width="16" height="16" type="png" file="/path/to/icon.png"/> |
]]></screen></sect2><sect2 id='sec.Element-TextSymbolizer' > |
<title>Element: <markup>TextSymbolizer</markup><!-- anchor id="sec.Element-TextSymbolizer" --></title> |
<para>Schreibt einen Text in einer angegebenen Farbe und Schrift.</para> |
<para>Ein <command>TextSymbolizer</command> wird dazu verwendet, um die Elemente einer Landkarte zu beschriften. Dabei kann die Schrift, die Schriftgröße, sowie die Schriftfarbe gewählt werden. Zusätzlich kann bestimmt werden, ob die Schift über dem Objekt angezeigt werden soll, oder entlang einer Linie (Beschriftung von Straßen, Flüssen, etc.).</para><itemizedlist> |
<listitem><para>Element: <command>TextSymbolizer</command></para></listitem><listitem><para>Elementtype: Beschriftet Objekte</para></listitem><listitem><para>Attribute:</para><itemizedlist> |
<listitem><para><command>name</command>: Das ist der Feldname auf den sich der Text bezieht. Der Feldname bezieht sich auf eine Datenbank, oder dem Feld einer Shape Datei, oder dem Feld einer OSM-Datei. Im Falle einer Shape Datei oder einer OSM-Datei, muss der Feldname der Groß-Kleinschreibung entsprechen.</para></listitem><listitem><para><command>face_name</command>: Der Name der zu verwendenden Schrift.</para></listitem><listitem><para><command>size</command>: Größe der Schrift in Pixel</para></listitem><listitem><para><command>wrap_width</command>: Länge in Pixeln bevor ein Text umgebrochen wird.</para></listitem><listitem><para><command>fill</command>: Farbe des Textes (z.B.: #FFFFFF)</para></listitem><listitem><para><command>halo_radius</command>: Radius des Lichthofs um die Schrift in ganzen Pixel</para></listitem><listitem><para><command>dx, dy</command>: Deplaziere den Text um eine fixe Anzahl von Pixel um beide Achsen</para></listitem><listitem><para><command>min_distance</command>: Minimale Abstand zwischen sich wiederholenden Beschriftungen wie Straßennamen und Schildsymbolen</para></listitem><listitem><para><command>placement</command>: Standard: “point”; Beschriftung über dem Objekt. “line”; Beschriftung entlang der Linie des Objekts (Straßen, Flüsse, etc.)</para></listitem><listitem><para><command>alignment</command>: Vertikale Positionierung der Beschriftung relativ zu einem Punkt ("top" (Beschriftung oberhalb des Punkts), "middle" (Beschriftung über dem Punkt), "bottom" (Beschriftung unterhalb des Punkts)) Standard ist "bottom" </para></listitem></itemizedlist></listitem></itemizedlist><para>Beispiel:</para><screen> |
<![CDATA[<TextSymbolizer name="FIELD_NAME" face_name="DejaVu Sans Book" size="10" fill="black" halo_fill= "white" halo_radius="1" placement="line" allow_overlap="false"/> |
]]></screen></sect2><sect2 id='sec.Element-ShieldSymbolizer' > |
<title>Element: <markup>ShieldSymbolizer</markup><!-- anchor id="sec.Element-ShieldSymbolizer" --></title> |
<para>Ein <command>ShieldSymbolizer</command> wird verwendet um Schildsymbole auf eine Karte zu zeichnen. Die Symbole werden als Rasterimage angegeben.</para><itemizedlist> |
<listitem><para>Element: <command>ShieldSymbolizer</command></para></listitem><listitem><para>Elementtype: Zeichnet Schildsymbole</para></listitem><listitem><para>Attribute:</para><itemizedlist> |
<listitem><para><command>name</command>: Das ist der Feldname auf den sich der Text bezieht. Der Feldname bezieht sich auf eine Datenbank, oder dem Feld einer Shape Datei, oder dem Feld einer OSM-Datei. Im Falle einer Shape Datei oder einer OSM-Datei, muss der Feldname der Groß-Kleinschreibung entsprechen.</para></listitem><listitem><para><command>face_name</command>: Name der zu verwendenden Schrift</para></listitem><listitem><para><command>fill</command>: Farbe der Schrift</para></listitem><listitem><para><command>placement</command>: Standard: “point”; Beschriftung über dem Objekt. “line”; Beschriftung entlang der Linie des Objekts (Straßen, Flüsse, etc.)</para></listitem><listitem><para><command>file</command>: Dateiname des Schildsymbols. Es muss sich um ein Rasterimage in einem der Formate PNG, JPG oder TIFF handeln.</para></listitem><listitem><para><command>type</command>: Typ des Rasterimages (png, jpg, tiff)</para></listitem><listitem><para><command>size</command>: Größe der Schrift in Pixel</para></listitem><listitem><para><command>width</command>: Breite des Schildsymbols in Pixel</para></listitem><listitem><para><command>height</command>: Höhe des Schildsymbols in Pixel</para></listitem><listitem><para><command>dx, dy</command>: Deplaziere den Text um eine fixe Anzahl von Pixel um beide Achsen</para></listitem><listitem><para><command>min_distance</command>: Minimale Abstand zwischen sich wiederholenden Beschriftungen wie Straßennamen und Schildsymbolen</para></listitem></itemizedlist></listitem></itemizedlist><para>Beispiel:</para><screen> |
<![CDATA[<Style name="My Style"> |
<Rule> |
<ShieldSymbolizer name="NAME" face_name="DejaVu Sans Bold" size="6" fill="#000000" min_distance="50" file="images/ushighway_shield_20.png" type="png" width="20" height="20" spacing="100" min_distance="50"></ShieldSymbolizer> |
</Rule> |
</Style> |
]]></screen></sect2><sect2 id='sec.Element-LineSymbolizer' > |
<title>Element: <markup>LineSymbolizer</markup><!-- anchor id="sec.Element-LineSymbolizer" --></title> |
<para>Ein <command>LineSymbolizer</command> wird verwendet um eine Linie zu zeichnen. Dabei kann das Aussehen der Linie bestimmt werden.</para><itemizedlist> |
<listitem><para>Element: <command>LineSymbolizer</command></para></listitem><listitem><para>Elementtype: Zeichnet eine Linie</para></listitem><listitem><para>Attribute:</para><itemizedlist> |
<listitem><para>Keine</para></listitem></itemizedlist></listitem><listitem><para>Kinder:</para><itemizedlist> |
<listitem><para><command>CssParameter</command> (siehe <xref linkend="sec.Element-CssParameter" />)</para></listitem></itemizedlist></listitem></itemizedlist><sect3 id='sec.Element-CssParameter' > |
<title>Element: <markup>CssParameter</markup><!-- anchor id="sec.Element-CssParameter" --></title> |
<para>Innerhalb eines <command>LineSymbolizer</command> werden die einzelnen Optionen mittels des Elements <command>CssParameter</command> definiert.</para><itemizedlist> |
<listitem><para>Element: <command>CssParameter</command></para></listitem><listitem><para>Elementtype: Definiert Optionen für das Element <command>LineSymbolizer</command></para></listitem><listitem><para>Attribute:</para><itemizedlist> |
<listitem><para><command>name</command>: Definiert den Namen einer Option.</para></listitem></itemizedlist></listitem></itemizedlist><para>Die folgende Tabelle listet die Namen der möglichen Optionen und beschreibt ihre Bedeutung:</para> |
<informaltable><tgroup cols="3" colsep="1" rowsep="1"> |
<colspec colname="col0" align="left" /> |
<colspec colname="col1" align="left" /> |
<colspec colname="col2" align="left" /> |
<tbody> |
<row> |
<entry align="center" valign="top">Option</entry> |
<entry align="center" valign="top">Inhalt</entry> |
<entry align="center" valign="top">Bedeutung</entry> |
</row> |
<row> |
<entry align="left" valign="top">stroke</entry> |
<entry align="left" valign="top">CSS Farbe</entry> |
<entry align="left" valign="top">Ein Farbwert</entry> |
</row> |
<row> |
<entry align="left" valign="top">stroke-width</entry> |
<entry align="left" valign="top">0.0 - n</entry> |
<entry align="left" valign="top">Breite der Linie in Pixeln</entry> |
</row> |
<row> |
<entry align="left" valign="top">stroke-opacity</entry> |
<entry align="left" valign="top">0.0 - 1.0</entry> |
<entry align="left" valign="top">Transparenz; 0.0 ist vollständig transparent. 1.0 ist vollkommen undurchsichtig.</entry> |
</row> |
<row> |
<entry align="left" valign="top">stroke-linejoin</entry> |
<entry align="left" valign="top">miter, round, bevel</entry> |
<entry align="left" valign="top">Definiert die Art wie zwei Linien zusammengefügt werden sollen: |
<screenshot> |
<screeninfo>Line join</screeninfo> |
<mediaobject> |
<imageobject> |
<imagedata fileref="linejoin.png" format="PNG"></imagedata> |
</imageobject> |
<textobject> |
<phrase>Line join</phrase> |
</textobject> |
</mediaobject> |
</screenshot></entry> |
</row> |
<row> |
<entry align="left" valign="top">stroke-linecap</entry> |
<entry align="left" valign="top">round, butt, square</entry> |
<entry align="left" valign="top">Definiert wie das Ende einer Linie aussehen soll: |
<screenshot> |
<screeninfo>Line cap</screeninfo> |
<mediaobject> |
<imageobject> |
<imagedata fileref="linecap.png" format="PNG"></imagedata> |
</imageobject> |
<textobject> |
<phrase>Line cap</phrase> |
</textobject> |
</mediaobject> |
</screenshot></entry> |
</row> |
<row> |
<entry align="left" valign="top">stroke-dasharray</entry> |
<entry align="left" valign="top">0.0 - n, 0.0 - n</entry> |
<entry align="left" valign="top">Ein Paar von Längenwerten [a, b], wobei (a) die Strichlänge ist und (b) die Länge des Zwischenraums. Die Angabe ist in Pixel.</entry> |
</row> |
</tbody> |
</tgroup></informaltable> |
<para>Beispiel:</para><screen> |
<![CDATA[<LineSymbolizer> |
<CssParameter name="stroke">#0000ff</CssParameter> |
<CssParameter name="stroke-width">4</CssParameter> |
</LineSymbolizer> |
]]></screen></sect3></sect2><sect2 id='sec.Element-PolygonSymbolizer' > |
<title>Element: <markup>PolygonSymbolizer</markup><!-- anchor id="sec.Element-PolygonSymbolizer" --></title> |
<para>Zeichnet ein unregelmäßiges Vieleck (Polygon).</para><itemizedlist> |
<listitem><para>Element: <command>PolygonSymbolizer</command></para></listitem><listitem><para>Elementtype: Polygon</para></listitem><listitem><para>Attribute:</para><itemizedlist> |
<listitem><para>Keine</para></listitem></itemizedlist></listitem><listitem><para>Kinder:</para><itemizedlist> |
<listitem><para><command>CssParameter</command> (siehe <xref linkend="sec.Element-CssParameter2." />)</para></listitem></itemizedlist></listitem></itemizedlist><sect3 id='sec.Element-CssParameter2.' > |
<title>Element: <markup>CssParameter</markup><!-- anchor id="sec.Element-CssParameter2." --></title> |
<para>Innerhalb eines <command>PolygonSymbolizer</command> werden die einzelnen Optionen mittels des Elements <command>CssParameter</command> definiert.</para><itemizedlist> |
<listitem><para>Element: <command>CssParameter</command></para></listitem><listitem><para>Elementtype: Definiert Optionen für das Element <command>PolygonSymbolizer</command></para></listitem><listitem><para>Attribute:</para><itemizedlist> |
<listitem><para><command>name</command>: Definiert den Namen einer Option.</para></listitem></itemizedlist></listitem></itemizedlist><para>Die folgende Tabelle listet die Namen der möglichen Optionen und beschreibt ihre Bedeutung:</para> |
<informaltable><tgroup cols="3" colsep="1" rowsep="1"> |
<colspec colname="col0" align="left" /> |
<colspec colname="col1" align="left" /> |
<colspec colname="col2" align="left" /> |
<tbody> |
<row> |
<entry align="left" valign="top">Option</entry> |
<entry align="left" valign="top">Inhalt</entry> |
<entry align="left" valign="top">Bedeutung</entry> |
</row> |
<row> |
<entry align="left" valign="top">fill</entry> |
<entry align="left" valign="top">CSS Farbe</entry> |
<entry align="left" valign="top">Ein Farbwert</entry> |
</row> |
<row> |
<entry align="left" valign="top">fill-opacity</entry> |
<entry align="left" valign="top">0.0 - 1.0</entry> |
<entry align="left" valign="top">Transparenz; 0.0 ist vollst&auml;ndig transparent. 1.0 ist vollkommen undurchsichtig.</entry> |
</row> |
</tbody> |
</tgroup></informaltable> |
<para>Beispiel:</para><screen> |
<![CDATA[<PolygonSymbolizer /> |
<CssParameter name="fill">steelblue</CssParameter> |
<CssParameter name="fill-opacity">0.5</CssParameter> |
</PolygonSymbolizer> |
]]></screen></sect3></sect2><sect2 id='sec.Element-Layer' > |
<title>Element: <markup>Layer</markup><!-- anchor id="sec.Element-Layer" --></title> |
<itemizedlist> |
<listitem><para>Element: <command>Layer</command></para></listitem><listitem><para>Element type: References a Style and a DataSource</para></listitem><listitem><para>Attributes:</para><itemizedlist> |
<listitem><para><command>name</command>: Der Name des Layers. Diser Name muss eindeutig sein!</para></listitem><listitem><para><command>status</command>: Standard "off"; on oder off, "0" oder "1"; Nur wenn der Status aktiv ist (on, 1, true), wird das Layer gezeichnet.</para></listitem><listitem><para><command>clear_label_cache</command>: Standard "off". Wird das auf “on” gesetzt, wird die interne Liste zum Setzen von Objekten gelöscht. Alle Objekte in diesem Layer und in den folgenden, werden ohne Rücksicht auf vorherige Plazierungen gezeichnet.</para></listitem><listitem><para><command>srs</command>: Definiert die Projektion, welche für dieses Layer verwendet werden soll (z.B.: <userinput>+proj=latlong +datum=WGS84</userinput>)</para></listitem><listitem><para><command>title</command>: Standard: ""; Definiert einen Titel für dieses Layer</para></listitem><listitem><para><command>abstract</command>: Standard: “”; Definiert einen kurzen Beschreibungstext für dieses Layer.</para></listitem><listitem><para><command>minzoom</command>: Standard 0.0; Definiert den minimalen Vergrößerungsfaktor.</para></listitem><listitem><para><command>maxzoom</command>: Standard: 1.797693134862316e+308; Definiert den maximalen Vergrößerungsfaktor.</para></listitem><listitem><para><command>queryable</command>: Standard "false";</para></listitem></itemizedlist></listitem><listitem><para>Children:</para><itemizedlist> |
<listitem><para><command>StyleName</command>: Der Name eines zuvor definierten <command>Style</command> (siehe <xref linkend="sec.Element-Style" />). Der hier angegebene Name muss existieren!</para></listitem><listitem><para><command>Datasource</command>: Definiert die Quelle der Kartendaten und enthält Informationen wie diese ausgelesen werden können. Siehe <xref linkend="sec.Element.-Datasource" />.</para></listitem></itemizedlist></listitem></itemizedlist><para>Beispiel:</para><screen> |
<![CDATA[<Layer name="coastlines" status="on" srs="+proj=merc +datum=WGS84 +k=1.0 +units=m +over +no_defs"> |
<StyleName>coast</StyleName> |
<Datasource> |
<Parameter name="type">shape</Parameter> |
<Parameter name="file">coastline</Parameter> |
</Datasource> |
</Layer> |
]]></screen></sect2><sect2 id='sec.Element-StyleName' > |
<title>Element: <markup>StyleName</markup><!-- anchor id="sec.Element-StyleName" --></title> |
<para>Innerhalb eines <command>Layer</command>-Elements muss mindestens ein <command>StyleName</command>-Element angegeben werden. Es können aber beliebig viele <command>StyleName</command>-Elemente in einem <command>Layer</command> angegeben werden. Definiert wird nur der Name eines zuvor bereits definierten <command>Style</command>. Der Name muss existieren!</para><itemizedlist> |
<listitem><para>Element: <command>Style</command></para></listitem><listitem><para>Elementtyp: Name eines <command>Style</command></para></listitem><listitem><para>Attribute:</para><itemizedlist> |
<listitem><para>Keine</para></listitem></itemizedlist></listitem></itemizedlist><para>Beispiel:</para><screen> |
<![CDATA[<StyleName>style</StyleName> |
]]></screen></sect2><sect2 id='sec.Element.-Datasource' > |
<title>Element: <markup>Datasource</markup><!-- anchor id="sec.Element.-Datasource" --></title> |
<para>Das Element <command>Datasource</command> definiert die Quelle, aus der die Karte gezeichnet werden soll.</para> |
<para>&sportwatcher; verwendet intern <emphasis>Mapnik</emphasis> zum Zeichnen von Karten. Das beinhaltet mehrere Arten von Quellen. Für jede der gewünschten Quellen, muss ein entsprechendes <emphasis>Plugin</emphasis> vorhanden sein. Damit diese Bibliothek weis woher es die Daten zum Zeichnen der Karte nehmen soll, muss das definiert werden. Abhängig von der Art der Quelle, müssen verschiedene Angaben gemacht werden.</para><itemizedlist> |
<listitem><para>Element: <command>Datasource</command></para></listitem><listitem><para>Elementtyp: Definiert die Datenquelle des <command>Layer</command></para></listitem><listitem><para>Attribute:</para><itemizedlist> |
<listitem><para>Keine</para></listitem></itemizedlist></listitem><listitem><para>Kinder</para><itemizedlist> |
<listitem><para><command>Parameter</command>: Definiert einen Parameter welcher die Datenquelle spezifiziert (siehe <xref linkend="sec.Element-Parameter" />).</para></listitem></itemizedlist></listitem></itemizedlist></sect2><sect2 id='sec.Element-Parameter' > |
<title>Element: <markup>Parameter</markup><!-- anchor id="sec.Element-Parameter" --></title> |
<para>Definiert einen Parameter zur Spezifikation der Datenquelle für ein <command>Layer</command>.</para><itemizedlist> |
<listitem><para>Element: <command>Parameter</command></para></listitem><listitem><para>Elementtyp: Parameterspezifikation für eine Datenquelle.</para></listitem><listitem><para>Attribute:</para><itemizedlist> |
<listitem><para><command>name</command></para></listitem></itemizedlist></listitem></itemizedlist><sect3 id='sec.Datenquelle-PostGIS' > |
<title>Datenquelle: PostGIS<!-- anchor id="sec.Datenquelle-PostGIS" --></title> |
<para>Bei PostGIS handelt es sich um eine spezielle PostgreSQL-Datenbank, welche um Geofunktionen erweitert wurde. Die folgende Tabelle zeigt die notwendigen Definitionen um auf die Daten in einer solchen Datenbank zugreifen zu können.</para> |
<informaltable><tgroup cols="2" colsep="1" rowsep="1"> |
<colspec colname="col0" align="left" /> |
<colspec colname="col1" align="left" /> |
<tbody> |
<row> |
<entry align="center" valign="top">Parameter</entry> |
<entry align="center" valign="top">Bedeutung</entry> |
</row> |
<row> |
<entry align="left" valign="top">host</entry> |
<entry align="left" valign="top">Name des Computers im Netzwerk, auf dem die Datenbank läuft.</entry> |
</row> |
<row> |
<entry align="left" valign="top">dbname</entry> |
<entry align="left" valign="top">Name der Datenbank</entry> |
</row> |
<row> |
<entry align="left" valign="top">user</entry> |
<entry align="left" valign="top">Benutzername unter dem auf die Datenbank zugegriffen werden kann.</entry> |
</row> |
<row> |
<entry align="left" valign="top">password</entry> |
<entry align="left" valign="top">Das Passwort des users mit dem auf die Datenbank zugegriffen wird.</entry> |
</row> |
<row> |
<entry align="left" valign="top">table</entry> |
<entry align="left" valign="top">Name der Tabelle welche für eine Abfrage verwendet wird. Hier kann eine komplexe SQL-Abfrage angegeben werden, welche als erster Filter für das gesamte <command>Layer</command> fungiert.</entry> |
</row> |
<row> |
<entry align="left" valign="top">estimate_extent</entry> |
<entry align="left" valign="top">Die Fläche in Geokoordinaten, welche von der Datenquelle, und damit vom <command>Layer</command> abgedeckt wird.</entry> |
</row> |
<row> |
<entry align="left" valign="top">extent</entry> |
<entry align="left" valign="top">Standard: false; Wird dieser Wert auf “true” gesetzt, werden die Werte unter <command>estimate_extent</command> berücksichtigt. Andernfalls nicht.</entry> |
</row> |
</tbody> |
</tgroup></informaltable></sect3><sect3 id='sec.Datenquelle-Shape-Datei' > |
<title>Datenquelle: Shape-Datei<!-- anchor id="sec.Datenquelle-Shape-Datei" --></title> |
<para>&sportwatcher; ist in der Lage Datenquellen nach dem <ulink url="http://de.wikipedia.org/wiki/ESRI">ESRI-Standard</ulink> zu verarbeiten. Es können s.g. <ulink url="http://de.wikipedia.org/wiki/Shapefile">Shapedateien</ulink> eingelesen werden und daraus Karten generiert werden. Im Internet gibt es verschiedene Quellen für Shapedateien und alle beinhalten unterschiedliche Felder. Tatsächlich handelt es sich bei einer Shapedatei nicht um eine Datei, sondern zumeist um drei bis vier Dateien. Deshalb wird die Dateierweiterung nicht angegeben, diese findet &sportwatcher; selbst. Für eine Karte werden i.d.R. mehr als eine Shapedatei verwendet, da die einzelnen Komponenten einer Karte auf verschiedene Dateien aufgeteilt sind. Zumeist findet man eine Datei für Straßen, eine für Flüsse, eine für Punktobjekte u.s.w.</para> |
<para>Wie bei einer Datenbank, besteht auch eine Shapedatei aus Datenfeldern. Es handelt sich also um Tabellen, wobei jede Shapedatei genau eine Tabelle ist. So wie bei Datenbanken, haben die einzelnen “Spalten” der Tabelle Namen. Im Gegensatz zu Datenbanken, spielt die Groß-Kleinschreibung dabei ein wichtige Rolle. Insbesondere in der <command>Filter</command>-Anweisung (siehe <xref linkend="sec.Element-Filter" />) muss darauf geachtet werden.</para> |
<informaltable><tgroup cols="2" colsep="1" rowsep="1"> |
<colspec colname="col0" align="left" /> |
<colspec colname="col1" align="left" /> |
<tbody> |
<row> |
<entry align="center" valign="top">Parameter</entry> |
<entry align="center" valign="top">Bedeutung</entry> |
</row> |
<row> |
<entry align="left" valign="top">file</entry> |
<entry align="left" valign="top">Pfad und Dateiname der Shapedatei. Die Dateiendung darf nicht angegeben werden!</entry> |
</row> |
</tbody> |
</tgroup></informaltable></sect3><sect3 id='sec.Datenquell-OSM' > |
<title>Datenquelle: OSM<!-- anchor id="sec.Datenquell-OSM" --></title> |
<para>OSM ist das Datenformat des <ulink url="http://www.openstreetmap.org">Open Street Map</ulink> Projekts, welches eine weltweite freie Landkarte zur Verfügung stellt. OSM-Dateien sind selbst für kleine Gebiete sehr groß und, da sie im XML-Format gespeichert sind, sehr langsam. Sie direkt mit &sportwatcher; zu verwenden ist möglich, erfordert aber extrem schnelle Festplatten, wenn man innerhalb einer akzeptablen Zeit eine Landkarte sehen will. Das OSM-Format wurde entwickelt, um Landkarteninformationen transportieren zu können. Es ist dafür gedacht, die Daten in eine Datenbank einzuspielen.</para> |
<informaltable><tgroup cols="2" colsep="1" rowsep="1"> |
<colspec colname="col0" align="left" /> |
<colspec colname="col1" align="left" /> |
<tbody> |
<row> |
<entry align="center" valign="top">Parameter</entry> |
<entry align="center" valign="top">Bedeutung</entry> |
</row> |
<row> |
<entry align="left" valign="top">file</entry> |
<entry align="left" valign="top">Pfad und Dateiname der OSM-Datei.</entry> |
</row> |
<row> |
<entry align="left" valign="top">parser</entry> |
<entry align="left" valign="top">Parser der zum Entschlüsseln der OSM-Datei verwendet werden soll. Hier wird derzeit nur "libxml2" unterstützt.</entry> |
</row> |
<row> |
<entry align="left" valign="top">url</entry> |
<entry align="left" valign="top">URL von der die OSM-Datei geladen werden soll. Wenn dieser Parameter angegeben wird, muss der Parameter <command>bbox</command> ebenfalls angegeben werden. Es handelt sich hierbei nicht um eine Vollständige URL, sondern lediglich um die Basis (z.B.: http://127.0.0.1:8800/tiledata)</entry> |
</row> |
<row> |
<entry align="left" valign="top">bbox</entry> |
<entry align="left" valign="top">Der "bounding-box" parameter, welcher zur URL hinzugefügt werden soll. Es gibt kein bestimmtes Format für diesen Parameter, aber alles was hier steht wird nach einem "?bbox=" hinzugefügt. Wenn also "bbox" gleich "115.136719,-31.802893,116.894531,-33.284620" ist und die URL "http://127.0.0.1:8800/tiledata" ist, dann ergibt das: http://127.0.0.1:8800/tiledata?bbox=115.136719,-31.802893,116.894531,-33.284620</entry> |
</row> |
</tbody> |
</tgroup></informaltable></sect3></sect2></sect1></chapter><chapter id='cha.Credits' > |
<title>Danksagung<!-- anchor id="cha.Credits" --></title> |
<sect1 id='sec.Danksagung-und-Lizenz' > |
<title>Danksagung und Lizenz<!-- anchor id="sec.Danksagung-und-Lizenz" --></title> |
<para>&sportwatcher;</para> |
<para>Programm <trademark class="copyright">Copyright </trademark> 2007 - 2009 bei Andreas Theofilu <email>andreas@theosys.at</email></para> |
<para>Basierend auf <command>garmin-tools</command> von Dave Bailey <email>dave@daveb.net</email></para> |
<para>Basierend auf <command>GANT</command> von Paul <email>paul@ant.sbrk.co.uk</email></para> |
<!-- TRANS:CREDIT_FOR_TRANSLATORS --> |
&underFDL; <!-- FDL: do not remove --> |
&underGPL; <!-- GPL License --></sect1></chapter></book> |
/sportwatcher/trunk/NEWS |
---|
1,7 → 1,20 |
Version 0.7: |
============ |
* There is now a complete documentation available. It is part of |
the KDE4 help system. |
* Added support for shape files. |
* Added support for osm files. This is only available, if the plugin |
was compiled. Because this is currently marked as beta in Mapnik, |
the plugin may not be present. |
* Added support for GIS database. This allows SportWatcher to access |
a database with GIS data directly. |
* Added printing support; Now every activity can be print on paper. |
Version 0.6: |
============ |
/sportwatcher/trunk/po/sportwatcher.po |
---|
6,8 → 6,8 |
msgstr "" |
"Project-Id-Version: sportwatcher\n" |
"Report-Msgid-Bugs-To: http://www.theosys.at/sportwatcher\n" |
"POT-Creation-Date: 2009-07-24 18:33+0200\n" |
"PO-Revision-Date: 2009-07-24 18:44+0200\n" |
"POT-Creation-Date: 2009-09-11 08:45+0200\n" |
"PO-Revision-Date: 2009-09-11 08:38+0200\n" |
"Last-Translator: Andreas Theofilu <andreas@theosys.at>\n" |
"Language-Team: German <sportwatcher_en@theossoft.net>\n" |
"MIME-Version: 1.0\n" |
16,74 → 16,74 |
"X-Generator: Lokalize 0.3\n" |
"Plural-Forms: nplurals=2; plural=n != 1;\n" |
#: /home/andreas/sportwatcher/libgant/gant.cpp:86 |
#: /home/andreas/sportwatcher/libgant/gant.cpp:89 |
msgid "Device %1 does not exist!" |
msgstr "Gerät %1 existiert nicht!" |
#: /home/andreas/sportwatcher/libgant/gant.cpp:92 |
#: /home/andreas/sportwatcher/libgant/gant.cpp:628 |
#: /home/andreas/sportwatcher/libgant/gant.cpp:95 |
#: /home/andreas/sportwatcher/libgant/gant.cpp:631 |
msgid "Error opening device %1." |
msgstr "Fehler beim Öffnen des Geräts %1." |
#: /home/andreas/sportwatcher/libgant/gant.cpp:142 |
#: /home/andreas/sportwatcher/libgant/gant.cpp:145 |
msgid "Error writing to device %1" |
msgstr "Fehler beim Schreiben zu Gerät %1" |
#: /home/andreas/sportwatcher/libgant/gant.cpp:221 |
#: /home/andreas/sportwatcher/libgant/gant.cpp:224 |
msgid ">>buf<< too long!" |
msgstr ">>buf<< zu lang!" |
#: /home/andreas/sportwatcher/libgant/gant.cpp:308 |
#: /home/andreas/sportwatcher/libgant/gant.cpp:311 |
msgid "rresponse buffer too small!" |
msgstr "rresponse buffer ist zu klein!" |
#: /home/andreas/sportwatcher/libgant/gant.cpp:325 |
#: /home/andreas/sportwatcher/libgant/gant.cpp:328 |
msgid "cresponse buffer too small!" |
msgstr "cresponse buffer ist zu klein!" |
#: /home/andreas/sportwatcher/libgant/gant.cpp:378 |
#: /home/andreas/sportwatcher/libgant/gant.cpp:381 |
msgid "Error getting terminal attributes!" |
msgstr "Die Terminalattribute konnten nicht ermittelt werden!" |
#: /home/andreas/sportwatcher/libgant/gant.cpp:391 |
#: /home/andreas/sportwatcher/libgant/gant.cpp:394 |
msgid "Error setting input speed of line terminal!" |
msgstr "Fehler beim Setzen der Eingangsgeschwindigkeit des Terminals!" |
#: /home/andreas/sportwatcher/libgant/gant.cpp:397 |
#: /home/andreas/sportwatcher/libgant/gant.cpp:400 |
msgid "Error setting output speed of line terminal!" |
msgstr "Fehler beim Setzen der Ausgangsgeschwindigkeit des Terminals!" |
#: /home/andreas/sportwatcher/libgant/gant.cpp:406 |
#: /home/andreas/sportwatcher/libgant/gant.cpp:409 |
msgid "Error setting terminal attributes!" |
msgstr "Fehler beim Setzen der Terminalattribute!" |
#: /home/andreas/sportwatcher/libgant/gant.cpp:698 |
#: /home/andreas/sportwatcher/libgant/gant.cpp:701 |
msgid "There is no authfile available or it has wrong size!" |
msgstr "" |
"Es steht keine Autentifizierungsdatei zur Verfügung, oder sie hat eine " |
"ungültige Größe!" |
#: /home/andreas/sportwatcher/libgant/gant.cpp:706 |
#: /home/andreas/sportwatcher/libgant/gant.cpp:709 |
msgid "Error reading auth file %1!" |
msgstr "Fehler beim Lesen der Autentifizierungsdatei %1!" |
#: /home/andreas/sportwatcher/libgant/gant.cpp:880 |
#: /home/andreas/sportwatcher/libgant/gant.cpp:883 |
msgid "Failed to write to a temporary file!" |
msgstr "Eine temporäre Datei konnte nicht geschrieben werden!" |
#: /home/andreas/sportwatcher/libgant/gant.cpp:914 |
#: /home/andreas/sportwatcher/libgant/gant.cpp:917 |
msgid "Write to auth file %1 failed!" |
msgstr "Schreiben zur Autentifizierungsdatei %1 schlug fehl!" |
#: /home/andreas/sportwatcher/libgant/gant.cpp:1138 |
#: /home/andreas/sportwatcher/libgant/gant.cpp:1141 |
msgid "Error allocating %1 bytes of memory!" |
msgstr "%1 Bytes Speicher konnten nicht allokiert werden!" |
#: /home/andreas/sportwatcher/libgant/gant.cpp:1146 |
#: /home/andreas/sportwatcher/libgant/gant.cpp:1149 |
msgid "Error opening a temporary file for reading!" |
msgstr "Fehler beim Öffnen einer temporären Datei zum Lesen!" |
#: /home/andreas/sportwatcher/libgant/gant.cpp:1154 |
#: /home/andreas/sportwatcher/libgant/gant.cpp:1157 |
msgid "Error reading from a temporary file!" |
msgstr "Fehler beim Lesen von einer temporären Datei!" |
122,7 → 122,7 |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:16 |
#. i18n: ectx: property (windowTitle), widget (QWidget, sportwatcherWidgetBase) |
#: /home/andreas/sportwatcher/src/main.cpp:57 |
#: /home/andreas/sportwatcher/rc.cpp:288 |
#: /home/andreas/sportwatcher/rc.cpp:342 |
msgid "SportWatcher" |
msgstr "SportWatcher" |
131,7 → 131,7 |
msgstr "" |
#: /home/andreas/sportwatcher/src/main.cpp:60 |
#: /home/andreas/sportwatcher/src/main.cpp:62 |
#: /home/andreas/sportwatcher/src/main.cpp:63 |
msgid "Andreas Theofilu" |
msgstr "" |
144,6 → 144,10 |
msgstr "Dave Bailey" |
#: /home/andreas/sportwatcher/src/main.cpp:62 |
msgid "Paul" |
msgstr "" |
#: /home/andreas/sportwatcher/src/main.cpp:63 |
msgid "andreas@theosys.at" |
msgstr "" |
263,68 → 267,160 |
msgid "Configure Map ..." |
msgstr "Landkarteneinstellungen ..." |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:240 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:246 |
msgid "Error initializing some widgets of main window!" |
msgstr "Fehler beim Initialisieren einiger Widget des Hauptfensters!" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:254 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:260 |
msgid "Not enough memory to initilize application!" |
msgstr "Nicht genügend Speicher um die Applikation zu initialisieren!" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:262 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1291 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:268 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1841 |
msgid "Running" |
msgstr "Laufen" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:263 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1296 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:269 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1846 |
msgid "Biking" |
msgstr "Radfahren" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:264 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1301 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:270 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1851 |
msgid "Others" |
msgstr "Anderes" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:271 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:277 |
msgid "\"Running\" activities." |
msgstr "Laufaktivitäten" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:272 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:278 |
msgid "\"Biking\" activities." |
msgstr "Radaktivitäten" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:273 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:279 |
msgid "\"Other\" and \"Multisport\" activities." |
msgstr "Andere Aktivitäten" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:626 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:901 |
msgid "This function is currently not implemented!" |
msgstr "Diese Funktion ist derzeit nicht implementiert!" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:661 |
msgid "You must select an activity first!" |
msgstr "Sie müssen zuerst eine Aktivität auswählen!" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:650 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:689 |
msgid "Error initializing printer! Printing is currently not available!" |
msgstr "" |
"Fehler beim Initialisieren des Druckers! Der Ducker ist derzeit nicht " |
"verfügbar!" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:742 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2424 |
msgid "Running: " |
msgstr "Laufen:" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:743 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2425 |
msgid "Biking: " |
msgstr "Radfahren:" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:744 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2426 |
msgid "Other: " |
msgstr "Anderes:" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:746 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2428 |
msgid "Unknown: " |
msgstr "Unbekannt:" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:757 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1016 |
msgid "Lap" |
msgstr "Runde:" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:95 |
#. i18n: ectx: property (text), widget (K3ListView, liLaps) |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:576 |
#. i18n: ectx: property (text), widget (QTreeWidget, twLaps) |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:759 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1018 |
#: /home/andreas/sportwatcher/rc.cpp:363 /home/andreas/sportwatcher/rc.cpp:426 |
msgid "Distance" |
msgstr "Distanz" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:571 |
#. i18n: ectx: property (text), widget (QTreeWidget, twLaps) |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:761 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1020 |
#: /home/andreas/sportwatcher/rc.cpp:423 |
msgid "Time" |
msgstr "Zeit" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:481 |
#. i18n: ectx: property (text), widget (QLabel, label) |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:763 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1022 |
#: /home/andreas/sportwatcher/rc.cpp:417 |
msgid "Speed" |
msgstr "Geschwindigkeit" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:467 |
#. i18n: ectx: property (text), widget (QLabel, label_4) |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:765 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1024 |
#: /home/andreas/sportwatcher/rc.cpp:411 |
msgid "Heart rate" |
msgstr "Puls" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:767 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1026 |
msgid "Cadence" |
msgstr "Trittfrequenz" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:790 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2447 |
msgid "Error getting the last messure point!" |
msgstr "Konnte den letzten Messpunkt nicht finden!" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:999 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1055 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1156 |
msgid "Page %1" |
msgstr "Seite %1" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1100 |
msgid "Heart rate:" |
msgstr "Puls:" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1121 |
msgid "Elevation:" |
msgstr "Höhenprofil:" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1138 |
msgid "Speed:" |
msgstr "Geschwindigkeit:" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1200 |
msgid "Currently no activity is selected!" |
msgstr "Derzeit ist keine Aktivität ausgewählt!" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:662 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1212 |
msgid "The file %1 has no valid file extension!" |
msgstr "Die Datei %1 hat keine gültige Dateierweiterung!" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:670 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1469 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1220 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2019 |
msgid "Do you really want to overwrite this file?" |
msgstr "Wollen Sie diese Datei wirklich überschreiben?" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:699 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:922 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1050 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1249 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1472 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1600 |
msgid "No data to save!" |
msgstr "Keine Daten zum Speichern!" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:705 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:930 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1058 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1255 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1480 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1608 |
msgid "" |
"Error creating file %1!\n" |
"Please check permissions" |
332,49 → 428,53 |
"Fehler beim Erzeugen der Datei %1!\n" |
"Bitte überprüfen Sie die Berechtigungen" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:896 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1029 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1446 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1579 |
msgid "File " |
msgstr "Datei" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:896 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1029 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1446 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1579 |
msgid " was written successfully." |
msgstr "wurde erfolgreich geschrieben." |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1164 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1451 |
msgid "This function is currently not implemented!" |
msgstr "Diese Funktion ist derzeit nicht implementiert!" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1714 |
msgid "File %1 was written successfully." |
msgstr "Datei %1 wurde erfolgreich geschrieben." |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1345 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1895 |
msgid "There is no session selected!" |
msgstr "Es ist keine Aktivität ausgewählt!" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1358 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1908 |
msgid "Rename session" |
msgstr "Aktivität umbenennen" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1358 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1908 |
msgid "Session name" |
msgstr "Name der Aktivität" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1360 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1910 |
msgid "Enter a new name for the currently selected activity." |
msgstr "Geben Sie einen neuen Namen für die aktuelle Aktivität ein." |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1381 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1931 |
msgid "editRename: Unexpected structure type %1 found!" |
msgstr "editRename: Unerwartete Struktur der Type %1 gefunden!" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1389 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1939 |
msgid "editRename: The run node was not found!" |
msgstr "editRename: Der Laufknoten wurde nicht gefunden!" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1450 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2000 |
msgid "There is no activity open" |
msgstr "Derzeit ist keine Aktivität geöffnet" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1475 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2025 |
msgid "" |
"Error creating a file!\n" |
"Please check permissions." |
382,100 → 482,116 |
"Fehler beim Erzeugen einer Datei!\n" |
"Bitte überprüfen Sie die Berechtigungen." |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1696 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2246 |
msgid "File successfully written." |
msgstr "Datei wurde erfolgreich geschrieben." |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1747 |
msgid "You have not choosen a WMS tag file!" |
msgstr "Die haben keine WMS-Tag-Datei angegeben!" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2315 |
msgid "This function was disabled at compile time because of missing Mapnik!" |
msgstr "" |
"Diese Funktion wurde zur Zeit der Ãœbersetzung des Programms deaktiviert, da " |
"die Bibliothek Mapnik nicht vorhanden war!" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1748 |
msgid "This dialog is especialy to set WMS specific parameters. " |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2316 |
msgid "SportWatcher needs Mapnik 0.6 or newer, to enable this function.\n" |
msgstr "" |
"Dieser Dialog dient dazu, die notwendigen Einstellungen für den Zugriff auf " |
"einen WMS-Server zu setzen." |
"SportWatcher benötigt Mapnik 0.6 um diese Funktion aktivieren zu können.\n" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1749 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2317 |
msgid "" |
"If you like this to be working, install Mapnik and recompile the source." |
msgstr "" |
"Wenn Sie diese Funktion wollen, installieren Sie Mapnik und übersetzen Sie " |
"den Source-Code erneut!" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2322 |
msgid "You have not choosen a WMS tag file or shape file directory!" |
msgstr "Die haben keine WMS-Tag-Datei oder Shape-Datei-Verzeichnis angegeben!" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2323 |
msgid "This dialog is especialy to set map specific parameters. " |
msgstr "Dieser DIalog dient dazu, Kartenspezifische Einstellungen zu treffen." |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2324 |
msgid "Therefore this dialog is temporary disabled. It will be " |
msgstr "" |
"Deshalb ist dieser Dialog vorübergehend deaktiviert. Er wird aktiviert," |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1750 |
msgid "available again, as soon as you choose \"WMS server\" as " |
msgstr "sobald Sie einen WMS-Server als Landkartentyp auswählen" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2325 |
msgid "available again, as soon as you choose \"WMS server\" or " |
msgstr "sobald Sie einen WMS-Server oder als Landkartentyp auswählen" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1751 |
msgid "your map type." |
msgstr "und eine WMS-Tag-Datei angeben." |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2326 |
msgid "Shape file as your map type." |
msgstr "und eine WMS-Tag-Datei, oder ein Shape-Datei-Verzeichnis angeben." |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1760 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2331 |
msgid "" |
"This function was disabled at compile time because of missing GDAL v1.5.x!" |
"This function was disabled at compile time because of missing GDAL v1.x.x!" |
msgstr "" |
"Diese Funktion wurde zur Zeit der Ãœbersetzung des Programms deaktiviert, da " |
"die Bibliothek GDAL v1.5.x bicht vorhanden war!" |
"die Bibliothek GDAL v1.x.x bicht vorhanden war!" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1761 |
msgid "Sportwatcher needs GDAL v1.5.x to enable this function.\n" |
msgstr "SportWatcher benötigt GDAL um diese Funktion aktivieren zu können.\n" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2332 |
msgid "Sportwatcher needs GDAL v1.5.x or newer, to enable this function.\n" |
msgstr "" |
"SportWatcher benötigt GDAL v1.5.x oder neuer, um diese Funktion aktivieren " |
"zu können.\n" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1762 |
msgid "" |
"If you like this to be working, install GDAL version 1.5.x and recompile the " |
"source!" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2333 |
msgid "If you like this to be working, install GDAL and recompile the source!" |
msgstr "" |
"Wenn Sie diese Funktion wollen, installieren Sie GDAL v.1.5.x und übersetzen " |
"Sie den Source-Code erneut!" |
"Wenn Sie diese Funktion wollen, installieren Sie GDAL und übersetzen Sie den " |
"Source-Code erneut!" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1796 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2364 |
msgid "No data found!" |
msgstr "Es wurden keine Daten gefunden!" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1802 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2370 |
msgid "Found unexpected data type %1!" |
msgstr "Der unerwartete Datentyp %1 wurde gefunden!" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1879 |
msgid "Error getting the last messure point!" |
msgstr "Konnte den letzten Messpunkt nicht finden!" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2592 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:3165 |
msgid "Not enough memory for a raster operation!" |
msgstr "Nicht genügend Speicher für eine Rasteroperation!" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2608 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:3181 |
msgid "Error reading a raster band!" |
msgstr "" |
"Fehler beim Lesen eines Rasterbands!Überprüfen Sie in den Einstellungen, ob " |
"die Anzahl Bänder korrekt gesetzt wurde." |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2740 |
msgid "There is no shape file in directory " |
msgstr "Im Verzeichnis befindet sich keine Shape Datei" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:3314 |
msgid "There is no shape file in directory %1" |
msgstr "Im Verzeichnis %1 befindet sich keine Shape Datei" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2827 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:3347 |
msgid "The OSM file %1 does not exist!" |
msgstr "Die OSM-Datei %1 existiert nicht!" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:3377 |
msgid "Error opening map file!" |
msgstr "Fehler beim Öffnen der Landkartendatei!" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:3219 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:3223 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:3956 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:3771 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:3775 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:4522 |
msgid "Elevation (ft)" |
msgstr "Höhenprofil (Fuß)" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:3221 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:3234 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:3957 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:3773 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:3786 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:4523 |
msgid "Speed (mph)" |
msgstr "Geschwindigkeit (mph)" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:3232 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:3955 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:3784 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:4521 |
msgid "Heart Rate (bpm)" |
msgstr "Puls (spm)" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:4817 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:5386 |
msgid "" |
"Error opening or creating the WMS tag file!\n" |
"Please check file name and/or permissions." |
483,45 → 599,45 |
"Fehler beim Öffnen oder Erzeugen der WMS-Tag-Datei!\n" |
"Bitte prüfen Sie die Dateinamen und/oder die Berechtigungen." |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:4986 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:5555 |
msgid "Translation between coordinate systems failed!" |
msgstr "Ãœbersetzung zwischen Koordinatensystem ist fehlgeschlagen!" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:5068 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:5106 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:5637 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:5675 |
msgid "Error opening an image file!" |
msgstr "Fehler beim Öffnen einer Rasterbilddatei!" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:5079 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:5117 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:5648 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:5686 |
msgid "Error loading the TIFF driver!" |
msgstr "Fehler beim Laden des TIFF-Treibers!" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:5147 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:5716 |
msgid "Error setting projection on source!" |
msgstr "Fehler beim Setzten der Projekten auf die Quelle!" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:5161 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:5730 |
msgid "Error setting geo transform data to source!" |
msgstr "Fehler beim Setzen der Geotransformationsdaten auf die Quelle!" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:5171 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:5740 |
msgid "Error getting the projection reference" |
msgstr "Die Projektionsreferenz wurde nicht geliefert." |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:5195 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:5764 |
msgid "Error creating a temporary image file! (%1)" |
msgstr "Fehler beim Erzeugen einer temporären Bilddatei! (%1)" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:5210 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:5779 |
msgid "Error setting projection on destination!" |
msgstr "Fehler beim Setzen der Projektion auf das Ziel!" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:5219 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:5788 |
msgid "Error setting geo transform data to destination!" |
msgstr "Fehler beim Setzen der Geotransformationsdaten auf das Ziel!" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:5272 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:5841 |
msgid "Error initializing warp operation!" |
msgstr "Fehler beim Initialisieren der Warp-Operation!" |
611,8 → 727,8 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbSRS) |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:496 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbCRS) |
#: /home/andreas/sportwatcher/rc.cpp:45 /home/andreas/sportwatcher/rc.cpp:462 |
#: /home/andreas/sportwatcher/rc.cpp:570 |
#: /home/andreas/sportwatcher/rc.cpp:45 /home/andreas/sportwatcher/rc.cpp:516 |
#: /home/andreas/sportwatcher/rc.cpp:624 |
msgid "EPSG:4326" |
msgstr "" |
620,7 → 736,7 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbDate) |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:135 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbSRS) |
#: /home/andreas/sportwatcher/rc.cpp:48 /home/andreas/sportwatcher/rc.cpp:465 |
#: /home/andreas/sportwatcher/rc.cpp:48 /home/andreas/sportwatcher/rc.cpp:519 |
msgid "EPSG:31257" |
msgstr "" |
628,7 → 744,7 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbDate) |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:140 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbSRS) |
#: /home/andreas/sportwatcher/rc.cpp:51 /home/andreas/sportwatcher/rc.cpp:468 |
#: /home/andreas/sportwatcher/rc.cpp:51 /home/andreas/sportwatcher/rc.cpp:522 |
msgid "EPSG:31258" |
msgstr "" |
638,8 → 754,8 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbSRS) |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:501 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbCRS) |
#: /home/andreas/sportwatcher/rc.cpp:54 /home/andreas/sportwatcher/rc.cpp:471 |
#: /home/andreas/sportwatcher/rc.cpp:573 |
#: /home/andreas/sportwatcher/rc.cpp:54 /home/andreas/sportwatcher/rc.cpp:525 |
#: /home/andreas/sportwatcher/rc.cpp:627 |
msgid "EPSG:31259" |
msgstr "" |
647,7 → 763,7 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbDate) |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:150 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbSRS) |
#: /home/andreas/sportwatcher/rc.cpp:57 /home/andreas/sportwatcher/rc.cpp:474 |
#: /home/andreas/sportwatcher/rc.cpp:57 /home/andreas/sportwatcher/rc.cpp:528 |
msgid "EPSG:31286" |
msgstr "" |
657,8 → 773,8 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbSRS) |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:506 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbCRS) |
#: /home/andreas/sportwatcher/rc.cpp:60 /home/andreas/sportwatcher/rc.cpp:477 |
#: /home/andreas/sportwatcher/rc.cpp:576 |
#: /home/andreas/sportwatcher/rc.cpp:60 /home/andreas/sportwatcher/rc.cpp:531 |
#: /home/andreas/sportwatcher/rc.cpp:630 |
msgid "EPSG:31287" |
msgstr "" |
666,7 → 782,7 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbDate) |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:160 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbSRS) |
#: /home/andreas/sportwatcher/rc.cpp:63 /home/andreas/sportwatcher/rc.cpp:480 |
#: /home/andreas/sportwatcher/rc.cpp:63 /home/andreas/sportwatcher/rc.cpp:534 |
msgid "EPSG:31288" |
msgstr "" |
677,7 → 793,7 |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:87 |
#. i18n: ectx: property (text), widget (KPushButton, pbSave) |
#: /home/andreas/sportwatcher/rc.cpp:66 /home/andreas/sportwatcher/rc.cpp:186 |
#: /home/andreas/sportwatcher/rc.cpp:453 |
#: /home/andreas/sportwatcher/rc.cpp:507 |
msgid "Save" |
msgstr "Speichern" |
688,7 → 804,7 |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:29 |
#. i18n: ectx: property (text), widget (KPushButton, pbCancel) |
#: /home/andreas/sportwatcher/rc.cpp:69 /home/andreas/sportwatcher/rc.cpp:192 |
#: /home/andreas/sportwatcher/rc.cpp:447 |
#: /home/andreas/sportwatcher/rc.cpp:501 |
msgid "Cancel" |
msgstr "Abbrechen" |
838,7 → 954,7 |
#. i18n: ectx: property (text), widget (QLabel, textLabel2) |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:616 |
#. i18n: ectx: property (text), widget (QTreeWidget, twLaps) |
#: /home/andreas/sportwatcher/rc.cpp:141 /home/andreas/sportwatcher/rc.cpp:396 |
#: /home/andreas/sportwatcher/rc.cpp:141 /home/andreas/sportwatcher/rc.cpp:450 |
msgid "Max. heart rate" |
msgstr "Max. Puls" |
1037,9 → 1153,15 |
msgid "WMS Server (tag file)" |
msgstr "WMS Server (Tag Datei)" |
#. i18n: file: /home/andreas/sportwatcher/src/settingswidgetbase.ui:637 |
#. i18n: file: /home/andreas/sportwatcher/src/settingswidgetbase.ui:634 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbMapType) |
#: /home/andreas/sportwatcher/rc.cpp:246 |
msgid "OSM Open Streetmap (file)" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/settingswidgetbase.ui:642 |
#. i18n: ectx: property (toolTip), widget (QCheckBox, cbSerial) |
#: /home/andreas/sportwatcher/rc.cpp:246 |
#: /home/andreas/sportwatcher/rc.cpp:249 |
msgid "" |
"In case you've an old Garmin device with a serial port, you can try this to " |
"get the data out of it." |
1047,39 → 1169,39 |
"Falls Sie ein älteres Garmin Gerät mit einem seriellen Anschluß besitzen, " |
"können Sie das markieren um Daten auslesen zu können." |
#. i18n: file: /home/andreas/sportwatcher/src/settingswidgetbase.ui:640 |
#. i18n: file: /home/andreas/sportwatcher/src/settingswidgetbase.ui:645 |
#. i18n: ectx: property (text), widget (QCheckBox, cbSerial) |
#: /home/andreas/sportwatcher/rc.cpp:249 |
#: /home/andreas/sportwatcher/rc.cpp:252 |
msgid "Use serial port instead of USB port" |
msgstr "Serielles Port statt USB-Port verwenden" |
#. i18n: file: /home/andreas/sportwatcher/src/settingswidgetbase.ui:650 |
#. i18n: file: /home/andreas/sportwatcher/src/settingswidgetbase.ui:655 |
#. i18n: ectx: property (toolTip), widget (QRadioButton, rbFr405) |
#: /home/andreas/sportwatcher/rc.cpp:252 |
#: /home/andreas/sportwatcher/rc.cpp:255 |
msgid "If you've a Garmin Forerunner 405, or compatible, check this." |
msgstr "Markieren Sie das für einen Garmin Forerunner 405, oder kompatiblen." |
#. i18n: file: /home/andreas/sportwatcher/src/settingswidgetbase.ui:653 |
#. i18n: file: /home/andreas/sportwatcher/src/settingswidgetbase.ui:658 |
#. i18n: ectx: property (text), widget (QRadioButton, rbFr405) |
#: /home/andreas/sportwatcher/rc.cpp:255 |
#: /home/andreas/sportwatcher/rc.cpp:258 |
msgid "Garmin Forerunner 405" |
msgstr "Garmin Forerunner 405" |
#. i18n: file: /home/andreas/sportwatcher/src/settingswidgetbase.ui:660 |
#. i18n: file: /home/andreas/sportwatcher/src/settingswidgetbase.ui:665 |
#. i18n: ectx: property (toolTip), widget (QRadioButton, rbFr50) |
#: /home/andreas/sportwatcher/rc.cpp:258 |
#: /home/andreas/sportwatcher/rc.cpp:261 |
msgid "If you've a Garmin Forerunner 50, or compatible, check this." |
msgstr "Markieren Sie das für einen Garmin Forerunner 50, oder kompatiblen." |
#. i18n: file: /home/andreas/sportwatcher/src/settingswidgetbase.ui:663 |
#. i18n: file: /home/andreas/sportwatcher/src/settingswidgetbase.ui:668 |
#. i18n: ectx: property (text), widget (QRadioButton, rbFr50) |
#: /home/andreas/sportwatcher/rc.cpp:261 |
#: /home/andreas/sportwatcher/rc.cpp:264 |
msgid "Garmin Forerunner 50" |
msgstr "Garmin Forerunner 50" |
#. i18n: file: /home/andreas/sportwatcher/src/settingswidgetbase.ui:670 |
#. i18n: file: /home/andreas/sportwatcher/src/settingswidgetbase.ui:675 |
#. i18n: ectx: property (toolTip), widget (KUrlComboRequester, cbDevice) |
#: /home/andreas/sportwatcher/rc.cpp:264 |
#: /home/andreas/sportwatcher/rc.cpp:267 |
msgid "" |
"Select the special device representing the serial device, where your Garmin " |
"is connected." |
1087,23 → 1209,23 |
"Wählen Sie den Gerätenamen der dem Port entspricht, an dem Ihr Garmin " |
"Forerunner angeschlossen ist." |
#. i18n: file: /home/andreas/sportwatcher/src/settingswidgetbase.ui:677 |
#. i18n: file: /home/andreas/sportwatcher/src/settingswidgetbase.ui:682 |
#. i18n: ectx: property (toolTip), widget (KUrlRequester, lnData) |
#: /home/andreas/sportwatcher/rc.cpp:267 |
#: /home/andreas/sportwatcher/rc.cpp:270 |
msgid "Enter the path where SportWatcher will store all the data." |
msgstr "Geben Sie das Verzeichnis an, in den SportWatcher alle Daten ablegt." |
#. i18n: file: /home/andreas/sportwatcher/src/settingswidgetbase.ui:684 |
#. i18n: file: /home/andreas/sportwatcher/src/settingswidgetbase.ui:689 |
#. i18n: ectx: property (toolTip), widget (KUrlRequester, lnHRM) |
#: /home/andreas/sportwatcher/rc.cpp:270 |
#: /home/andreas/sportwatcher/rc.cpp:273 |
msgid "In case you've a directory with Polar HRM files, enter it name here." |
msgstr "" |
"Falls Sie ein Verzeichnis mit Polar HRM-Dateien haben, geben Sie den " |
"Verzeichnisnamen hier an." |
#. i18n: file: /home/andreas/sportwatcher/src/settingswidgetbase.ui:691 |
#. i18n: file: /home/andreas/sportwatcher/src/settingswidgetbase.ui:696 |
#. i18n: ectx: property (toolTip), widget (KUrlRequester, lnMapFile) |
#: /home/andreas/sportwatcher/rc.cpp:273 |
#: /home/andreas/sportwatcher/rc.cpp:276 |
msgid "" |
"Enter the path and name of the map file, or the name of the control file " |
"containing instructions for an external map server (WMS server, for example)." |
1111,98 → 1233,197 |
"Geben Sie den Pfad und den Namen der Landkartendatei ein, oder den Namen der " |
"Steuerdatei (z.B.: WMS Server)." |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherui.rc:5 |
#. i18n: ectx: Menu (file) |
#: /home/andreas/sportwatcher/rc.cpp:276 |
msgctxt "@title:menu" |
msgid "&File" |
msgstr "Datei" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherui.rc:17 |
#. i18n: ectx: Menu (edit) |
#. i18n: file: /home/andreas/sportwatcher/src/shapewidgetbase.ui:26 |
#. i18n: ectx: property (windowTitle), widget (QDialog, shapeWidgetBase) |
#: /home/andreas/sportwatcher/rc.cpp:279 |
msgctxt "@title:menu" |
msgid "&Edit" |
msgstr "Bearbeiten" |
#, fuzzy |
msgid "Shape file settings" |
msgstr "Server Einstellungen" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherui.rc:22 |
#. i18n: ectx: Menu (settings) |
#. i18n: file: /home/andreas/sportwatcher/src/shapewidgetbase.ui:33 |
#. i18n: ectx: property (toolTip), widget (QDialog, shapeWidgetBase) |
#: /home/andreas/sportwatcher/rc.cpp:282 |
msgctxt "@title:menu" |
msgid "Settings" |
msgstr "Einstellungen" |
msgid "Allows to set everything needed for a set of shape files" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherui.rc:31 |
#. i18n: ectx: ToolBar (mainToolBar) |
#. i18n: file: /home/andreas/sportwatcher/src/shapewidgetbase.ui:42 |
#. i18n: ectx: property (text), widget (QLabel, label) |
#: /home/andreas/sportwatcher/rc.cpp:285 |
msgid "Main Toolbar" |
msgstr "Toolbar" |
msgid "Path to shape file set" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/shapewidgetbase.ui:49 |
#. i18n: ectx: property (toolTip), widget (KUrlRequester, edShapeFileSet) |
#: /home/andreas/sportwatcher/rc.cpp:288 |
msgid "" |
"This Line contains the path to the directory with the shape files, " |
"containing the map." |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/shapewidgetbase.ui:52 |
#. i18n: ectx: property (whatsThis), widget (KUrlRequester, edShapeFileSet) |
#: /home/andreas/sportwatcher/rc.cpp:291 |
msgid "An input line, containing the path to the shape files." |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/shapewidgetbase.ui:59 |
#. i18n: ectx: property (text), widget (QLabel, label_2) |
#: /home/andreas/sportwatcher/rc.cpp:294 |
msgid "Path to Mapnik plugin directory" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/shapewidgetbase.ui:66 |
#. i18n: ectx: property (toolTip), widget (KUrlRequester, edPluginPath) |
#: /home/andreas/sportwatcher/rc.cpp:297 |
msgid "Path to the directory containing the plugins for Mapnik." |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/shapewidgetbase.ui:69 |
#. i18n: ectx: property (whatsThis), widget (KUrlRequester, edPluginPath) |
#: /home/andreas/sportwatcher/rc.cpp:300 |
msgid "An edit line containing the path to the Mapnik plugin directory." |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/shapewidgetbase.ui:76 |
#. i18n: ectx: property (text), widget (QLabel, label_3) |
#: /home/andreas/sportwatcher/rc.cpp:303 |
msgid "Path to Mapnik font directory" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/shapewidgetbase.ui:83 |
#. i18n: ectx: property (toolTip), widget (KUrlRequester, edFontPath) |
#: /home/andreas/sportwatcher/rc.cpp:306 |
msgid "" |
"Contains the path to a font directory with true type fonts used to draw the " |
"labels of the map." |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/shapewidgetbase.ui:86 |
#. i18n: ectx: property (whatsThis), widget (KUrlRequester, edFontPath) |
#: /home/andreas/sportwatcher/rc.cpp:309 |
msgid "Input line containing the path to a font directory." |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/shapewidgetbase.ui:93 |
#. i18n: ectx: property (text), widget (QLabel, label_4) |
#: /home/andreas/sportwatcher/rc.cpp:312 |
msgid "Name and path to description file" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/shapewidgetbase.ui:100 |
#. i18n: ectx: property (toolTip), widget (KUrlRequester, edXmlFile) |
#: /home/andreas/sportwatcher/rc.cpp:315 |
msgid "" |
"Contains the file name of a file, describing the contents of the shape file." |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/shapewidgetbase.ui:103 |
#. i18n: ectx: property (whatsThis), widget (KUrlRequester, edXmlFile) |
#: /home/andreas/sportwatcher/rc.cpp:318 |
msgid "" |
"Input line containing the name of a file describing the contents of shape " |
"files." |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/shapewidgetbase.ui:110 |
#. i18n: ectx: property (text), widget (QLabel, label_5) |
#: /home/andreas/sportwatcher/rc.cpp:321 |
msgid "If map file is projected:" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/shapewidgetbase.ui:117 |
#. i18n: ectx: property (toolTip), widget (QRadioButton, rbForward) |
#: /home/andreas/sportwatcher/rc.cpp:324 |
msgid "Forward if mapfile is projected." |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/shapewidgetbase.ui:120 |
#. i18n: ectx: property (whatsThis), widget (QRadioButton, rbForward) |
#: /home/andreas/sportwatcher/rc.cpp:327 |
msgid "Makes a forward projection if the mapfile is projected." |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/shapewidgetbase.ui:123 |
#. i18n: ectx: property (text), widget (QRadioButton, rbForward) |
#: /home/andreas/sportwatcher/rc.cpp:330 |
msgid "Forwarded" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/shapewidgetbase.ui:153 |
#. i18n: ectx: property (toolTip), widget (QRadioButton, rbInverse) |
#: /home/andreas/sportwatcher/rc.cpp:333 |
msgid "Inverse if map file is geographic." |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/shapewidgetbase.ui:159 |
#. i18n: ectx: property (whatsThis), widget (QRadioButton, rbInverse) |
#: /home/andreas/sportwatcher/rc.cpp:336 |
msgid "Makes an inverse projection if the map file is geographic." |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/shapewidgetbase.ui:162 |
#. i18n: ectx: property (text), widget (QRadioButton, rbInverse) |
#: /home/andreas/sportwatcher/rc.cpp:339 |
msgid "Inversed" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:19 |
#. i18n: ectx: property (accessibleName), widget (QWidget, sportwatcherWidgetBase) |
#: /home/andreas/sportwatcher/rc.cpp:291 |
#: /home/andreas/sportwatcher/rc.cpp:345 |
msgid "sportwatcher" |
msgstr "sportwatcher" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:41 |
#. i18n: ectx: property (text), widget (QTreeWidget, liActivities) |
#: /home/andreas/sportwatcher/rc.cpp:294 |
#: /home/andreas/sportwatcher/rc.cpp:348 |
msgid "Activities" |
msgstr "Aktivitäten" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:44 |
#. i18n: ectx: property (toolTip), widget (QTreeWidget, liActivities) |
#: /home/andreas/sportwatcher/rc.cpp:297 |
#: /home/andreas/sportwatcher/rc.cpp:351 |
msgid "Saved activities, separated into run, bike and other activities." |
msgstr "Gespeicherte Aktivitäten, aufgeteilt in Laufen, Radfahren und Anderes." |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:47 |
#. i18n: ectx: property (whatsThis), widget (QTreeWidget, liActivities) |
#: /home/andreas/sportwatcher/rc.cpp:300 |
#: /home/andreas/sportwatcher/rc.cpp:354 |
msgid "Shows all saved activities." |
msgstr "Zeigt alle gespeicherten Aktivitäten an." |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:65 |
#. i18n: ectx: attribute (title), widget (QWidget, tabSummary) |
#: /home/andreas/sportwatcher/rc.cpp:303 |
#: /home/andreas/sportwatcher/rc.cpp:357 |
msgid "Summary" |
msgstr "Zusammenfassung" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:84 |
#. i18n: ectx: property (text), widget (K3ListView, liLaps) |
#: /home/andreas/sportwatcher/rc.cpp:306 |
#: /home/andreas/sportwatcher/rc.cpp:360 |
msgid "Name" |
msgstr "Name" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:95 |
#. i18n: ectx: property (text), widget (K3ListView, liLaps) |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:576 |
#. i18n: ectx: property (text), widget (QTreeWidget, twLaps) |
#: /home/andreas/sportwatcher/rc.cpp:309 /home/andreas/sportwatcher/rc.cpp:372 |
msgid "Distance" |
msgstr "Distanz" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:106 |
#. i18n: ectx: property (text), widget (K3ListView, liLaps) |
#: /home/andreas/sportwatcher/rc.cpp:312 |
#: /home/andreas/sportwatcher/rc.cpp:366 |
msgid "Elapsed Time" |
msgstr "Benötigte Zeit" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:117 |
#. i18n: ectx: property (text), widget (K3ListView, liLaps) |
#: /home/andreas/sportwatcher/rc.cpp:315 |
#: /home/andreas/sportwatcher/rc.cpp:369 |
msgid "Avg Pace" |
msgstr "Ds. Runde" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:128 |
#. i18n: ectx: property (text), widget (K3ListView, liLaps) |
#: /home/andreas/sportwatcher/rc.cpp:318 |
#: /home/andreas/sportwatcher/rc.cpp:372 |
msgid "Avg Speed" |
msgstr "Ds. Geschwindigkeit" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:139 |
#. i18n: ectx: property (text), widget (K3ListView, liLaps) |
#: /home/andreas/sportwatcher/rc.cpp:321 |
#: /home/andreas/sportwatcher/rc.cpp:375 |
msgid "Max Speed" |
msgstr "Max. Geschwindigkeit" |
1210,265 → 1431,247 |
#. i18n: ectx: property (text), widget (K3ListView, liLaps) |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:606 |
#. i18n: ectx: property (text), widget (QTreeWidget, twLaps) |
#: /home/andreas/sportwatcher/rc.cpp:324 /home/andreas/sportwatcher/rc.cpp:390 |
#: /home/andreas/sportwatcher/rc.cpp:378 /home/andreas/sportwatcher/rc.cpp:444 |
msgid "Calories" |
msgstr "Kalorien" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:161 |
#. i18n: ectx: property (text), widget (K3ListView, liLaps) |
#: /home/andreas/sportwatcher/rc.cpp:327 |
#: /home/andreas/sportwatcher/rc.cpp:381 |
msgid "Avg Heart Rate" |
msgstr "Ds. Puls" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:172 |
#. i18n: ectx: property (text), widget (K3ListView, liLaps) |
#: /home/andreas/sportwatcher/rc.cpp:330 |
#: /home/andreas/sportwatcher/rc.cpp:384 |
msgid "Max Heart Rate" |
msgstr "Max. Puls" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:183 |
#. i18n: ectx: property (text), widget (K3ListView, liLaps) |
#: /home/andreas/sportwatcher/rc.cpp:333 |
#: /home/andreas/sportwatcher/rc.cpp:387 |
msgid "Avg Cadence" |
msgstr "Ds. Trittfrequenz" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:194 |
#. i18n: ectx: property (text), widget (K3ListView, liLaps) |
#: /home/andreas/sportwatcher/rc.cpp:336 |
#: /home/andreas/sportwatcher/rc.cpp:390 |
msgid "Ascent" |
msgstr "Anstieg" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:205 |
#. i18n: ectx: property (text), widget (K3ListView, liLaps) |
#: /home/andreas/sportwatcher/rc.cpp:339 |
#: /home/andreas/sportwatcher/rc.cpp:393 |
msgid "Descent" |
msgstr "Abstieg" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:368 |
#. i18n: ectx: property (text), item, widget (KComboBox, kcbCurveTypes) |
#: /home/andreas/sportwatcher/rc.cpp:342 |
#: /home/andreas/sportwatcher/rc.cpp:396 |
msgid "Altitude & heart rate" |
msgstr "Höhenprofil und Puls" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:373 |
#. i18n: ectx: property (text), item, widget (KComboBox, kcbCurveTypes) |
#: /home/andreas/sportwatcher/rc.cpp:345 |
#: /home/andreas/sportwatcher/rc.cpp:399 |
msgid "Speed & heart rate" |
msgstr "Geschwindigkeit und Puls" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:378 |
#. i18n: ectx: property (text), item, widget (KComboBox, kcbCurveTypes) |
#: /home/andreas/sportwatcher/rc.cpp:348 |
#: /home/andreas/sportwatcher/rc.cpp:402 |
msgid "Altitude & speed" |
msgstr "Höhenprofil und Geschwindigkeit" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:441 |
#. i18n: ectx: attribute (title), widget (QWidget, tabMap) |
#: /home/andreas/sportwatcher/rc.cpp:351 |
#: /home/andreas/sportwatcher/rc.cpp:405 |
msgid "Map" |
msgstr "Landkarte" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:461 |
#. i18n: ectx: attribute (title), widget (QWidget, tabHR) |
#: /home/andreas/sportwatcher/rc.cpp:354 |
#: /home/andreas/sportwatcher/rc.cpp:408 |
msgid "HR / Speed" |
msgstr "Puls / Geschwindigkeit" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:467 |
#. i18n: ectx: property (text), widget (QLabel, label_4) |
#: /home/andreas/sportwatcher/rc.cpp:357 |
msgid "Heart rate" |
msgstr "Puls" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:474 |
#. i18n: ectx: property (text), widget (QLabel, label_2) |
#: /home/andreas/sportwatcher/rc.cpp:360 |
#: /home/andreas/sportwatcher/rc.cpp:414 |
msgid "Elevation" |
msgstr "Höhenprofil" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:481 |
#. i18n: ectx: property (text), widget (QLabel, label) |
#: /home/andreas/sportwatcher/rc.cpp:363 |
msgid "Speed" |
msgstr "Geschwindigkeit" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:564 |
#. i18n: ectx: attribute (title), widget (QWidget, tabLap) |
#: /home/andreas/sportwatcher/rc.cpp:366 |
#: /home/andreas/sportwatcher/rc.cpp:420 |
msgid "Lap details" |
msgstr "Rundendetails" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:571 |
#. i18n: ectx: property (text), widget (QTreeWidget, twLaps) |
#: /home/andreas/sportwatcher/rc.cpp:369 |
msgid "Time" |
msgstr "Zeit" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:581 |
#. i18n: ectx: property (text), widget (QTreeWidget, twLaps) |
#: /home/andreas/sportwatcher/rc.cpp:375 |
#: /home/andreas/sportwatcher/rc.cpp:429 |
msgid "Tot. Distance" |
msgstr "Gesamtdistanz" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:586 |
#. i18n: ectx: property (text), widget (QTreeWidget, twLaps) |
#: /home/andreas/sportwatcher/rc.cpp:378 |
#: /home/andreas/sportwatcher/rc.cpp:432 |
msgid "Pace" |
msgstr "Rundenzeit" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:591 |
#. i18n: ectx: property (text), widget (QTreeWidget, twLaps) |
#: /home/andreas/sportwatcher/rc.cpp:381 |
#: /home/andreas/sportwatcher/rc.cpp:435 |
msgid "Avg. Pace" |
msgstr "Ds. Rundenzeit" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:596 |
#. i18n: ectx: property (text), widget (QTreeWidget, twLaps) |
#: /home/andreas/sportwatcher/rc.cpp:384 |
#: /home/andreas/sportwatcher/rc.cpp:438 |
msgid "Avg. Speed" |
msgstr "Ds. Geschwindigkeit" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:601 |
#. i18n: ectx: property (text), widget (QTreeWidget, twLaps) |
#: /home/andreas/sportwatcher/rc.cpp:387 |
#: /home/andreas/sportwatcher/rc.cpp:441 |
msgid "Max. Speed" |
msgstr "Max. Geschwindigkeit" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:611 |
#. i18n: ectx: property (text), widget (QTreeWidget, twLaps) |
#: /home/andreas/sportwatcher/rc.cpp:393 |
#: /home/andreas/sportwatcher/rc.cpp:447 |
msgid "Avg. heart rate" |
msgstr "Ds. Puls" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:621 |
#. i18n: ectx: property (text), widget (QTreeWidget, twLaps) |
#: /home/andreas/sportwatcher/rc.cpp:399 |
#: /home/andreas/sportwatcher/rc.cpp:453 |
msgid "Avg. Cadence" |
msgstr "Ds. Trittfrequenz" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:626 |
#. i18n: ectx: property (text), widget (QTreeWidget, twLaps) |
#: /home/andreas/sportwatcher/rc.cpp:402 |
#: /home/andreas/sportwatcher/rc.cpp:456 |
msgid "Up" |
msgstr "Anstieg" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:643 |
#. i18n: ectx: property (text), widget (QLabel, label_3) |
#: /home/andreas/sportwatcher/rc.cpp:405 |
#: /home/andreas/sportwatcher/rc.cpp:459 |
msgid "Total distance" |
msgstr "Gesamtdistanz" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:670 |
#. i18n: ectx: property (text), widget (QLabel, label_9) |
#: /home/andreas/sportwatcher/rc.cpp:408 |
#: /home/andreas/sportwatcher/rc.cpp:462 |
msgid "Distance of lap" |
msgstr "Rundendistanz" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:680 |
#. i18n: ectx: property (text), widget (QLabel, label_5) |
#: /home/andreas/sportwatcher/rc.cpp:411 |
#: /home/andreas/sportwatcher/rc.cpp:465 |
msgid "Total time" |
msgstr "Gesamtzeit" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:707 |
#. i18n: ectx: property (text), widget (QLabel, label_10) |
#: /home/andreas/sportwatcher/rc.cpp:414 |
#: /home/andreas/sportwatcher/rc.cpp:468 |
msgid "Time of lap" |
msgstr "Rundenzeit" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:717 |
#. i18n: ectx: property (text), widget (QLabel, label_6) |
#: /home/andreas/sportwatcher/rc.cpp:417 |
#: /home/andreas/sportwatcher/rc.cpp:471 |
msgid "Average speed" |
msgstr "Durchschnittliche Geschwindigkeit" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:744 |
#. i18n: ectx: property (text), widget (QLabel, label_11) |
#: /home/andreas/sportwatcher/rc.cpp:420 |
#: /home/andreas/sportwatcher/rc.cpp:474 |
msgid "Average speed of lap" |
msgstr "Durchschnittliche Geschwindigkeit der Runde" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:754 |
#. i18n: ectx: property (text), widget (QLabel, label_7) |
#: /home/andreas/sportwatcher/rc.cpp:423 |
#: /home/andreas/sportwatcher/rc.cpp:477 |
msgid "Total height" |
msgstr "Gesamthöhe" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:781 |
#. i18n: ectx: property (text), widget (QLabel, label_12) |
#: /home/andreas/sportwatcher/rc.cpp:426 |
#: /home/andreas/sportwatcher/rc.cpp:480 |
msgid "Total height of lap" |
msgstr "Höhe der Runde" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:791 |
#. i18n: ectx: property (text), widget (QLabel, label_8) |
#: /home/andreas/sportwatcher/rc.cpp:429 |
#: /home/andreas/sportwatcher/rc.cpp:483 |
msgid "Average heart rate" |
msgstr "Durchschnittlicher Puls" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:818 |
#. i18n: ectx: property (text), widget (QLabel, label_13) |
#: /home/andreas/sportwatcher/rc.cpp:432 |
#: /home/andreas/sportwatcher/rc.cpp:486 |
msgid "Average heart rate of lap" |
msgstr "Durchschnittlicher Puls der Runde" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:828 |
#. i18n: ectx: property (text), widget (QLabel, label_14) |
#: /home/andreas/sportwatcher/rc.cpp:435 |
#: /home/andreas/sportwatcher/rc.cpp:489 |
msgid "Number laps" |
msgstr "Anzahl Runden" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:851 |
#. i18n: ectx: property (text), widget (QLabel, label_15) |
#: /home/andreas/sportwatcher/rc.cpp:438 |
#: /home/andreas/sportwatcher/rc.cpp:492 |
msgid "Actual lap number" |
msgstr "Aktuelle Runde" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:14 |
#. i18n: ectx: property (windowTitle), widget (QDialog, wmsWidgetBase) |
#: /home/andreas/sportwatcher/rc.cpp:441 |
#: /home/andreas/sportwatcher/rc.cpp:495 |
msgid "WMS" |
msgstr "WMS" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:26 |
#. i18n: ectx: property (toolTip), widget (KPushButton, pbCancel) |
#: /home/andreas/sportwatcher/rc.cpp:444 |
#: /home/andreas/sportwatcher/rc.cpp:498 |
msgid "Click this to cancel all made settings and close this dialog." |
msgstr "Klicken Sie hier um alle Änderungen zu verwerfen." |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:84 |
#. i18n: ectx: property (toolTip), widget (KPushButton, pbSave) |
#: /home/andreas/sportwatcher/rc.cpp:450 |
#: /home/andreas/sportwatcher/rc.cpp:504 |
msgid "Click this to save all settings." |
msgstr "Klicken Sie hier um die Änderungen zu speichern" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:97 |
#. i18n: ectx: property (title), widget (Q3GroupBox, groupBox1) |
#: /home/andreas/sportwatcher/rc.cpp:456 |
#: /home/andreas/sportwatcher/rc.cpp:510 |
msgid "Server settings" |
msgstr "Server Einstellungen" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:119 |
#. i18n: ectx: property (text), widget (QLabel, textLabel6) |
#: /home/andreas/sportwatcher/rc.cpp:459 |
#: /home/andreas/sportwatcher/rc.cpp:513 |
msgid "Depth" |
msgstr "Tiefe" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:168 |
#. i18n: ectx: property (text), widget (QLabel, textLabel7) |
#: /home/andreas/sportwatcher/rc.cpp:483 |
#: /home/andreas/sportwatcher/rc.cpp:537 |
msgid "Styles" |
msgstr "Stile" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:178 |
#. i18n: ectx: property (text), widget (QLabel, textLabel11) |
#: /home/andreas/sportwatcher/rc.cpp:486 |
#: /home/andreas/sportwatcher/rc.cpp:540 |
msgid "Version" |
msgstr "Version" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:188 |
#. i18n: ectx: property (toolTip), widget (KLineEdit, edLayer) |
#: /home/andreas/sportwatcher/rc.cpp:489 |
#: /home/andreas/sportwatcher/rc.cpp:543 |
msgid "If you need or want to specify layers, do it here." |
msgstr "" |
"Wenn Sie Layer benötigen, geben Sie die Namen durch Beistriche getrennt, " |
1476,13 → 1679,13 |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:211 |
#. i18n: ectx: property (text), widget (QLabel, textLabel8) |
#: /home/andreas/sportwatcher/rc.cpp:492 |
#: /home/andreas/sportwatcher/rc.cpp:546 |
msgid "Overview count" |
msgstr "Anzahl Ãœbersichten" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:221 |
#. i18n: ectx: property (toolTip), widget (KLineEdit, edStyles) |
#: /home/andreas/sportwatcher/rc.cpp:495 |
#: /home/andreas/sportwatcher/rc.cpp:549 |
msgid "" |
"In case you've entered layers, you must enter one style for every layer!" |
msgstr "" |
1491,61 → 1694,61 |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:228 |
#. i18n: ectx: property (text), widget (QLabel, textLabel12) |
#: /home/andreas/sportwatcher/rc.cpp:498 |
#: /home/andreas/sportwatcher/rc.cpp:552 |
msgid "Image format" |
msgstr "Grafikformat" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:322 |
#. i18n: ectx: property (toolTip), widget (KComboBox, cbVersion) |
#: /home/andreas/sportwatcher/rc.cpp:501 |
#: /home/andreas/sportwatcher/rc.cpp:555 |
msgid "The version of the WMS server. This defines the used protocol." |
msgstr "Gibt an, mit welchem Protokoll mit dem WMS-Server kommuniziert wird." |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:326 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbVersion) |
#: /home/andreas/sportwatcher/rc.cpp:504 |
#: /home/andreas/sportwatcher/rc.cpp:558 |
msgid "1.1.1" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:331 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbVersion) |
#: /home/andreas/sportwatcher/rc.cpp:507 |
#: /home/andreas/sportwatcher/rc.cpp:561 |
msgid "1.1" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:336 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbVersion) |
#: /home/andreas/sportwatcher/rc.cpp:510 |
#: /home/andreas/sportwatcher/rc.cpp:564 |
msgid "1" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:344 |
#. i18n: ectx: property (text), widget (QLabel, textLabel3) |
#: /home/andreas/sportwatcher/rc.cpp:513 |
#: /home/andreas/sportwatcher/rc.cpp:567 |
msgid "SRS" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:354 |
#. i18n: ectx: property (text), widget (QLabel, textLabel2) |
#: /home/andreas/sportwatcher/rc.cpp:516 |
#: /home/andreas/sportwatcher/rc.cpp:570 |
msgid "Layer Name" |
msgstr "Layer Name" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:367 |
#. i18n: ectx: property (toolTip), widget (KUrlRequester, edServerURL) |
#: /home/andreas/sportwatcher/rc.cpp:519 |
#: /home/andreas/sportwatcher/rc.cpp:573 |
msgid "Enter the URL to the WMS server." |
msgstr "Geben Sie die URL zum WMS Server an." |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:374 |
#. i18n: ectx: property (text), widget (QLabel, textLabel1) |
#: /home/andreas/sportwatcher/rc.cpp:522 |
#: /home/andreas/sportwatcher/rc.cpp:576 |
msgid "Server URL" |
msgstr "Server URL" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:400 |
#. i18n: ectx: property (toolTip), widget (KComboBox, cbTile) |
#: /home/andreas/sportwatcher/rc.cpp:525 |
#: /home/andreas/sportwatcher/rc.cpp:579 |
msgid "The size of the tiles you want. The performance depends on this." |
msgstr "" |
"Die größe der Grafikteile, aus denen die Landkarte zusammengesetzt wird. " |
1553,97 → 1756,97 |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:407 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbTile) |
#: /home/andreas/sportwatcher/rc.cpp:528 |
#: /home/andreas/sportwatcher/rc.cpp:582 |
msgid "64x64" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:412 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbTile) |
#: /home/andreas/sportwatcher/rc.cpp:531 |
#: /home/andreas/sportwatcher/rc.cpp:585 |
msgid "128x128" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:417 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbTile) |
#: /home/andreas/sportwatcher/rc.cpp:534 |
#: /home/andreas/sportwatcher/rc.cpp:588 |
msgid "256x256" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:422 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbTile) |
#: /home/andreas/sportwatcher/rc.cpp:537 |
#: /home/andreas/sportwatcher/rc.cpp:591 |
msgid "512x512" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:427 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbTile) |
#: /home/andreas/sportwatcher/rc.cpp:540 |
#: /home/andreas/sportwatcher/rc.cpp:594 |
msgid "1024x1024" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:435 |
#. i18n: ectx: property (text), widget (QLabel, textLabel5) |
#: /home/andreas/sportwatcher/rc.cpp:543 |
#: /home/andreas/sportwatcher/rc.cpp:597 |
msgid "Tile size" |
msgstr "Teilgröße" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:445 |
#. i18n: ectx: property (toolTip), widget (KComboBox, cbImage) |
#: /home/andreas/sportwatcher/rc.cpp:546 |
#: /home/andreas/sportwatcher/rc.cpp:600 |
msgid "The grafic format the server returns." |
msgstr "Das Grafikformat, welches der Server zurück gibt." |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:452 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbImage) |
#: /home/andreas/sportwatcher/rc.cpp:549 |
#: /home/andreas/sportwatcher/rc.cpp:603 |
msgid "GIF" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:457 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbImage) |
#: /home/andreas/sportwatcher/rc.cpp:552 |
#: /home/andreas/sportwatcher/rc.cpp:606 |
msgid "JPEG" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:462 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbImage) |
#: /home/andreas/sportwatcher/rc.cpp:555 |
#: /home/andreas/sportwatcher/rc.cpp:609 |
msgid "PNG" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:467 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbImage) |
#: /home/andreas/sportwatcher/rc.cpp:558 |
#: /home/andreas/sportwatcher/rc.cpp:612 |
msgid "TIFF" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:475 |
#. i18n: ectx: property (text), widget (QLabel, textLabel4) |
#: /home/andreas/sportwatcher/rc.cpp:561 |
#: /home/andreas/sportwatcher/rc.cpp:615 |
msgid "Bands" |
msgstr "Bänder" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:486 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbCRS) |
#: /home/andreas/sportwatcher/rc.cpp:564 |
#: /home/andreas/sportwatcher/rc.cpp:618 |
msgid "CRS:83" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:491 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbCRS) |
#: /home/andreas/sportwatcher/rc.cpp:567 |
#: /home/andreas/sportwatcher/rc.cpp:621 |
msgid "CRS:84" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:514 |
#. i18n: ectx: property (text), widget (QLabel, textLabel9) |
#: /home/andreas/sportwatcher/rc.cpp:579 |
#: /home/andreas/sportwatcher/rc.cpp:633 |
msgid "CRS" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:540 |
#. i18n: ectx: property (toolTip), widget (KIntSpinBox, edBands) |
#: /home/andreas/sportwatcher/rc.cpp:582 |
#: /home/andreas/sportwatcher/rc.cpp:636 |
msgid "Set the number of bands the server returns (mostly 3 or 4)." |
msgstr "" |
"Geben Sie die Anzahl Bänder an, die der Server zurück gibt (zumeist 3 oder " |
1651,25 → 1854,25 |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:556 |
#. i18n: ectx: property (title), widget (Q3GroupBox, groupBox2) |
#: /home/andreas/sportwatcher/rc.cpp:585 |
#: /home/andreas/sportwatcher/rc.cpp:639 |
msgid "Read modes" |
msgstr "Lesemodus" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:562 |
#. i18n: ectx: property (toolTip), widget (QCheckBox, chOffline) |
#: /home/andreas/sportwatcher/rc.cpp:588 |
#: /home/andreas/sportwatcher/rc.cpp:642 |
msgid "Check this if you don't want to get maps online." |
msgstr "Markieren Sie das um keine Daten online herunter zu laden." |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:565 |
#. i18n: ectx: property (text), widget (QCheckBox, chOffline) |
#: /home/andreas/sportwatcher/rc.cpp:591 |
#: /home/andreas/sportwatcher/rc.cpp:645 |
msgid "Offline mode" |
msgstr "Offlinemodus" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:572 |
#. i18n: ectx: property (toolTip), widget (QCheckBox, chSquare) |
#: /home/andreas/sportwatcher/rc.cpp:594 |
#: /home/andreas/sportwatcher/rc.cpp:648 |
msgid "" |
"In rare cases, a WMS server is not able to convert the map into the right " |
"dimensions. Then this may help." |
1679,43 → 1882,43 |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:575 |
#. i18n: ectx: property (text), widget (QCheckBox, chSquare) |
#: /home/andreas/sportwatcher/rc.cpp:597 |
#: /home/andreas/sportwatcher/rc.cpp:651 |
msgid "WMS Server uses square pixels" |
msgstr "WMS Server verwendet Quadratpixel" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:582 |
#. i18n: ectx: property (text), widget (QCheckBox, chAdvice) |
#: /home/andreas/sportwatcher/rc.cpp:600 |
#: /home/andreas/sportwatcher/rc.cpp:654 |
msgid "Advise read" |
msgstr "Vorausschauendes Lesen" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:653 |
#. i18n: ectx: property (text), widget (QCheckBox, chVerify) |
#: /home/andreas/sportwatcher/rc.cpp:603 |
#: /home/andreas/sportwatcher/rc.cpp:657 |
msgid "Verify advise read" |
msgstr "Prüfe vorausschauendes Lesen" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:730 |
#. i18n: ectx: property (title), widget (Q3GroupBox, groupBox3) |
#: /home/andreas/sportwatcher/rc.cpp:606 |
#: /home/andreas/sportwatcher/rc.cpp:660 |
msgid "Manual corrections" |
msgstr "Manuelle Korrekturen" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:736 |
#. i18n: ectx: property (text), widget (QLabel, textLabel1_2) |
#: /home/andreas/sportwatcher/rc.cpp:609 |
#: /home/andreas/sportwatcher/rc.cpp:663 |
msgid "Add meters to longitude" |
msgstr "Meter zum Längengrad hinzufügen" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:746 |
#. i18n: ectx: property (text), widget (QLabel, textLabel2_2) |
#: /home/andreas/sportwatcher/rc.cpp:612 |
#: /home/andreas/sportwatcher/rc.cpp:666 |
msgid "Add meters to latitude" |
msgstr "Meter zum Breitengrad hinzufügen" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:756 |
#. i18n: ectx: property (toolTip), widget (KIntSpinBox, edCorrX) |
#: /home/andreas/sportwatcher/rc.cpp:615 |
#: /home/andreas/sportwatcher/rc.cpp:669 |
msgid "Add some meters to longitude, to correct an error." |
msgstr "" |
"Meter zum Längengrad hinzufügen, um die Darstellung des Pfads mit der " |
1723,22 → 1926,37 |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:769 |
#. i18n: ectx: property (toolTip), widget (KIntSpinBox, edCorrY) |
#: /home/andreas/sportwatcher/rc.cpp:618 |
#: /home/andreas/sportwatcher/rc.cpp:672 |
msgid "Add some meters to latitude, to correct an error." |
msgstr "" |
"Meter zum Breitengrad hinzufügen, um die Darstellung des Pfads mit der " |
"Landkarte zu synchronisieren." |
#: /home/andreas/sportwatcher/rc.cpp:619 |
#: /home/andreas/sportwatcher/rc.cpp:673 |
msgctxt "NAME OF TRANSLATORS" |
msgid "Andreas Theofilu" |
msgstr "" |
#: /home/andreas/sportwatcher/rc.cpp:620 |
#: /home/andreas/sportwatcher/rc.cpp:674 |
msgctxt "EMAIL OF TRANSLATORS" |
msgid "andreas@theosys.at" |
msgstr "" |
#~ msgctxt "@title:menu" |
#~ msgid "&File" |
#~ msgstr "Datei" |
#~ msgctxt "@title:menu" |
#~ msgid "&Edit" |
#~ msgstr "Bearbeiten" |
#~ msgctxt "@title:menu" |
#~ msgid "Settings" |
#~ msgstr "Einstellungen" |
#~ msgid "Main Toolbar" |
#~ msgstr "Toolbar" |
#~ msgid "Help" |
#~ msgstr "Hilfe" |
1757,9 → 1975,6 |
#~ msgid "Altitude & Speed" |
#~ msgstr "Höhenprofil und Geschwindigkeit" |
#~ msgid "Laps" |
#~ msgstr "Runden" |
#~ msgid "Statistic of lap" |
#~ msgstr "Statistik der Runde" |
/sportwatcher/trunk/po/sportwatcher.pot |
---|
8,7 → 8,7 |
msgstr "" |
"Project-Id-Version: PACKAGE VERSION\n" |
"Report-Msgid-Bugs-To: http://www.theosys.at/sportwatcher\n" |
"POT-Creation-Date: 2009-07-24 18:33+0200\n" |
"POT-Creation-Date: 2009-09-11 08:45+0200\n" |
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" |
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" |
"Language-Team: LANGUAGE <LL@li.org>\n" |
16,72 → 16,72 |
"Content-Type: text/plain; charset=CHARSET\n" |
"Content-Transfer-Encoding: 8bit\n" |
#: /home/andreas/sportwatcher/libgant/gant.cpp:86 |
#: /home/andreas/sportwatcher/libgant/gant.cpp:89 |
msgid "Device %1 does not exist!" |
msgstr "" |
#: /home/andreas/sportwatcher/libgant/gant.cpp:92 |
#: /home/andreas/sportwatcher/libgant/gant.cpp:628 |
#: /home/andreas/sportwatcher/libgant/gant.cpp:95 |
#: /home/andreas/sportwatcher/libgant/gant.cpp:631 |
msgid "Error opening device %1." |
msgstr "" |
#: /home/andreas/sportwatcher/libgant/gant.cpp:142 |
#: /home/andreas/sportwatcher/libgant/gant.cpp:145 |
msgid "Error writing to device %1" |
msgstr "" |
#: /home/andreas/sportwatcher/libgant/gant.cpp:221 |
#: /home/andreas/sportwatcher/libgant/gant.cpp:224 |
msgid ">>buf<< too long!" |
msgstr "" |
#: /home/andreas/sportwatcher/libgant/gant.cpp:308 |
#: /home/andreas/sportwatcher/libgant/gant.cpp:311 |
msgid "rresponse buffer too small!" |
msgstr "" |
#: /home/andreas/sportwatcher/libgant/gant.cpp:325 |
#: /home/andreas/sportwatcher/libgant/gant.cpp:328 |
msgid "cresponse buffer too small!" |
msgstr "" |
#: /home/andreas/sportwatcher/libgant/gant.cpp:378 |
#: /home/andreas/sportwatcher/libgant/gant.cpp:381 |
msgid "Error getting terminal attributes!" |
msgstr "" |
#: /home/andreas/sportwatcher/libgant/gant.cpp:391 |
#: /home/andreas/sportwatcher/libgant/gant.cpp:394 |
msgid "Error setting input speed of line terminal!" |
msgstr "" |
#: /home/andreas/sportwatcher/libgant/gant.cpp:397 |
#: /home/andreas/sportwatcher/libgant/gant.cpp:400 |
msgid "Error setting output speed of line terminal!" |
msgstr "" |
#: /home/andreas/sportwatcher/libgant/gant.cpp:406 |
#: /home/andreas/sportwatcher/libgant/gant.cpp:409 |
msgid "Error setting terminal attributes!" |
msgstr "" |
#: /home/andreas/sportwatcher/libgant/gant.cpp:698 |
#: /home/andreas/sportwatcher/libgant/gant.cpp:701 |
msgid "There is no authfile available or it has wrong size!" |
msgstr "" |
#: /home/andreas/sportwatcher/libgant/gant.cpp:706 |
#: /home/andreas/sportwatcher/libgant/gant.cpp:709 |
msgid "Error reading auth file %1!" |
msgstr "" |
#: /home/andreas/sportwatcher/libgant/gant.cpp:880 |
#: /home/andreas/sportwatcher/libgant/gant.cpp:883 |
msgid "Failed to write to a temporary file!" |
msgstr "" |
#: /home/andreas/sportwatcher/libgant/gant.cpp:914 |
#: /home/andreas/sportwatcher/libgant/gant.cpp:917 |
msgid "Write to auth file %1 failed!" |
msgstr "" |
#: /home/andreas/sportwatcher/libgant/gant.cpp:1138 |
#: /home/andreas/sportwatcher/libgant/gant.cpp:1141 |
msgid "Error allocating %1 bytes of memory!" |
msgstr "" |
#: /home/andreas/sportwatcher/libgant/gant.cpp:1146 |
#: /home/andreas/sportwatcher/libgant/gant.cpp:1149 |
msgid "Error opening a temporary file for reading!" |
msgstr "" |
#: /home/andreas/sportwatcher/libgant/gant.cpp:1154 |
#: /home/andreas/sportwatcher/libgant/gant.cpp:1157 |
msgid "Error reading from a temporary file!" |
msgstr "" |
120,7 → 120,7 |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:16 |
#. i18n: ectx: property (windowTitle), widget (QWidget, sportwatcherWidgetBase) |
#: /home/andreas/sportwatcher/src/main.cpp:57 |
#: /home/andreas/sportwatcher/rc.cpp:288 |
#: /home/andreas/sportwatcher/rc.cpp:342 |
msgid "SportWatcher" |
msgstr "" |
129,7 → 129,7 |
msgstr "" |
#: /home/andreas/sportwatcher/src/main.cpp:60 |
#: /home/andreas/sportwatcher/src/main.cpp:62 |
#: /home/andreas/sportwatcher/src/main.cpp:63 |
msgid "Andreas Theofilu" |
msgstr "" |
142,6 → 142,10 |
msgstr "" |
#: /home/andreas/sportwatcher/src/main.cpp:62 |
msgid "Paul" |
msgstr "" |
#: /home/andreas/sportwatcher/src/main.cpp:63 |
msgid "andreas@theosys.at" |
msgstr "" |
261,250 → 265,355 |
msgid "Configure Map ..." |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:240 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:246 |
msgid "Error initializing some widgets of main window!" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:254 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:260 |
msgid "Not enough memory to initilize application!" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:262 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1291 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:268 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1841 |
msgid "Running" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:263 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1296 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:269 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1846 |
msgid "Biking" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:264 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1301 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:270 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1851 |
msgid "Others" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:271 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:277 |
msgid "\"Running\" activities." |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:272 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:278 |
msgid "\"Biking\" activities." |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:273 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:279 |
msgid "\"Other\" and \"Multisport\" activities." |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:626 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:901 |
msgid "This function is currently not implemented!" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:661 |
msgid "You must select an activity first!" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:650 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:689 |
msgid "Error initializing printer! Printing is currently not available!" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:742 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2424 |
msgid "Running: " |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:743 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2425 |
msgid "Biking: " |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:744 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2426 |
msgid "Other: " |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:746 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2428 |
msgid "Unknown: " |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:757 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1016 |
msgid "Lap" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:95 |
#. i18n: ectx: property (text), widget (K3ListView, liLaps) |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:576 |
#. i18n: ectx: property (text), widget (QTreeWidget, twLaps) |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:759 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1018 |
#: /home/andreas/sportwatcher/rc.cpp:363 /home/andreas/sportwatcher/rc.cpp:426 |
msgid "Distance" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:571 |
#. i18n: ectx: property (text), widget (QTreeWidget, twLaps) |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:761 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1020 |
#: /home/andreas/sportwatcher/rc.cpp:423 |
msgid "Time" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:481 |
#. i18n: ectx: property (text), widget (QLabel, label) |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:763 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1022 |
#: /home/andreas/sportwatcher/rc.cpp:417 |
msgid "Speed" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:467 |
#. i18n: ectx: property (text), widget (QLabel, label_4) |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:765 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1024 |
#: /home/andreas/sportwatcher/rc.cpp:411 |
msgid "Heart rate" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:767 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1026 |
msgid "Cadence" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:790 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2447 |
msgid "Error getting the last messure point!" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:999 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1055 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1156 |
msgid "Page %1" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1100 |
msgid "Heart rate:" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1121 |
msgid "Elevation:" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1138 |
msgid "Speed:" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1200 |
msgid "Currently no activity is selected!" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:662 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1212 |
msgid "The file %1 has no valid file extension!" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:670 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1469 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1220 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2019 |
msgid "Do you really want to overwrite this file?" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:699 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:922 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1050 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1249 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1472 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1600 |
msgid "No data to save!" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:705 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:930 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1058 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1255 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1480 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1608 |
msgid "" |
"Error creating file %1!\n" |
"Please check permissions" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:896 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1029 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1446 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1579 |
msgid "File " |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:896 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1029 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1446 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1579 |
msgid " was written successfully." |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1164 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1451 |
msgid "This function is currently not implemented!" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1714 |
msgid "File %1 was written successfully." |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1345 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1895 |
msgid "There is no session selected!" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1358 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1908 |
msgid "Rename session" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1358 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1908 |
msgid "Session name" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1360 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1910 |
msgid "Enter a new name for the currently selected activity." |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1381 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1931 |
msgid "editRename: Unexpected structure type %1 found!" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1389 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1939 |
msgid "editRename: The run node was not found!" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1450 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2000 |
msgid "There is no activity open" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1475 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2025 |
msgid "" |
"Error creating a file!\n" |
"Please check permissions." |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1696 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2246 |
msgid "File successfully written." |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1747 |
msgid "You have not choosen a WMS tag file!" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2315 |
msgid "This function was disabled at compile time because of missing Mapnik!" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1748 |
msgid "This dialog is especialy to set WMS specific parameters. " |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2316 |
msgid "SportWatcher needs Mapnik 0.6 or newer, to enable this function.\n" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1749 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2317 |
msgid "" |
"If you like this to be working, install Mapnik and recompile the source." |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2322 |
msgid "You have not choosen a WMS tag file or shape file directory!" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2323 |
msgid "This dialog is especialy to set map specific parameters. " |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2324 |
msgid "Therefore this dialog is temporary disabled. It will be " |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1750 |
msgid "available again, as soon as you choose \"WMS server\" as " |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2325 |
msgid "available again, as soon as you choose \"WMS server\" or " |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1751 |
msgid "your map type." |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2326 |
msgid "Shape file as your map type." |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1760 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2331 |
msgid "" |
"This function was disabled at compile time because of missing GDAL v1.5.x!" |
"This function was disabled at compile time because of missing GDAL v1.x.x!" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1761 |
msgid "Sportwatcher needs GDAL v1.5.x to enable this function.\n" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2332 |
msgid "Sportwatcher needs GDAL v1.5.x or newer, to enable this function.\n" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1762 |
msgid "" |
"If you like this to be working, install GDAL version 1.5.x and recompile the " |
"source!" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2333 |
msgid "If you like this to be working, install GDAL and recompile the source!" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1796 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2364 |
msgid "No data found!" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1802 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2370 |
msgid "Found unexpected data type %1!" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:1879 |
msgid "Error getting the last messure point!" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2592 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:3165 |
msgid "Not enough memory for a raster operation!" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2608 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:3181 |
msgid "Error reading a raster band!" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2740 |
msgid "There is no shape file in directory " |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:3314 |
msgid "There is no shape file in directory %1" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:2827 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:3347 |
msgid "The OSM file %1 does not exist!" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:3377 |
msgid "Error opening map file!" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:3219 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:3223 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:3956 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:3771 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:3775 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:4522 |
msgid "Elevation (ft)" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:3221 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:3234 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:3957 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:3773 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:3786 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:4523 |
msgid "Speed (mph)" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:3232 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:3955 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:3784 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:4521 |
msgid "Heart Rate (bpm)" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:4817 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:5386 |
msgid "" |
"Error opening or creating the WMS tag file!\n" |
"Please check file name and/or permissions." |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:4986 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:5555 |
msgid "Translation between coordinate systems failed!" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:5068 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:5106 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:5637 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:5675 |
msgid "Error opening an image file!" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:5079 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:5117 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:5648 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:5686 |
msgid "Error loading the TIFF driver!" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:5147 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:5716 |
msgid "Error setting projection on source!" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:5161 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:5730 |
msgid "Error setting geo transform data to source!" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:5171 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:5740 |
msgid "Error getting the projection reference" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:5195 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:5764 |
msgid "Error creating a temporary image file! (%1)" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:5210 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:5779 |
msgid "Error setting projection on destination!" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:5219 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:5788 |
msgid "Error setting geo transform data to destination!" |
msgstr "" |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:5272 |
#: /home/andreas/sportwatcher/src/sportwatcherwidget.cpp:5841 |
msgid "Error initializing warp operation!" |
msgstr "" |
594,8 → 703,8 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbSRS) |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:496 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbCRS) |
#: /home/andreas/sportwatcher/rc.cpp:45 /home/andreas/sportwatcher/rc.cpp:462 |
#: /home/andreas/sportwatcher/rc.cpp:570 |
#: /home/andreas/sportwatcher/rc.cpp:45 /home/andreas/sportwatcher/rc.cpp:516 |
#: /home/andreas/sportwatcher/rc.cpp:624 |
msgid "EPSG:4326" |
msgstr "" |
603,7 → 712,7 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbDate) |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:135 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbSRS) |
#: /home/andreas/sportwatcher/rc.cpp:48 /home/andreas/sportwatcher/rc.cpp:465 |
#: /home/andreas/sportwatcher/rc.cpp:48 /home/andreas/sportwatcher/rc.cpp:519 |
msgid "EPSG:31257" |
msgstr "" |
611,7 → 720,7 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbDate) |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:140 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbSRS) |
#: /home/andreas/sportwatcher/rc.cpp:51 /home/andreas/sportwatcher/rc.cpp:468 |
#: /home/andreas/sportwatcher/rc.cpp:51 /home/andreas/sportwatcher/rc.cpp:522 |
msgid "EPSG:31258" |
msgstr "" |
621,8 → 730,8 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbSRS) |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:501 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbCRS) |
#: /home/andreas/sportwatcher/rc.cpp:54 /home/andreas/sportwatcher/rc.cpp:471 |
#: /home/andreas/sportwatcher/rc.cpp:573 |
#: /home/andreas/sportwatcher/rc.cpp:54 /home/andreas/sportwatcher/rc.cpp:525 |
#: /home/andreas/sportwatcher/rc.cpp:627 |
msgid "EPSG:31259" |
msgstr "" |
630,7 → 739,7 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbDate) |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:150 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbSRS) |
#: /home/andreas/sportwatcher/rc.cpp:57 /home/andreas/sportwatcher/rc.cpp:474 |
#: /home/andreas/sportwatcher/rc.cpp:57 /home/andreas/sportwatcher/rc.cpp:528 |
msgid "EPSG:31286" |
msgstr "" |
640,8 → 749,8 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbSRS) |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:506 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbCRS) |
#: /home/andreas/sportwatcher/rc.cpp:60 /home/andreas/sportwatcher/rc.cpp:477 |
#: /home/andreas/sportwatcher/rc.cpp:576 |
#: /home/andreas/sportwatcher/rc.cpp:60 /home/andreas/sportwatcher/rc.cpp:531 |
#: /home/andreas/sportwatcher/rc.cpp:630 |
msgid "EPSG:31287" |
msgstr "" |
649,7 → 758,7 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbDate) |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:160 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbSRS) |
#: /home/andreas/sportwatcher/rc.cpp:63 /home/andreas/sportwatcher/rc.cpp:480 |
#: /home/andreas/sportwatcher/rc.cpp:63 /home/andreas/sportwatcher/rc.cpp:534 |
msgid "EPSG:31288" |
msgstr "" |
660,7 → 769,7 |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:87 |
#. i18n: ectx: property (text), widget (KPushButton, pbSave) |
#: /home/andreas/sportwatcher/rc.cpp:66 /home/andreas/sportwatcher/rc.cpp:186 |
#: /home/andreas/sportwatcher/rc.cpp:453 |
#: /home/andreas/sportwatcher/rc.cpp:507 |
msgid "Save" |
msgstr "" |
671,7 → 780,7 |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:29 |
#. i18n: ectx: property (text), widget (KPushButton, pbCancel) |
#: /home/andreas/sportwatcher/rc.cpp:69 /home/andreas/sportwatcher/rc.cpp:192 |
#: /home/andreas/sportwatcher/rc.cpp:447 |
#: /home/andreas/sportwatcher/rc.cpp:501 |
msgid "Cancel" |
msgstr "" |
819,7 → 928,7 |
#. i18n: ectx: property (text), widget (QLabel, textLabel2) |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:616 |
#. i18n: ectx: property (text), widget (QTreeWidget, twLaps) |
#: /home/andreas/sportwatcher/rc.cpp:141 /home/andreas/sportwatcher/rc.cpp:396 |
#: /home/andreas/sportwatcher/rc.cpp:141 /home/andreas/sportwatcher/rc.cpp:450 |
msgid "Max. heart rate" |
msgstr "" |
1016,164 → 1125,268 |
msgid "WMS Server (tag file)" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/settingswidgetbase.ui:637 |
#. i18n: file: /home/andreas/sportwatcher/src/settingswidgetbase.ui:634 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbMapType) |
#: /home/andreas/sportwatcher/rc.cpp:246 |
msgid "OSM Open Streetmap (file)" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/settingswidgetbase.ui:642 |
#. i18n: ectx: property (toolTip), widget (QCheckBox, cbSerial) |
#: /home/andreas/sportwatcher/rc.cpp:246 |
#: /home/andreas/sportwatcher/rc.cpp:249 |
msgid "" |
"In case you've an old Garmin device with a serial port, you can try this to " |
"get the data out of it." |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/settingswidgetbase.ui:640 |
#. i18n: file: /home/andreas/sportwatcher/src/settingswidgetbase.ui:645 |
#. i18n: ectx: property (text), widget (QCheckBox, cbSerial) |
#: /home/andreas/sportwatcher/rc.cpp:249 |
#: /home/andreas/sportwatcher/rc.cpp:252 |
msgid "Use serial port instead of USB port" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/settingswidgetbase.ui:650 |
#. i18n: file: /home/andreas/sportwatcher/src/settingswidgetbase.ui:655 |
#. i18n: ectx: property (toolTip), widget (QRadioButton, rbFr405) |
#: /home/andreas/sportwatcher/rc.cpp:252 |
#: /home/andreas/sportwatcher/rc.cpp:255 |
msgid "If you've a Garmin Forerunner 405, or compatible, check this." |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/settingswidgetbase.ui:653 |
#. i18n: file: /home/andreas/sportwatcher/src/settingswidgetbase.ui:658 |
#. i18n: ectx: property (text), widget (QRadioButton, rbFr405) |
#: /home/andreas/sportwatcher/rc.cpp:255 |
#: /home/andreas/sportwatcher/rc.cpp:258 |
msgid "Garmin Forerunner 405" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/settingswidgetbase.ui:660 |
#. i18n: file: /home/andreas/sportwatcher/src/settingswidgetbase.ui:665 |
#. i18n: ectx: property (toolTip), widget (QRadioButton, rbFr50) |
#: /home/andreas/sportwatcher/rc.cpp:258 |
#: /home/andreas/sportwatcher/rc.cpp:261 |
msgid "If you've a Garmin Forerunner 50, or compatible, check this." |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/settingswidgetbase.ui:663 |
#. i18n: file: /home/andreas/sportwatcher/src/settingswidgetbase.ui:668 |
#. i18n: ectx: property (text), widget (QRadioButton, rbFr50) |
#: /home/andreas/sportwatcher/rc.cpp:261 |
#: /home/andreas/sportwatcher/rc.cpp:264 |
msgid "Garmin Forerunner 50" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/settingswidgetbase.ui:670 |
#. i18n: file: /home/andreas/sportwatcher/src/settingswidgetbase.ui:675 |
#. i18n: ectx: property (toolTip), widget (KUrlComboRequester, cbDevice) |
#: /home/andreas/sportwatcher/rc.cpp:264 |
#: /home/andreas/sportwatcher/rc.cpp:267 |
msgid "" |
"Select the special device representing the serial device, where your Garmin " |
"is connected." |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/settingswidgetbase.ui:677 |
#. i18n: file: /home/andreas/sportwatcher/src/settingswidgetbase.ui:682 |
#. i18n: ectx: property (toolTip), widget (KUrlRequester, lnData) |
#: /home/andreas/sportwatcher/rc.cpp:267 |
#: /home/andreas/sportwatcher/rc.cpp:270 |
msgid "Enter the path where SportWatcher will store all the data." |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/settingswidgetbase.ui:684 |
#. i18n: file: /home/andreas/sportwatcher/src/settingswidgetbase.ui:689 |
#. i18n: ectx: property (toolTip), widget (KUrlRequester, lnHRM) |
#: /home/andreas/sportwatcher/rc.cpp:270 |
#: /home/andreas/sportwatcher/rc.cpp:273 |
msgid "In case you've a directory with Polar HRM files, enter it name here." |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/settingswidgetbase.ui:691 |
#. i18n: file: /home/andreas/sportwatcher/src/settingswidgetbase.ui:696 |
#. i18n: ectx: property (toolTip), widget (KUrlRequester, lnMapFile) |
#: /home/andreas/sportwatcher/rc.cpp:273 |
#: /home/andreas/sportwatcher/rc.cpp:276 |
msgid "" |
"Enter the path and name of the map file, or the name of the control file " |
"containing instructions for an external map server (WMS server, for example)." |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherui.rc:5 |
#. i18n: ectx: Menu (file) |
#: /home/andreas/sportwatcher/rc.cpp:276 |
msgctxt "@title:menu" |
msgid "&File" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherui.rc:17 |
#. i18n: ectx: Menu (edit) |
#. i18n: file: /home/andreas/sportwatcher/src/shapewidgetbase.ui:26 |
#. i18n: ectx: property (windowTitle), widget (QDialog, shapeWidgetBase) |
#: /home/andreas/sportwatcher/rc.cpp:279 |
msgctxt "@title:menu" |
msgid "&Edit" |
msgid "Shape file settings" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherui.rc:22 |
#. i18n: ectx: Menu (settings) |
#. i18n: file: /home/andreas/sportwatcher/src/shapewidgetbase.ui:33 |
#. i18n: ectx: property (toolTip), widget (QDialog, shapeWidgetBase) |
#: /home/andreas/sportwatcher/rc.cpp:282 |
msgctxt "@title:menu" |
msgid "Settings" |
msgid "Allows to set everything needed for a set of shape files" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherui.rc:31 |
#. i18n: ectx: ToolBar (mainToolBar) |
#. i18n: file: /home/andreas/sportwatcher/src/shapewidgetbase.ui:42 |
#. i18n: ectx: property (text), widget (QLabel, label) |
#: /home/andreas/sportwatcher/rc.cpp:285 |
msgid "Main Toolbar" |
msgid "Path to shape file set" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/shapewidgetbase.ui:49 |
#. i18n: ectx: property (toolTip), widget (KUrlRequester, edShapeFileSet) |
#: /home/andreas/sportwatcher/rc.cpp:288 |
msgid "" |
"This Line contains the path to the directory with the shape files, " |
"containing the map." |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/shapewidgetbase.ui:52 |
#. i18n: ectx: property (whatsThis), widget (KUrlRequester, edShapeFileSet) |
#: /home/andreas/sportwatcher/rc.cpp:291 |
msgid "An input line, containing the path to the shape files." |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/shapewidgetbase.ui:59 |
#. i18n: ectx: property (text), widget (QLabel, label_2) |
#: /home/andreas/sportwatcher/rc.cpp:294 |
msgid "Path to Mapnik plugin directory" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/shapewidgetbase.ui:66 |
#. i18n: ectx: property (toolTip), widget (KUrlRequester, edPluginPath) |
#: /home/andreas/sportwatcher/rc.cpp:297 |
msgid "Path to the directory containing the plugins for Mapnik." |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/shapewidgetbase.ui:69 |
#. i18n: ectx: property (whatsThis), widget (KUrlRequester, edPluginPath) |
#: /home/andreas/sportwatcher/rc.cpp:300 |
msgid "An edit line containing the path to the Mapnik plugin directory." |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/shapewidgetbase.ui:76 |
#. i18n: ectx: property (text), widget (QLabel, label_3) |
#: /home/andreas/sportwatcher/rc.cpp:303 |
msgid "Path to Mapnik font directory" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/shapewidgetbase.ui:83 |
#. i18n: ectx: property (toolTip), widget (KUrlRequester, edFontPath) |
#: /home/andreas/sportwatcher/rc.cpp:306 |
msgid "" |
"Contains the path to a font directory with true type fonts used to draw the " |
"labels of the map." |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/shapewidgetbase.ui:86 |
#. i18n: ectx: property (whatsThis), widget (KUrlRequester, edFontPath) |
#: /home/andreas/sportwatcher/rc.cpp:309 |
msgid "Input line containing the path to a font directory." |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/shapewidgetbase.ui:93 |
#. i18n: ectx: property (text), widget (QLabel, label_4) |
#: /home/andreas/sportwatcher/rc.cpp:312 |
msgid "Name and path to description file" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/shapewidgetbase.ui:100 |
#. i18n: ectx: property (toolTip), widget (KUrlRequester, edXmlFile) |
#: /home/andreas/sportwatcher/rc.cpp:315 |
msgid "" |
"Contains the file name of a file, describing the contents of the shape file." |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/shapewidgetbase.ui:103 |
#. i18n: ectx: property (whatsThis), widget (KUrlRequester, edXmlFile) |
#: /home/andreas/sportwatcher/rc.cpp:318 |
msgid "" |
"Input line containing the name of a file describing the contents of shape " |
"files." |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/shapewidgetbase.ui:110 |
#. i18n: ectx: property (text), widget (QLabel, label_5) |
#: /home/andreas/sportwatcher/rc.cpp:321 |
msgid "If map file is projected:" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/shapewidgetbase.ui:117 |
#. i18n: ectx: property (toolTip), widget (QRadioButton, rbForward) |
#: /home/andreas/sportwatcher/rc.cpp:324 |
msgid "Forward if mapfile is projected." |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/shapewidgetbase.ui:120 |
#. i18n: ectx: property (whatsThis), widget (QRadioButton, rbForward) |
#: /home/andreas/sportwatcher/rc.cpp:327 |
msgid "Makes a forward projection if the mapfile is projected." |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/shapewidgetbase.ui:123 |
#. i18n: ectx: property (text), widget (QRadioButton, rbForward) |
#: /home/andreas/sportwatcher/rc.cpp:330 |
msgid "Forwarded" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/shapewidgetbase.ui:153 |
#. i18n: ectx: property (toolTip), widget (QRadioButton, rbInverse) |
#: /home/andreas/sportwatcher/rc.cpp:333 |
msgid "Inverse if map file is geographic." |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/shapewidgetbase.ui:159 |
#. i18n: ectx: property (whatsThis), widget (QRadioButton, rbInverse) |
#: /home/andreas/sportwatcher/rc.cpp:336 |
msgid "Makes an inverse projection if the map file is geographic." |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/shapewidgetbase.ui:162 |
#. i18n: ectx: property (text), widget (QRadioButton, rbInverse) |
#: /home/andreas/sportwatcher/rc.cpp:339 |
msgid "Inversed" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:19 |
#. i18n: ectx: property (accessibleName), widget (QWidget, sportwatcherWidgetBase) |
#: /home/andreas/sportwatcher/rc.cpp:291 |
#: /home/andreas/sportwatcher/rc.cpp:345 |
msgid "sportwatcher" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:41 |
#. i18n: ectx: property (text), widget (QTreeWidget, liActivities) |
#: /home/andreas/sportwatcher/rc.cpp:294 |
#: /home/andreas/sportwatcher/rc.cpp:348 |
msgid "Activities" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:44 |
#. i18n: ectx: property (toolTip), widget (QTreeWidget, liActivities) |
#: /home/andreas/sportwatcher/rc.cpp:297 |
#: /home/andreas/sportwatcher/rc.cpp:351 |
msgid "Saved activities, separated into run, bike and other activities." |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:47 |
#. i18n: ectx: property (whatsThis), widget (QTreeWidget, liActivities) |
#: /home/andreas/sportwatcher/rc.cpp:300 |
#: /home/andreas/sportwatcher/rc.cpp:354 |
msgid "Shows all saved activities." |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:65 |
#. i18n: ectx: attribute (title), widget (QWidget, tabSummary) |
#: /home/andreas/sportwatcher/rc.cpp:303 |
#: /home/andreas/sportwatcher/rc.cpp:357 |
msgid "Summary" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:84 |
#. i18n: ectx: property (text), widget (K3ListView, liLaps) |
#: /home/andreas/sportwatcher/rc.cpp:306 |
#: /home/andreas/sportwatcher/rc.cpp:360 |
msgid "Name" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:95 |
#. i18n: ectx: property (text), widget (K3ListView, liLaps) |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:576 |
#. i18n: ectx: property (text), widget (QTreeWidget, twLaps) |
#: /home/andreas/sportwatcher/rc.cpp:309 /home/andreas/sportwatcher/rc.cpp:372 |
msgid "Distance" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:106 |
#. i18n: ectx: property (text), widget (K3ListView, liLaps) |
#: /home/andreas/sportwatcher/rc.cpp:312 |
#: /home/andreas/sportwatcher/rc.cpp:366 |
msgid "Elapsed Time" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:117 |
#. i18n: ectx: property (text), widget (K3ListView, liLaps) |
#: /home/andreas/sportwatcher/rc.cpp:315 |
#: /home/andreas/sportwatcher/rc.cpp:369 |
msgid "Avg Pace" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:128 |
#. i18n: ectx: property (text), widget (K3ListView, liLaps) |
#: /home/andreas/sportwatcher/rc.cpp:318 |
#: /home/andreas/sportwatcher/rc.cpp:372 |
msgid "Avg Speed" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:139 |
#. i18n: ectx: property (text), widget (K3ListView, liLaps) |
#: /home/andreas/sportwatcher/rc.cpp:321 |
#: /home/andreas/sportwatcher/rc.cpp:375 |
msgid "Max Speed" |
msgstr "" |
1181,277 → 1394,259 |
#. i18n: ectx: property (text), widget (K3ListView, liLaps) |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:606 |
#. i18n: ectx: property (text), widget (QTreeWidget, twLaps) |
#: /home/andreas/sportwatcher/rc.cpp:324 /home/andreas/sportwatcher/rc.cpp:390 |
#: /home/andreas/sportwatcher/rc.cpp:378 /home/andreas/sportwatcher/rc.cpp:444 |
msgid "Calories" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:161 |
#. i18n: ectx: property (text), widget (K3ListView, liLaps) |
#: /home/andreas/sportwatcher/rc.cpp:327 |
#: /home/andreas/sportwatcher/rc.cpp:381 |
msgid "Avg Heart Rate" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:172 |
#. i18n: ectx: property (text), widget (K3ListView, liLaps) |
#: /home/andreas/sportwatcher/rc.cpp:330 |
#: /home/andreas/sportwatcher/rc.cpp:384 |
msgid "Max Heart Rate" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:183 |
#. i18n: ectx: property (text), widget (K3ListView, liLaps) |
#: /home/andreas/sportwatcher/rc.cpp:333 |
#: /home/andreas/sportwatcher/rc.cpp:387 |
msgid "Avg Cadence" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:194 |
#. i18n: ectx: property (text), widget (K3ListView, liLaps) |
#: /home/andreas/sportwatcher/rc.cpp:336 |
#: /home/andreas/sportwatcher/rc.cpp:390 |
msgid "Ascent" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:205 |
#. i18n: ectx: property (text), widget (K3ListView, liLaps) |
#: /home/andreas/sportwatcher/rc.cpp:339 |
#: /home/andreas/sportwatcher/rc.cpp:393 |
msgid "Descent" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:368 |
#. i18n: ectx: property (text), item, widget (KComboBox, kcbCurveTypes) |
#: /home/andreas/sportwatcher/rc.cpp:342 |
#: /home/andreas/sportwatcher/rc.cpp:396 |
msgid "Altitude & heart rate" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:373 |
#. i18n: ectx: property (text), item, widget (KComboBox, kcbCurveTypes) |
#: /home/andreas/sportwatcher/rc.cpp:345 |
#: /home/andreas/sportwatcher/rc.cpp:399 |
msgid "Speed & heart rate" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:378 |
#. i18n: ectx: property (text), item, widget (KComboBox, kcbCurveTypes) |
#: /home/andreas/sportwatcher/rc.cpp:348 |
#: /home/andreas/sportwatcher/rc.cpp:402 |
msgid "Altitude & speed" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:441 |
#. i18n: ectx: attribute (title), widget (QWidget, tabMap) |
#: /home/andreas/sportwatcher/rc.cpp:351 |
#: /home/andreas/sportwatcher/rc.cpp:405 |
msgid "Map" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:461 |
#. i18n: ectx: attribute (title), widget (QWidget, tabHR) |
#: /home/andreas/sportwatcher/rc.cpp:354 |
#: /home/andreas/sportwatcher/rc.cpp:408 |
msgid "HR / Speed" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:467 |
#. i18n: ectx: property (text), widget (QLabel, label_4) |
#: /home/andreas/sportwatcher/rc.cpp:357 |
msgid "Heart rate" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:474 |
#. i18n: ectx: property (text), widget (QLabel, label_2) |
#: /home/andreas/sportwatcher/rc.cpp:360 |
#: /home/andreas/sportwatcher/rc.cpp:414 |
msgid "Elevation" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:481 |
#. i18n: ectx: property (text), widget (QLabel, label) |
#: /home/andreas/sportwatcher/rc.cpp:363 |
msgid "Speed" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:564 |
#. i18n: ectx: attribute (title), widget (QWidget, tabLap) |
#: /home/andreas/sportwatcher/rc.cpp:366 |
#: /home/andreas/sportwatcher/rc.cpp:420 |
msgid "Lap details" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:571 |
#. i18n: ectx: property (text), widget (QTreeWidget, twLaps) |
#: /home/andreas/sportwatcher/rc.cpp:369 |
msgid "Time" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:581 |
#. i18n: ectx: property (text), widget (QTreeWidget, twLaps) |
#: /home/andreas/sportwatcher/rc.cpp:375 |
#: /home/andreas/sportwatcher/rc.cpp:429 |
msgid "Tot. Distance" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:586 |
#. i18n: ectx: property (text), widget (QTreeWidget, twLaps) |
#: /home/andreas/sportwatcher/rc.cpp:378 |
#: /home/andreas/sportwatcher/rc.cpp:432 |
msgid "Pace" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:591 |
#. i18n: ectx: property (text), widget (QTreeWidget, twLaps) |
#: /home/andreas/sportwatcher/rc.cpp:381 |
#: /home/andreas/sportwatcher/rc.cpp:435 |
msgid "Avg. Pace" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:596 |
#. i18n: ectx: property (text), widget (QTreeWidget, twLaps) |
#: /home/andreas/sportwatcher/rc.cpp:384 |
#: /home/andreas/sportwatcher/rc.cpp:438 |
msgid "Avg. Speed" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:601 |
#. i18n: ectx: property (text), widget (QTreeWidget, twLaps) |
#: /home/andreas/sportwatcher/rc.cpp:387 |
#: /home/andreas/sportwatcher/rc.cpp:441 |
msgid "Max. Speed" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:611 |
#. i18n: ectx: property (text), widget (QTreeWidget, twLaps) |
#: /home/andreas/sportwatcher/rc.cpp:393 |
#: /home/andreas/sportwatcher/rc.cpp:447 |
msgid "Avg. heart rate" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:621 |
#. i18n: ectx: property (text), widget (QTreeWidget, twLaps) |
#: /home/andreas/sportwatcher/rc.cpp:399 |
#: /home/andreas/sportwatcher/rc.cpp:453 |
msgid "Avg. Cadence" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:626 |
#. i18n: ectx: property (text), widget (QTreeWidget, twLaps) |
#: /home/andreas/sportwatcher/rc.cpp:402 |
#: /home/andreas/sportwatcher/rc.cpp:456 |
msgid "Up" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:643 |
#. i18n: ectx: property (text), widget (QLabel, label_3) |
#: /home/andreas/sportwatcher/rc.cpp:405 |
#: /home/andreas/sportwatcher/rc.cpp:459 |
msgid "Total distance" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:670 |
#. i18n: ectx: property (text), widget (QLabel, label_9) |
#: /home/andreas/sportwatcher/rc.cpp:408 |
#: /home/andreas/sportwatcher/rc.cpp:462 |
msgid "Distance of lap" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:680 |
#. i18n: ectx: property (text), widget (QLabel, label_5) |
#: /home/andreas/sportwatcher/rc.cpp:411 |
#: /home/andreas/sportwatcher/rc.cpp:465 |
msgid "Total time" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:707 |
#. i18n: ectx: property (text), widget (QLabel, label_10) |
#: /home/andreas/sportwatcher/rc.cpp:414 |
#: /home/andreas/sportwatcher/rc.cpp:468 |
msgid "Time of lap" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:717 |
#. i18n: ectx: property (text), widget (QLabel, label_6) |
#: /home/andreas/sportwatcher/rc.cpp:417 |
#: /home/andreas/sportwatcher/rc.cpp:471 |
msgid "Average speed" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:744 |
#. i18n: ectx: property (text), widget (QLabel, label_11) |
#: /home/andreas/sportwatcher/rc.cpp:420 |
#: /home/andreas/sportwatcher/rc.cpp:474 |
msgid "Average speed of lap" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:754 |
#. i18n: ectx: property (text), widget (QLabel, label_7) |
#: /home/andreas/sportwatcher/rc.cpp:423 |
#: /home/andreas/sportwatcher/rc.cpp:477 |
msgid "Total height" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:781 |
#. i18n: ectx: property (text), widget (QLabel, label_12) |
#: /home/andreas/sportwatcher/rc.cpp:426 |
#: /home/andreas/sportwatcher/rc.cpp:480 |
msgid "Total height of lap" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:791 |
#. i18n: ectx: property (text), widget (QLabel, label_8) |
#: /home/andreas/sportwatcher/rc.cpp:429 |
#: /home/andreas/sportwatcher/rc.cpp:483 |
msgid "Average heart rate" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:818 |
#. i18n: ectx: property (text), widget (QLabel, label_13) |
#: /home/andreas/sportwatcher/rc.cpp:432 |
#: /home/andreas/sportwatcher/rc.cpp:486 |
msgid "Average heart rate of lap" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:828 |
#. i18n: ectx: property (text), widget (QLabel, label_14) |
#: /home/andreas/sportwatcher/rc.cpp:435 |
#: /home/andreas/sportwatcher/rc.cpp:489 |
msgid "Number laps" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/sportwatcherwidgetbase.ui:851 |
#. i18n: ectx: property (text), widget (QLabel, label_15) |
#: /home/andreas/sportwatcher/rc.cpp:438 |
#: /home/andreas/sportwatcher/rc.cpp:492 |
msgid "Actual lap number" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:14 |
#. i18n: ectx: property (windowTitle), widget (QDialog, wmsWidgetBase) |
#: /home/andreas/sportwatcher/rc.cpp:441 |
#: /home/andreas/sportwatcher/rc.cpp:495 |
msgid "WMS" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:26 |
#. i18n: ectx: property (toolTip), widget (KPushButton, pbCancel) |
#: /home/andreas/sportwatcher/rc.cpp:444 |
#: /home/andreas/sportwatcher/rc.cpp:498 |
msgid "Click this to cancel all made settings and close this dialog." |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:84 |
#. i18n: ectx: property (toolTip), widget (KPushButton, pbSave) |
#: /home/andreas/sportwatcher/rc.cpp:450 |
#: /home/andreas/sportwatcher/rc.cpp:504 |
msgid "Click this to save all settings." |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:97 |
#. i18n: ectx: property (title), widget (Q3GroupBox, groupBox1) |
#: /home/andreas/sportwatcher/rc.cpp:456 |
#: /home/andreas/sportwatcher/rc.cpp:510 |
msgid "Server settings" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:119 |
#. i18n: ectx: property (text), widget (QLabel, textLabel6) |
#: /home/andreas/sportwatcher/rc.cpp:459 |
#: /home/andreas/sportwatcher/rc.cpp:513 |
msgid "Depth" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:168 |
#. i18n: ectx: property (text), widget (QLabel, textLabel7) |
#: /home/andreas/sportwatcher/rc.cpp:483 |
#: /home/andreas/sportwatcher/rc.cpp:537 |
msgid "Styles" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:178 |
#. i18n: ectx: property (text), widget (QLabel, textLabel11) |
#: /home/andreas/sportwatcher/rc.cpp:486 |
#: /home/andreas/sportwatcher/rc.cpp:540 |
msgid "Version" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:188 |
#. i18n: ectx: property (toolTip), widget (KLineEdit, edLayer) |
#: /home/andreas/sportwatcher/rc.cpp:489 |
#: /home/andreas/sportwatcher/rc.cpp:543 |
msgid "If you need or want to specify layers, do it here." |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:211 |
#. i18n: ectx: property (text), widget (QLabel, textLabel8) |
#: /home/andreas/sportwatcher/rc.cpp:492 |
#: /home/andreas/sportwatcher/rc.cpp:546 |
msgid "Overview count" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:221 |
#. i18n: ectx: property (toolTip), widget (KLineEdit, edStyles) |
#: /home/andreas/sportwatcher/rc.cpp:495 |
#: /home/andreas/sportwatcher/rc.cpp:549 |
msgid "" |
"In case you've entered layers, you must enter one style for every layer!" |
msgstr "" |
1458,181 → 1653,181 |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:228 |
#. i18n: ectx: property (text), widget (QLabel, textLabel12) |
#: /home/andreas/sportwatcher/rc.cpp:498 |
#: /home/andreas/sportwatcher/rc.cpp:552 |
msgid "Image format" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:322 |
#. i18n: ectx: property (toolTip), widget (KComboBox, cbVersion) |
#: /home/andreas/sportwatcher/rc.cpp:501 |
#: /home/andreas/sportwatcher/rc.cpp:555 |
msgid "The version of the WMS server. This defines the used protocol." |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:326 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbVersion) |
#: /home/andreas/sportwatcher/rc.cpp:504 |
#: /home/andreas/sportwatcher/rc.cpp:558 |
msgid "1.1.1" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:331 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbVersion) |
#: /home/andreas/sportwatcher/rc.cpp:507 |
#: /home/andreas/sportwatcher/rc.cpp:561 |
msgid "1.1" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:336 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbVersion) |
#: /home/andreas/sportwatcher/rc.cpp:510 |
#: /home/andreas/sportwatcher/rc.cpp:564 |
msgid "1" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:344 |
#. i18n: ectx: property (text), widget (QLabel, textLabel3) |
#: /home/andreas/sportwatcher/rc.cpp:513 |
#: /home/andreas/sportwatcher/rc.cpp:567 |
msgid "SRS" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:354 |
#. i18n: ectx: property (text), widget (QLabel, textLabel2) |
#: /home/andreas/sportwatcher/rc.cpp:516 |
#: /home/andreas/sportwatcher/rc.cpp:570 |
msgid "Layer Name" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:367 |
#. i18n: ectx: property (toolTip), widget (KUrlRequester, edServerURL) |
#: /home/andreas/sportwatcher/rc.cpp:519 |
#: /home/andreas/sportwatcher/rc.cpp:573 |
msgid "Enter the URL to the WMS server." |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:374 |
#. i18n: ectx: property (text), widget (QLabel, textLabel1) |
#: /home/andreas/sportwatcher/rc.cpp:522 |
#: /home/andreas/sportwatcher/rc.cpp:576 |
msgid "Server URL" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:400 |
#. i18n: ectx: property (toolTip), widget (KComboBox, cbTile) |
#: /home/andreas/sportwatcher/rc.cpp:525 |
#: /home/andreas/sportwatcher/rc.cpp:579 |
msgid "The size of the tiles you want. The performance depends on this." |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:407 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbTile) |
#: /home/andreas/sportwatcher/rc.cpp:528 |
#: /home/andreas/sportwatcher/rc.cpp:582 |
msgid "64x64" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:412 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbTile) |
#: /home/andreas/sportwatcher/rc.cpp:531 |
#: /home/andreas/sportwatcher/rc.cpp:585 |
msgid "128x128" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:417 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbTile) |
#: /home/andreas/sportwatcher/rc.cpp:534 |
#: /home/andreas/sportwatcher/rc.cpp:588 |
msgid "256x256" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:422 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbTile) |
#: /home/andreas/sportwatcher/rc.cpp:537 |
#: /home/andreas/sportwatcher/rc.cpp:591 |
msgid "512x512" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:427 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbTile) |
#: /home/andreas/sportwatcher/rc.cpp:540 |
#: /home/andreas/sportwatcher/rc.cpp:594 |
msgid "1024x1024" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:435 |
#. i18n: ectx: property (text), widget (QLabel, textLabel5) |
#: /home/andreas/sportwatcher/rc.cpp:543 |
#: /home/andreas/sportwatcher/rc.cpp:597 |
msgid "Tile size" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:445 |
#. i18n: ectx: property (toolTip), widget (KComboBox, cbImage) |
#: /home/andreas/sportwatcher/rc.cpp:546 |
#: /home/andreas/sportwatcher/rc.cpp:600 |
msgid "The grafic format the server returns." |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:452 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbImage) |
#: /home/andreas/sportwatcher/rc.cpp:549 |
#: /home/andreas/sportwatcher/rc.cpp:603 |
msgid "GIF" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:457 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbImage) |
#: /home/andreas/sportwatcher/rc.cpp:552 |
#: /home/andreas/sportwatcher/rc.cpp:606 |
msgid "JPEG" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:462 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbImage) |
#: /home/andreas/sportwatcher/rc.cpp:555 |
#: /home/andreas/sportwatcher/rc.cpp:609 |
msgid "PNG" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:467 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbImage) |
#: /home/andreas/sportwatcher/rc.cpp:558 |
#: /home/andreas/sportwatcher/rc.cpp:612 |
msgid "TIFF" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:475 |
#. i18n: ectx: property (text), widget (QLabel, textLabel4) |
#: /home/andreas/sportwatcher/rc.cpp:561 |
#: /home/andreas/sportwatcher/rc.cpp:615 |
msgid "Bands" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:486 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbCRS) |
#: /home/andreas/sportwatcher/rc.cpp:564 |
#: /home/andreas/sportwatcher/rc.cpp:618 |
msgid "CRS:83" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:491 |
#. i18n: ectx: property (text), item, widget (KComboBox, cbCRS) |
#: /home/andreas/sportwatcher/rc.cpp:567 |
#: /home/andreas/sportwatcher/rc.cpp:621 |
msgid "CRS:84" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:514 |
#. i18n: ectx: property (text), widget (QLabel, textLabel9) |
#: /home/andreas/sportwatcher/rc.cpp:579 |
#: /home/andreas/sportwatcher/rc.cpp:633 |
msgid "CRS" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:540 |
#. i18n: ectx: property (toolTip), widget (KIntSpinBox, edBands) |
#: /home/andreas/sportwatcher/rc.cpp:582 |
#: /home/andreas/sportwatcher/rc.cpp:636 |
msgid "Set the number of bands the server returns (mostly 3 or 4)." |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:556 |
#. i18n: ectx: property (title), widget (Q3GroupBox, groupBox2) |
#: /home/andreas/sportwatcher/rc.cpp:585 |
#: /home/andreas/sportwatcher/rc.cpp:639 |
msgid "Read modes" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:562 |
#. i18n: ectx: property (toolTip), widget (QCheckBox, chOffline) |
#: /home/andreas/sportwatcher/rc.cpp:588 |
#: /home/andreas/sportwatcher/rc.cpp:642 |
msgid "Check this if you don't want to get maps online." |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:565 |
#. i18n: ectx: property (text), widget (QCheckBox, chOffline) |
#: /home/andreas/sportwatcher/rc.cpp:591 |
#: /home/andreas/sportwatcher/rc.cpp:645 |
msgid "Offline mode" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:572 |
#. i18n: ectx: property (toolTip), widget (QCheckBox, chSquare) |
#: /home/andreas/sportwatcher/rc.cpp:594 |
#: /home/andreas/sportwatcher/rc.cpp:648 |
msgid "" |
"In rare cases, a WMS server is not able to convert the map into the right " |
"dimensions. Then this may help." |
1640,58 → 1835,58 |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:575 |
#. i18n: ectx: property (text), widget (QCheckBox, chSquare) |
#: /home/andreas/sportwatcher/rc.cpp:597 |
#: /home/andreas/sportwatcher/rc.cpp:651 |
msgid "WMS Server uses square pixels" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:582 |
#. i18n: ectx: property (text), widget (QCheckBox, chAdvice) |
#: /home/andreas/sportwatcher/rc.cpp:600 |
#: /home/andreas/sportwatcher/rc.cpp:654 |
msgid "Advise read" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:653 |
#. i18n: ectx: property (text), widget (QCheckBox, chVerify) |
#: /home/andreas/sportwatcher/rc.cpp:603 |
#: /home/andreas/sportwatcher/rc.cpp:657 |
msgid "Verify advise read" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:730 |
#. i18n: ectx: property (title), widget (Q3GroupBox, groupBox3) |
#: /home/andreas/sportwatcher/rc.cpp:606 |
#: /home/andreas/sportwatcher/rc.cpp:660 |
msgid "Manual corrections" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:736 |
#. i18n: ectx: property (text), widget (QLabel, textLabel1_2) |
#: /home/andreas/sportwatcher/rc.cpp:609 |
#: /home/andreas/sportwatcher/rc.cpp:663 |
msgid "Add meters to longitude" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:746 |
#. i18n: ectx: property (text), widget (QLabel, textLabel2_2) |
#: /home/andreas/sportwatcher/rc.cpp:612 |
#: /home/andreas/sportwatcher/rc.cpp:666 |
msgid "Add meters to latitude" |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:756 |
#. i18n: ectx: property (toolTip), widget (KIntSpinBox, edCorrX) |
#: /home/andreas/sportwatcher/rc.cpp:615 |
#: /home/andreas/sportwatcher/rc.cpp:669 |
msgid "Add some meters to longitude, to correct an error." |
msgstr "" |
#. i18n: file: /home/andreas/sportwatcher/src/wmswidgetbase.ui:769 |
#. i18n: ectx: property (toolTip), widget (KIntSpinBox, edCorrY) |
#: /home/andreas/sportwatcher/rc.cpp:618 |
#: /home/andreas/sportwatcher/rc.cpp:672 |
msgid "Add some meters to latitude, to correct an error." |
msgstr "" |
#: /home/andreas/sportwatcher/rc.cpp:619 |
#: /home/andreas/sportwatcher/rc.cpp:673 |
msgctxt "NAME OF TRANSLATORS" |
msgid "Andreas Theofilu" |
msgstr "" |
#: /home/andreas/sportwatcher/rc.cpp:620 |
#: /home/andreas/sportwatcher/rc.cpp:674 |
msgctxt "EMAIL OF TRANSLATORS" |
msgid "andreas@theosys.at" |
msgstr "" |