Skip to content

Commit 9aecb2a

Browse files
committed
Finish transition to Fieldpapers and new scrape logic for WP.org
1 parent b2ef175 commit 9aecb2a

File tree

10 files changed

+223
-64
lines changed

10 files changed

+223
-64
lines changed

.classpath

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@
22
<classpath>
33
<classpathentry kind="src" path="src"/>
44
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
5-
<classpathentry combineaccessrules="false" kind="src" path="/JOSM"/>
5+
<classpathentry combineaccessrules="false" kind="src" path="/josm"/>
66
<classpathentry kind="output" path="build"/>
77
</classpath>

README

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
A plugin for displaying tiled, scanned maps from walking-papers.org.
1+
A plugin for displaying tiled, scanned maps from fieldpapers.org.
22

3-
Written by Frederik Ramm <[email protected]>, based on SlippyMap
4-
plugin work by Lubomir Varga <[email protected]> or <[email protected]>.
3+
Adapted by Ian Dees <[email protected]> from a plugin written by
4+
Frederik Ramm <[email protected]>, based on SlippyMap plugin work
5+
by Lubomir Varga <[email protected]> or <[email protected]>.
56

67
Public Domain.

build.xml

Lines changed: 161 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,173 @@
1111
** Call "ant help" to get possible build targets.
1212
**
1313
-->
14-
<project name="walkingpapers" default="dist" basedir=".">
14+
<project name="fieldpapers" default="dist" basedir=".">
1515

1616
<!-- enter the SVN commit message -->
1717
<property name="commit.message" value="Changed the constructor signature of the plugin main class"/>
1818
<!-- enter the *lowest* JOSM version this plugin is currently compatible with -->
1919
<property name="plugin.main.version" value="4549"/>
2020

21-
<property name="plugin.author" value="Frederik Ram"/>
22-
<property name="plugin.class" value="org.openstreetmap.josm.plugins.walkingpapers.WalkingPapersPlugin"/>
23-
<property name="plugin.description" value="Supports downloading tiled, scanned maps from walking-papers.org. This plugin is still under early development and may be buggy."/>
24-
<property name="plugin.icon" value="images/preferences/walkingpapers.png"/>
25-
<property name="plugin.link" value="http://wiki.openstreetmap.org/index.php/JOSM/Plugins/WalkingPapers"/>
21+
<property name="plugin.author" value="Ian Dees"/>
22+
<property name="plugin.class" value="org.openstreetmap.josm.plugins.fieldpapers.FieldPapersPlugin"/>
23+
<property name="plugin.description" value="Supports downloading tiled, scanned maps from fieldpapers.org."/>
24+
<property name="plugin.icon" value="images/preferences/fieldpapers.png"/>
25+
<property name="plugin.link" value="http://wiki.openstreetmap.org/index.php/JOSM/Plugins/FieldPapers"/>
2626

27-
<!-- ** include targets that all plugins have in common ** -->
28-
<import file="../build-common.xml"/>
27+
<property name="josm" location="../../core/dist/josm-custom.jar"/>
28+
<property name="plugin.dist.dir" value="../../dist"/>
29+
<property name="plugin.build.dir" value="build"/>
30+
<property name="plugin.jar" value="${plugin.dist.dir}/${ant.project.name}.jar"/>
31+
<property name="ant.build.javac.target" value="1.5"/>
32+
<target name="init">
33+
<mkdir dir="${plugin.build.dir}"/>
34+
</target>
35+
<target name="compile" depends="init">
36+
<echo message="creating ${plugin.jar}"/>
37+
<javac srcdir="src" classpath="${josm}" debug="true" destdir="${plugin.build.dir}">
38+
<compilerarg value="-Xlint:deprecation"/>
39+
<compilerarg value="-Xlint:unchecked"/>
40+
</javac>
41+
</target>
42+
<target name="dist" depends="compile">
43+
<copy todir="${plugin.build.dir}/images">
44+
<fileset dir="images"/>
45+
</copy>
46+
<copy todir="${plugin.build.dir}/data">
47+
<fileset dir="data"/>
48+
</copy>
49+
<jar destfile="${plugin.jar}" basedir="${plugin.build.dir}">
50+
<manifest>
51+
<attribute name="Author" value="${plugin.author}"/>
52+
<attribute name="Plugin-Class" value="${plugin.class}"/>
53+
<attribute name="Plugin-Date" value="${version.entry.commit.date}"/>
54+
<attribute name="Plugin-Description" value="${plugin.description}"/>
55+
<attribute name="Plugin-Icon" value="${plugin.icon}"/>
56+
<attribute name="Plugin-Link" value="${plugin.link}"/>
57+
<attribute name="Plugin-Mainversion" value="${plugin.main.version}"/>
58+
<attribute name="Plugin-Version" value="${version.entry.commit.revision}"/>
59+
</manifest>
60+
</jar>
61+
</target>
62+
<target name="revision">
63+
<exec executable="git" outputproperty="git.revision" failifexecutionfails="false" errorproperty="">
64+
<arg value="describe"/>
65+
<arg value="--tags"/>
66+
<arg value="--always"/>
67+
<arg value="HEAD"/>
68+
</exec>
69+
<condition property="repository.version" value="${git.revision}" else="unknown">
70+
<and>
71+
<isset property="git.revision"/>
72+
<length string="${git.revision}" trim="yes" length="0" when="greater"/>
73+
</and>
74+
</condition>
75+
</target>
76+
<target name="clean">
77+
<delete dir="${plugin.build.dir}"/>
78+
<delete file="${plugin.jar}"/>
79+
</target>
80+
<target name="install" depends="dist">
81+
<property environment="env"/>
82+
<condition property="josm.plugins.dir" value="${env.APPDATA}/JOSM/plugins" else="${user.home}/.josm/plugins">
83+
<and>
84+
<os family="windows"/>
85+
</and>
86+
</condition>
87+
<copy file="${plugin.jar}" todir="${josm.plugins.dir}"/>
88+
</target>
89+
<!--
90+
************************** Publishing the plugin ***********************************
91+
-->
92+
<!--
93+
** extracts the JOSM release for the JOSM version in ../core and saves it in the
94+
** property ${coreversion.info.entry.revision}
95+
**
96+
-->
97+
<target name="core-info">
98+
<exec append="false" output="core.info.xml" executable="svn" failifexecutionfails="false">
99+
<env key="LANG" value="C"/>
100+
<arg value="info"/>
101+
<arg value="--xml"/>
102+
<arg value="../../core"/>
103+
</exec>
104+
<xmlproperty file="core.info.xml" prefix="coreversion" keepRoot="true" collapseAttributes="true"/>
105+
<echo>Building against core revision ${coreversion.info.entry.revision}.</echo>
106+
<echo>Plugin-Mainversion is set to ${plugin.main.version}.</echo>
107+
<delete file="core.info.xml"/>
108+
</target>
109+
<!--
110+
** commits the source tree for this plugin
111+
-->
112+
<target name="commit-current">
113+
<echo>Commiting the plugin source with message '${commit.message}' ...</echo>
114+
<exec append="true" output="svn.log" executable="svn" failifexecutionfails="false">
115+
<env key="LANG" value="C"/>
116+
<arg value="commit"/>
117+
<arg value="-m '${commit.message}'"/>
118+
<arg value="."/>
119+
</exec>
120+
</target>
121+
<!--
122+
** updates (svn up) the source tree for this plugin
123+
-->
124+
<target name="update-current">
125+
<echo>Updating plugin source ...</echo>
126+
<exec append="true" output="svn.log" executable="svn" failifexecutionfails="false">
127+
<env key="LANG" value="C"/>
128+
<arg value="up"/>
129+
<arg value="."/>
130+
</exec>
131+
<echo>Updating ${plugin.jar} ...</echo>
132+
<exec append="true" output="svn.log" executable="svn" failifexecutionfails="false">
133+
<env key="LANG" value="C"/>
134+
<arg value="up"/>
135+
<arg value="../dist/${plugin.jar}"/>
136+
</exec>
137+
</target>
138+
<!--
139+
** commits the plugin.jar
140+
-->
141+
<target name="commit-dist">
142+
<echo>
143+
***** Properties of published ${plugin.jar} *****
144+
Commit message : '${commit.message}'
145+
Plugin-Mainversion: ${plugin.main.version}
146+
JOSM build version: ${coreversion.info.entry.revision}
147+
Plugin-Version : ${version.entry.commit.revision}
148+
***** / Properties of published ${plugin.jar} *****
149+
150+
Now commiting ${plugin.jar} ...
151+
</echo>
152+
<exec append="true" output="svn.log" executable="svn" failifexecutionfails="false">
153+
<env key="LANG" value="C"/>
154+
<arg value="-m '${commit.message}'"/>
155+
<arg value="commit"/>
156+
<arg value="${plugin.jar}"/>
157+
</exec>
158+
</target>
159+
<!-- ** make sure svn is present as a command line tool ** -->
160+
<target name="ensure-svn-present">
161+
<exec append="true" output="svn.log" executable="svn" failifexecutionfails="false" failonerror="false" resultproperty="svn.exit.code">
162+
<env key="LANG" value="C"/>
163+
<arg value="--version"/>
164+
</exec>
165+
<fail message="Fatal: command 'svn --version' failed. Please make sure svn is installed on your system.">
166+
<!-- return code not set at all? Most likely svn isn't installed -->
167+
<condition>
168+
<not>
169+
<isset property="svn.exit.code"/>
170+
</not>
171+
</condition>
172+
</fail>
173+
<fail message="Fatal: command 'svn --version' failed. Please make sure a working copy of svn is installed on your system.">
174+
<!-- error code from SVN? Most likely svn is not what we are looking on this system -->
175+
<condition>
176+
<isfailure code="${svn.exit.code}"/>
177+
</condition>
178+
</fail>
179+
</target>
180+
<target name="publish" depends="ensure-svn-present,core-info,commit-current,update-current,clean,dist,commit-dist">
181+
</target>
29182

30183
</project>
File renamed without changes.

src/org/openstreetmap/josm/plugins/fieldpapers/FieldPapersAddLayerAction.java

Lines changed: 35 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -20,79 +20,82 @@
2020
public class FieldPapersAddLayerAction extends JosmAction {
2121

2222
public FieldPapersAddLayerAction() {
23-
super(tr("Scanned Map..."), "walkingpapers",
24-
tr("Display a map that was previously scanned and uploaded to walking-papers.org"), null, false);
23+
super(tr("Scanned Map..."), "fieldpapers",
24+
tr("Display a map that was previously scanned and uploaded to fieldpapers.org"), null, false);
2525
}
2626

2727
public void actionPerformed(ActionEvent e) {
2828
String wpid = JOptionPane.showInputDialog(Main.parent,
29-
tr("Enter a walking-papers.org URL or ID (the bit after the ?id= in the URL)"),
30-
Main.pref.get("walkingpapers.last-used-id"));
29+
tr("Enter a fieldpapers.org snapshot URL"),
30+
Main.pref.get("fieldpapers.last-used-id"));
3131

3232
if (wpid == null || wpid.equals("")) return;
3333

3434
// Grab id= from the URL if we need to, otherwise get an ID
35-
String mungedWpId = this.getWalkingPapersId(wpid);
35+
String mungedWpId = this.getFieldPapersId(wpid);
3636

3737
if (mungedWpId == null || mungedWpId.equals("")) return;
3838

39-
// screen-scrape details about this id from walking-papers.org
40-
String wpUrl = Main.pref.get("walkingpapers.base-url", "http://walking-papers.org/") + "scan.php?id=" + mungedWpId;
39+
// screen-scrape details about this id from fieldpapers.org
40+
// e.g. http://fieldpapers.org/snapshot.php?id=nq78w6wl
41+
String wpUrl = Main.pref.get("fieldpapers.base-url", "http://fieldpapers.org/") + "snapshot.php?id=" + mungedWpId;
4142

42-
Pattern spanPattern = Pattern.compile("<span class=\"(\\S+)\">(\\S+)</span>");
43+
Pattern spanPattern = Pattern.compile("var (\\S*) = (\\S*);");
4344
Matcher m;
4445

46+
String boundsStr = "";
47+
String urlBase = null;
4548
double north = 0;
4649
double south = 0;
4750
double east = 0;
4851
double west = 0;
49-
int minz = -1;
50-
int maxz = -1;
51-
String tile = null;
5252

5353
try {
5454
BufferedReader r = new BufferedReader(new InputStreamReader(new URL(wpUrl).openStream(), "utf-8"));
5555
for (String line = r.readLine(); line != null; line = r.readLine()) {
5656
m = spanPattern.matcher(line);
5757
if (m.find()) {
58-
if ("tile".equals(m.group(1))) tile = m.group(2);
59-
else if ("north".equals(m.group(1))) north = Double.parseDouble(m.group(2));
60-
else if ("south".equals(m.group(1))) south = Double.parseDouble(m.group(2));
61-
else if ("east".equals(m.group(1))) east = Double.parseDouble(m.group(2));
62-
else if ("west".equals(m.group(1))) west = Double.parseDouble(m.group(2));
63-
else if ("minzoom".equals(m.group(1))) minz = Integer.parseInt(m.group(2));
64-
else if ("maxzoom".equals(m.group(1))) maxz = Integer.parseInt(m.group(2));
58+
if ("geojpeg_bounds".equals(m.group(1))) boundsStr = m.group(2);
59+
else if ("base_provider".equals(m.group(1))) urlBase = m.group(2);
6560
}
6661
}
6762
r.close();
68-
if ((tile == null) || (north == 0 && south == 0) || (east == 0 && west == 0)) throw new Exception();
63+
if (!boundsStr.isEmpty()) {
64+
String[] boundSplits = boundsStr.replaceAll("\"", "").split(",");
65+
south = Double.parseDouble(boundSplits[0]);
66+
west = Double.parseDouble(boundSplits[1]);
67+
north = Double.parseDouble(boundSplits[2]);
68+
east = Double.parseDouble(boundSplits[3]);
69+
}
70+
71+
if (!urlBase.isEmpty()) {
72+
urlBase = urlBase.replaceAll("\\\\", "").replaceAll("\"", "");
73+
}
74+
75+
if (urlBase == null || (north == 0 && south == 0) || (east == 0 && west == 0)) throw new Exception();
6976
} catch (Exception ex) {
70-
JOptionPane.showMessageDialog(Main.parent,tr("Could not read information from walking-papers.org the id \"{0}\"", mungedWpId));
77+
ex.printStackTrace();
78+
JOptionPane.showMessageDialog(Main.parent,tr("Could not read information for the id \"{0}\" from fieldpapers.org", mungedWpId));
7179
return;
7280
}
7381

74-
75-
//http://walking-papers.org/scan.php?id=rmvdr3lq
76-
// The server is apparently broken and returning the WpId in the URL twice
77-
// which makes it return errors when we fetch it. So, strip out one of
78-
// the dups. This is a hack and needs to get removed when the server
79-
// is fixed.
80-
tile = tile.replaceFirst(mungedWpId+"/"+mungedWpId, mungedWpId);
81-
Main.pref.put("walkingpapers.last-used-id", mungedWpId);
82+
String tileUrl = urlBase + "/{zoom}/{x}/{y}.jpg";
83+
Main.pref.put("fieldpapers.last-used-id", mungedWpId);
8284

8385
Bounds b = new Bounds(new LatLon(south, west), new LatLon(north, east));
8486

85-
FieldPapersLayer wpl = new FieldPapersLayer(mungedWpId, tile, b, minz, maxz);
87+
FieldPapersLayer wpl = new FieldPapersLayer(mungedWpId, tileUrl, b, 13, 18);
8688
Main.main.addLayer(wpl);
8789

8890
}
8991

90-
private static String getWalkingPapersId(String wpid) {
92+
private String getFieldPapersId(String wpid) {
9193
if (!wpid.contains("id=")) {
9294
return wpid;
9395
} else {
94-
// To match e.g. http://walking-papers.org/scan.php?id=53h78bbx
95-
final Pattern pattern = Pattern.compile("\\?id=(\\S+)");
96+
// To match e.g. http://fieldpapers.org/snapshot.php?id=tz3fq6xl
97+
// or http://fieldpapers.org/snapshot.php?id=nq78w6wl#15/41.8966/-87.6847
98+
final Pattern pattern = Pattern.compile("snapshot.php\\?id=([a-z0-9]*)");
9699
final Matcher matcher = pattern.matcher(wpid);
97100
final boolean found = matcher.find();
98101

src/org/openstreetmap/josm/plugins/fieldpapers/FieldPapersKey.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public FieldPapersKey(int level, int x, int y) {
3434
this.level = level;
3535
if (level <= 0 || x < 0 || y < 0) {
3636
this.valid = false;
37-
System.err.println("invalid WalkingPapersKey("+level+", "+x+", "+y+")");
37+
System.err.println("invalid FieldPapersKey("+level+", "+x+", "+y+")");
3838
} else {
3939
this.valid = true;
4040
}
@@ -72,7 +72,7 @@ public int hashCode() {
7272
*/
7373
@Override
7474
public String toString() {
75-
return "WalkingPapersKey(x=" + this.x + ",y=" + this.y + ",level=" + level + ")";
75+
return "FieldPapersKey(x=" + this.x + ",y=" + this.y + ",level=" + level + ")";
7676
}
7777

7878
}

0 commit comments

Comments
 (0)