[Talk-cz] Osmose Česká republika

Martin Švec - OSM osm na maatts.cz
Úterý Prosinec 9 00:33:46 UTC 2014


On 8.12.2014 21:38, Marián Kyral wrote:
> Dne 8.12.2014 21:22, Martin Švec - OSM napsal(a):
>> Dne 8.12.2014 20:45, Marián Kyral napsal(a):
>>> Dne 8.12.2014 19:36, Martin Švec - OSM napsal(a):
>>>> Dne 7.12.2014 22:09, Marián Kyral napsal(a):
>>>>>
>>>>> A ještě jeden nápad mám v hlavě - hodně mne štve, jak je komplikované udělat z kousku silnice most (kouska potoka tunel). Vybrat cesru a dva body, rozdělit pomocí "p", vybrat prostřední kousek a změnit jej na most. Je tam dvakrát výběr.
>>>>>
>>>>> Uvažuji nad nějakým pluginem, kde by stačilo vybrat cestu a ty dva body a pak jen kliknout na "Convert to bridge/ Convert to tunnel". Rozdělení a otagování by se provedlo automaticky.
>>>>
>>>> A proč se zdržovat s vyráběním+výběrem bodů? :-) Co takto: Při kliknutí na průsečík cesty a vody se zobrazí dialog, v něm se vybere bridge/culvert a délka v metrech. Pak se sekne příslušná cesta na obě strany od průsečíku a otaguje. Pokud už body v patřičné vzdálenosti existují, použijí se existující.
>>>>
>>>
>>> No už vidím, jak se budu trefovat do správné délky :-D To raději udělám ty dva body podle katastrálních map. Navíc, v naprosté většině případů nemají cesty na průsečíku společný bod, takže jeden bod vytvořit musím.
>>>
>>> Ale co by šlo (ty určitě budeš mít představu jak to udělat v GUI, já to budu zkoumat mnohem déle):
>>>
>>> 1) aktivuji tool
>>> 2) kliknu na na cestu v místě začátku mostu/propustku (cesta na kterou chci kliknout se vysvítí - stejně jako u contourmerge pluginu)
>>> 3) vytvoří se bod (nebo se vybere již existující)
>>> 4) mezi prvním bodem a kurzorem myši se začne vykreslovat čára symbolizující most
>>> 5) kliknu na místo, kde most/propustek končí
>>> 6) vytvoří se (použije se již existující) druhý bod
>>> 7) cesta se rozdělí
>>> 8) vybere se segment mostu/tunelu
>>> 9) pokud jsem klikl na cestu - segment se otaguje jako most
>>> 10) pokud jsem klikl na waterway - segment se otaguje jako propustek
>>> 11) pokud to není ani higway ani waterway - rollback a chybová hláška
>>> 12) přidám nebo upravím tag layer - u mostu - layer = layer + 1; u propustku: layer = layer - 1
>>>
>>
>> Jo, to zní taky dobře. Ale zklamu tě, interaktivní záležitosti v GUI jsem vůbec nezkoumal. Celý Tracer je jednorázová "transakce" nad zamknutým DataSetem, dál jsem se nedostal.
>>
>
> No to já taky ne. Ale ty umíš lépe hledat v dokumentaci. Já se v ní ztrácím, hledám něco a ani vlastně nevím co :-D
> Určitě by se jako základ dal využít ten contour merge plugin. Musím to prozkoumat.
>

Dokumentace? Ale fujtajbl :-) Hlavně se musí číst zdrojáky. Vyšel bych z ImproveWayAccuracyAction.java [1], tam je všechno krásně na jednom místě. Z toho co vidím:
(a) Implementuješ rozšíření třídy MapMode = režim toolu, to dělá i Tracer.
(b) Implementuješ rozhraní MapViewPaintable, přes něj se metodou paint() kreslí.
(c) V enterMode() si přidáš dočasnou vrstvu s tvou implementací MapViewPaintable přes Main.map.mapView.addTemporaryLayer(this).
(d) Zahákneš si listenery na události myši a modifikátorů.
(e) Reaguješ na události, pamatuješ si stavy, a podle nich kreslíš a edituješ.
(f) V exitMode() po sobě uklidíš listenery a kreslící vrstvu.

Tolik teorie, praxi nechám na tobě ;-)

Jaks výš popsal princip toolu -- v bodě (3) bych nový bod nevytářel, jen si zapamatoval jeho místo a vykresloval fiktivní bod v temporary vrstvě. Oba uzly by se vytvořily až po kliknutí (5), ať undo zruší celou operaci.

[1] http://josm.openstreetmap.de/browser/trunk/src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyAction.java

Martin





Další informace o konferenci talk-cz