Ahoj, přidal jsem podporu nějakého nastavení TraceServeru: http://jabi.aspone.cz/osm/TraceServerBeta5.zip
Zároveň podporuje pluginy pro předzpracování bitmapy i filtraci bodů (asi nejproblematičtější část trasování). Konfigurační soubor je ve formátu XML a definuje dvě pipelines (bitmapFilters a pointSetFilters). Tyto lze skládat z vestavených filtrů a pluginů. Pluginy ve formě tříd v Class Library musí referencovat Osm.Kn.Trace.Server.Interfaces.dll a implementovat jednoduché rozhraní IBitmapFilter nebo IPointSetFilter. Schema: http://jabi.aspone.cz/osm/PluginInterface.png Zároveň je třeba třídě přiřadit atribut BitmapFilterAttribut nebo PointSetFilterAttribute a kontruktoru přiřadit jméno, které se pak používá pro označení pluignu v konfiguračním souboru. Filtry mohou mít parametry, které lze nastavovat v konf. souboru. Jeden filtr může být v pipeline vícekrát (třeba i s různým nastavením). Hotové Class Libraries (jedna knihovna může obsahovat více filtrů) je třeba umístit do složky plugins, která leží ve složce, ve které je Osm.Kn.Trace.Server.exe a Osm.Kn.Trace.Server.Interfaces.dll. Pro pochopení, co který filtr dělá, doporučuji všechny následující filtry v pipeline zakomentovat a zkusit v JOSM, co z toho bude lézt. Při změně bitmapFilters je vhodné smazat cache soubory. Při změně pointSetFilters to není třeba. I bez tvorby nových pluignů je možné trasování ovlivňovat změnou pipeline (ubírám filtrů, změnou pořadí, přidávám filtrů, změnou parametrů, ...). Pomocí pluginů je možné část nebo celou pipeline nahradit. Honza Příklad konfiguráku: <?xml version="1.0" encoding="utf-8" ?> <config> <bitmapFilters> <!-- Zacelí drobné díry v čarách tím, že očerní všechny bílé body, které sousedí alespoň v jednom ze 4 základních směrech s černým bodem. --> <filter name="SmallHoleRemover" /> </bitmapFilters> <pointSetFilters> <!-- Najde body, ve kterých se křivka láme pomocí metodu obdobnou jako při hledání extrémů funkce pomocí derivace. Ostatní body vynechá. --> <filter name="FindExtrems"> <!-- Vzdálenost bodu, od kterého se počítají vzdálenosti bodů křivky, od objektu. --> <param name="dist" value="10000" /> <!-- Počet směrů, do kterých se výše zmíněný bod umisťuje. --> <param name="stepCount" value="27" /> </filter> <!-- Najde body A, B, C, kde |AB| a |BC| je větěí než minDistance a zároveň vzdálenost AC od B je menší než minDistance. V takovýchto případech vynechá B. --> <filter name="SimplifyPolyline"> <param name="minDistance" value="15" /> <param name="maxDistance" value="4" /> </filter> <!-- Najde body A, B, C, kde |AB| a |BC| je větěí než minDistance a zároveň vzdálenost AC od B je menší než minDistance. V takovýchto případech vynechá B. --> <filter name="SimplifyPolyline"> <param name="minDistance" value="3" /> <param name="maxDistance" value="1.3" /> </filter> <!-- Najde A, B, C, D takové, že - |AB| je větší než minOuterDist, - |CD| je větší než minOuterDist, - |BC| je menší než maxInnerDist, - úhel přímek AB a CD je větší než minAngle A pak BC vyhodí a nahradí průsečíkem AB a CD. Tedy vlastně eliminuje "kulaté" rohy. --> <filter name="FindVertexis"> <param name="maxInnerDist" value="15" /> <param name="minOuterDist" value="5" /> <param name="minAngle" value="30" /> <!-- Neprovádět, pokud je bod ke smazání dále než tolerance od přímky AB i CD. --> <param name="tolerance" value="3" /> <!-- Neprovádět, pokud je průsečík AB a CD dále než tolerance od bodu B nebo C. --> <param name="tolerance2" value="20" /> </filter> <!-- Najde po sobě jdoucí body A, B, C, vzdálenost AC od B je menší než tolerance. V takovýchto případech vynechá B. ??? --> <filter name="FilterPointGroups"> <param name="tolerance" value="2" /> </filter> <!-- Najde body vynechané, které jsou dále než maxDistance od upraveného polygonu. A vrátí je zpět.--> <filter name="AddMissingPoints"> <param name="maxDistance" value="4" /> </filter> <!-- Pokusí se polygon nafouknout tak, aby segmenty polygonu byly ve středu čáry. --> <filter name="LineWidthCorrection"> </filter> <!-- Najde body A, B, C, kde |AB| a |BC| je větěí než minDistance a zároveň vzdálenost AC od B je menší než minDistance. V takovýchto případech vynechá B. --> <filter name="SimplifyPolyline"> <param name="minDistance" value="5" /> <param name="maxDistance" value="1.3" /> </filter> <!-- Najde body A, B, C, kde |AB| a |BC| je větěí než minDistance a zároveň vzdálenost AC od B je menší než minDistance. V takovýchto případech vynechá B. --> <filter name="SimplifyPolyline"> <param name="minDistance" value="15" /> <param name="maxDistance" value="2" /> </filter> </pointSetFilters> <webServer> <!-- TCP port, na kterém server poslouchá. --> <endPoint port="5050" /> </webServer> <wms> <!-- Okolí bodu kliknutí ve stupních lon/lat, které se stahuje. Stáhne se tedy minimálně čtverec (2*size) x (2*size). --> <surroundingToDownload size="0.001" /> <!-- Jak moc tmavý bod musí být, aby byl považován za černý (0-255)? --> <threshold value="127" /> <!-- verticalSkip ... o kolik pixelů se dlaždice stáhne ve vertikálním směru větší a pak se ořízne (nahoře). Kvůli copyrightu. tileSize ....... velikost dlaždice ve stupních lon/lat. resolution ..... rozlišení dlaždice v px. --> <downloader verticalSkip="560" tileSize="0.002" resolution="1600" /> </wms> </config> _______________________________________________ Talk-cz mailing list [email protected] http://lists.openstreetmap.org/listinfo/talk-cz

