Merge branch 'master' of github.com:osmandapp/Osmand
This commit is contained in:
commit
18a728b087
33 changed files with 1378 additions and 844 deletions
|
@ -121,7 +121,7 @@
|
|||
android:visibility="gone"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/add_point_after_text"
|
||||
android:id="@+id/add_point_before_after_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerVertical="true"
|
||||
|
@ -131,22 +131,7 @@
|
|||
android:layout_marginStart="8dp"
|
||||
android:layout_toEndOf="@id/main_icon"
|
||||
android:layout_toRightOf="@id/main_icon"
|
||||
android:text="@string/add_point_after"
|
||||
android:textAppearance="@style/TextAppearance.ListItemTitle"
|
||||
android:visibility="gone"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/add_point_before_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_marginEnd="4dp"
|
||||
android:layout_marginLeft="8dp"
|
||||
android:layout_marginRight="4dp"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_toEndOf="@id/main_icon"
|
||||
android:layout_toRightOf="@id/main_icon"
|
||||
android:text="@string/add_point_before"
|
||||
tools:text="@string/add_point_before"
|
||||
android:textAppearance="@style/TextAppearance.ListItemTitle"
|
||||
android:visibility="gone"/>
|
||||
</RelativeLayout>
|
||||
|
|
|
@ -116,7 +116,7 @@
|
|||
android:visibility="gone"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/add_point_after_text"
|
||||
android:id="@+id/add_point_before_after_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerVertical="true"
|
||||
|
@ -126,22 +126,7 @@
|
|||
android:layout_marginStart="8dp"
|
||||
android:layout_toEndOf="@id/main_icon"
|
||||
android:layout_toRightOf="@id/main_icon"
|
||||
android:text="@string/add_point_after"
|
||||
android:textAppearance="@style/TextAppearance.ListItemTitle"
|
||||
android:visibility="gone"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/add_point_before_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_marginEnd="4dp"
|
||||
android:layout_marginLeft="8dp"
|
||||
android:layout_marginRight="4dp"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_toEndOf="@id/main_icon"
|
||||
android:layout_toRightOf="@id/main_icon"
|
||||
android:text="@string/add_point_before"
|
||||
tools:text="@string/add_point_after"
|
||||
android:textAppearance="@style/TextAppearance.ListItemTitle"
|
||||
android:visibility="gone"/>
|
||||
</RelativeLayout>
|
||||
|
|
|
@ -52,15 +52,42 @@
|
|||
android:textAppearance="@style/TextAppearance.ListItemTitle"
|
||||
tools:text="Point 2"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/selected_point_distance"
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:maxLines="1"
|
||||
android:textAppearance="@style/TextAppearance.ListItemTitle"
|
||||
android:textColor="?android:textColorSecondary"
|
||||
android:textSize="@dimen/default_list_text_size"
|
||||
tools:text="386 m"/>
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/selected_point_distance"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:maxLines="1"
|
||||
android:textAppearance="@style/TextAppearance.ListItemTitle"
|
||||
android:textColor="?android:textColorSecondary"
|
||||
android:textSize="@dimen/default_list_text_size"
|
||||
tools:text="386 m"/>
|
||||
|
||||
<android.support.v7.widget.AppCompatTextView
|
||||
android:maxLines="1"
|
||||
android:id="@+id/selected_point_ele"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textAppearance="@style/TextAppearance.ListItemTitle"
|
||||
android:textColor="?android:textColorSecondary"
|
||||
android:textSize="@dimen/default_list_text_size"
|
||||
android:layout_marginLeft="8dp"
|
||||
android:layout_marginRight="8dp"
|
||||
tools:text="Altitude: 345 m"/>
|
||||
|
||||
<android.support.v7.widget.AppCompatTextView
|
||||
android:maxLines="1"
|
||||
android:id="@+id/selected_point_speed"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textAppearance="@style/TextAppearance.ListItemTitle"
|
||||
android:textColor="?android:textColorSecondary"
|
||||
android:textSize="@dimen/default_list_text_size"
|
||||
tools:text="Speed: 45 km/h"/>
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
|
||||
</RelativeLayout>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<string name="poi_shop">wobchod</string>
|
||||
<string name="poi_shop_food">žiwidłowy wobchod</string>
|
||||
<string name="poi_shop_food">žiwidłowy wobchod a superwiki</string>
|
||||
<string name="poi_emergency">nuzowy pad</string>
|
||||
<string name="poi_public_transport">zjawny transport</string>
|
||||
<string name="poi_hiking_routes">pućowanske šćežki</string>
|
||||
|
@ -72,7 +72,7 @@
|
|||
<string name="poi_charity">Secondhand-wobchod</string>
|
||||
<string name="poi_chemist">Drogerija</string>
|
||||
<string name="poi_clothes">Drasty</string>
|
||||
<string name="poi_clothes_children">Dźěćace drasty</string>
|
||||
<string name="poi_clothes_children">dźěćace drasty</string>
|
||||
<string name="poi_shoes">Črije</string>
|
||||
<string name="poi_candles">Swěčki</string>
|
||||
<string name="poi_computer">Kompjuterowy wobchod</string>
|
||||
|
@ -128,4 +128,304 @@
|
|||
<string name="poi_tyres">Wobručowy wobchod</string>
|
||||
<string name="poi_vacuum_cleaner">Prochsrěbaki</string>
|
||||
<string name="poi_variety_store">Tuni wobchod</string>
|
||||
</resources>
|
||||
<string name="poi_payment_type">Wašnje zapłaćenja</string>
|
||||
<string name="poi_additional_type">Přidatne</string>
|
||||
<string name="poi_internet_access_type">Wašnje přistupa do interneta</string>
|
||||
<string name="poi_bicycle_service">Kolesowarski serwis</string>
|
||||
<string name="poi_payment_toll_type">Wašnje zapłaćenja</string>
|
||||
<string name="poi_traffic_signals_sound">Zwuk</string>
|
||||
<string name="poi_subway_station_filter">Zastanišćo metra</string>
|
||||
<string name="poi_pump">Klumpa</string>
|
||||
<string name="poi_city_capital">Stolica</string>
|
||||
<string name="poi_religion_type">Nabožina</string>
|
||||
<string name="poi_denomination">Konfesija</string>
|
||||
<string name="poi_information_contents">Wobsahi</string>
|
||||
<string name="poi_scout_camp">Skawtske lěhwo</string>
|
||||
<string name="poi_theatre_genre">Žanr</string>
|
||||
<string name="poi_recycling_cds">cejdejki</string>
|
||||
<string name="poi_recycling_waste_oil">stary wolij</string>
|
||||
<string name="poi_recycling_bottles">bleše</string>
|
||||
<string name="poi_recycling_cork">kork</string>
|
||||
<string name="poi_recycling_printer_cartridges">ćišćakowe patrony</string>
|
||||
<string name="poi_recycling_foil">folija</string>
|
||||
<string name="poi_recycling_paint">barba</string>
|
||||
<string name="poi_recycling_styrofoam">styropor</string>
|
||||
<string name="poi_recycling_drugs">lěki</string>
|
||||
<string name="poi_recycling_compost">kompost</string>
|
||||
<string name="poi_recycling_christmas_trees">hodowne štomy</string>
|
||||
<string name="poi_recycling_light_bulbs">žehlawki</string>
|
||||
<string name="poi_recycling_polyester">polyester</string>
|
||||
<string name="poi_recycling_plasterboard">sadrowy karton</string>
|
||||
<string name="poi_recycling_animal_waste">zwěrjace smjeće</string>
|
||||
<string name="poi_recycling_fridge_and_freezer">chłódźak</string>
|
||||
<string name="poi_recycling_furniture">meble</string>
|
||||
<string name="poi_recycling_diapers">pjelchi</string>
|
||||
<string name="poi_recycling_car_batteries">awtowe baterije</string>
|
||||
<string name="poi_recycling_cars">awta</string>
|
||||
<string name="poi_recycling_bicycles">kolesa</string>
|
||||
|
||||
<string name="poi_landfill">deponija</string>
|
||||
<string name="poi_landfill_waste_nuclear">nuklearne wotpadki</string>
|
||||
<string name="poi_waste_basket">smjećnik</string>
|
||||
|
||||
<string name="poi_residential">bydlenska kónčina</string>
|
||||
<string name="poi_industrial">industrijowy areal</string>
|
||||
<string name="poi_landuse_railway">železniski areal</string>
|
||||
<string name="poi_commercial">komercielny areal</string>
|
||||
<string name="poi_quarry">skała</string>
|
||||
<string name="poi_vineyard">winica</string>
|
||||
<string name="poi_orchard">sadnica</string>
|
||||
<string name="poi_allotments">zahrodkownišćo</string>
|
||||
<string name="poi_forest">hajina</string>
|
||||
<string name="poi_farmyard">statok</string>
|
||||
<string name="poi_meadow">łuka</string>
|
||||
<string name="poi_basin">basenk</string>
|
||||
|
||||
<string name="poi_canal">kanal</string>
|
||||
<string name="poi_pier">pier</string>
|
||||
<string name="poi_surveillance">dohladowanje</string>
|
||||
<string name="poi_observatory">obserwatorij</string>
|
||||
<string name="poi_astronomical_observatory">astronomiski</string>
|
||||
<string name="poi_tower">wěža</string>
|
||||
<string name="poi_mast">sćežor</string>
|
||||
<string name="poi_monitoring_station">wobkedźbowanska stacija</string>
|
||||
<string name="poi_radar">radar</string>
|
||||
<string name="poi_crane">kran</string>
|
||||
<string name="poi_construction">twarnišćo</string>
|
||||
<string name="poi_adit">podkopk</string>
|
||||
<string name="poi_petroleum_well">wolijowe žórło</string>
|
||||
<string name="poi_survey_point">měrjenski dypk</string>
|
||||
<string name="poi_windmill">wětrnik</string>
|
||||
<string name="poi_salt_pond">sólny hat</string>
|
||||
<string name="poi_reservoir">spjaty jězor</string>
|
||||
<string name="poi_gasometer">płunometer</string>
|
||||
<string name="poi_silo">silo</string>
|
||||
<string name="poi_college">gymnazij</string>
|
||||
<string name="poi_driving_school">jězdna šula</string>
|
||||
<string name="poi_kindergarten">pěstowarnja</string>
|
||||
<string name="poi_school">šula</string>
|
||||
<string name="poi_training">treningownišćo</string>
|
||||
<string name="poi_university">uniwersita</string>
|
||||
|
||||
<string name="poi_social_facility">socialne zarjadnišćo</string>
|
||||
<string name="poi_courthouse">sudnistwo</string>
|
||||
<string name="poi_prison">jastwo</string>
|
||||
<string name="poi_register_office">stawnistwo</string>
|
||||
<string name="poi_embassy">wulkopósłanstwo</string>
|
||||
<string name="poi_government">knježerstwo</string>
|
||||
<string name="poi_bailiff">běrc</string>
|
||||
<string name="poi_prosecutor">statne rěčnistwo</string>
|
||||
<string name="poi_tax_inspection">dawkowa inspekcija</string>
|
||||
<string name="poi_customs">cłownistwo</string>
|
||||
<string name="poi_country">kraj</string>
|
||||
<string name="poi_city">město</string>
|
||||
<string name="poi_capital">stolica</string>
|
||||
<string name="poi_town">město</string>
|
||||
<string name="poi_village">wjes</string>
|
||||
<string name="poi_hamlet">sydlišćo</string>
|
||||
<string name="poi_isolated_dwelling">jednotliwy dom</string>
|
||||
<string name="poi_suburb">předměsto</string>
|
||||
<string name="poi_quarter">štwórć</string>
|
||||
<string name="poi_neighbourhood">susodstwo</string>
|
||||
<string name="poi_locality">městno</string>
|
||||
<string name="poi_place_allotments">zahrodki</string>
|
||||
<string name="poi_place_farm">ratarstwo</string>
|
||||
|
||||
|
||||
<string name="poi_pharmacy">lěkarnja</string>
|
||||
<string name="poi_hospital">chorownja</string>
|
||||
<string name="poi_doctors">lěkarjo</string>
|
||||
<string name="poi_clinic">klinika</string>
|
||||
<string name="poi_first_aid">prěnja pomoc</string>
|
||||
<string name="poi_dentist">zubny lěkar</string>
|
||||
<string name="poi_nursing_home">starownja</string>
|
||||
<string name="poi_baby_hatch">woknješko za ćěšenki</string>
|
||||
<string name="poi_veterinary">skótny lěkar</string>
|
||||
<string name="poi_sanatorium">sanatorij</string>
|
||||
<string name="poi_healthcare_alternative">alternatiwna medicina</string>
|
||||
<string name="poi_blood_bank">krejna banka</string>
|
||||
<string name="poi_midwife">baba</string>
|
||||
<string name="poi_physiotherapist">fyzioterapeut</string>
|
||||
<string name="poi_psychotherapist">psychoterapeut</string>
|
||||
<string name="poi_speech_therapist">logopeda</string>
|
||||
<string name="poi_paediatrics">dźěćacy lěkar</string>
|
||||
|
||||
<string name="poi_insurance">zawěsćernja</string>
|
||||
<string name="poi_estate_agent">imobilijowy běrow</string>
|
||||
<string name="poi_lawyer">prawiznik</string>
|
||||
<string name="poi_townhall">radnica</string>
|
||||
<string name="poi_employment_agency">dźěłowy zarjad</string>
|
||||
<string name="poi_advertising_agency">wabjenska agentura</string>
|
||||
<string name="poi_educational_institution">kubłanišćo</string>
|
||||
<string name="poi_studio">studijo</string>
|
||||
<string name="poi_political_party">běrow politiskeje strony</string>
|
||||
<string name="poi_notary">notar</string>
|
||||
<string name="poi_stadium">stadion</string>
|
||||
<string name="poi_sports_centre">sportowy centrum</string>
|
||||
<string name="poi_golf_course">golfownišćo</string>
|
||||
<string name="poi_cuisine_crepes">Crepes</string>
|
||||
<string name="poi_cuisine_meat">Mjaso</string>
|
||||
<string name="poi_cuisine_waffle">Wafle</string>
|
||||
<string name="poi_cuisine_chocolate">Šokolada</string>
|
||||
<string name="poi_cuisine_wine">Wino</string>
|
||||
<string name="poi_cuisine_potato">Běrny</string>
|
||||
<string name="poi_cuisine_brunch">Snobjed</string>
|
||||
<string name="poi_cuisine_baguette">Bagety</string>
|
||||
<string name="poi_cuisine_burrito">Burrito</string>
|
||||
<string name="poi_cuisine_shawarma">Šawarma</string>
|
||||
|
||||
<string name="poi_cuisine_regional">regionalnje</string>
|
||||
<string name="poi_cuisine_italian">italsce</string>
|
||||
<string name="poi_cuisine_chinese">chinsce</string>
|
||||
<string name="poi_cuisine_mexican">mexisce</string>
|
||||
<string name="poi_cuisine_japanese">japansce</string>
|
||||
<string name="poi_cuisine_german">němsce</string>
|
||||
<string name="poi_cuisine_indian">indisce</string>
|
||||
<string name="poi_cuisine_american">amerisce</string>
|
||||
<string name="poi_cuisine_asian">azisce</string>
|
||||
<string name="poi_cuisine_french">francosce</string>
|
||||
<string name="poi_cuisine_greek">grjeksce</string>
|
||||
<string name="poi_cuisine_thai">thai</string>
|
||||
<string name="poi_cuisine_international">mjezynarodnje</string>
|
||||
<string name="poi_cuisine_turkish">turkowsce</string>
|
||||
<string name="poi_cuisine_spanish">španisce</string>
|
||||
<string name="poi_cuisine_vietnamese">vietnamsce</string>
|
||||
<string name="poi_cuisine_korean">korejsce</string>
|
||||
<string name="poi_cuisine_bavarian">baworsce</string>
|
||||
<string name="poi_cuisine_lebanese">libanonsce</string>
|
||||
<string name="poi_cuisine_russian">rusce</string>
|
||||
<string name="poi_cuisine_filipino">filipinsce</string>
|
||||
<string name="poi_cuisine_portuguese">portugalsce</string>
|
||||
<string name="poi_cuisine_georgian">georgisce</string>
|
||||
<string name="poi_cuisine_polish">pólsce</string>
|
||||
<string name="poi_cuisine_brazilian">brazilsce</string>
|
||||
<string name="poi_cuisine_arab">arabsce</string>
|
||||
<string name="poi_cuisine_danish">dansce</string>
|
||||
<string name="poi_cuisine_indonesian">indonesce</string>
|
||||
<string name="poi_cuisine_african">afrisce</string>
|
||||
<string name="poi_cuisine_caribbean">karibisce</string>
|
||||
<string name="poi_cuisine_argentinian">argentinsce</string>
|
||||
<string name="poi_cuisine_balkan">balkansce</string>
|
||||
<string name="poi_cuisine_peruvian">perusce</string>
|
||||
<string name="poi_cuisine_croatian">chorwatsce</string>
|
||||
<string name="poi_cuisine_bolivian">boliwisce</string>
|
||||
<string name="poi_cuisine_persian">persisce</string>
|
||||
<string name="poi_cuisine_moroccan">marokkosce</string>
|
||||
<string name="poi_cuisine_austrian">awstrisce</string>
|
||||
<string name="poi_cuisine_malaysian">malajzisce</string>
|
||||
<string name="poi_cuisine_irish">irsce</string>
|
||||
<string name="poi_cuisine_ethiopian">etiopisce</string>
|
||||
<string name="poi_cuisine_hungarian">madźarsce</string>
|
||||
<string name="poi_cuisine_lao">laotisce</string>
|
||||
<string name="poi_cuisine_european">europsce</string>
|
||||
<string name="poi_cuisine_uzbek">uzbeksce</string>
|
||||
<string name="poi_cuisine_czech">čěsce</string>
|
||||
<string name="poi_cuisine_cuban">kubasce</string>
|
||||
<string name="poi_cuisine_british">britisce</string>
|
||||
<string name="poi_cuisine_latin_american">łaćonskoamerisce</string>
|
||||
<string name="poi_cuisine_nepalese">nepalsce</string>
|
||||
<string name="poi_cuisine_mongolian">mongolsce</string>
|
||||
<string name="poi_cuisine_ukrainian">ukrainsce</string>
|
||||
<string name="poi_cuisine_afghan">afghanisce</string>
|
||||
<string name="poi_cuisine_belgian">belgisce</string>
|
||||
<string name="poi_cuisine_basque">baskisce</string>
|
||||
<string name="poi_cuisine_swiss">šwicarsce</string>
|
||||
<string name="poi_cuisine_cantonese">kantonesce</string>
|
||||
<string name="poi_cuisine_swedish">šwedsce</string>
|
||||
<string name="poi_cuisine_jamaican">jamaikasce</string>
|
||||
<string name="poi_cuisine_armenian">armensce</string>
|
||||
<string name="poi_cuisine_hawaiian">hawaiisce</string>
|
||||
<string name="poi_cuisine_english">jendźelsce</string>
|
||||
<string name="poi_cuisine_pakistani">pakistansce</string>
|
||||
<string name="poi_cuisine_taiwanese">taiwansce</string>
|
||||
<string name="poi_cuisine_tex_mex">Tex-mex</string>
|
||||
<string name="poi_cuisine_dutch">nižozemsce</string>
|
||||
<string name="poi_cuisine_syrian">syrisce</string>
|
||||
<string name="poi_cuisine_australian">awstralsce</string>
|
||||
<string name="poi_cuisine_egyptian">egyptowsce</string>
|
||||
<string name="poi_cuisine_senegalese">senegalsce</string>
|
||||
<string name="poi_cuisine_jewish">židowsce</string>
|
||||
<string name="poi_cuisine_bulgarian">bołharsce</string>
|
||||
<string name="poi_cuisine_tibetan">tibetsce</string>
|
||||
|
||||
<string name="poi_gambling_lottery">loterija</string>
|
||||
<string name="poi_gambling_slot_machines">hrajne awtomaty</string>
|
||||
<string name="poi_gambling_betting">sadźenje</string>
|
||||
<string name="poi_gambling_bingo">bingo</string>
|
||||
|
||||
<string name="poi_e_cigarette">wobchod za elektroniske cigarety</string>
|
||||
|
||||
<string name="poi_locomotive">lokomotiwa</string>
|
||||
|
||||
<string name="poi_photo_studio">fotowy studijo</string>
|
||||
|
||||
<string name="poi_cliff">wuskała</string>
|
||||
|
||||
<string name="poi_fast_food_cafeteria">haj</string>
|
||||
|
||||
<string name="poi_drink_wine_yes">Wino: haj</string>
|
||||
<string name="poi_resort_kids_camp">dźěćace lěhwo</string>
|
||||
<string name="poi_music_school">hudźbna šula</string>
|
||||
<string name="poi_language_school">rěčna šula</string>
|
||||
|
||||
<string name="poi_zoo_safari_park">safarijowy park</string>
|
||||
<string name="poi_zoo_birds">ptaki</string>
|
||||
<string name="poi_zoo_reptile">reptile</string>
|
||||
|
||||
<string name="poi_motorcycle_rental_yes">wupožčenje</string>
|
||||
<string name="poi_motorcycle_rental_no">wupožčenje: ně</string>
|
||||
<string name="poi_motorcycle_repair_yes">reparatura</string>
|
||||
<string name="poi_motorcycle_repair_no">reparatura: ně</string>
|
||||
<string name="poi_motorcycle_tyres_yes">wobruče</string>
|
||||
<string name="poi_motorcycle_tyres_no">wobruče: ně</string>
|
||||
<string name="poi_owner">mějićel</string>
|
||||
|
||||
<string name="poi_direction_n">směr: sewjer</string>
|
||||
<string name="poi_direction_nne">směr: sewjer-sewjerowuchod</string>
|
||||
<string name="poi_direction_ne">směr: sewjerowuchod</string>
|
||||
<string name="poi_direction_ene">směr: wuchod-sewjerowuchod</string>
|
||||
<string name="poi_direction_e">směr: wuchod</string>
|
||||
<string name="poi_direction_ese">směr: wuchod-juhowuchod</string>
|
||||
<string name="poi_direction_se">směr: juhowuchod</string>
|
||||
<string name="poi_direction_sse">směr: juh-juhowuchod</string>
|
||||
<string name="poi_direction_s">směr: juh</string>
|
||||
<string name="poi_direction_ssw">směr: juh-juhozapad</string>
|
||||
<string name="poi_direction_sw">směr: juhozapad</string>
|
||||
<string name="poi_direction_wsw">směr: zapad-juhozapad</string>
|
||||
<string name="poi_direction_w">směr: zapad</string>
|
||||
<string name="poi_direction_wnw">směr: zapad-sewjerozapad</string>
|
||||
<string name="poi_direction_nw">směr: sewjerozapad</string>
|
||||
<string name="poi_direction_nnw">směr: sewjer-sewjerozapad</string>
|
||||
<string name="poi_direction_forward">směr: doprědka</string>
|
||||
<string name="poi_direction_backward">směr: nazad</string>
|
||||
<string name="poi_direction_clockwise">směr: po směrje časnika</string>
|
||||
<string name="poi_direction_anticlockwise">směr: přećiwo směrej časnika</string>
|
||||
<string name="poi_direction_up">směr: horje</string>
|
||||
<string name="poi_direction_down">směr: dele</string>
|
||||
<string name="poi_direction_entrance">směr: zachod</string>
|
||||
<string name="poi_direction_exit">směr: wuchod</string>
|
||||
<string name="poi_direction_all">směr: wšitke</string>
|
||||
|
||||
<string name="poi_reservation_required">rezerwacija: trěbna</string>
|
||||
<string name="poi_reservation_recommended">rezerwacija: doporučena</string>
|
||||
<string name="poi_reservation_yes">rezerwacija: haj</string>
|
||||
<string name="poi_reservation_no">rezerwacija: ně</string>
|
||||
<string name="poi_reservation_members_only">rezerwacija: jenož sobustawy</string>
|
||||
|
||||
<string name="poi_beds">łoža</string>
|
||||
|
||||
<string name="poi_boat_rental">wupožčenje čołmikow</string>
|
||||
<string name="poi_boat_motorboat_rental_yes">motorske čołmy: haj</string>
|
||||
<string name="poi_boat_motorboat_rental_no">motorske čołmy: ně</string>
|
||||
<string name="poi_boat_houseboat_rental_yes">bydlenske čołmy: haj</string>
|
||||
<string name="poi_boat_houseboat_rental_no">bydlenske čołmy: ně</string>
|
||||
<string name="poi_boat_jetski_rental_yes">jetski: haj</string>
|
||||
<string name="poi_boat_jetski_rental_no">jetski: ně</string>
|
||||
<string name="poi_boat_sailboat_rental_yes">płachtaki: haj</string>
|
||||
<string name="poi_boat_sailboat_rental_no">płachtaki: ně</string>
|
||||
<string name="poi_boat_kayak_rental_rental_yes">kajaki: haj</string>
|
||||
<string name="poi_boat_kayak_rental_rental_no">kajaki: ně</string>
|
||||
<string name="poi_boat_canoe_rental_rental_yes">Kanu: haj</string>
|
||||
<string name="poi_boat_canoe_rental_rental_no">Kanu: ně</string>
|
||||
|
||||
</resources>
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
<string name="follow_us">Slědujće nas</string>
|
||||
<string name="use_osm_live_routing">OSM live-nawigacija</string>
|
||||
<string name="access_no_destination">Žadyn cil wubrany njeje</string>
|
||||
<string name="access_disable_offroute_recalc">Čaru njezměnić, hdyž sy z dróhi přišoł</string>
|
||||
<string name="access_disable_offroute_recalc">Čaru znowa njewobličić, hdyž sy ju wopušćił(a)</string>
|
||||
<string name="access_default_color">Standardna barba</string>
|
||||
<string name="access_category_choice">Wubjerće kategoriju</string>
|
||||
<string name="access_hint_enter_name">Zapodajće mjeno</string>
|
||||
|
@ -1053,4 +1053,34 @@
|
|||
<string name="rendering_attr_noPolygons_name">Polygony</string>
|
||||
<string name="rendering_attr_contourLines_name">Wysokostne linije pokazać</string>
|
||||
<string name="get_directions">Nawigacija</string>
|
||||
<string name="measurement_tool_altitude">Wysokosć: %1$s</string>
|
||||
<string name="add_point_before">Předchadny dypk dodać</string>
|
||||
<string name="add_point_after">Přichodny dypk dodać</string>
|
||||
<string name="quick_action_start_stop_navigation">Nawigaciju zahajić/přetorhnyć</string>
|
||||
<string name="quick_action_showhide_favorites_title">Fawority pokazać/schować</string>
|
||||
<string name="quick_action_favorites_show">Fawority pokazać</string>
|
||||
<string name="quick_action_favorites_hide">Fawority schować</string>
|
||||
<string name="quick_action_showhide_poi_title">POI pokazać/schować</string>
|
||||
<string name="quick_action_poi_show">%1$s pokazać</string>
|
||||
<string name="quick_action_poi_hide">%1$s schować</string>
|
||||
<string name="quick_action_add_category">Kategoriju dodać</string>
|
||||
<string name="quick_action_add_navigation">Nawigacija</string>
|
||||
<string name="quick_action_bug_message">Powěsć</string>
|
||||
<string name="quick_action_gpx_category_descr">Opcionalnu kategoriju wubrać</string>
|
||||
<string name="quick_action_poi_list">"Lisćina POI"</string>
|
||||
<string name="quick_action_map_style_action">Kartowy stil dodać</string>
|
||||
<string name="quick_action_empty_param_error">Parametry njedyrbjeli być prózdne</string>
|
||||
<string name="quick_action_map_styles">Kartowe stile</string>
|
||||
<string name="quick_action_map_underlay_switch">Kartowa podłoha je so změniła na \"%s\".</string>
|
||||
<string name="quick_action_map_underlay">Kartowu podłohu změnić</string>
|
||||
<string name="quick_action_map_underlay_title">Kartowe podłohi</string>
|
||||
<string name="quick_action_map_underlay_action">Podłohu dodać</string>
|
||||
<string name="quick_action_map_source">Kartowe žórło změnić</string>
|
||||
<string name="quick_action_map_source_title">Kartowe žórła</string>
|
||||
<string name="quick_action_map_source_action">Kartowe žórło dodać</string>
|
||||
<string name="retry">Znowa spytać</string>
|
||||
<string name="add_line">Liniju dodać</string>
|
||||
<string name="empty_state_favourites">Fawority dodać</string>
|
||||
<string name="import_track">Čaru importować</string>
|
||||
<string name="move_point">Dypk přesunyć</string>
|
||||
</resources>
|
||||
|
|
|
@ -2844,7 +2844,7 @@ Tidligere destination bliver sidste mellemliggende punkt.</string>
|
|||
<string name="add_point_before">Tilføj punkt før</string>
|
||||
<string name="add_point_after">Tilføj punkt efter</string>
|
||||
<string name="shared_string_options">Indstillinger</string>
|
||||
<string name="measurement_tool_snap_to_road_descr">OsmAnd vil tilføje yderligere punkter, tilpasset typen af navigation.</string>
|
||||
<string name="measurement_tool_snap_to_road_descr">Tilføjer yderligere punkter, tilpasset typen af navigation.</string>
|
||||
<string name="measurement_tool_save_as_new_track_descr">Gem punkterne enten som rutepunkter eller som en linje.</string>
|
||||
<string name="choose_navigation_type">Vælg navigationstype</string>
|
||||
<string name="add_route_points">Tilføj rutepunkter</string>
|
||||
|
|
|
@ -144,27 +144,8 @@ Bitte erwägen Sie den Kauf von OsmAnd+, die Förderung spezieller Funktionen od
|
|||
|
||||
<string name="osmand_plus_play_title_30_chars">OsmAnd+ Karten & Navigation</string>
|
||||
<string name="osmand_plus_short_description_80_chars">Globale Landkarten- und Navigationsanwendung für Offline- und Online-OSM-Karten</string>
|
||||
<string name="osmand_plus_long_description_1000_chars">"
|
||||
OsmAnd+ (OSM Automated Navigation Directions)
|
||||
|
||||
OsmAnd+ ist eine Open-Source-Navigationsanwendung mit Zugriff auf eine große Vielfalt öffentlich zugänglicher OpenStreetMap-(OSM)-Karten weltweit. Alle Karten (Vektor- oder Kachelformate) können lokal auf der Speicherkarte abgelegt und offline verwendet werden. OsmAnd bietet ferner eine Offline-und Online-Routing-Funktion inklusive Sprachnavigation.
|
||||
|
||||
OsmAnd+ ist die Kaufversion von OsmAnd. Durch den Kauf fördern Sie das Projekt, unterstützen die Entwicklung neuer Funktionen und erhalten neue Aktualisierungen.
|
||||
|
||||
Einige der Kernfunktionen:
|
||||
- Komplette Offline-Funktionalität (Kartenmaterial kann auf dem Gerät abgelegt werden)
|
||||
- Kompakte Vektorkarten für die ganze Welt verfügbar
|
||||
- Unbeschränktes, direktes Herunterladen von Länder- oder Regionenkarten aus der App heraus
|
||||
- Offline-Wikipedia-Funktion (Anzeige von Wikipedia-POIs), sehr nützlich für Besichtigungstouren
|
||||
- Darstellung mehrerer überlagerter Kartenschichten wie GPX- oder Navigations-Tracks, POIs (Points of Interest), Favoriten, Höhenlinien, ÖPNV-Haltestellen, zusätzliche Karten mit wählbarer Transparenz
|
||||
- Offline-Adress- und POI-Suche
|
||||
- Offlinenavigation für mittelstrecken Distanzen
|
||||
- Auto-, Fahrrad- und Fußgänger-Modus mit
|
||||
- optionaler automatischer Tag-Nacht-Umschaltung der Anzeige
|
||||
- optionalem geschwindigkeitsabhängigem Kartenmaßstab
|
||||
- optionaler Kartenausrichtung nach Kompass oder Bewegungsrichtung
|
||||
- optionaler Fahrspuranzeige, Geschwindigkeitswarnung, aufgenommene oder TTS-Sprachansagen
|
||||
"</string>
|
||||
<string name="osmand_plus_long_description_1000_chars">OsmAnd+ ist die Kaufversion der Open-Source-Navigationsanwendung OsmAnd (OSM Automated Navigation Directions) mit Zugriff auf eine Vielzahl öffentlich zugänglicher, weltweit verfügbarer Daten von OpenStreetMap (OSM). Alle Karten (Vektor- oder Kachelformate) können lokal auf der Speicherkarte abgelegt und offline verwendet werden. OsmAnd bietet ferner eine Offline-und Online-Routing-Funktion inklusive Sprachnavigation. Mit dem Kauf von OsmAnd+ unterstützen Sie das Projekt, fördern seine Weiterentwicklung und erhalten stets die aktuellsten Daten.
|
||||
\nEinige der Kernfunktionen: - Komplette Offline-Funktionalität (Kartenmaterial kann auf dem Gerät abgelegt werden) - Kompakte Vektorkarten für die ganze Welt verfügbar - Unbeschränktes, direktes Herunterladen von Länder- oder Regionenkarten aus der App heraus - Offline-Wikipedia-Funktion (Anzeige von Wikipedia-POIs), sehr nützlich für Besichtigungstouren - Darstellung mehrerer überlagerter Kartenschichten wie GPX- oder Navigations-Tracks, POIs (Points of Interest), Favoriten, Höhenlinien, ÖPNV-Haltestellen, zusätzliche Karten mit wählbarer Transparenz - Offline-Adress- und POI-Suche - Offlinenavigation für mittelstrecken Distanzen - Auto-, Fahrrad- und Fußgänger-Modus mit - optionaler automatischer Tag-Nacht-Umschaltung der Anzeige - optionalem geschwindigkeitsabhängigem Kartenmaßstab - optionaler Kartenausrichtung nach Kompass oder Bewegungsrichtung - optionaler Fahrspuranzeige, Geschwindigkeitswarnung, aufgenommene oder TTS-Sprachansagen</string>
|
||||
|
||||
<string name="select_navigation_mode">Nutzerprofil wählen</string>
|
||||
<string name="day_night_info_description">Sonnenaufgang: %1$s
|
||||
|
@ -399,7 +380,7 @@ Einige der Kernfunktionen:
|
|||
<string name="search_position_map_view">Aktueller Kartenmittelpunkt</string>
|
||||
<string name="select_search_position">Ausgangspunkt:</string>
|
||||
<string name="context_menu_item_search">In der Nähe suchen</string>
|
||||
<string name="shared_string_save_as_gpx">Route als GPX-Track speichern</string>
|
||||
<string name="shared_string_save_as_gpx">Als neuen GPX-Track speichern</string>
|
||||
<string name="route_successfully_saved_at">Route erfolgreich gespeichert als \'%1$s\'.</string>
|
||||
<string name="filename_input">Dateiname:</string>
|
||||
<string name="file_with_name_already_exist">Datei mit gleichem Namen besteht bereits.</string>
|
||||
|
@ -1118,9 +1099,9 @@ Proportionaler Speicher %4$s MB (Android Limit %5$s MB, Dalvik %6$s MB).</string
|
|||
<string name="audionotes_plugin_description">Die Audio/Video-Notiz-Erweiterung bietet die Möglichkeit unterwegs ortsbezogene Audio-/Fotografie-/Video-Notizen aufzunehmen, entweder über eine Taste auf dem Kartenbildschirm für die aktuelle Position, oder direkt über das Kontext-Menü für jede beliebige Position auf der Karte.</string>
|
||||
<string name="audionotes_plugin_name">Audio-/Video-Notizen</string>
|
||||
<string name="audionotes_location_not_defined">Es ist noch kein Ort angegeben, der mit der Notiz verbunden werden soll. Benutzen Sie \'Standort verwenden…\', um der Notiz einen Ort zuzuweisen.</string>
|
||||
<string name="osmand_srtm_long_description_1000_chars">"Diese Erweiterung beinhaltet Höhenlinien und Relief-Schattierungen, die als Ergänzung zu den Standard-Offline-Karten von OsmAnd angezeigt werden können. Diese Funktionalität ist vor allem für Sportler, Wanderer, Radfahrer, Trekker und jeden interessant, der sich für das Geländerelief einer Landschaft interessiert.
|
||||
\n
|
||||
\nDie globalen Daten (zwischen 70° Nord und 70° Süd) basieren auf Messungen von SRTM (Shuttle Radar Topography Mission) und ASTER (Advanced Spaceborne Thermal Emission and Reflection Radiometer), einem bildgebenden System des Satelliten Terra, dem Flaggschiff des NASA-Erd-Beobachtungsprogramms. ASTER ist der Erfolg der Zusammenarbeit zwischen der NASA, dem japanischen Ministerium für Wirtschaft, Handel und Industrie und dem japanischen Raumfahrtprogramm (J-spacesystems). "</string>
|
||||
<string name="osmand_srtm_long_description_1000_chars">Diese Erweiterung beinhaltet Höhenlinien und Relief-Schattierungen, die als Ergänzung zu den Standard-Offline-Karten von OsmAnd angezeigt werden können. Diese Funktionalität ist vor allem für Sportler, Wanderer, Radfahrer, Trekker und jeden interessant, der sich für das Geländerelief einer Landschaft interessiert.
|
||||
\n
|
||||
\nDie globalen Daten (zwischen 70° Nord und 70° Süd) basieren auf Messungen von SRTM (Shuttle Radar Topography Mission) und ASTER (Advanced Spaceborne Thermal Emission and Reflection Radiometer), einem bildgebenden System an Bord des Satelliten Terra, dem Flaggschiff des NASA-Erd-Beobachtungsprogramms. ASTER beruht auf der erfolgreichen Zusammenarbeit zwischen der NASA, dem japanischen Ministerium für Wirtschaft, Handel und Industrie und dem japanischen Raumfahrtprogramm (J-spacesystems).</string>
|
||||
<string name="stop_routing_confirm">Wollen Sie die Navigation wirklich beenden?</string>
|
||||
<string name="clear_dest_confirm">Sind Sie sicher, dass Sie Ihr Ziel (und die Zwischenziele) löschen möchten?</string>
|
||||
<string name="precise_routing_mode_descr">Aktivieren, um Routen fehlerfrei zu berechnen. Diese Funktion ist weiterhin auf kurze Entfernung begrenzt und langsam.</string>
|
||||
|
@ -1640,7 +1621,7 @@ Mit Neuanmeldung fortfahren?</string>
|
|||
\n
|
||||
\nAufgenommene Tracks können z. B. mit Bekannten geteilt oder als Beiträge zu OSM verwendet werden. Sportler können gespeicherte Tracks zur Überwachung ihres Trainings verwenden. Einige Basisauswertungen sind direkt in OsmAnd enthalten, wie Rundenzeiten, Durchschnittsgeschwindigkeit, usw.. Die Aufzeichnungen können natürlich auch mit speziellen Analyse-Tools von Drittanbietern nachbearbeitet werden.</string>
|
||||
<string name="route_descr_destination">Ziel</string>
|
||||
<string name="local_index_description">Ein Element antippen, um mehr Details zu erfahren oder antippen und halten zum Deaktivieren oder Löschen. Aktuell auf dem Gerät vorhandene Daten (%1$s frei):</string>
|
||||
<string name="local_index_description">Um Einzelheiten zu einem Eintrag zu sehen, auf einen beliebigen Eintrag drücken. Um ihn zu deaktivieren oder zu löschen, lang drücken. Aktuell auf dem Gerät vorhandene Daten (%1$s frei):</string>
|
||||
<string name="text_size_descr">Karten-Schriftgröße festlegen</string>
|
||||
<string name="text_size">Schriftgröße</string>
|
||||
<string name="fav_point_dublicate">Doppelung beim Favoritennamen</string>
|
||||
|
@ -1776,17 +1757,18 @@ Mit Neuanmeldung fortfahren?</string>
|
|||
<string name="plugin_ski_descr">Diese Erweiterung aktiviert die spezielle Kartendarstellung \'Winter- und Skikarte\', die global Skiabfahrten, Langlaufrouten, alpine Skirouten, Skilifte und Bergbahnen enthält. Routen und Pisten werden farbcodiert nach Schwierigkeit, Landschaftselemente nach winterlichen Gesichtspunkten (Assimilierung einer Schneedecke) angezeigt.
|
||||
\n
|
||||
\nDiese spezielle Kartendarstellung kann zurückgestellt werden, indem sie hier wieder deaktiviert oder indem die \'Kartendarstellung\' unter \'Karte konfigurieren\' wie gewünscht geändert wird.</string>
|
||||
<string name="plugin_touringview_descr">"Bei Aktivierung dieser Ansicht wechselt die Kartendarstellung zur \'Tourenkarte\', einer besonders detaillierten Darstellung für Fernreisende und Berufsfahrer.
|
||||
\n
|
||||
<string name="plugin_touringview_descr">Bei Aktivierung dieser Ansicht wechselt die Kartendarstellung zur \'Tourenkarte\', einer besonders detaillierten Darstellung für Fernreisende und Berufsfahrer.
|
||||
\n
|
||||
\nDiese Darstellung liefert für jeden Maßstab den größtmöglichen Umfang an Details zu Fernreisen, die die Kartendaten enthalten (insbesondere alle Straßen, Wege, Pfade und Orientierungspunkte).
|
||||
\n
|
||||
\nAlle Straßenarten werden in der Darstellung farblich klar unterschieden, was speziell für Fahrer großer Fahrzeuge unabdingbar sein kann.
|
||||
\n
|
||||
\nUnd sie bietet spezielle Touring-Optionen wie die Anzeige von Radrouten oder alpiner Bergrouten.
|
||||
\n
|
||||
\nEin spezieller Kartendownload ist nicht notwendig, die Ansicht wird aus den Standardkarten generiert.
|
||||
\n
|
||||
\nDiese Ansicht kann zurückgestellt werden, indem sie hier wieder deaktiviert oder indem die \'Kartendarstellung\' unter \'Karte konfigurieren\' wie gewünscht geändert wird. "</string>
|
||||
\n
|
||||
\nAlle Straßenarten werden in der Darstellung farblich klar unterschieden, was speziell für Fahrer großer Fahrzeuge unabdingbar sein kann.
|
||||
\n
|
||||
\nUnd sie bietet spezielle Touring-Optionen wie die Anzeige von Radrouten oder alpiner Bergrouten.
|
||||
\n
|
||||
\nEin spezieller Kartendownload ist nicht notwendig, die Ansicht wird aus den Standardkarten generiert.
|
||||
\n
|
||||
\nDiese Ansicht kann zurückgestellt werden, indem sie hier wieder deaktiviert oder indem die \'Kartendarstellung\' unter \'Karte konfigurieren\' wie gewünscht geändert wird.</string>
|
||||
<string name="shared_string_audio">Audio</string>
|
||||
|
||||
<string name="location_on_map">Standort:
|
||||
|
@ -2399,7 +2381,7 @@ Wenn Sie OsmAnd und OSM lieben und unterstützen wollen, so ist dies die perfekt
|
|||
<string name="no_update_info_desc">Keine Versionsaktualisierungen oder OsmAnd-Angebote abfragen</string>
|
||||
<string name="si_mi_meters">Meilen/Meter</string>
|
||||
<string name="osm_live_banner_desc">Unbegrenzte Karten-Downloads, Updates und Wikipedia-Plugin.</string>
|
||||
<string name="osmand_plus_banner_desc">Vollversion von OsmAnd mit unbegrenzten Karten-Downloads und monatlichen Kartenaktualisierungen.</string>
|
||||
<string name="osmand_plus_banner_desc">Unbegrenzte Karten-Downloads, -Aktualisierungen und die Wikipedia-Erweiterung.</string>
|
||||
<string name="get_for">Für %1$s abonnieren</string>
|
||||
<string name="get_for_month">Für %1$s pro Monat abonnieren</string>
|
||||
<string name="get_it">Abonnieren</string>
|
||||
|
@ -2649,9 +2631,9 @@ Abgedeckte Fläche: %1$s x %2$s</string>
|
|||
<string name="routing_attr_driving_style_safety_name">Nebenstraßen bevorzugen</string>
|
||||
<string name="routing_attr_relief_smoothness_factor_name">Steigung wählen</string>
|
||||
<string name="driving_region_automatic">Automatisch</string>
|
||||
<string name="osmand_extended_description_part1">" OsmAnd (OSM Automated Navigation Directions) ist eine Karten- und Navigationsanwendung mit Zugriff auf die kostenlosen, weltweiten und qualitativ hochwertigen Daten von OpenStreetMap (OSM). Erfreuen Sie sich an der akustischen und visuellen Navigation, der Betrachtung von POIs (points of interest), der Erstellung und Verwaltung von GPX-Tracks, der Visualisierung von Höhenlinien und -angaben (über ein Erweiterungsmodul), den Auswahlmöglichkeiten zwischen Auto-, Fahrrad- und Fußgänger-Betriebsart, der Möglichkeit an OSM mitzuarbeiten und vielem mehr. "</string>
|
||||
<string name="osmand_extended_description_part1">OsmAnd (OSM Automated Navigation Directions) ist eine Karten- und Navigationsanwendung mit Zugriff auf die kostenlosen, weltweiten und qualitativ hochwertigen Daten von OpenStreetMap (OSM). Erfreuen Sie sich an der akustischen und visuellen Navigation, der Betrachtung von POIs (points of interest), der Erstellung und Verwaltung von GPX-Tracks, der Visualisierung von Höhenlinien und -angaben (über ein Erweiterungsmodul), den Auswahlmöglichkeiten zwischen Auto-, Fahrrad- und Fußgänger-Betriebsart, der Möglichkeit an OSM mitzuarbeiten und vielem mehr.</string>
|
||||
<string name="osmand_extended_description_part2">" GPS-Navigation • Sie haben die Wahl zwischen dem Offline-Betrieb (ohne Roaming-Gebühren, wenn Sie im Ausland sind) oder dem (schnelleren) Online-Betrieb • Die Sprachführung (mit aufgenommenen oder synthetischen Stimmen) begleitet Sie Schritt für Schritt auf Ihrem Weg • Ihre Route wird neu berechnet, sobald Sie von ihr abweichen • Fahrspurassistent, Straßennamen und voraussichtliche Ankunftszeit helfen Ihnen auf der Strecke • Zur Erhöhung Ihrer Reisesicherheit erfolgt ein automatischer Wechsel zwischen Tag- und Nachtmodus • Sie können wählen, ob Tempolimits angezeigt werden sollen, und ob Sie bei deren Überschreitung darauf hingewiesen werden wollen • Die Kartenvergrößerung passt sich Ihrer Geschwindigkeit an • Sie können Ziele nach Adresse, Typ (z. B.: Parkplatz, Restaurant, Hotel, Tankstelle, Museum) oder geographischen Koordinaten suchen • Die Festlegung von Zwischenstopps entlang Ihrer Reiseroute ist möglich • Sie können Ihre GPX-Tracks aufzeichnen, einspielen und ihnen folgen "</string>
|
||||
<string name="osmand_extended_description_part3">" Karten • zeigen POIs (point of interests) in Ihrer Umgebung an • richten sich nach Ihrer Bewegungsrichtung (oder dem Kompass) aus • zeigen an, wo Sie sind und worauf Sie sehen • übermitteln Ihre Position, damit Ihre Freunde Sie finden können • speichern Ihre wichtigsten Orte als Favoriten • lassen Ihnen die Wahl, wie Bezeichnungen auf der Karte angezeigt werden sollen: in Englisch, Landessprache oder in phonetischer Schreibweise • stellen spezielle Online-Karten, Satellitenansichten (von Bing), verschiedene Overlays, wie GPX-Tracks zu Touren-/Routenverläufen, und zusätzliche Ebenen mit einstellbarer Transparenz dar "</string>
|
||||
<string name="osmand_extended_description_part3">Karten • zeigen POIs (point of interests) in Ihrer Umgebung an • richten sich nach Ihrer Bewegungsrichtung (oder dem Kompass) aus • zeigen an, wo Sie sind und worauf Sie sehen • übermitteln Ihre Position, damit Ihre Freunde Sie finden können • speichern Ihre wichtigsten Orte als Favoriten • lassen Ihnen die Wahl, wie Bezeichnungen auf der Karte angezeigt werden sollen: in Englisch, Landessprache oder in phonetischer Schreibweise • stellen spezielle Online-Karten, Satellitenansichten (von Bing), verschiedene Overlays, wie GPX-Tracks zu Touren-/Routenverläufen, und zusätzliche Ebenen mit einstellbarer Transparenz dar</string>
|
||||
<string name="osmand_extended_description_part4">Ski-Sport - das OsmAnd-Skikarten-Modul ermöglicht Ihnen das Betrachten von Skirouten, deren Schwierigkeitsgrad und einiger zusätzlicher Informationen, wie die Lage von Liften und weiterer Einrichtungen.</string>
|
||||
<string name="osmand_extended_description_part5">Radfahren • Sie finden Radwege auf der Karte • Die GPS-Navigation im Fahrrad-Modus errechnet Ihre Route anhand von Radwegen • Sie können Ihre Geschwindigkeit und Höhe verfolgen • Die Möglichkeit der GPX-Aufzeichnung versetzt Sie in die Lage, Ihre Fahrt zu protokollieren und sie mit anderen zu teilen • Über ein Zusatzmodul können Sie sich Höhenlinien und das Geländerelief darstellen lassen</string>
|
||||
<string name="osmand_extended_description_part6">Laufen, Wandern, Stadtbesichtigung • Die Karte zeigt Ihnen Fuß- und Wanderwege an • Wikipedia, in der von Ihnen gewünschten Sprache, kann Ihnen eine Menge bei einer Stadtbesichtigung erzählen • Haltestellen öffentlicher Verkehrsmittel (Bus, Tram, Bahn), inklusive der Linienbezeichnungen, helfen Ihnen dabei, sich in einer neuen Stadt zurechtzufinden • Die GPS-Navigation im Fußgänger-Modus berechnet Ihre Route anhand von Fußwegen • Sie können GPX-Routen einspielen und ihnen folgen oder eigene aufzeichnen und mit anderen teilen</string>
|
||||
|
@ -2661,7 +2643,7 @@ Abgedeckte Fläche: %1$s x %2$s</string>
|
|||
<string name="restore_purchases">Käufe wiederherstellen</string>
|
||||
<string name="fonts_header">Schriftarten für Karten</string>
|
||||
<string name="osmand_plus_extended_description_part1">"OsmAnd+ (OSM Automated Navigation Directions) ist eine Karten- und Navigationsanwendung mit Zugriff auf die kostenlosen, weltweit verfügbaren und qualitativ hochwertigen Daten von OpenStreetMap (OSM). Genießen Sie die akustische und visuelle Navigation, die Betrachtung von POIs (points of interest), die Erstellung und Bearbeitung von GPX-Tracks, die Visualisierung von Höhenlinien und -angaben, die Auswahlmöglichkeiten zwischen Auto-, Fahrrad- und Fußgänger-Modus, die Möglichkeit der Mitarbeit an OSM und vieles mehr. OsmAnd+ ist die Kaufversion. Durch ihren Erwerb, unterstützen Sie das Projekt, fördern die Entwicklung neuer Funktionen und erhalten die neusten Aktualisierungen. Einige der Hauptmerkmale:"</string>
|
||||
<string name="osmand_plus_extended_description_part2">" Navigation • funktioniert online (schnell) oder offline (ohne Roaming-Gebühren im Ausland) • akustische Schritt-für-Schritt-Wegführung (mit aufgenommenen oder synthetischen Stimmen) • optional mit Fahrspurassistent, Straßennamenanzeige und geschätzter Ankunftszeit • unterstützt Zwischenstopps entlang der Reiseroute • automatische Routenneuberechnung, sobald Sie von ihr abweichen • Ortssuche nach Adresse, Typ (z. B.: Restaurant, Hotel, Tankstelle, Museum) oder geographischen Koordinaten "</string>
|
||||
<string name="osmand_plus_extended_description_part2">Navigation • funktioniert online (schnell) oder offline (ohne Roaming-Gebühren im Ausland) • akustische Schritt-für-Schritt-Wegführung (mit aufgenommenen oder synthetischen Stimmen) • optional mit Fahrspurassistent, Straßennamenanzeige und geschätzter Ankunftszeit • unterstützt Zwischenstopps entlang der Reiseroute • automatische Routenneuberechnung, sobald Sie von ihr abweichen • Ortssuche nach Adresse, Typ (z. B.: Restaurant, Hotel, Tankstelle, Museum) oder geographischen Koordinaten</string>
|
||||
<string name="osmand_plus_extended_description_part4">OSM- und Wikipedia-Datennutzung • Qualitativ hochwertige Informationen aus den besten Gemeinschaftsprojekten der Welt • OSM-Daten stehen pro Land oder Region zur Verfügung • Wikipedia-POIs, großartig bei Besichtigungen • Unbegrenzte, kostenlose Downloads, direkt aus der App • Kompakte Offline-Vektorkarten, mindestens einmal pro Monat aktualisiert • Auswahl zwischen vollständigen Daten zu einer Region bzw. einfachen Daten zum Straßennetz (Beispiel: Japan insgesamt benötigt 700 MB, das Straßennetz nur 200 MB)</string>
|
||||
<string name="osmand_plus_extended_description_part5">Sicherheitsfunktionen • Optionales automatisches Umschalten der Tag-/Nachtansicht • Optionale Tempolimit-Anzeige, mit Warnung bei Überschreitung • Optionale geschwindigkeitsabhängige Vergrößerung • Positionsübermittlung, damit Freunde Sie finden können</string>
|
||||
<string name="osmand_plus_extended_description_part8">Kartenabdeckung und ungefähre -qualität: • Westeuropa: **** • Osteuropa: *** • Russland: *** • Nordamerika: *** • Südamerika: ** • Asien: ** • Japan & Korea: *** • Mittlerer Osten: ** • Afrika: ** • Antarktis: * - Die meisten Länder rund um den Globus stehen zum Herunterladen bereit! Von Afghanistan bis Zimbabwe, von Australien bis in die USA. Argentinien, Brasilien, Kanada, Frankreich, Deutschland, Mexiko, Großbritannien, Spanien, …</string>
|
||||
|
@ -2806,4 +2788,26 @@ Abgedeckte Fläche: %1$s x %2$s</string>
|
|||
<string name="waypoint_one">Wegpunkt 1</string>
|
||||
<string name="route_point_one">Routenpunkt 1</string>
|
||||
<string name="measurement_tool_altitude">Höhe: %1$s</string>
|
||||
</resources>
|
||||
<string name="measurement_tool_speed">Geschwindigkeit: %1$s</string>
|
||||
<string name="line">Strecke</string>
|
||||
<string name="save_as_route_point">Als Routenpunkte speichern</string>
|
||||
<string name="save_as_line">Als Strecke speichern</string>
|
||||
<string name="route_point">Routenpunkt</string>
|
||||
<string name="edit_line">Strecke bearbeiten</string>
|
||||
<string name="add_point_before">Punkt davor hinzufügen</string>
|
||||
<string name="add_point_after">Punkt dahinter hinzufügen</string>
|
||||
<string name="shared_string_options">Optionen</string>
|
||||
<string name="measurement_tool_snap_to_road_descr">OsmAnd wird, abhängig von der Navigationsart, zusätzliche Punkte hinzufügen.</string>
|
||||
<string name="measurement_tool_save_as_new_track_descr">Die Punkte können entweder als Routenpunkte oder als Strecke gespeichert werden.</string>
|
||||
<string name="choose_navigation_type">Navigationsart auswählen</string>
|
||||
<string name="add_route_points">Routenpunkte hinzufügen</string>
|
||||
<string name="add_line">Strecke hinzufügen</string>
|
||||
<string name="empty_state_my_tracks">Tracks hinzufügen und aufzeichnen</string>
|
||||
<string name="empty_state_my_tracks_desc">Tracks zur Ansicht aufzeichnen oder importieren</string>
|
||||
<string name="empty_state_favourites">Favoriten hinzufügen</string>
|
||||
<string name="empty_state_favourites_desc">Favoriten auf der Karte hinzufügen oder sie aus einer Datei importieren</string>
|
||||
<string name="import_track">Track importieren</string>
|
||||
<string name="import_track_desc">Die Datei %1$s enthält keine Wegpunkte, soll sie als Track importiert werden?</string>
|
||||
<string name="move_point">Punkt verschieben</string>
|
||||
<string name="add_segment_to_the_track">Zu einem GPX-Track hinzufügen</string>
|
||||
</resources>
|
||||
|
|
|
@ -281,7 +281,7 @@
|
|||
<string name="poi_shoes">Cipőbolt</string>
|
||||
<string name="poi_computer">Számítástechnikai bolt</string>
|
||||
<string name="poi_curtain">Függönybolt</string>
|
||||
<string name="poi_fabric">Rövidáru, méteráru</string>
|
||||
<string name="poi_fabric">Méteráru</string>
|
||||
<string name="poi_bedding">Ágyneműbolt</string>
|
||||
<string name="poi_dive">Búvárfelszerelés</string>
|
||||
<string name="poi_doityourself">Barkácsáruház</string>
|
||||
|
@ -365,7 +365,7 @@
|
|||
<string name="poi_lock_gate">Zsilipkapu</string>
|
||||
<string name="poi_waterway_turning_point">Megfordulóhely hajóknak</string>
|
||||
<string name="poi_weir">Bukógát</string>
|
||||
<string name="poi_dam">Völgyzáró gát</string>
|
||||
<string name="poi_dam">Duzzasztógát</string>
|
||||
<string name="poi_watermill">Vízimalom</string>
|
||||
|
||||
<string name="poi_power_substation">Áramelosztó alállomás</string>
|
||||
|
@ -726,7 +726,7 @@
|
|||
<string name="poi_electronics">Elektronikai bolt</string>
|
||||
<string name="poi_atv">Quadkereskedés</string>
|
||||
<string name="poi_cosmetics">Kozmetikai bolt</string>
|
||||
<string name="poi_sewing">Varrógép-szaküzlet</string>
|
||||
<string name="poi_sewing">Rövidárubolt</string>
|
||||
<string name="poi_watches">Órabolt (karóra)</string>
|
||||
<string name="poi_swimming_pool_shop">Uszodatechnika-bolt</string>
|
||||
<string name="poi_games">Játékok</string>
|
||||
|
@ -3185,7 +3185,7 @@
|
|||
|
||||
<string name="poi_ref">Azonosító szám</string>
|
||||
|
||||
<string name="poi_fitness_centre">Fitneszklub</string>
|
||||
<string name="poi_fitness_centre">Edzőterem</string>
|
||||
<string name="poi_hackerspace">Hackerspace</string>
|
||||
|
||||
|
||||
|
@ -3462,4 +3462,24 @@
|
|||
<string name="poi_reservation_no">Előzetes foglalás nincs</string>
|
||||
<string name="poi_reservation_members_only">Előzetes foglalás csak tagoknak</string>
|
||||
|
||||
</resources>
|
||||
<string name="poi_boat_rental_type">Bérelt hajók</string>
|
||||
|
||||
<string name="poi_boat_rental">Csónakkölcsönző</string>
|
||||
<string name="poi_boat_motorboat_rental_yes">Motorcsónak</string>
|
||||
<string name="poi_boat_motorboat_rental_no">Motorcsónak nincs</string>
|
||||
<string name="poi_boat_houseboat_rental_yes">Lakóhajó</string>
|
||||
<string name="poi_boat_houseboat_rental_no">Lakóhajó nincs</string>
|
||||
<string name="poi_boat_pedalboat_rental_yes">Vízibicikli</string>
|
||||
<string name="poi_boat_pedalboat_rental_no">Vízibicikli nincs</string>
|
||||
<string name="poi_boat_jetski_rental_yes">Jetski</string>
|
||||
<string name="poi_boat_jetski_rental_no">Jetski nincs</string>
|
||||
<string name="poi_boat_sailboat_rental_yes">Vitorlás</string>
|
||||
<string name="poi_boat_sailboat_rental_no">Vitorlás nincs</string>
|
||||
<string name="poi_boat_dinghy_rental_rental_yes">Evezős csónak</string>
|
||||
<string name="poi_boat_dinghy_rental_rental_no">Evezős csónak nincs</string>
|
||||
<string name="poi_boat_kayak_rental_rental_yes">Kajak</string>
|
||||
<string name="poi_boat_kayak_rental_rental_no">Kajak nincs</string>
|
||||
<string name="poi_boat_canoe_rental_rental_yes">Kenu</string>
|
||||
<string name="poi_boat_canoe_rental_rental_no">Kenu nincs</string>
|
||||
|
||||
</resources>
|
||||
|
|
|
@ -1762,7 +1762,7 @@ Attivando questa vista lo stile della mappa diventerà \'Inverno e sci\', mostra
|
|||
<string name="shared_string_clear">Pulisci</string>
|
||||
|
||||
<string name="shared_string_save">Salva</string>
|
||||
<string name="shared_string_save_as_gpx">Salva come nuova Traccia</string>
|
||||
<string name="shared_string_save_as_gpx">Salva come nuova traccia gpx</string>
|
||||
<string name="shared_string_rename">Rinomina</string>
|
||||
<string name="shared_string_delete">Elimina</string>
|
||||
<string name="shared_string_delete_all">Elimina tutto</string>
|
||||
|
@ -2620,28 +2620,28 @@ Rappresenta l\'area: %1$s x %2$s</string>
|
|||
<string name="quick_action_map_source_switch">La sorgente della mappa è stata cambiata in \"%s\".</string>
|
||||
<string name="quick_action_btn_tutorial_title">Cambia la posizione del pulsante</string>
|
||||
<string name="quick_action_btn_tutorial_descr">Tieni premuto e trascina per cambiare la sua posizione nello schermo</string>
|
||||
<string name="rendering_attr_depthContours_name">Linee isoipse marine</string>
|
||||
<string name="rendering_attr_depthContours_name">Isoipse nautiche</string>
|
||||
<string name="auto_split_recording_title">Divisione automatica delle registrazioni dopo un periodo</string>
|
||||
<string name="auto_split_recording_descr">Inizia un nuovo segmento dopo 6 minuti, una nuova traccia dopo 2 ore, o un nuovo file dopo un intervallo maggiore.</string>
|
||||
<string name="rendering_attr_depthContours_description">Mostra contorni e punti in profondità</string>
|
||||
<string name="release_2_6">"\\u2022 Nuove funzionalità: Pulsante azione veloce
|
||||
\n
|
||||
<string name="release_2_6">"• Nuove funzionalità: Pulsante azione veloce
|
||||
\n
|
||||
\n • Migliorata la risposta del touch screen ai gesti (es. zoommare e allargare)
|
||||
\n
|
||||
\n • Nuovi caratteri della mappa mappa per estendere la copertura di più lingue
|
||||
\n
|
||||
\n
|
||||
\n • Supporto TTS per le lingue locali (e accenti)
|
||||
\n
|
||||
\n
|
||||
\n • Miglioramento della visibilità in molti stili mappa e wikipedia
|
||||
\n
|
||||
\n
|
||||
\n • Supporto all\'Open Location Code (OLC)
|
||||
\n
|
||||
\n
|
||||
\n • Visualizzazione di un profilo altimetrico, pendenza, e velocità per i GPX registrati e percorsi calcolati
|
||||
\n
|
||||
\n
|
||||
\n • Impostazione e miglioramenti della logica dello \"Stile guida\" nella guida svolta per svolta in bicicletta
|
||||
\n
|
||||
\n
|
||||
\n • Molti altri miglioramenti e correzioni di errori
|
||||
\n
|
||||
\n
|
||||
\n e altro ancora…"</string>
|
||||
<string name="routing_attr_driving_style_name">Stile di guida</string>
|
||||
|
||||
|
@ -2654,7 +2654,7 @@ Rappresenta l\'area: %1$s x %2$s</string>
|
|||
<string name="total_distance">Distanza totale</string>
|
||||
|
||||
<string name="routing_attr_height_relief_smoothness_factor_description">Più piatto o più colline</string>
|
||||
<string name="routing_attr_height_obstacles_name">Utilizza dati elevazione</string>
|
||||
<string name="routing_attr_height_obstacles_name">Utilizza dati di quota</string>
|
||||
<string name="routing_attr_height_obstacles_description">Utilizza i dati di elevazione del terreno forniti da SRTM, ASTER e EU-DEM</string>
|
||||
|
||||
<string name="shared_string_time_span">Intervallo di tempo</string>
|
||||
|
@ -2858,7 +2858,7 @@ Copertura e qualità approssimativamente:
|
|||
\n
|
||||
\n • Widget righello per la misurazione della distanza
|
||||
\n
|
||||
\n • Informazioni dettagliate e suddivisore delle tue tracce GPX
|
||||
\n • Scelta degli intervalli delle tracce GPX con informazioni dettagliate sul tuo percorso
|
||||
\n
|
||||
\n • Altre migliorie e correzioni di errori
|
||||
\n
|
||||
|
@ -2875,14 +2875,14 @@ Copertura e qualità approssimativamente:
|
|||
<string name="measurement_tool_altitude">Altitudine: %1$s</string>
|
||||
<string name="measurement_tool_speed">Velocità %1$s</string>
|
||||
<string name="line">Linea</string>
|
||||
<string name="save_as_route_point">Salva come Punto di un Percorso</string>
|
||||
<string name="save_as_route_point">Salva come punto di un percorso</string>
|
||||
<string name="save_as_line">Salva come linea</string>
|
||||
<string name="route_point">Punto percorso</string>
|
||||
<string name="edit_line">Modifica la linea</string>
|
||||
<string name="add_point_before">Aggiungi un punto prima</string>
|
||||
<string name="add_point_after">Aggiungi un punto dopo</string>
|
||||
<string name="shared_string_options">Opzioni</string>
|
||||
<string name="measurement_tool_snap_to_road_descr">OsmAnd aggiugerà dei punti, in base al tipo di navigazione.</string>
|
||||
<string name="measurement_tool_save_as_new_track_descr">Puoi salvare dei punti sia come punto di un percorso oppure come linea.</string>
|
||||
<string name="measurement_tool_snap_to_road_descr">OsmAnd aggiungerà dei punti, in base al tipo di navigazione.</string>
|
||||
<string name="measurement_tool_save_as_new_track_descr">Puoi salvare i punti sia come punti di un percorso che come linea.</string>
|
||||
<string name="choose_navigation_type">Scegli la modalità di navigazione</string>
|
||||
</resources>
|
||||
|
|
|
@ -3479,4 +3479,29 @@
|
|||
<string name="poi_direction_down">Kierunek: dół</string>
|
||||
<string name="poi_winter_room_yes">Pokój zimowy: tak</string>
|
||||
<string name="poi_winter_room_no">Pokój zimowy: nie</string>
|
||||
</resources>
|
||||
<string name="poi_boat_rental_type">Wypożyczane łodzie</string>
|
||||
|
||||
<string name="poi_animal_shelter_purpose_release_yes">Uwalnianie: tak</string>
|
||||
<string name="poi_animal_shelter_purpose_release_no">Uwalnianie: nie</string>
|
||||
|
||||
<string name="poi_spaceport">Kosmodrom</string>
|
||||
|
||||
<string name="poi_boat_rental">Wypożyczalnia łodzi</string>
|
||||
<string name="poi_boat_motorboat_rental_yes">Motorówki: tak</string>
|
||||
<string name="poi_boat_motorboat_rental_no">Motorówki: nie</string>
|
||||
<string name="poi_boat_houseboat_rental_yes">Barki mieszkalne: tak</string>
|
||||
<string name="poi_boat_houseboat_rental_no">Barki mieszkalne: nie</string>
|
||||
<string name="poi_boat_pedalboat_rental_yes">Rowery wodne: tak</string>
|
||||
<string name="poi_boat_pedalboat_rental_no">Rowery wodne: nie</string>
|
||||
<string name="poi_boat_jetski_rental_yes">Skutery wodne: tak</string>
|
||||
<string name="poi_boat_jetski_rental_no">Skutery wodne: nie</string>
|
||||
<string name="poi_boat_sailboat_rental_yes">Żaglówki: tak</string>
|
||||
<string name="poi_boat_sailboat_rental_no">Żaglówki: nie</string>
|
||||
<string name="poi_boat_dinghy_rental_rental_yes">Łodzie wiosłowe: tak</string>
|
||||
<string name="poi_boat_dinghy_rental_rental_no">Łodzie wiosłowe: nie</string>
|
||||
<string name="poi_boat_kayak_rental_rental_yes">Kajaki: tak</string>
|
||||
<string name="poi_boat_kayak_rental_rental_no">Kajaki: nie</string>
|
||||
<string name="poi_boat_canoe_rental_rental_yes">Kanadyjki: tak</string>
|
||||
<string name="poi_boat_canoe_rental_rental_no">Kanadyjki: nie</string>
|
||||
|
||||
</resources>
|
||||
|
|
|
@ -2811,10 +2811,13 @@ Reprezentuje obszar: %1$s x %2$s</string>
|
|||
<string name="measurement_tool_altitude">Wysokość: %1$s</string>
|
||||
<string name="measurement_tool_speed">Prędkość: %1$s</string>
|
||||
<string name="line">Linia</string>
|
||||
<string name="save_as_route_point">Zapisz jako punkt trasy</string>
|
||||
<string name="save_as_route_point">Zapisz jako punkty trasy</string>
|
||||
<string name="save_as_line">Zapisz jako linia</string>
|
||||
<string name="route_point">Punkt trasy</string>
|
||||
<string name="shared_string_options">Opcje</string>
|
||||
<string name="measurement_tool_save_as_new_track_descr">Można zapisać punkty jako punkty trasy lub linię.</string>
|
||||
<string name="choose_navigation_type">Proszę wybrać rodzaj nawigacji</string>
|
||||
<string name="edit_line">Zmodyfikuj linię</string>
|
||||
<string name="add_point_before">Dodaj punkt wcześniej</string>
|
||||
<string name="add_point_after">Dodaj punkt dalej</string>
|
||||
</resources>
|
||||
|
|
|
@ -2650,4 +2650,24 @@
|
|||
<string name="poi_reservation_no">Prenotatzione: nono</string>
|
||||
<string name="poi_reservation_members_only">Prenotatzione: membros ebbia</string>
|
||||
|
||||
</resources>
|
||||
<string name="poi_boat_rental_type">Barcas a nolu</string>
|
||||
|
||||
<string name="poi_boat_rental">Nolu de barcas</string>
|
||||
<string name="poi_boat_motorboat_rental_yes">Motoscafos: eja</string>
|
||||
<string name="poi_boat_motorboat_rental_no">Motoscafos: nono</string>
|
||||
<string name="poi_boat_houseboat_rental_yes">Domos gallegiantes: eja</string>
|
||||
<string name="poi_boat_houseboat_rental_no">Domos gallegiantes: nono</string>
|
||||
<string name="poi_boat_pedalboat_rental_yes">Pedalòs: eja</string>
|
||||
<string name="poi_boat_pedalboat_rental_no">Pedalòs: nono</string>
|
||||
<string name="poi_boat_jetski_rental_yes">Jetskis: eja</string>
|
||||
<string name="poi_boat_jetski_rental_no">Jetskis: nono</string>
|
||||
<string name="poi_boat_sailboat_rental_yes">Barcas a vela: eja</string>
|
||||
<string name="poi_boat_sailboat_rental_no">Barcas a vela: nono</string>
|
||||
<string name="poi_boat_dinghy_rental_rental_yes">Iscialupa: eja</string>
|
||||
<string name="poi_boat_dinghy_rental_rental_no">Iscialupa: nono</string>
|
||||
<string name="poi_boat_kayak_rental_rental_yes">Kayaks: eja</string>
|
||||
<string name="poi_boat_kayak_rental_rental_no">Kayaks: nono</string>
|
||||
<string name="poi_boat_canoe_rental_rental_yes">Canoas: eja</string>
|
||||
<string name="poi_boat_canoe_rental_rental_no">Canoas: nono</string>
|
||||
|
||||
</resources>
|
||||
|
|
|
@ -1646,7 +1646,7 @@ Chcete pokračovať v novej registrácii?</string>
|
|||
<string name="shared_string_deselect_all">Zrušiť výber všetkých</string>
|
||||
<string name="shared_string_clear">Vymazať</string>
|
||||
<string name="shared_string_save">Uložiť</string>
|
||||
<string name="shared_string_save_as_gpx">Uložiť ako novú stopu</string>
|
||||
<string name="shared_string_save_as_gpx">Uložiť ako novú GPX stopu</string>
|
||||
<string name="shared_string_rename">Premenovať</string>
|
||||
<string name="shared_string_delete">Odstrániť</string>
|
||||
<string name="shared_string_delete_all">Odstrániť všetko</string>
|
||||
|
@ -2833,7 +2833,7 @@ Zodpovedá oblasti: %1$s x %2$s</string>
|
|||
<string name="measurement_tool_altitude">Nadm.výška: %1$s</string>
|
||||
<string name="measurement_tool_speed">Rýchlosť: %1$s</string>
|
||||
<string name="line">Čiara</string>
|
||||
<string name="save_as_route_point">Uložiť ako bod trasy</string>
|
||||
<string name="save_as_route_point">Uložiť ako body trasy</string>
|
||||
<string name="save_as_line">Uložiť ako čiaru</string>
|
||||
<string name="route_point">Bod trasy</string>
|
||||
<string name="edit_line">Upraviť čiaru</string>
|
||||
|
|
|
@ -2814,4 +2814,27 @@ Koda predstavlja območje: %1$s x %2$s</string>
|
|||
<string name="shared_string_options">Možnosti</string>
|
||||
<string name="empty_state_favourites">Dodaj priljubljene</string>
|
||||
<string name="import_track">Uvozi sled</string>
|
||||
</resources>
|
||||
<string name="line">Črta</string>
|
||||
<string name="save_as_route_point">Shrani kot točke poti</string>
|
||||
<string name="save_as_line">Shrani kot črto</string>
|
||||
<string name="route_point">Točka poti</string>
|
||||
<string name="edit_line">Uredi črto</string>
|
||||
<string name="add_point_before">Dodaj točko pred</string>
|
||||
<string name="add_point_after">Dodaj točko za</string>
|
||||
<string name="measurement_tool_snap_to_road_descr">Program bo dodal točke glede na vrsto navigacije.</string>
|
||||
<string name="measurement_tool_save_as_new_track_descr">Točke je mogoče shraniti kot točke poti ali kot črto.</string>
|
||||
<string name="choose_navigation_type">Izbor vrste navigacije</string>
|
||||
<string name="measurement_tool_action_bar">Prebrskajte zemljevid in dodajte točke</string>
|
||||
<string name="add_route_points">Dodaj točke poti</string>
|
||||
<string name="add_waypoint">Dodaj vmesno točko</string>
|
||||
<string name="add_line">Dodaj črto</string>
|
||||
<string name="save_gpx_waypoint">Shrani vmesno točko GPX</string>
|
||||
<string name="save_route_point">Shrani točko poti</string>
|
||||
<string name="waypoint_one">Vmesna točka 1</string>
|
||||
<string name="route_point_one">Točka poti 1</string>
|
||||
<string name="empty_state_my_tracks">Dodajanje in beleženje sledi</string>
|
||||
<string name="empty_state_my_tracks_desc">Beleženje in uvoz sledi za ogled</string>
|
||||
<string name="import_track_desc">Datoteka %1$s ne vključuje nobene vmesne točke. Ali želite pot uvoziti kot sled?</string>
|
||||
<string name="move_point">Premakni točko</string>
|
||||
<string name="add_segment_to_the_track">Dodaj na sled GPX</string>
|
||||
</resources>
|
||||
|
|
|
@ -3454,4 +3454,24 @@
|
|||
|
||||
<string name="poi_beds">Ліжка</string>
|
||||
|
||||
<string name="poi_boat_rental_type">Оренда човнів</string>
|
||||
|
||||
<string name="poi_boat_rental">Прокат човнів</string>
|
||||
<string name="poi_boat_motorboat_rental_yes">Моторні човни: так</string>
|
||||
<string name="poi_boat_motorboat_rental_no">Моторні човни: немає</string>
|
||||
<string name="poi_boat_houseboat_rental_yes">Плавучі будинки: так</string>
|
||||
<string name="poi_boat_houseboat_rental_no">Плавучі будинки: немає</string>
|
||||
<string name="poi_boat_pedalboat_rental_yes">Педальні човни: так</string>
|
||||
<string name="poi_boat_pedalboat_rental_no">Педальні човни: немає</string>
|
||||
<string name="poi_boat_jetski_rental_yes">Гідроцикли: так</string>
|
||||
<string name="poi_boat_jetski_rental_no">Гідроцикли: немає</string>
|
||||
<string name="poi_boat_sailboat_rental_yes">Вітрильники: так</string>
|
||||
<string name="poi_boat_sailboat_rental_no">Вітрильники: немає</string>
|
||||
<string name="poi_boat_dinghy_rental_rental_yes">Човни: так</string>
|
||||
<string name="poi_boat_dinghy_rental_rental_no">Човни: немає</string>
|
||||
<string name="poi_boat_kayak_rental_rental_yes">Байдарки: так</string>
|
||||
<string name="poi_boat_kayak_rental_rental_no">Байдарки: немає</string>
|
||||
<string name="poi_boat_canoe_rental_rental_yes">Каное: так</string>
|
||||
<string name="poi_boat_canoe_rental_rental_no">Каное: немає</string>
|
||||
|
||||
</resources>
|
||||
|
|
|
@ -253,7 +253,7 @@
|
|||
<string name="search_position_map_view">Поточний центр мапи</string>
|
||||
<string name="select_search_position">Початок:</string>
|
||||
<string name="context_menu_item_search">Шукати поруч</string>
|
||||
<string name="shared_string_save_as_gpx">Зберегти маршрут як GPX трек</string>
|
||||
<string name="shared_string_save_as_gpx">Зберегти як новий GPX-трек</string>
|
||||
<string name="route_successfully_saved_at">Маршрут успішно збережено в \'%1$s\'.</string>
|
||||
<string name="filename_input">Ім’я файлу: </string>
|
||||
<string name="file_with_name_already_exist">Файл з таким ім’ям вже існує.</string>
|
||||
|
@ -1527,8 +1527,8 @@
|
|||
<string name="use_displayed_track_for_navigation">Бажаєте використовувати показаний трек для навігації?</string>
|
||||
<string name="keep_and_add_destination_point">Додати як наступний пункт призначення</string>
|
||||
<string name="select_gpx">Обрати GPX…</string>
|
||||
<string name="route_descr_select_destination">Обрати місце призначення</string>
|
||||
<string name="shared_string_select_on_map">Вибрати на мапі</string>
|
||||
<string name="route_descr_select_destination">Виберіть пункт призначення</string>
|
||||
<string name="shared_string_select_on_map">Виберіть на мапі</string>
|
||||
<string name="shared_string_favorite">Закладки</string>
|
||||
<string name="route_preferences">Уподобання маршруту</string>
|
||||
<string name="route_info">Інформація про маршрут</string>
|
||||
|
@ -1745,7 +1745,7 @@
|
|||
<string name="settings_privacy">Приватність</string>
|
||||
<string name="points">Точки</string>
|
||||
|
||||
<string name="shared_string_my_location">Моє місцезнаходження</string>
|
||||
<string name="shared_string_my_location">Моя позиція</string>
|
||||
|
||||
|
||||
<string name="navigation_over_track">Почати навігацію по треку?</string>
|
||||
|
@ -2967,4 +2967,27 @@
|
|||
<string name="save_route_point">Зберегти точку маршруту</string>
|
||||
<string name="waypoint_one">Шляхова точка 1</string>
|
||||
<string name="route_point_one">Точка маршруту 1</string>
|
||||
<string name="measurement_tool_altitude">Висота: %1$s</string>
|
||||
<string name="measurement_tool_speed">Швидкість: %1$s</string>
|
||||
<string name="line">Лінія</string>
|
||||
<string name="save_as_route_point">Зберегти як точки маршруту</string>
|
||||
<string name="save_as_line">Зберегти як лінію</string>
|
||||
<string name="route_point">Точка маршруту</string>
|
||||
<string name="edit_line">Редагувати лінію</string>
|
||||
<string name="add_point_before">Додати точку раніше</string>
|
||||
<string name="add_point_after">Додати точку опісля</string>
|
||||
<string name="shared_string_options">Параметри</string>
|
||||
<string name="measurement_tool_snap_to_road_descr">OsmAnd додасть додаткові точки в залежності від типу навігації.</string>
|
||||
<string name="measurement_tool_save_as_new_track_descr">Ви може зберегти точки, як точки маршруту або як лінію.</string>
|
||||
<string name="choose_navigation_type">Вибрати тип навігації</string>
|
||||
<string name="add_route_points">Додати точки маршруту</string>
|
||||
<string name="add_line">Додати лінію</string>
|
||||
<string name="empty_state_my_tracks">Додавати і записувати треки</string>
|
||||
<string name="empty_state_my_tracks_desc">Записати або імпортувати треки для перегляду</string>
|
||||
<string name="empty_state_favourites">Додати у закладки</string>
|
||||
<string name="empty_state_favourites_desc">Додати закладки на мапу або імпортувати їх з файлової системи</string>
|
||||
<string name="import_track">Імпорт треку</string>
|
||||
<string name="import_track_desc">Файл %1$s не містить шляхових точок, імпортувати його в якості треку?</string>
|
||||
<string name="move_point">Перемістити точку</string>
|
||||
<string name="add_segment_to_the_track">Додати до GPX-треку</string>
|
||||
</resources>
|
||||
|
|
|
@ -9,8 +9,6 @@
|
|||
3. All your modified/created strings are in the top of the file (to make easier find what\'s translated).
|
||||
PLEASE: Have a look at http://code.google.com/p/osmand/wiki/UIConsistency, it may really improve your and our work :-) Thx - Hardy
|
||||
-->
|
||||
<string name="measurement_tool_altitude">Altitude: %1$s</string>
|
||||
<string name="measurement_tool_speed">Speed: %1$s</string>
|
||||
<string name="line">Line</string>
|
||||
<string name="save_as_route_point">Save as route points</string>
|
||||
<string name="save_as_line">Save as line</string>
|
||||
|
|
|
@ -95,6 +95,7 @@ import net.osmand.plus.mapcontextmenu.other.DestinationReachedMenu;
|
|||
import net.osmand.plus.mapcontextmenu.other.MapRouteInfoMenu;
|
||||
import net.osmand.plus.mapcontextmenu.other.MapRouteInfoMenuFragment;
|
||||
import net.osmand.plus.mapcontextmenu.other.TrackDetailsMenu;
|
||||
import net.osmand.plus.measurementtool.MeasurementEditingContext;
|
||||
import net.osmand.plus.measurementtool.MeasurementToolFragment;
|
||||
import net.osmand.plus.measurementtool.NewGpxData;
|
||||
import net.osmand.plus.render.RendererRegistry;
|
||||
|
@ -944,7 +945,9 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven
|
|||
NewGpxData newGpxData = (NewGpxData) toShow;
|
||||
QuadRect qr = newGpxData.getRect();
|
||||
mapView.fitRectToMap(qr.left, qr.right, qr.top, qr.bottom, (int) qr.width(), (int) qr.height(), 0);
|
||||
MeasurementToolFragment.showInstance(getSupportFragmentManager(), newGpxData);
|
||||
MeasurementEditingContext editingContext = new MeasurementEditingContext();
|
||||
editingContext.setNewGpxData(newGpxData);
|
||||
MeasurementToolFragment.showInstance(getSupportFragmentManager(), editingContext);
|
||||
} else {
|
||||
mapContextMenu.show(latLonToShow, mapLabelToShow, toShow);
|
||||
}
|
||||
|
|
|
@ -764,7 +764,7 @@ public class MapActivityActions implements DialogProvider {
|
|||
.setListener(new ContextMenuAdapter.ItemClickListener() {
|
||||
@Override
|
||||
public boolean onContextMenuClick(ArrayAdapter<ContextMenuItem> adapter, int itemId, int position, boolean isChecked) {
|
||||
MeasurementToolFragment.showInstance(mapActivity.getSupportFragmentManager(), null);
|
||||
MeasurementToolFragment.showInstance(mapActivity.getSupportFragmentManager());
|
||||
return true;
|
||||
}
|
||||
}).createItem());
|
||||
|
|
|
@ -0,0 +1,315 @@
|
|||
package net.osmand.plus.measurementtool;
|
||||
|
||||
import android.util.Pair;
|
||||
|
||||
import net.osmand.Location;
|
||||
import net.osmand.data.LatLon;
|
||||
import net.osmand.plus.ApplicationMode;
|
||||
import net.osmand.plus.GPXUtilities.TrkSegment;
|
||||
import net.osmand.plus.GPXUtilities.WptPt;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.OsmandSettings;
|
||||
import net.osmand.plus.measurementtool.command.MeasurementCommandManager;
|
||||
import net.osmand.plus.routing.RouteCalculationParams;
|
||||
import net.osmand.plus.routing.RoutingHelper;
|
||||
import net.osmand.router.RouteCalculationProgress;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Queue;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ConcurrentLinkedQueue;
|
||||
|
||||
public class MeasurementEditingContext {
|
||||
|
||||
private OsmandApplication application;
|
||||
private final MeasurementCommandManager commandManager = new MeasurementCommandManager();
|
||||
|
||||
private TrkSegment before = new TrkSegment();
|
||||
// cache should be deleted if before changed or snappedToRoadPoints
|
||||
private TrkSegment beforeCacheForSnap;
|
||||
|
||||
private TrkSegment after = new TrkSegment();
|
||||
// cache should be deleted if after changed or snappedToRoadPoints
|
||||
private TrkSegment afterCacheForSnap;
|
||||
|
||||
private NewGpxData newGpxData;
|
||||
|
||||
private int selectedPointPosition = -1;
|
||||
private WptPt originalPointToMove;
|
||||
|
||||
private boolean inSnapToRoadMode;
|
||||
private SnapToRoadProgressListener progressListener;
|
||||
private ApplicationMode snapToRoadAppMode;
|
||||
private RouteCalculationProgress calculationProgress;
|
||||
private Queue<Pair<WptPt, WptPt>> snapToRoadPairsToCalculate = new ConcurrentLinkedQueue<>();
|
||||
private Map<Pair<WptPt, WptPt>, List<WptPt>> snappedToRoadPoints = new ConcurrentHashMap<>();
|
||||
|
||||
public void setApplication(OsmandApplication application) {
|
||||
this.application = application;
|
||||
}
|
||||
|
||||
public MeasurementCommandManager getCommandManager() {
|
||||
return commandManager;
|
||||
}
|
||||
|
||||
public boolean isInSnapToRoadMode() {
|
||||
return inSnapToRoadMode;
|
||||
}
|
||||
|
||||
public int getSelectedPointPosition() {
|
||||
return selectedPointPosition;
|
||||
}
|
||||
|
||||
public void setSelectedPointPosition(int selectedPointPosition) {
|
||||
this.selectedPointPosition = selectedPointPosition;
|
||||
}
|
||||
|
||||
public WptPt getOriginalPointToMove() {
|
||||
return originalPointToMove;
|
||||
}
|
||||
|
||||
public void setOriginalPointToMove(WptPt originalPointToMove) {
|
||||
this.originalPointToMove = originalPointToMove;
|
||||
}
|
||||
|
||||
public void setInSnapToRoadMode(boolean inSnapToRoadMode) {
|
||||
this.inSnapToRoadMode = inSnapToRoadMode;
|
||||
}
|
||||
|
||||
public NewGpxData getNewGpxData() {
|
||||
return newGpxData;
|
||||
}
|
||||
|
||||
public void setNewGpxData(NewGpxData newGpxData) {
|
||||
this.newGpxData = newGpxData;
|
||||
}
|
||||
|
||||
public void setProgressListener(SnapToRoadProgressListener progressListener) {
|
||||
this.progressListener = progressListener;
|
||||
}
|
||||
|
||||
public ApplicationMode getSnapToRoadAppMode() {
|
||||
return snapToRoadAppMode;
|
||||
}
|
||||
|
||||
public void setSnapToRoadAppMode(ApplicationMode snapToRoadAppMode) {
|
||||
this.snapToRoadAppMode = snapToRoadAppMode;
|
||||
}
|
||||
|
||||
public Map<Pair<WptPt, WptPt>, List<WptPt>> getSnappedPoints() {
|
||||
return snappedToRoadPoints;
|
||||
}
|
||||
|
||||
public TrkSegment getBeforeTrkSegmentLine() {
|
||||
if (beforeCacheForSnap != null) {
|
||||
return beforeCacheForSnap;
|
||||
}
|
||||
return before;
|
||||
}
|
||||
|
||||
public TrkSegment getAfterTrkSegmentLine() {
|
||||
if (afterCacheForSnap != null) {
|
||||
return afterCacheForSnap;
|
||||
}
|
||||
return after;
|
||||
}
|
||||
|
||||
public List<WptPt> getPoints() {
|
||||
return getBeforePoints();
|
||||
}
|
||||
|
||||
public List<WptPt> getBeforePoints() {
|
||||
return before.points;
|
||||
}
|
||||
|
||||
public List<WptPt> getAfterPoints() {
|
||||
return after.points;
|
||||
}
|
||||
|
||||
public int getPointsCount() {
|
||||
return before.points.size();
|
||||
}
|
||||
|
||||
public void splitSegments(int position) {
|
||||
List<WptPt> points = new ArrayList<>();
|
||||
points.addAll(before.points);
|
||||
points.addAll(after.points);
|
||||
before.points.clear();
|
||||
after.points.clear();
|
||||
before.points.addAll(points.subList(0, position));
|
||||
after.points.addAll(points.subList(position, points.size()));
|
||||
updateCacheForSnapIfNeeded(true);
|
||||
}
|
||||
|
||||
public void addPoint(WptPt pt) {
|
||||
before.points.add(pt);
|
||||
updateCacheForSnapIfNeeded(false);
|
||||
}
|
||||
|
||||
public void addPoint(int position, WptPt pt) {
|
||||
before.points.add(position, pt);
|
||||
updateCacheForSnapIfNeeded(false);
|
||||
}
|
||||
|
||||
public void addPoints(List<WptPt> points) {
|
||||
before.points.addAll(points);
|
||||
updateCacheForSnapIfNeeded(false);
|
||||
}
|
||||
|
||||
public WptPt removePoint(int position) {
|
||||
WptPt pt = before.points.remove(position);
|
||||
updateCacheForSnapIfNeeded(false);
|
||||
return pt;
|
||||
}
|
||||
|
||||
public void clearSegments() {
|
||||
before.points.clear();
|
||||
after.points.clear();
|
||||
beforeCacheForSnap = null;
|
||||
afterCacheForSnap = null;
|
||||
}
|
||||
|
||||
void scheduleRouteCalculateIfNotEmpty() {
|
||||
if (application == null || (before.points.size() < 1 && after.points.size() < 1)) {
|
||||
return;
|
||||
}
|
||||
snapToRoadPairsToCalculate.clear();
|
||||
findPointsToCalculate(Arrays.asList(before.points, after.points));
|
||||
RoutingHelper routingHelper = application.getRoutingHelper();
|
||||
if (!snapToRoadPairsToCalculate.isEmpty() && progressListener != null && !routingHelper.isRouteBeingCalculated()) {
|
||||
routingHelper.startRouteCalculationThread(getParams(), true, true);
|
||||
application.runInUIThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
progressListener.showProgressBar();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private void findPointsToCalculate(List<List<WptPt>> pointsList) {
|
||||
for (List<WptPt> points : pointsList) {
|
||||
for (int i = 0; i < points.size() - 1; i++) {
|
||||
Pair<WptPt, WptPt> pair = new Pair<>(points.get(i), points.get(i + 1));
|
||||
if (snappedToRoadPoints.get(pair) == null) {
|
||||
snapToRoadPairsToCalculate.add(pair);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void recreateCacheForSnap(TrkSegment cache, TrkSegment original) {
|
||||
if (original.points.size() > 1) {
|
||||
for (int i = 0; i < original.points.size() - 1; i++) {
|
||||
Pair<WptPt, WptPt> pair = new Pair<>(original.points.get(i), original.points.get(i + 1));
|
||||
List<WptPt> pts = snappedToRoadPoints.get(pair);
|
||||
if (pts != null) {
|
||||
cache.points.addAll(pts);
|
||||
} else {
|
||||
if (inSnapToRoadMode) {
|
||||
scheduleRouteCalculateIfNotEmpty();
|
||||
}
|
||||
cache.points.addAll(Arrays.asList(pair.first, pair.second));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
cache.points.addAll(original.points);
|
||||
}
|
||||
}
|
||||
|
||||
private void updateCacheForSnapIfNeeded(boolean both) {
|
||||
if (inSnapToRoadMode) {
|
||||
recreateCacheForSnap(beforeCacheForSnap = new TrkSegment(), before);
|
||||
if (both) {
|
||||
recreateCacheForSnap(afterCacheForSnap = new TrkSegment(), after);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void cancelSnapToRoad() {
|
||||
progressListener.hideProgressBar();
|
||||
snapToRoadPairsToCalculate.clear();
|
||||
if (calculationProgress != null) {
|
||||
calculationProgress.isCancelled = true;
|
||||
}
|
||||
}
|
||||
|
||||
private RouteCalculationParams getParams() {
|
||||
OsmandSettings settings = application.getSettings();
|
||||
|
||||
final Pair<WptPt, WptPt> currentPair = snapToRoadPairsToCalculate.poll();
|
||||
|
||||
Location start = new Location("");
|
||||
start.setLatitude(currentPair.first.getLatitude());
|
||||
start.setLongitude(currentPair.first.getLongitude());
|
||||
|
||||
LatLon end = new LatLon(currentPair.second.getLatitude(), currentPair.second.getLongitude());
|
||||
|
||||
final RouteCalculationParams params = new RouteCalculationParams();
|
||||
params.start = start;
|
||||
params.end = end;
|
||||
params.leftSide = settings.DRIVING_REGION.get().leftHandDriving;
|
||||
params.fast = settings.FAST_ROUTE_MODE.getModeValue(snapToRoadAppMode);
|
||||
params.type = settings.ROUTER_SERVICE.getModeValue(snapToRoadAppMode);
|
||||
params.mode = snapToRoadAppMode;
|
||||
params.ctx = application;
|
||||
params.calculationProgress = calculationProgress = new RouteCalculationProgress();
|
||||
params.calculationProgressCallback = new RoutingHelper.RouteCalculationProgressCallback() {
|
||||
@Override
|
||||
public void updateProgress(int progress) {
|
||||
progressListener.updateProgress(progress);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void requestPrivateAccessRouting() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void finish() {
|
||||
progressListener.refreshMap();
|
||||
}
|
||||
};
|
||||
params.resultListener = new RouteCalculationParams.RouteCalculationResultListener() {
|
||||
@Override
|
||||
public void onRouteCalculated(List<Location> locations) {
|
||||
ArrayList<WptPt> pts = new ArrayList<>(locations.size());
|
||||
for (Location loc : locations) {
|
||||
WptPt pt = new WptPt();
|
||||
pt.lat = loc.getLatitude();
|
||||
pt.lon = loc.getLongitude();
|
||||
pts.add(pt);
|
||||
}
|
||||
snappedToRoadPoints.put(currentPair, pts);
|
||||
updateCacheForSnapIfNeeded(true);
|
||||
progressListener.refreshMap();
|
||||
if (!snapToRoadPairsToCalculate.isEmpty()) {
|
||||
application.getRoutingHelper().startRouteCalculationThread(getParams(), true, true);
|
||||
} else {
|
||||
application.runInUIThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
progressListener.hideProgressBar();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
return params;
|
||||
}
|
||||
|
||||
interface SnapToRoadProgressListener {
|
||||
|
||||
void showProgressBar();
|
||||
|
||||
void updateProgress(int progress);
|
||||
|
||||
void hideProgressBar();
|
||||
|
||||
void refreshMap();
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load diff
|
@ -7,54 +7,49 @@ import android.graphics.Paint;
|
|||
import android.graphics.Path;
|
||||
import android.graphics.PointF;
|
||||
|
||||
import net.osmand.AndroidUtils;
|
||||
import net.osmand.data.LatLon;
|
||||
import net.osmand.data.PointDescription;
|
||||
import net.osmand.data.QuadPoint;
|
||||
import net.osmand.data.RotatedTileBox;
|
||||
import net.osmand.plus.GPXUtilities.TrkSegment;
|
||||
import net.osmand.plus.GPXUtilities.WptPt;
|
||||
import net.osmand.plus.OsmAndFormatter;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.views.ContextMenuLayer;
|
||||
import net.osmand.plus.views.OsmandMapLayer;
|
||||
import net.osmand.plus.views.OsmandMapTileView;
|
||||
import net.osmand.plus.views.Renderable;
|
||||
import net.osmand.util.MapUtils;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import gnu.trove.list.array.TIntArrayList;
|
||||
|
||||
public class MeasurementToolLayer extends OsmandMapLayer implements ContextMenuLayer.IContextMenuProvider {
|
||||
private static final int POINTS_TO_DRAW = 50;
|
||||
|
||||
private OsmandMapTileView view;
|
||||
private boolean inMeasurementMode;
|
||||
private boolean inMovePointMode;
|
||||
private boolean inAddPointAfterMode;
|
||||
private boolean inAddPointBeforeMode;
|
||||
private List<WptPt> measurementPoints = new LinkedList<>();
|
||||
private List<WptPt> snappedToRoadPoints = new LinkedList<>();
|
||||
private Bitmap centerIconDay;
|
||||
private Bitmap centerIconNight;
|
||||
private Bitmap pointIcon;
|
||||
private Bitmap applyingPointIcon;
|
||||
private Paint bitmapPaint;
|
||||
private final RenderingLineAttributes lineAttrs = new RenderingLineAttributes("measureDistanceLine");
|
||||
private final Path path = new Path();
|
||||
private int marginPointIconX;
|
||||
private int marginPointIconY;
|
||||
private int marginApplyingPointIconX;
|
||||
private int marginApplyingPointIconY;
|
||||
private final TIntArrayList tx = new TIntArrayList();
|
||||
private final TIntArrayList ty = new TIntArrayList();
|
||||
private Path path = new Path();
|
||||
private TIntArrayList tx = new TIntArrayList();
|
||||
private TIntArrayList ty = new TIntArrayList();
|
||||
private OnMeasureDistanceToCenter measureDistanceToCenterListener;
|
||||
private OnSingleTapListener singleTapListener;
|
||||
private OnEnterMovePointModeListener enterMovePointModeListener;
|
||||
private int selectedPointPos = -1;
|
||||
private WptPt selectedCachedPoint;
|
||||
private LatLon pressedPointLatLon;
|
||||
private boolean overlapped;
|
||||
private int pointsToDraw = 50;
|
||||
private MeasurementEditingContext editingCtx;
|
||||
|
||||
@Override
|
||||
public void initLayer(OsmandMapTileView view) {
|
||||
|
@ -81,6 +76,10 @@ public class MeasurementToolLayer extends OsmandMapLayer implements ContextMenuL
|
|||
this.singleTapListener = listener;
|
||||
}
|
||||
|
||||
void setEditingCtx(MeasurementEditingContext editingCtx) {
|
||||
this.editingCtx = editingCtx;
|
||||
}
|
||||
|
||||
void setOnEnterMovePointModeListener(OnEnterMovePointModeListener listener) {
|
||||
this.enterMovePointModeListener = listener;
|
||||
}
|
||||
|
@ -89,64 +88,25 @@ public class MeasurementToolLayer extends OsmandMapLayer implements ContextMenuL
|
|||
this.measureDistanceToCenterListener = listener;
|
||||
}
|
||||
|
||||
void setSelectedPointPos(int pos) {
|
||||
selectedPointPos = pos;
|
||||
}
|
||||
|
||||
void setSelectedCachedPoint(WptPt selectedCachedPoint) {
|
||||
this.selectedCachedPoint = selectedCachedPoint;
|
||||
}
|
||||
|
||||
WptPt getSelectedCachedPoint() {
|
||||
return selectedCachedPoint;
|
||||
}
|
||||
|
||||
int getSelectedPointPos() {
|
||||
return selectedPointPos;
|
||||
public MeasurementEditingContext getEditingCtx() {
|
||||
return editingCtx;
|
||||
}
|
||||
|
||||
public boolean isInMeasurementMode() {
|
||||
return inMeasurementMode;
|
||||
}
|
||||
|
||||
boolean isInMovePointMode() {
|
||||
return inMovePointMode;
|
||||
}
|
||||
|
||||
boolean isInAddPointAfterMode() {
|
||||
return inAddPointAfterMode;
|
||||
}
|
||||
|
||||
boolean isInAddPointBeforeMode() {
|
||||
return inAddPointBeforeMode;
|
||||
}
|
||||
|
||||
void setInMeasurementMode(boolean inMeasurementMode) {
|
||||
this.inMeasurementMode = inMeasurementMode;
|
||||
}
|
||||
|
||||
public List<WptPt> getMeasurementPoints() {
|
||||
return measurementPoints;
|
||||
}
|
||||
|
||||
void setMeasurementPoints(List<WptPt> points) {
|
||||
measurementPoints = points;
|
||||
}
|
||||
|
||||
public List<WptPt> getSnappedToRoadPoints() {
|
||||
return snappedToRoadPoints;
|
||||
}
|
||||
|
||||
public void setSnappedToRoadPoints(List<WptPt> snappedToRoadPoints) {
|
||||
this.snappedToRoadPoints = snappedToRoadPoints;
|
||||
}
|
||||
|
||||
String getDistanceSt() {
|
||||
float dist = 0;
|
||||
if (measurementPoints.size() > 0) {
|
||||
for (int i = 1; i < measurementPoints.size(); i++) {
|
||||
dist += MapUtils.getDistance(measurementPoints.get(i - 1).lat, measurementPoints.get(i - 1).lon,
|
||||
measurementPoints.get(i).lat, measurementPoints.get(i).lon);
|
||||
List<WptPt> points = editingCtx.getPoints();
|
||||
if (points.size() > 0) {
|
||||
for (int i = 1; i < points.size(); i++) {
|
||||
dist += MapUtils.getDistance(points.get(i - 1).lat, points.get(i - 1).lon,
|
||||
points.get(i).lat, points.get(i).lon);
|
||||
}
|
||||
}
|
||||
return OsmAndFormatter.getFormattedDistance(dist, view.getApplication());
|
||||
|
@ -154,15 +114,13 @@ public class MeasurementToolLayer extends OsmandMapLayer implements ContextMenuL
|
|||
|
||||
@Override
|
||||
public boolean onSingleTap(PointF point, RotatedTileBox tileBox) {
|
||||
if (singleTapListener != null) {
|
||||
if (inMeasurementMode && !inMovePointMode && !inAddPointAfterMode && !inAddPointBeforeMode) {
|
||||
if (overlapped) {
|
||||
clearSelection();
|
||||
} else {
|
||||
selectPoint(point.x, point.y, true);
|
||||
}
|
||||
if (selectedPointPos == -1) {
|
||||
pressedPointLatLon = tileBox.getLatLonFromPixel(point.x, point.y);
|
||||
if (inMeasurementMode && editingCtx.getSelectedPointPosition() == -1) {
|
||||
if (!overlapped) {
|
||||
selectPoint(point.x, point.y, true);
|
||||
}
|
||||
if (editingCtx.getSelectedPointPosition() == -1) {
|
||||
pressedPointLatLon = tileBox.getLatLonFromPixel(point.x, point.y);
|
||||
if (singleTapListener != null) {
|
||||
singleTapListener.onAddPoint();
|
||||
}
|
||||
}
|
||||
|
@ -170,19 +128,14 @@ public class MeasurementToolLayer extends OsmandMapLayer implements ContextMenuL
|
|||
return false;
|
||||
}
|
||||
|
||||
void clearSelection() {
|
||||
selectedPointPos = -1;
|
||||
selectedCachedPoint = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onLongPressEvent(PointF point, RotatedTileBox tileBox) {
|
||||
if (inMeasurementMode) {
|
||||
if (!overlapped && !inMovePointMode && !inAddPointAfterMode && !inAddPointBeforeMode && measurementPoints.size() > 0) {
|
||||
if (!overlapped && getEditingCtx().getSelectedPointPosition() == -1 && editingCtx.getPointsCount() > 0) {
|
||||
selectPoint(point.x, point.y, false);
|
||||
if (selectedCachedPoint != null && selectedPointPos != -1) {
|
||||
if (editingCtx.getSelectedPointPosition() != -1) {
|
||||
enterMovingPointMode();
|
||||
if (inMeasurementMode && inMovePointMode && enterMovePointModeListener != null) {
|
||||
if (enterMovePointModeListener != null) {
|
||||
enterMovePointModeListener.onEnterMovePointMode();
|
||||
}
|
||||
}
|
||||
|
@ -192,48 +145,53 @@ public class MeasurementToolLayer extends OsmandMapLayer implements ContextMenuL
|
|||
}
|
||||
|
||||
void enterMovingPointMode() {
|
||||
inMovePointMode = true;
|
||||
moveMapToPoint(selectedPointPos);
|
||||
}
|
||||
|
||||
void enterAddingPointAfterMode() {
|
||||
inAddPointAfterMode = true;
|
||||
moveMapToPoint(selectedPointPos);
|
||||
}
|
||||
|
||||
void enterAddingPointBeforeMode() {
|
||||
inAddPointBeforeMode = true;
|
||||
moveMapToPoint(selectedPointPos);
|
||||
moveMapToPoint(editingCtx.getSelectedPointPosition());
|
||||
WptPt pt = editingCtx.removePoint(editingCtx.getSelectedPointPosition());
|
||||
editingCtx.setOriginalPointToMove(pt);
|
||||
editingCtx.splitSegments(editingCtx.getSelectedPointPosition());
|
||||
}
|
||||
|
||||
private void selectPoint(double x, double y, boolean singleTap) {
|
||||
clearSelection();
|
||||
RotatedTileBox tb = view.getCurrentRotatedTileBox();
|
||||
double lowestDistance = view.getResources().getDimension(R.dimen.measurement_tool_select_radius);
|
||||
for (int i = 0; i < measurementPoints.size(); i++) {
|
||||
WptPt pt = measurementPoints.get(i);
|
||||
for (int i = 0; i < editingCtx.getPointsCount(); i++) {
|
||||
WptPt pt = editingCtx.getPoints().get(i);
|
||||
if (tb.containsLatLon(pt.getLatitude(), pt.getLongitude())) {
|
||||
double xDiff = tb.getPixXFromLonNoRot(pt.getLongitude()) - x;
|
||||
double yDiff = tb.getPixYFromLatNoRot(pt.getLatitude()) - y;
|
||||
double distToPoint = Math.sqrt(Math.pow(xDiff, 2) + Math.pow(yDiff, 2));
|
||||
if (distToPoint < lowestDistance) {
|
||||
lowestDistance = distToPoint;
|
||||
selectedCachedPoint = new WptPt(pt);
|
||||
selectedPointPos = i;
|
||||
editingCtx.setSelectedPointPosition(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (singleTap && singleTapListener != null) {
|
||||
singleTapListener.onSelectPoint(selectedPointPos, selectedCachedPoint);
|
||||
singleTapListener.onSelectPoint(editingCtx.getSelectedPointPosition());
|
||||
}
|
||||
}
|
||||
|
||||
void selectPoint(int position) {
|
||||
clearSelection();
|
||||
selectedCachedPoint = new WptPt(measurementPoints.get(position));
|
||||
selectedPointPos = position;
|
||||
editingCtx.setSelectedPointPosition(position);
|
||||
if (singleTapListener != null) {
|
||||
singleTapListener.onSelectPoint(selectedPointPos, selectedCachedPoint);
|
||||
singleTapListener.onSelectPoint(editingCtx.getSelectedPointPosition());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrepareBufferImage(Canvas canvas, RotatedTileBox tb, DrawSettings settings) {
|
||||
if (inMeasurementMode) {
|
||||
lineAttrs.updatePaints(view, settings, tb);
|
||||
|
||||
TrkSegment before = editingCtx.getBeforeTrkSegmentLine();
|
||||
before.renders.clear();
|
||||
before.renders.add(new Renderable.StandardTrack(new ArrayList<>(before.points), 17.2));
|
||||
before.drawRenderers(view.getZoom(), lineAttrs.paint, canvas, tb);
|
||||
|
||||
TrkSegment after = editingCtx.getAfterTrkSegmentLine();
|
||||
after.renders.clear();
|
||||
after.renders.add(new Renderable.StandardTrack(new ArrayList<>(after.points), 17.2));
|
||||
after.drawRenderers(view.getZoom(), lineAttrs.paint, canvas, tb);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -241,12 +199,13 @@ public class MeasurementToolLayer extends OsmandMapLayer implements ContextMenuL
|
|||
public void onDraw(Canvas canvas, RotatedTileBox tb, DrawSettings settings) {
|
||||
if (inMeasurementMode) {
|
||||
lineAttrs.updatePaints(view, settings, tb);
|
||||
if (!inMovePointMode && !inAddPointAfterMode && !inAddPointBeforeMode) {
|
||||
|
||||
if (editingCtx.getSelectedPointPosition() == -1) {
|
||||
drawCenterIcon(canvas, tb, tb.getCenterPixelPoint(), settings.isNightMode());
|
||||
if (measureDistanceToCenterListener != null) {
|
||||
float distance = 0;
|
||||
if (measurementPoints.size() > 0) {
|
||||
WptPt lastPoint = measurementPoints.get(measurementPoints.size() - 1);
|
||||
if (editingCtx.getPointsCount() > 0) {
|
||||
WptPt lastPoint = editingCtx.getPoints().get(editingCtx.getPointsCount() - 1);
|
||||
LatLon centerLatLon = tb.getCenterLatLon();
|
||||
distance = (float) MapUtils.getDistance(lastPoint.lat, lastPoint.lon, centerLatLon.getLatitude(), centerLatLon.getLongitude());
|
||||
}
|
||||
|
@ -254,119 +213,101 @@ public class MeasurementToolLayer extends OsmandMapLayer implements ContextMenuL
|
|||
}
|
||||
}
|
||||
|
||||
List<WptPt> drawPoints;
|
||||
if (snappedToRoadPoints.size() > 0) {
|
||||
drawPoints = snappedToRoadPoints;
|
||||
} else {
|
||||
drawPoints = measurementPoints;
|
||||
}
|
||||
if (drawPoints.size() > 0) {
|
||||
TrkSegment before = editingCtx.getBeforeTrkSegmentLine();
|
||||
TrkSegment after = editingCtx.getAfterTrkSegmentLine();
|
||||
|
||||
if (before.points.size() > 0 || after.points.size() > 0) {
|
||||
path.reset();
|
||||
tx.reset();
|
||||
ty.reset();
|
||||
|
||||
for (int i = 0; i < drawPoints.size(); i++) {
|
||||
WptPt pt = drawPoints.get(i);
|
||||
int locX;
|
||||
int locY;
|
||||
if (selectedPointPos == i && (inMovePointMode || inAddPointAfterMode || inAddPointBeforeMode)) {
|
||||
locX = tb.getCenterPixelX();
|
||||
locY = tb.getCenterPixelY();
|
||||
} else {
|
||||
locX = tb.getPixXFromLonNoRot(pt.lon);
|
||||
locY = tb.getPixYFromLatNoRot(pt.lat);
|
||||
}
|
||||
if (inAddPointAfterMode) {
|
||||
int previousLocX = tb.getPixXFromLonNoRot(pt.lon);
|
||||
int previousLocY = tb.getPixYFromLatNoRot(pt.lat);
|
||||
if (i == 0) {
|
||||
path.moveTo(previousLocX, previousLocY);
|
||||
} else {
|
||||
path.lineTo(previousLocX, previousLocY);
|
||||
}
|
||||
tx.add(previousLocX);
|
||||
ty.add(previousLocY);
|
||||
path.lineTo(locX, locY);
|
||||
tx.add(locX);
|
||||
ty.add(locY);
|
||||
} else if (inAddPointBeforeMode) {
|
||||
if (i == 0) {
|
||||
path.moveTo(locX, locY);
|
||||
} else {
|
||||
path.lineTo(locX, locY);
|
||||
}
|
||||
tx.add(locX);
|
||||
ty.add(locY);
|
||||
int followingLocX = tb.getPixXFromLonNoRot(pt.lon);
|
||||
int followingLocY = tb.getPixYFromLatNoRot(pt.lat);
|
||||
path.lineTo(followingLocX, followingLocY);
|
||||
tx.add(followingLocX);
|
||||
ty.add(followingLocY);
|
||||
} else {
|
||||
if (i == 0) {
|
||||
path.moveTo(locX, locY);
|
||||
} else {
|
||||
path.lineTo(locX, locY);
|
||||
}
|
||||
tx.add(locX);
|
||||
ty.add(locY);
|
||||
}
|
||||
}
|
||||
if (!inMovePointMode && !inAddPointAfterMode && !inAddPointBeforeMode) {
|
||||
if (before.points.size() > 0) {
|
||||
WptPt pt = before.points.get(before.points.size() - 1);
|
||||
int locX = tb.getPixXFromLonNoRot(pt.lon);
|
||||
int locY = tb.getPixYFromLatNoRot(pt.lat);
|
||||
path.moveTo(locX, locY);
|
||||
tx.add(locX);
|
||||
ty.add(locY);
|
||||
path.lineTo(tb.getCenterPixelX(), tb.getCenterPixelY());
|
||||
tx.add(tb.getCenterPixelX());
|
||||
ty.add(tb.getCenterPixelY());
|
||||
}
|
||||
if (after.points.size() > 0) {
|
||||
if (before.points.size() == 0) {
|
||||
path.moveTo(tb.getCenterPixelX(), tb.getCenterPixelY());
|
||||
tx.add(tb.getCenterPixelX());
|
||||
ty.add(tb.getCenterPixelY());
|
||||
}
|
||||
WptPt pt = after.points.get(0);
|
||||
int locX = tb.getPixXFromLonNoRot(pt.lon);
|
||||
int locY = tb.getPixYFromLatNoRot(pt.lat);
|
||||
path.lineTo(locX, locY);
|
||||
tx.add(locX);
|
||||
ty.add(locY);
|
||||
}
|
||||
|
||||
calculatePath(tb, tx, ty, path);
|
||||
canvas.drawPath(path, lineAttrs.paint);
|
||||
}
|
||||
|
||||
overlapped = false;
|
||||
int drawn = 0;
|
||||
for (int i = 0; i < measurementPoints.size(); i++) {
|
||||
WptPt pt = measurementPoints.get(i);
|
||||
List<WptPt> points = new ArrayList<>();
|
||||
points.addAll(editingCtx.getBeforePoints());
|
||||
points.addAll(editingCtx.getAfterPoints());
|
||||
overlapped = false;
|
||||
int drawn = 0;
|
||||
for (int i = 0; i < points.size(); i++) {
|
||||
WptPt pt = points.get(i);
|
||||
int locX = tb.getPixXFromLonNoRot(pt.lon);
|
||||
int locY = tb.getPixYFromLatNoRot(pt.lat);
|
||||
if (locX >= 0 && locX <= tb.getPixWidth() && locY >= 0 && locY <= tb.getPixHeight()) {
|
||||
drawn++;
|
||||
if (drawn > POINTS_TO_DRAW) {
|
||||
overlapped = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (overlapped) {
|
||||
WptPt pt = points.get(0);
|
||||
int locX = tb.getPixXFromLonNoRot(pt.lon);
|
||||
int locY = tb.getPixYFromLatNoRot(pt.lat);
|
||||
if (locX >= 0 && locX <= tb.getPixWidth() && locY >= 0 && locY <= tb.getPixHeight()) {
|
||||
canvas.drawBitmap(pointIcon, locX - marginPointIconX, locY - marginPointIconY, bitmapPaint);
|
||||
}
|
||||
pt = points.get(points.size() - 1);
|
||||
locX = tb.getPixXFromLonNoRot(pt.lon);
|
||||
locY = tb.getPixYFromLatNoRot(pt.lat);
|
||||
if (locX >= 0 && locX <= tb.getPixWidth() && locY >= 0 && locY <= tb.getPixHeight()) {
|
||||
canvas.drawBitmap(pointIcon, locX - marginPointIconX, locY - marginPointIconY, bitmapPaint);
|
||||
|
||||
}
|
||||
} else {
|
||||
for (int i = 0; i < points.size(); i++) {
|
||||
WptPt pt = points.get(i);
|
||||
int locX = tb.getPixXFromLonNoRot(pt.lon);
|
||||
int locY = tb.getPixYFromLatNoRot(pt.lat);
|
||||
if (locX >= 0 && locX <= tb.getPixWidth() && locY >= 0 && locY <= tb.getPixHeight()) {
|
||||
if (!(inMovePointMode && i == selectedPointPos)) {
|
||||
drawn++;
|
||||
if (drawn > pointsToDraw) {
|
||||
overlapped = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
canvas.drawBitmap(pointIcon, locX - marginPointIconX, locY - marginPointIconY, bitmapPaint);
|
||||
}
|
||||
}
|
||||
if (!overlapped) {
|
||||
for (int i = 0; i < measurementPoints.size(); i++) {
|
||||
WptPt pt = measurementPoints.get(i);
|
||||
int locX = tb.getPixXFromLonNoRot(pt.lon);
|
||||
int locY = tb.getPixYFromLatNoRot(pt.lat);
|
||||
if (locX >= 0 && locX <= tb.getPixWidth() && locY >= 0 && locY <= tb.getPixHeight()) {
|
||||
if (!(inMovePointMode && i == selectedPointPos)) {
|
||||
canvas.drawBitmap(pointIcon, locX - marginPointIconX, locY - marginPointIconY, bitmapPaint);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (inAddPointAfterMode || inAddPointBeforeMode || inMovePointMode) {
|
||||
int locX = tb.getCenterPixelX();
|
||||
int locY = tb.getCenterPixelY();
|
||||
canvas.drawBitmap(applyingPointIcon, locX - marginApplyingPointIconX, locY - marginApplyingPointIconY, bitmapPaint);
|
||||
}
|
||||
}
|
||||
|
||||
if (editingCtx.getSelectedPointPosition() != -1) {
|
||||
int locX = tb.getCenterPixelX();
|
||||
int locY = tb.getCenterPixelY();
|
||||
canvas.drawBitmap(applyingPointIcon, locX - marginApplyingPointIconX, locY - marginApplyingPointIconY, bitmapPaint);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void exitMovePointMode() {
|
||||
inMovePointMode = false;
|
||||
}
|
||||
|
||||
void exitAddPointAfterMode() {
|
||||
inAddPointAfterMode = false;
|
||||
}
|
||||
|
||||
void exitAddPointBeforeMode() {
|
||||
inAddPointBeforeMode = false;
|
||||
void exitMovePointMode(boolean saveOriginalPoint) {
|
||||
if (saveOriginalPoint) {
|
||||
WptPt pt = editingCtx.getOriginalPointToMove();
|
||||
editingCtx.addPoint(pt);
|
||||
}
|
||||
editingCtx.setOriginalPointToMove(null);
|
||||
editingCtx.setSelectedPointPosition(-1);
|
||||
editingCtx.splitSegments(editingCtx.getBeforePoints().size() + editingCtx.getAfterPoints().size());
|
||||
}
|
||||
|
||||
private void drawCenterIcon(Canvas canvas, RotatedTileBox tb, QuadPoint center, boolean nightMode) {
|
||||
|
@ -381,30 +322,32 @@ public class MeasurementToolLayer extends OsmandMapLayer implements ContextMenuL
|
|||
canvas.rotate(tb.getRotate(), center.x, center.y);
|
||||
}
|
||||
|
||||
public WptPt addCenterPoint(int position) {
|
||||
public WptPt addCenterPoint() {
|
||||
RotatedTileBox tb = view.getCurrentRotatedTileBox();
|
||||
LatLon l = tb.getLatLonFromPixel(tb.getCenterPixelX(), tb.getCenterPixelY());
|
||||
WptPt pt = new WptPt();
|
||||
pt.lat = l.getLatitude();
|
||||
pt.lon = l.getLongitude();
|
||||
boolean allowed = measurementPoints.size() == 0 || !measurementPoints.get(measurementPoints.size() - 1).equals(pt);
|
||||
boolean allowed = editingCtx.getPointsCount() == 0 || !editingCtx.getPoints().get(editingCtx.getPointsCount() - 1).equals(pt);
|
||||
if (allowed) {
|
||||
measurementPoints.add(position, pt);
|
||||
editingCtx.addPoint(pt);
|
||||
return pt;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public WptPt addPoint(int position) {
|
||||
public WptPt addPoint() {
|
||||
if (pressedPointLatLon != null) {
|
||||
WptPt pt = new WptPt();
|
||||
pt.lat = pressedPointLatLon.getLatitude();
|
||||
pt.lon = pressedPointLatLon.getLongitude();
|
||||
double lat = pressedPointLatLon.getLatitude();
|
||||
double lon = pressedPointLatLon.getLongitude();
|
||||
pt.lat = lat;
|
||||
pt.lon = lon;
|
||||
pressedPointLatLon = null;
|
||||
boolean allowed = measurementPoints.size() == 0 || !measurementPoints.get(measurementPoints.size() - 1).equals(pt);
|
||||
boolean allowed = editingCtx.getPointsCount() == 0 || !editingCtx.getPoints().get(editingCtx.getPointsCount() - 1).equals(pt);
|
||||
if (allowed) {
|
||||
measurementPoints.add(position, pt);
|
||||
moveMapToPoint(position);
|
||||
editingCtx.addPoint(pt);
|
||||
moveMapToLatLon(lat, lon);
|
||||
return pt;
|
||||
}
|
||||
}
|
||||
|
@ -414,24 +357,28 @@ public class MeasurementToolLayer extends OsmandMapLayer implements ContextMenuL
|
|||
WptPt getMovedPointToApply() {
|
||||
RotatedTileBox tb = view.getCurrentRotatedTileBox();
|
||||
LatLon latLon = tb.getCenterLatLon();
|
||||
WptPt pt = measurementPoints.get(selectedPointPos);
|
||||
WptPt pt = new WptPt(editingCtx.getOriginalPointToMove());
|
||||
pt.lat = latLon.getLatitude();
|
||||
pt.lon = latLon.getLongitude();
|
||||
return pt;
|
||||
}
|
||||
|
||||
public void moveMapToPoint(int pos) {
|
||||
if (measurementPoints.size() > 0) {
|
||||
if (pos >= measurementPoints.size()) {
|
||||
pos = measurementPoints.size() - 1;
|
||||
} else if (pos < 0) {
|
||||
pos = 0;
|
||||
}
|
||||
WptPt pt = measurementPoints.get(pos);
|
||||
view.getAnimatedDraggingThread().startMoving(pt.getLatitude(), pt.getLongitude(), view.getZoom(), true);
|
||||
}
|
||||
private void moveMapToLatLon(double lat, double lon) {
|
||||
view.getAnimatedDraggingThread().startMoving(lat, lon, view.getZoom(), true);
|
||||
}
|
||||
|
||||
public void moveMapToPoint(int pos) {
|
||||
if (editingCtx.getPointsCount() > 0) {
|
||||
if (pos >= editingCtx.getPointsCount()) {
|
||||
pos = editingCtx.getPointsCount() - 1;
|
||||
} else if (pos < 0) {
|
||||
pos = 0;
|
||||
}
|
||||
WptPt pt = editingCtx.getPoints().get(pos);
|
||||
moveMapToLatLon(pt.getLatitude(), pt.getLongitude());
|
||||
}
|
||||
}
|
||||
|
||||
public void refreshMap() {
|
||||
view.refreshMap();
|
||||
}
|
||||
|
@ -480,7 +427,7 @@ public class MeasurementToolLayer extends OsmandMapLayer implements ContextMenuL
|
|||
|
||||
void onAddPoint();
|
||||
|
||||
void onSelectPoint(int selectedPointPos, WptPt selectedCachedPoint);
|
||||
void onSelectPoint(int selectedPointPos);
|
||||
}
|
||||
|
||||
interface OnEnterMovePointModeListener {
|
||||
|
|
|
@ -23,9 +23,9 @@ import net.osmand.plus.IconsCache;
|
|||
import net.osmand.plus.OsmAndFormatter;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
import net.osmand.plus.activities.TrackActivity;
|
||||
import net.osmand.plus.base.BottomSheetDialogFragment;
|
||||
import net.osmand.plus.helpers.AndroidUiHelper;
|
||||
import net.osmand.plus.measurementtool.NewGpxData.ActionType;
|
||||
import net.osmand.util.MapUtils;
|
||||
|
||||
import java.util.List;
|
||||
|
@ -37,16 +37,11 @@ public class SelectedPointBottomSheetDialogFragment extends BottomSheetDialogFra
|
|||
private SelectedPointFragmentListener listener;
|
||||
private boolean nightMode;
|
||||
private boolean portrait;
|
||||
private NewGpxData.ActionType actionType;
|
||||
|
||||
public void setListener(SelectedPointFragmentListener listener) {
|
||||
this.listener = listener;
|
||||
}
|
||||
|
||||
public void setActionType(NewGpxData.ActionType actionType) {
|
||||
this.actionType = actionType;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
|
@ -108,19 +103,28 @@ public class SelectedPointBottomSheetDialogFragment extends BottomSheetDialogFra
|
|||
mainView.findViewById(R.id.cancel_row).setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
if (listener != null) {
|
||||
listener.onClearSelection();
|
||||
}
|
||||
dismiss();
|
||||
}
|
||||
});
|
||||
|
||||
List<WptPt> points = measurementLayer.getMeasurementPoints();
|
||||
int pos = measurementLayer.getSelectedPointPos();
|
||||
List<WptPt> points = measurementLayer.getEditingCtx().getPoints();
|
||||
int pos = measurementLayer.getEditingCtx().getSelectedPointPosition();
|
||||
WptPt pt = points.get(pos);
|
||||
String pointTitle = pt.name;
|
||||
if (!TextUtils.isEmpty(pointTitle)) {
|
||||
((TextView) mainView.findViewById(R.id.selected_point_title)).setText(pointTitle);
|
||||
} else {
|
||||
if (actionType == NewGpxData.ActionType.ADD_ROUTE_POINTS) {
|
||||
((TextView) mainView.findViewById(R.id.selected_point_title)).setText(mapActivity.getString(R.string.route_point) + " - " + (pos + 1));
|
||||
NewGpxData newGpxData = measurementLayer.getEditingCtx().getNewGpxData();
|
||||
if (newGpxData != null) {
|
||||
ActionType actionType = measurementLayer.getEditingCtx().getNewGpxData().getActionType();
|
||||
if (actionType == ActionType.ADD_ROUTE_POINTS) {
|
||||
((TextView) mainView.findViewById(R.id.selected_point_title)).setText(mapActivity.getString(R.string.route_point) + " - " + (pos + 1));
|
||||
} else {
|
||||
((TextView) mainView.findViewById(R.id.selected_point_title)).setText(mapActivity.getString(R.string.plugin_distance_point) + " - " + (pos + 1));
|
||||
}
|
||||
} else {
|
||||
((TextView) mainView.findViewById(R.id.selected_point_title)).setText(mapActivity.getString(R.string.plugin_distance_point) + " - " + (pos + 1));
|
||||
}
|
||||
|
@ -139,6 +143,19 @@ public class SelectedPointBottomSheetDialogFragment extends BottomSheetDialogFra
|
|||
((TextView) mainView.findViewById(R.id.selected_point_distance)).setText(OsmAndFormatter.getFormattedDistance(dist, mapActivity.getMyApplication()));
|
||||
}
|
||||
}
|
||||
NewGpxData newGpxData = measurementLayer.getEditingCtx().getNewGpxData();
|
||||
if (newGpxData != null && newGpxData.getActionType() == ActionType.EDIT_SEGMENT) {
|
||||
double elevation = pt.ele;
|
||||
if (!Double.isNaN(elevation)) {
|
||||
String eleStr = (mapActivity.getString(R.string.altitude)).substring(0, 1);
|
||||
((TextView) mainView.findViewById(R.id.selected_point_ele)).setText(eleStr + ": " + OsmAndFormatter.getFormattedAlt(elevation, mapActivity.getMyApplication()));
|
||||
}
|
||||
float speed = (float) pt.speed;
|
||||
if (speed != 0) {
|
||||
String speedStr = (mapActivity.getString(R.string.map_widget_speed)).substring(0, 1);
|
||||
((TextView) mainView.findViewById(R.id.selected_point_speed)).setText(speedStr + ": " + OsmAndFormatter.getFormattedSpeed(speed, mapActivity.getMyApplication()));
|
||||
}
|
||||
}
|
||||
|
||||
final int screenHeight = AndroidUtils.getScreenHeight(getActivity());
|
||||
final int statusBarHeight = AndroidUtils.getStatusBarHeight(getActivity());
|
||||
|
@ -208,6 +225,7 @@ public class SelectedPointBottomSheetDialogFragment extends BottomSheetDialogFra
|
|||
public void onCancel(DialogInterface dialog) {
|
||||
if (listener != null) {
|
||||
listener.onCloseMenu();
|
||||
listener.onClearSelection();
|
||||
}
|
||||
super.onCancel(dialog);
|
||||
}
|
||||
|
@ -223,5 +241,7 @@ public class SelectedPointBottomSheetDialogFragment extends BottomSheetDialogFra
|
|||
void addPointBeforeOnClick();
|
||||
|
||||
void onCloseMenu();
|
||||
|
||||
void onClearSelection();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -108,13 +108,15 @@ public class MeasurementToolAdapter extends RecyclerView.Adapter<MeasurementTool
|
|||
if (actionType == NewGpxData.ActionType.EDIT_SEGMENT) {
|
||||
double elevation = pt.ele;
|
||||
if (!Double.isNaN(elevation)) {
|
||||
holder.elevation.setText(mapActivity.getString(R.string.measurement_tool_altitude, OsmAndFormatter.getFormattedAlt(elevation, mapActivity.getMyApplication())));
|
||||
String eleStr = (mapActivity.getString(R.string.altitude)).substring(0, 1);
|
||||
holder.elevation.setText(eleStr + ": " + OsmAndFormatter.getFormattedAlt(elevation, mapActivity.getMyApplication()));
|
||||
} else {
|
||||
holder.elevation.setText("");
|
||||
}
|
||||
float speed = (float) pt.speed;
|
||||
if (speed != 0) {
|
||||
holder.speed.setText(mapActivity.getString(R.string.measurement_tool_speed, OsmAndFormatter.getFormattedSpeed(speed, mapActivity.getMyApplication())));
|
||||
String speedStr = (mapActivity.getString(R.string.map_widget_speed)).substring(0, 1);
|
||||
holder.speed.setText(speedStr + ": " + OsmAndFormatter.getFormattedSpeed(speed, mapActivity.getMyApplication()));
|
||||
} else {
|
||||
holder.speed.setText("");
|
||||
}
|
||||
|
|
|
@ -9,24 +9,18 @@ public class AddPointCommand extends MeasurementModeCommand {
|
|||
private WptPt point;
|
||||
private boolean center;
|
||||
|
||||
public AddPointCommand(MeasurementToolLayer measurementLayer, int position) {
|
||||
this.measurementLayer = measurementLayer;
|
||||
this.center = true;
|
||||
this.position = position;
|
||||
}
|
||||
|
||||
public AddPointCommand(MeasurementToolLayer measurementLayer, boolean center) {
|
||||
this.measurementLayer = measurementLayer;
|
||||
this.center = center;
|
||||
position = measurementLayer.getMeasurementPoints().size();
|
||||
position = measurementLayer.getEditingCtx().getPointsCount();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean execute() {
|
||||
if (center) {
|
||||
point = measurementLayer.addCenterPoint(position);
|
||||
point = measurementLayer.addCenterPoint();
|
||||
} else {
|
||||
point = measurementLayer.addPoint(position);
|
||||
point = measurementLayer.addPoint();
|
||||
}
|
||||
measurementLayer.refreshMap();
|
||||
return point != null;
|
||||
|
@ -34,13 +28,13 @@ public class AddPointCommand extends MeasurementModeCommand {
|
|||
|
||||
@Override
|
||||
public void undo() {
|
||||
measurementLayer.getMeasurementPoints().remove(position);
|
||||
measurementLayer.getEditingCtx().removePoint(position);
|
||||
measurementLayer.refreshMap();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void redo() {
|
||||
measurementLayer.getMeasurementPoints().add(position, point);
|
||||
measurementLayer.getEditingCtx().addPoint(position, point);
|
||||
measurementLayer.refreshMap();
|
||||
measurementLayer.moveMapToPoint(position);
|
||||
}
|
||||
|
|
|
@ -9,7 +9,6 @@ import java.util.List;
|
|||
public class ClearPointsCommand extends MeasurementModeCommand {
|
||||
|
||||
private List<WptPt> points;
|
||||
private List<WptPt> snappedToRoadPoints;
|
||||
|
||||
public ClearPointsCommand(MeasurementToolLayer measurementLayer) {
|
||||
this.measurementLayer = measurementLayer;
|
||||
|
@ -17,27 +16,23 @@ public class ClearPointsCommand extends MeasurementModeCommand {
|
|||
|
||||
@Override
|
||||
public boolean execute() {
|
||||
List<WptPt> pts = measurementLayer.getMeasurementPoints();
|
||||
List<WptPt> snappedPts = measurementLayer.getSnappedToRoadPoints();
|
||||
List<WptPt> pts = measurementLayer.getEditingCtx().getPoints();
|
||||
points = new LinkedList<>(pts);
|
||||
snappedToRoadPoints = new LinkedList<>(snappedPts);
|
||||
pts.clear();
|
||||
snappedPts.clear();
|
||||
measurementLayer.getEditingCtx().clearSegments();
|
||||
measurementLayer.refreshMap();
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void undo() {
|
||||
measurementLayer.getMeasurementPoints().addAll(points);
|
||||
measurementLayer.getSnappedToRoadPoints().addAll(snappedToRoadPoints);
|
||||
measurementLayer.getEditingCtx().addPoints(points);
|
||||
measurementLayer.refreshMap();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void redo() {
|
||||
measurementLayer.getMeasurementPoints().clear();
|
||||
measurementLayer.getSnappedToRoadPoints().clear();
|
||||
measurementLayer.getEditingCtx().clearSegments();
|
||||
measurementLayer.refreshMap();
|
||||
}
|
||||
|
||||
|
|
|
@ -23,15 +23,15 @@ public class MovePointCommand extends MeasurementModeCommand {
|
|||
|
||||
@Override
|
||||
public void undo() {
|
||||
measurementLayer.getMeasurementPoints().remove(position);
|
||||
measurementLayer.getMeasurementPoints().add(position, oldPoint);
|
||||
measurementLayer.getEditingCtx().removePoint(position);
|
||||
measurementLayer.getEditingCtx().addPoint(position, oldPoint);
|
||||
measurementLayer.refreshMap();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void redo() {
|
||||
measurementLayer.getMeasurementPoints().remove(position);
|
||||
measurementLayer.getMeasurementPoints().add(position, newPoint);
|
||||
measurementLayer.getEditingCtx().removePoint(position);
|
||||
measurementLayer.getEditingCtx().addPoint(position, newPoint);
|
||||
measurementLayer.refreshMap();
|
||||
}
|
||||
|
||||
|
|
|
@ -15,21 +15,21 @@ public class RemovePointCommand extends MeasurementModeCommand {
|
|||
|
||||
@Override
|
||||
public boolean execute() {
|
||||
point = measurementLayer.getMeasurementPoints().remove(position);
|
||||
point = measurementLayer.getEditingCtx().removePoint(position);
|
||||
measurementLayer.refreshMap();
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void undo() {
|
||||
measurementLayer.getMeasurementPoints().add(position, point);
|
||||
measurementLayer.getEditingCtx().addPoint(position, point);
|
||||
measurementLayer.refreshMap();
|
||||
measurementLayer.moveMapToPoint(position);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void redo() {
|
||||
measurementLayer.getMeasurementPoints().remove(position);
|
||||
measurementLayer.getEditingCtx().removePoint(position);
|
||||
measurementLayer.refreshMap();
|
||||
}
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@ public class ReorderPointCommand extends MeasurementModeCommand {
|
|||
}
|
||||
|
||||
private void swap() {
|
||||
Collections.swap(measurementLayer.getMeasurementPoints(), from, to);
|
||||
Collections.swap(measurementLayer.getEditingCtx().getPoints(), from, to);
|
||||
measurementLayer.refreshMap();
|
||||
}
|
||||
|
||||
|
|
|
@ -16,21 +16,21 @@ public class SnapToRoadCommand extends MeasurementModeCommand {
|
|||
|
||||
@Override
|
||||
public boolean execute() {
|
||||
measurementLayer.getSnappedToRoadPoints().clear();
|
||||
measurementLayer.getSnappedToRoadPoints().addAll(snappedPoints);
|
||||
measurementLayer.refreshMap();
|
||||
// measurementLayer.getSnappedToRoadPoints().clear();
|
||||
// measurementLayer.getSnappedToRoadPoints().addAll(snappedPoints);
|
||||
// measurementLayer.refreshMap();
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void undo() {
|
||||
measurementLayer.getSnappedToRoadPoints().clear();
|
||||
// measurementLayer.getSnappedToRoadPoints().clear();
|
||||
measurementLayer.refreshMap();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void redo() {
|
||||
measurementLayer.getSnappedToRoadPoints().addAll(snappedPoints);
|
||||
// measurementLayer.getSnappedToRoadPoints().addAll(snappedPoints);
|
||||
measurementLayer.refreshMap();
|
||||
}
|
||||
|
||||
|
|
|
@ -6,8 +6,9 @@ import net.osmand.plus.ApplicationMode;
|
|||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.routing.RouteProvider.GPXRouteParams;
|
||||
import net.osmand.plus.routing.RouteProvider.RouteService;
|
||||
import net.osmand.plus.routing.RouteProvider.SnapToRoadParams;
|
||||
import net.osmand.plus.routing.RoutingHelper.RouteCalculationProgressCallback;
|
||||
import net.osmand.router.RouteCalculationProgress;
|
||||
import net.osmand.router.RoutingContext;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
@ -16,16 +17,23 @@ public class RouteCalculationParams {
|
|||
public Location start;
|
||||
public LatLon end;
|
||||
public List<LatLon> intermediates;
|
||||
|
||||
|
||||
|
||||
|
||||
public OsmandApplication ctx;
|
||||
public RoutingContext cachedRoutingContext;
|
||||
public ApplicationMode mode;
|
||||
public RouteService type;
|
||||
public GPXRouteParams gpxRoute;
|
||||
public SnapToRoadParams snapToRoadParams;
|
||||
public RouteCalculationResult previousToRecalculate;
|
||||
public boolean onlyStartPointChanged;
|
||||
public boolean fast;
|
||||
public boolean leftSide;
|
||||
public boolean inSnapToRoadMode;
|
||||
public RouteCalculationProgress calculationProgress;
|
||||
public RouteCalculationProgressCallback calculationProgressCallback;
|
||||
public RouteCalculationResultListener resultListener;
|
||||
|
||||
public interface RouteCalculationResultListener {
|
||||
void onRouteCalculated(List<Location> locations);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,26 +1,9 @@
|
|||
package net.osmand.plus.routing;
|
||||
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.StringReader;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URLConnection;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
import javax.xml.parsers.FactoryConfigurationError;
|
||||
import javax.xml.parsers.ParserConfigurationException;
|
||||
import android.content.Context;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
|
||||
import net.osmand.Location;
|
||||
import net.osmand.PlatformUtil;
|
||||
|
@ -44,13 +27,11 @@ import net.osmand.plus.TargetPointsHelper.TargetPoint;
|
|||
import net.osmand.plus.Version;
|
||||
import net.osmand.plus.activities.SettingsNavigationActivity;
|
||||
import net.osmand.plus.render.NativeOsmandLibrary;
|
||||
import net.osmand.plus.routing.RoutingHelper.RouteCalculationProgressCallback;
|
||||
import net.osmand.router.GeneralRouter;
|
||||
import net.osmand.router.GeneralRouter.GeneralRouterProfile;
|
||||
import net.osmand.router.GeneralRouter.RoutingParameter;
|
||||
import net.osmand.router.GeneralRouter.RoutingParameterType;
|
||||
import net.osmand.router.PrecalculatedRouteDirection;
|
||||
import net.osmand.router.RouteCalculationProgress;
|
||||
import net.osmand.router.RoutePlannerFrontEnd;
|
||||
import net.osmand.router.RoutePlannerFrontEnd.RouteCalculationMode;
|
||||
import net.osmand.router.RouteSegmentResult;
|
||||
|
@ -59,22 +40,36 @@ import net.osmand.router.RoutingConfiguration.Builder;
|
|||
import net.osmand.router.RoutingContext;
|
||||
import net.osmand.router.TurnType;
|
||||
import net.osmand.util.Algorithms;
|
||||
import net.osmand.util.MapUtils;
|
||||
import net.osmand.util.GeoPolylineParserUtil;
|
||||
import net.osmand.util.MapUtils;
|
||||
|
||||
import org.json.JSONObject;
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.NodeList;
|
||||
import org.xml.sax.InputSource;
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URLConnection;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
import javax.xml.parsers.FactoryConfigurationError;
|
||||
import javax.xml.parsers.ParserConfigurationException;
|
||||
|
||||
import btools.routingapp.IBRouterService;
|
||||
|
||||
|
||||
|
@ -284,19 +279,6 @@ public class RouteProvider {
|
|||
}
|
||||
}
|
||||
|
||||
public static class SnapToRoadParams {
|
||||
|
||||
public ApplicationMode applicationMode;
|
||||
public RouteCalculationProgress calculationProgress;
|
||||
public RouteCalculationProgressCallback calculationProgressCallback;
|
||||
public SnapToRoadListener listener;
|
||||
public List<Location> points;
|
||||
|
||||
public interface SnapToRoadListener {
|
||||
void onSnapToRoadDone();
|
||||
}
|
||||
}
|
||||
|
||||
private static Location createLocation(WptPt pt){
|
||||
Location loc = new Location("OsmandRouteProvider");
|
||||
loc.setLatitude(pt.lat);
|
||||
|
@ -769,7 +751,7 @@ public class RouteProvider {
|
|||
paramsR.put(key, vl);
|
||||
}
|
||||
}
|
||||
if (params.snapToRoadParams != null) {
|
||||
if (params.inSnapToRoadMode) {
|
||||
paramsR.put(GeneralRouter.ALLOW_PRIVATE, "true");
|
||||
}
|
||||
float mb = (1 << 20);
|
||||
|
|
|
@ -19,7 +19,6 @@ import net.osmand.plus.notifications.OsmandNotification.NotificationType;
|
|||
import net.osmand.plus.routing.RouteCalculationResult.NextDirectionInfo;
|
||||
import net.osmand.plus.routing.RouteProvider.GPXRouteParamsBuilder;
|
||||
import net.osmand.plus.routing.RouteProvider.RouteService;
|
||||
import net.osmand.plus.routing.RouteProvider.SnapToRoadParams;
|
||||
import net.osmand.router.RouteCalculationProgress;
|
||||
import net.osmand.router.RouteSegmentResult;
|
||||
import net.osmand.router.TurnType;
|
||||
|
@ -388,7 +387,7 @@ public class RoutingHelper {
|
|||
|
||||
if (calculateRoute) {
|
||||
recalculateRouteInBackground(currentLocation, finalLocation, intermediatePoints, currentGPXRoute,
|
||||
previousRoute.isCalculated() ? previousRoute : null, false, !targetPointsChanged, null);
|
||||
previousRoute.isCalculated() ? previousRoute : null, false, !targetPointsChanged);
|
||||
} else {
|
||||
Thread job = currentRunningJob;
|
||||
if(job instanceof RouteRecalculationThread) {
|
||||
|
@ -871,11 +870,8 @@ public class RoutingHelper {
|
|||
synchronized (RoutingHelper.this) {
|
||||
if (res.isCalculated()) {
|
||||
route = res;
|
||||
if (params.snapToRoadParams != null) {
|
||||
params.snapToRoadParams.points = res.getRouteLocations();
|
||||
if (params.snapToRoadParams.listener != null) {
|
||||
params.snapToRoadParams.listener.onSnapToRoadDone();
|
||||
}
|
||||
if (params.resultListener != null) {
|
||||
params.resultListener.onRouteCalculated(res.getRouteLocations());
|
||||
}
|
||||
} else {
|
||||
evalWaitInterval = Math.max(3000, evalWaitInterval * 3 / 2); // for Issue #3899
|
||||
|
@ -911,18 +907,13 @@ public class RoutingHelper {
|
|||
}
|
||||
}
|
||||
|
||||
public void recalculateSnapToRoad(final Location start, final LatLon end, final List<LatLon> intermediates, SnapToRoadParams params) {
|
||||
recalculateRouteInBackground(start, end, intermediates, null, route, true, false, params);
|
||||
}
|
||||
|
||||
public void recalculateRouteDueToSettingsChange() {
|
||||
clearCurrentRoute(finalLocation, intermediatePoints);
|
||||
recalculateRouteInBackground(lastFixedLocation, finalLocation, intermediatePoints, currentGPXRoute, route, true, false, null);
|
||||
recalculateRouteInBackground(lastFixedLocation, finalLocation, intermediatePoints, currentGPXRoute, route, true, false);
|
||||
}
|
||||
|
||||
private void recalculateRouteInBackground(final Location start, final LatLon end, final List<LatLon> intermediates,
|
||||
final GPXRouteParamsBuilder gpxRoute, final RouteCalculationResult previousRoute, boolean paramsChanged, boolean onlyStartPointChanged,
|
||||
final SnapToRoadParams snapToRoadParams){
|
||||
final GPXRouteParamsBuilder gpxRoute, final RouteCalculationResult previousRoute, boolean paramsChanged, boolean onlyStartPointChanged){
|
||||
if (start == null || end == null) {
|
||||
return;
|
||||
}
|
||||
|
@ -944,42 +935,39 @@ public class RoutingHelper {
|
|||
recalculateCountInInterval = 0;
|
||||
}
|
||||
params.leftSide = settings.DRIVING_REGION.get().leftHandDriving;
|
||||
ApplicationMode mode;
|
||||
if (snapToRoadParams != null && snapToRoadParams.applicationMode != null) {
|
||||
params.snapToRoadParams = snapToRoadParams;
|
||||
mode = snapToRoadParams.applicationMode;
|
||||
} else {
|
||||
mode = this.mode;
|
||||
}
|
||||
params.fast = settings.FAST_ROUTE_MODE.getModeValue(mode);
|
||||
params.type = settings.ROUTER_SERVICE.getModeValue(mode);
|
||||
params.mode = mode;
|
||||
params.ctx = app;
|
||||
boolean updateProgress = false;
|
||||
if (params.type == RouteService.OSMAND) {
|
||||
if (snapToRoadParams != null && snapToRoadParams.calculationProgress != null) {
|
||||
params.calculationProgress = snapToRoadParams.calculationProgress;
|
||||
} else {
|
||||
params.calculationProgress = new RouteCalculationProgress();
|
||||
}
|
||||
updateProgress(params);
|
||||
params.calculationProgress = new RouteCalculationProgress();
|
||||
updateProgress = true;
|
||||
}
|
||||
synchronized (this) {
|
||||
final Thread prevRunningJob = currentRunningJob;
|
||||
RouteRecalculationThread newThread = new RouteRecalculationThread(
|
||||
"Calculating route", params, paramsChanged); //$NON-NLS-1$
|
||||
currentRunningJob = newThread;
|
||||
if (prevRunningJob != null) {
|
||||
newThread.setWaitPrevJob(prevRunningJob);
|
||||
}
|
||||
currentRunningJob.start();
|
||||
startRouteCalculationThread(params, paramsChanged, updateProgress);
|
||||
}
|
||||
}
|
||||
|
||||
public void startRouteCalculationThread(RouteCalculationParams params, boolean paramsChanged, boolean updateProgress) {
|
||||
if (updateProgress) {
|
||||
updateProgress(params);
|
||||
}
|
||||
synchronized (this) {
|
||||
final Thread prevRunningJob = currentRunningJob;
|
||||
RouteRecalculationThread newThread = new RouteRecalculationThread(
|
||||
"Calculating route", params, paramsChanged); //$NON-NLS-1$
|
||||
currentRunningJob = newThread;
|
||||
if (prevRunningJob != null) {
|
||||
newThread.setWaitPrevJob(prevRunningJob);
|
||||
}
|
||||
currentRunningJob.start();
|
||||
}
|
||||
}
|
||||
|
||||
private void updateProgress(final RouteCalculationParams params) {
|
||||
final RouteCalculationProgressCallback progressRoute;
|
||||
if (params.snapToRoadParams != null) {
|
||||
progressRoute = params.snapToRoadParams.calculationProgressCallback;
|
||||
if (params.calculationProgressCallback != null) {
|
||||
progressRoute = params.calculationProgressCallback;
|
||||
} else {
|
||||
progressRoute = this.progressRoute;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue