Da sollte sich das Skript aber anpassen lassen. Den Java-Suchpfad kann man entweder, wie beschrieben, über die Variable CLASSPATH setzen oder man muss alles vollständig in der Java-Befehlszeile übergeben.
Allgemeiner Java-Aufruf:
java -cp
Entsprechend kann man auch den Aufruf im Perl-Skript ändern. Ich habe das mal kurz gemacht, ohne es aber selbst testen zu können(!). Die neue Variable “$osmosisclasspath” im Skript muss ggf. noch an die eigene Verzeichnisstruktur angepasst werden. Momentan geht diese davon aus, dass sich osmosis.jar im aktuellen Verzeichnis (also “.”) befindet und die anderen .jar-Dateien von Osmosis im Unterverzeichnis “./lib/default” unterhalb des aktuellen Ordners.
Ich hoffe, ich habe als Nur-Sporadisch-Windows-Skript-Bearbeiter, Nicht-Programmierer, Nicht-Perl-Kenner und Nicht-Linux-Nutzer nichts vergessen und keine Schnitzer eingebaut.
Das Perl-Skript ist ansonsten übrigens recht alt. Funktioniert das überhaupt grundsätzlich noch mit der aktuellen OSM-API?
Kann man hier keine Dateien anhängen? Ok, dann packe ich die geänderten Teiles des SV-Stat.pl-Skriptes hier mal unten drunter. Das ist zwar nicht sehr professionell, sollte aber für ein Copy&Paste reichen:
Geänderter Skriptanfang:
#!/usr/bin/perl -w
Test für Osmosis ab 0.30, Ebbe73, 2009-12-22
Variablen $osmosisclasspath und $osmosismainclass ergänzt
Variable $osmosisjar entfernt
use vars um $osmosisclasspath und $osmosismainclass ergänzt, $osmosisjar entfernt
keine Ahnung, ob das so richtig ist, kenne Perl nicht näher
entsprechende zwei Aufrufe im Skript angepasst
“-jar”,$osmosisjar durch “-cp”,$osmosisclasspath,$osmosismainclass ersetzt
ergänzt Perl die Leerzeichen dazwischen automatisch?
use utf8;
use Time::Local;
use Text::LevenshteinXS qw(distance);
use XML::Parser;
use strict; # geht leider noch nicht
use vars qw($ort $ortURL $ortHTML $bundesland $pw_schutz
$standdate $csvSpalteStr $csvSpalteOrt
$osmosis_source $osmosis_polygon
$osmosis_minLat $osmosis_maxLat
$osmosis_minLon $osmosis_maxLon
$bildSource $bugWikiText $bugWikiURL
$csvSeperator $nutzungsErlaubnis $printBild
$java_bin $osmosisclasspath $osmosismainclass
$debug $autocoordinaten
$nutzeLeisurePark
$strip_dash_names $link_unknown
$bzip2_bin
);
$java_bin=“/usr/local/java/jre1.6.0_05.amd64/bin/java”;
$osmosisclasspath=“./osmosis.jar;./lib/default/bzip2-20090327.jar;./lib/default/commons-logging-1.1.1.jar;./lib/default/jpf-1.5.jar;./lib/default/mysql-connector-java-5.1.10.jar;./lib/default/postgis-1.3.2.jar;./lib/default/postgresql-8.3-603.jdbc4.jar;./lib/default/stax2-api-3.0.1.jar;./lib/default/woodstox-core-lgpl-4.0.3.jar”;
$osmosismainclass=“org.openstreetmap.osmosis.core.Osmosis”
$bzip2_bin=“/bin/bzip2”;
<<<<<<
Geänderter Osmosis-Abschnitt im Skript:
############################################################################
Osmosis
############################################################################
my @osmosiscmd=();
my $zuschnittStr=“”;
if (defined($osmosis_source)) {
my $doit=0;
if (-f “$ortURL.osm.bz2”) {
my @statsource=stat($osmosis_source);
my @statdestination=stat(“$ortURL.osm.bz2”);
$doit=($statsource[9]>$statdestination[9]);
if ($doit==0) {
print “do not run osmosis: Source is older than Destination\n” if $debug;
}
} else {
$doit=1;
}
if (defined($osmosis_minLat)) {
defined($osmosis_maxLat) or die(“osmosis_maxLat not defined”);
defined($osmosis_maxLon) or die(“osmosis_maxLon not defined”);
defined($osmosis_minLon) or die(“osmosis_minLon not defined”);
(-f $osmosis_source) or die(“Osmosis Source $osmosis_source not found”);
@osmosiscmd=($java_bin,“-cp”,$osmosisclasspath,$osmosismainclass,
“–rx”,“file=$osmosis_source”,
“–bb”,
“top=$osmosis_maxLat”,
“bottom=$osmosis_minLat”,
“left=$osmosis_minLon”,
“right=$osmosis_maxLon”,
“–wx”,“file=$ortURL.osm”);
$zuschnittStr=“Der Zuschnitt erfolgte durch die Koordinaten: ($osmosis_minLat,$osmosis_minLon),($osmosis_maxLat,$osmosis_maxLon).”;
} elsif (defined($osmosis_polygon)) {
@osmosiscmd=($java_bin,"-cp",$osmosisclasspath,$osmosismainclass,
"--rx","file=$osmosis_source",
"--bp","file=$osmosis_polygon",
"--wx","file=$ortURL.osm");
$zuschnittStr="Der Zuschnitt erfolgte durch das Polygon: <a href=\"$osmosis_polygon\">$osmosis_polygon</a>.";
my @cmd=("/bin/cp",$osmosis_polygon,$ortURL."/");
system(@cmd)==0 or die;
} else {
die("osmosis_source is defined but no lat/lon or poly");
}
if ($doit==0) {
@osmosiscmd=();
}
}
if ($#osmosiscmd>-1) {
if (-f “$ortURL.osm.bz2”) {
print “rm $ortURL.osm.bz2\n” if $debug;
unlink(“$ortURL.osm.bz2”);
}
print join(" “,@osmosiscmd),”\n" if $debug;
system(@osmosiscmd)==0 or die(“Osmosis died with exit code: $?”);
# Bzip
my @bzipcmd=($bzip2_bin,“$ortURL.osm”);
print join(" “,@bzipcmd),”\n" if $debug;
system(@bzipcmd)==0 or die(“Bzip2 died with exit code: $?”);
}
############################################################################
<<<<<<