PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [JAVA] anwendung starten


BoM
2011-03-17, 21:35:34
Hi,
also folgendes problem:
es geht hier um openstreetmap sachen, z.B. ein kleines gebiet aus ner größeren datei ausschneiden mit bestimmten tagfiltern mithilfe von "osmosis".

für eine Datei sieht das unter CMD von Windows z.B. so aus:

osmosis --read-xml file="I:\Hiwi\bundesländer\baden-wuerttemberg.osm" --bounding-polygon file="I:\Hiwi\polysortiert\bawu\Ulm Städte1poly" --tf accept-ways highway=motorway --used-node --tf reject-relations --write-xml file="I:\Hiwi\testergebnis\Ulm2.osm"

nun sind paar hundert dateien und ich will es gerne automatisiert für jedes bundesland für alle landkreise machen.

das problem ist jetzt, wie schreibt man ein programm in Java, das genau diese aufgabe übernimmt.

die dateien nacheiander einlesen ist kein problem, aber der teil der Osmosis ausführen soll, macht probleme.

derzeit sieht der teil so aus:

public static void main(String argv[]) throws Exception {

[...]

String[] test =new String[]{"cmd", "/c", "osmosis"};
ProcessBuilder builder = new ProcessBuilder(test);
builder.directory( new File("I:\\Hiwi\\osmosis-0.38\\bin\\") );
Process p = builder.start();
String line;
Reader re = new InputStreamReader(p.getInputStream());
BufferedReader in = new BufferedReader(re);
while((line = in.readLine()) != null) System.out.println(line);
in.close();
}

Osmosis wird erst gar ned aufgerufen. wenn ich String[] test =new String[]{"cmd", "/c", "dir"};
dann zeigt er wie gewollt mit "dir" den ordnerinhalt an...

"Osmosis is a command line Java application..."


wer kann weiterhelfen :confused:

RattuS
2011-03-17, 22:11:35
Du kannst einen Prozess inklusive Parameter direkt ausführen lassen, nur müsstest du genauer definieren, welche Angaben variabel sind und woher diese Angaben kommen sollen. Hast du eine Liste mit allen Städten/Kreisen, die du extrahieren möchtest?

BoM
2011-03-18, 07:20:59
ich will es erstmal für eine datei probieren, aber das klappt ja schon mal nicht :(, irgendwie startet osmosis nicht über den javaprogramm code.

für mehrere dateien kann ich ja ein array erstellen und angeben in welchem ordner die sich befinden.

die paramater stehen ja schon oben im CMD befehl, die muss ich auch in java übergeben können.

also dateiinput(bundesland.osm), boundarypolygondatei(grenzen der landkreise) und dateioutput(landkreis.osm) sind variabel, parameter sind fest.

mit
String[] commands =new String[]{"cmd", "/c","osmosis","--read-xml","file=\"I:\\Hiwi\\bundesländer\\baden-wuerttemberg.osm\"","--bounding-polygon","file=\"I:\\Hiwi\\polysortiert\\bawu\\Ulm Städte1poly\"","--tf","accept-ways","highway=motorway,motorway_link,trunk,trunk_link,primary,primary_link,secondary,s econdary_link,tertiary,residential,unclassified,road,living_street,service,track ,mini_roundabout,stop,give_way,traffic_signals,crossing,motorway_junction","--used-node","--tf","reject-realtions","--write-xml","file=\"I:\\Hiwi\\testergebnis\\Ulm5.osm\""};

funzt es auch nicht

Der_Donnervogel
2011-03-19, 16:44:50
Ich habe die Sache nur kurz überflogen und bin mit dem ProcessBuilder nicht vertraut, aber hier meine Vermutung:

Kann es sein, dass osmosis nicht im Standardsuchpfad der Commanline ist und deshalb nicht gefunden wird?

"cmd", "/c", "dir"

funktioniert, da cmd die Commandline startet und dir auf jeden Fall von cmd gefunden werden kann.

"cmd", "/c", "osmosis"

startet auch die Commandline, aber ich vermute

builder.directory( new File("I:\\Hiwi\\osmosis-0.38\\bin\\") )

setzt den Pfad in dem cmd gestartet wird. Ob der Pfad dann auch innerhalb der Commandline übernommen wird weiß ich nicht. Könnte gut sein, dass dort der Standardpfad noch gesetzt ist.

Mal ganz davon abgesehen, wieso startest du dieses osmosis nicht direkt sondern per Umweg über die Commandline?

BoM
2011-03-19, 21:13:16
osmosis funktioniert nur über kommandozeilen

Der_Donnervogel
2011-03-19, 22:35:43
Schau mal ob du das ganze mit einer Batchdatei zum Laufen bekommst. Also erst mal eine Batchdatei machen die in den richtigen Ordner wechselt und dann osmosis ausführt. Wenn die dann direkt in der Commandline funktioniert, diese von Java aus starten. Falls das funktioniert ist es wohl ein Pfadproblem. Dann entweder schauen wie man das Pfadproblem direkt in Java behebt, oder aber die Batchdatei mit den jeweiligen Parametern jedesmal on-the-fly von Java aus erstellen und dann per Java starten.

BoM
2011-03-30, 11:08:19
so programm läuft unter linux, lag wirklich an den pfadzuweisungen :)

und nun nächstes problem xD

die .osm dateien sind im XML format. bestimmte attribute sollen nun in mysql übertragen werden...

aufbau der .osm datei:


<?xml version='1.0' encoding='UTF-8'?>
<osm version="0.6" generator="Osmosis 0.38">
<node id="238357" version="3" timestamp="2008-12-15T22:19:05Z" uid="23785" user="greecemapper" changeset="400599" lat="48.5311248" lon="9.6833477"/>
<node id="238358" version="3" timestamp="2009-02-27T20:50:33Z" uid="96507" user="Boxster" changeset="690508" lat="48.5309543" lon="9.6833337"/>
<node id="238361" version="3" timestamp="2008-12-15T22:19:05Z" uid="23785" user="greecemapper" changeset="400599" lat="48.5312101" lon="9.6797342"/>
<node id="238362" version="3" timestamp="2008-12-15T22:19:05Z" uid="23785" user="greecemapper" changeset="400599" lat="48.5316477" lon="9.6759749"/>
<node id="238363" version="3" timestamp="2008-12-15T22:19:06Z" uid="23785" user="greecemapper" changeset="400599" lat="48.5324206" lon="9.6711118"/>
<node id="238364" version="3" timestamp="2008-12-01T06:57:21Z" uid="35560" user="HeikoE" changeset="9672" lat="48.5322907" lon="9.6710894">
<tag k="highway" v="emergency_bay"/>
<tag k="source" v="Photo"/>
</node>

[...]

<way id="28380152" version="2" timestamp="2010-01-09T23:30:40Z" uid="24748" user="mabapla" changeset="3583453">
<nd ref="311743012"/>
<nd ref="311743144"/>
<nd ref="311743145"/>
<nd ref="311742488"/>
<tag k="bicycle" v="yes"/>
<tag k="highway" v="footway"/>
</way>





es gibt z.B eine Node-tabelle in mysql, in der die node ID, lat und lon eingetragen werden müssen.

wie geht man am besten vor? java oder scriptsprachen?