DE:Osmosis/Writing Plugins

From OpenStreetMap Wiki
Jump to: navigation, search
Verfügbare Sprachen — Osmosis/Writing Plugins
Afrikaans Alemannisch aragonés asturianu azərbaycanca Bahasa Indonesia Bahasa Melayu Bân-lâm-gú Basa Jawa Baso Minangkabau bosanski brezhoneg català čeština dansk Deutsch eesti English español Esperanto estremeñu euskara français Frysk Gaeilge Gàidhlig galego Hausa hrvatski Igbo interlingua Interlingue isiXhosa isiZulu íslenska italiano Kiswahili Kreyòl ayisyen kréyòl gwadloupéyen kurdî latviešu Lëtzebuergesch lietuvių magyar Malagasy Malti Nederlands Nedersaksies norsk norsk nynorsk occitan Oromoo oʻzbekcha/ўзбекча Plattdüütsch polski português română shqip slovenčina slovenščina Soomaaliga suomi svenska Tiếng Việt Türkçe Vahcuengh vèneto Wolof Yorùbá Zazaki српски / srpski беларуская български қазақша македонски монгол русский тоҷикӣ українська Ελληνικά Հայերեն ქართული नेपाली मराठी हिन्दी অসমীয়া বাংলা ਪੰਜਾਬੀ ગુજરાતી ଓଡ଼ିଆ தமிழ் తెలుగు ಕನ್ನಡ മലയാളം සිංහල ไทย မြန်မာဘာသာ ລາວ ភាសាខ្មែរ ⵜⴰⵎⴰⵣⵉⵖⵜ አማርኛ 한국어 日本語 中文(简体)‎ 吴语 粵語 中文(繁體)‎ ייִדיש עברית اردو العربية پښتو سنڌي فارسی ދިވެހިބަސް

Aufbau eines Plugins

Ein Osmosis-Plugin besteht aus:

  • einem Zip-Archiv
    • einer Datei plugin.xml
    • den Klassen des Plugins

Inhalt von plugin.xml

(example plugin.xml)

<?xml version="1.0" ?>
<!DOCTYPE plugin PUBLIC "-//JPF//Java Plug-in Manifest 1.0" "http://jpf.sourceforge.net/plugin_1_0.dtd">
<plugin id="LibOSM" version="2.5.2.0"
    class="org.openstreetmap.osm.Plugins.LibOSMOsmosisPlugin">

    <!--These are library-files we require including our own code. -->
    <requires>
           <import plugin-id="org.openstreetmap.osmosis.core.plugin.Core" plugin-version="0.32" reverse-lookup="false"/>
    </requires>
    
    <!--These are library-files we require including our own code. -->
    <runtime>
        <library id="mycode" path="/" type="code"/>
    </runtime>

<!--This is where our plugin plugs into.
    The extension-point 'task' with a subclass of PluginLoader named 'WriteOSMBinPlugin'
    that tells Osmosis what tasks are provided.-->
    <extension plugin-id="org.openstreetmap.osmosis.core.plugin.Core"
               point-id="Task" id="LibOSM/OsmBin-Tasks/writeOsmBin">
       <parameter id="name"
               value="writeOsmBin"/>
       <parameter id="class"
               value="org.openstreetmap.osm.data.osmbin.OSMBinPlugin"/>
    </extension>
    <!--extension plugin-id="org.openstreetmap.osmosis.core.plugin.Core"
               point-id="Task" id="LibOSM/OsmBin-Tasks/writeOsmBin-0.6">
       <parameter id="name"
               value="writeOsmBin-0.6"/>
       <parameter id="class"
               value="org.openstreetmap.osm.data.osmbin.OSMBinPlugin"/>
    </extension-->
</plugin>

Wo hängt man sich ein

Momentan gibt es nur den Erweiterungs-Punkt task

Einhängen von tasks

Der plugin-loader

Um den Erweiterungs-Punkt task zu nutzen muß man eine Factory-Klasse schreiben die com.bretth.osmosis.core.plugin.PluginLoader erweitert (example).

Diese Klasse ist aus historischen Gründen erforderlich.

Die TaskManagerFactory

Diese Klasse enthält eine Methode loadTaskFactories() welche eine Zuordnung (map) vom Befehlszeilennamen zur Instanz von TaskManagerFactory zurückgibt.

Für jeden Task, der hinzugefügt werden soll, muß eine Implementierung von com.bretth.osmosis.core.pipeline.common.TaskManagerFactory geschrieben werden (example). Diese Klasse hat die Aufgabe, die Befehlszeilenargumente zu analysieren, Ihren Task zu instanziieren und in einen TaskManager zu verpacken. Zum Beispiel ein com.bretth.osmosis.core.pipeline.v0_5.SinkManager für eine Aufgabe, die OSM-Daten nutzt.

Der Task

Schließlich müssen Sie die eigentliche Aufgabe implementieren (example).