Skip to content

Commit 433b58d

Browse files
committed
updated osmprovider to use set server
projectservice now delegates the provider specific data
1 parent 394522e commit 433b58d

File tree

6 files changed

+101
-67
lines changed

6 files changed

+101
-67
lines changed

bundles/de.neufeld.gis.core/src/de/neufeld/gis/core/ProjectService.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package de.neufeld.gis.core;
22

3+
import java.io.Serializable;
34
import java.util.Set;
45

56
public interface ProjectService {
@@ -14,6 +15,6 @@ public interface ProjectService {
1415
* @param mapName
1516
* @param dataProvider
1617
*/
17-
void createMap(String mapName, MapDataProvider dataProvider);
18+
void createMap(String mapName, MapDataProvider dataProvider,Serializable providerSpecificData);
1819
GisMap removeMap(String mapName);
1920
}

bundles/de.neufeld.gis.core/src/de/neufeld/gis/internal/core/ProjectServiceImpl.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package de.neufeld.gis.internal.core;
22

3+
import java.io.Serializable;
34
import java.util.Collections;
45
import java.util.LinkedHashMap;
56
import java.util.LinkedHashSet;
@@ -24,11 +25,11 @@ public Set<GisMap> getMaps() {
2425
}
2526

2627
@Override
27-
public void createMap(String mapName, MapDataProvider dataProvider) {
28+
public void createMap(String mapName, MapDataProvider dataProvider,Serializable providerSpecificData) {
2829
if(maps.containsKey(mapName)){
2930
throw new IllegalArgumentException("A Map with the name "+mapName+ " already exists.");
3031
}
31-
GisMap map=new GisMap(mapName,dataProvider,null);
32+
GisMap map=new GisMap(mapName,dataProvider,providerSpecificData);
3233
maps.put(mapName, map);
3334
}
3435

bundles/de.neufeld.gis.provider.osm.swt/src/de/neufeld/gis/provider/osm/internal/swt/SetOSMServerPage.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public void createControl(Composite parent) {
2828

2929
new Label(composite, SWT.NONE).setText("OSM Server"+":");
3030
final Text text = new Text(composite, SWT.BORDER);
31-
text.setMessage("Enter OSM Server");
31+
text.setMessage("Enter OSM Server. Example: http://tile.openstreetmap.org");
3232
text.addModifyListener(new ModifyListener() {
3333

3434
@Override

bundles/de.neufeld.gis.provider.osm/src/de/neufeld/gis/provider/osm/OSMProvider.java

+80-62
Original file line numberDiff line numberDiff line change
@@ -18,19 +18,16 @@
1818
import de.neufeld.gis.core.GisMap;
1919
import de.neufeld.gis.core.MapDataProvider;
2020
import de.neufeld.gis.core.MapDataProviderRegistry;
21-
import de.neufeld.gis.core.MapDataUIProvider;
2221
import de.neufeld.gis.core.SearchQuery;
2322
import de.neufeld.gis.core.SearchResult;
2423

2524
public class OSMProvider implements MapDataProvider {
26-
27-
public static final String NAME="OSM_Provider";
28-
29-
private String url = "http://tile.openstreetmap.org/$path$.png";
30-
private final double TILE_SIZE=256;
31-
private final double M_PER_PIXEL_ZOOM_0=156543.034;
32-
private final double M_PER_TILE_ZOOM_0=M_PER_PIXEL_ZOOM_0*TILE_SIZE;
33-
25+
26+
public static final String NAME = "OSM_Provider";
27+
private final double TILE_SIZE = 256;
28+
private final double M_PER_PIXEL_ZOOM_0 = 156543.034;
29+
private final double M_PER_TILE_ZOOM_0 = M_PER_PIXEL_ZOOM_0 * TILE_SIZE;
30+
3431
private LogService logService;
3532
private MapDataProviderRegistry mapDataProviderRegistry;
3633

@@ -63,95 +60,116 @@ public void shutdown() {
6360
@Override
6461
public Image draw(GisMap gisMap, IGraphics graphics,
6562
DrawParameter drawParameter) {
66-
63+
6764
ForkJoinPool forkJoinPool = new ForkJoinPool();
68-
return forkJoinPool.invoke(new ImageTask(drawParameter,graphics));
65+
return forkJoinPool.invoke(new ImageTask(gisMap, drawParameter,
66+
graphics));
6967
}
70-
private class ImageTask extends RecursiveTask<Image>{
68+
69+
private class ImageTask extends RecursiveTask<Image> {
7170
private DrawParameter drawParameter;
7271
private IGraphics graphics;
73-
private ImageTask(DrawParameter drawParameter,IGraphics graphics){
74-
this.drawParameter=drawParameter;
75-
this.graphics=graphics;
72+
private GisMap gisMap;
73+
74+
private ImageTask(GisMap gisMap, DrawParameter drawParameter,
75+
IGraphics graphics) {
76+
this.drawParameter = drawParameter;
77+
this.graphics = graphics;
78+
this.gisMap = gisMap;
7679
}
80+
7781
@Override
7882
protected Image compute() {
79-
Rectangle visibleArea=drawParameter.getVisibleArea().getBounds();
80-
double numTiles=Math.pow(2, drawParameter.getZoomLevel());
81-
double tileWidth=M_PER_TILE_ZOOM_0/numTiles;
82-
double currentX=visibleArea.getX()/tileWidth;
83-
double currentY=visibleArea.getY()/tileWidth;
84-
int tilesX=(int)Math.floor(currentX);
85-
int tilesY=(int)Math.floor(currentY);
86-
87-
double offSetX=(tilesX-currentX)*TILE_SIZE;
88-
double offSetY=(tilesY-currentY)*TILE_SIZE;
89-
90-
int numTilesX=(int)Math.ceil(visibleArea.getWidth()/tileWidth);
91-
int numTilesY=(int)Math.ceil(visibleArea.getHeight()/tileWidth);
92-
83+
Rectangle visibleArea = drawParameter.getVisibleArea().getBounds();
84+
double numTiles = Math.pow(2, drawParameter.getZoomLevel());
85+
double tileWidth = M_PER_TILE_ZOOM_0 / numTiles;
86+
double currentX = visibleArea.getX() / tileWidth;
87+
double currentY = visibleArea.getY() / tileWidth;
88+
int tilesX = (int) Math.floor(currentX);
89+
int tilesY = (int) Math.floor(currentY);
90+
91+
double offSetX = (tilesX - currentX) * TILE_SIZE;
92+
double offSetY = (tilesY - currentY) * TILE_SIZE;
93+
94+
int numTilesX = (int) Math.ceil(visibleArea.getWidth() / tileWidth);
95+
int numTilesY = (int) Math
96+
.ceil(visibleArea.getHeight() / tileWidth);
97+
9398
List<RecursiveTask<ImageOffsetPair>> forks = new LinkedList<>();
94-
95-
for(int i=0;i<=numTilesX;i++){
96-
for(int j=0;j<=numTilesY;j++){
97-
ImageRetrieveTask task=new ImageRetrieveTask((int)drawParameter.getZoomLevel(),offSetX,offSetY,tilesX,tilesY,i,j);
99+
100+
for (int i = 0; i <= numTilesX; i++) {
101+
for (int j = 0; j <= numTilesY; j++) {
102+
ImageRetrieveTask task = new ImageRetrieveTask(
103+
(String) gisMap.getProviderSpecificData(),
104+
(int) drawParameter.getZoomLevel(), offSetX,
105+
offSetY, tilesX, tilesY, i, j);
98106
forks.add(task);
99-
task.fork();
107+
task.fork();
100108
}
101109
}
102110
for (RecursiveTask<ImageOffsetPair> task : forks) {
103-
ImageOffsetPair pair=task.join();
111+
ImageOffsetPair pair = task.join();
104112
graphics.pushState().translate(pair.offsetX, pair.offsetY);
105-
113+
106114
graphics.paint(pair.image);
107115
graphics.popState();
108-
}
109-
110-
116+
}
117+
111118
return null;
112119
}
113-
120+
114121
}
115-
116-
private class ImageRetrieveTask extends RecursiveTask<ImageOffsetPair>{
122+
123+
private class ImageRetrieveTask extends RecursiveTask<ImageOffsetPair> {
117124
final int zoomLevel;
118-
final double offsetX;final double offsetY;final int tileX;final int tileY;final int moveX;final int moveY;
119-
public ImageRetrieveTask(int zoomLevel,double offsetX,double offsetY,int tileX,int tileY,int moveX,int moveY){
120-
this.zoomLevel=zoomLevel;
121-
this.offsetX=offsetX;
122-
this.offsetY=offsetY;
123-
this.tileX=tileX;
124-
this.tileY=tileY;
125-
this.moveX=moveX;
126-
this.moveY=moveY;
125+
final double offsetX;
126+
final double offsetY;
127+
final int tileX;
128+
final int tileY;
129+
final int moveX;
130+
final int moveY;
131+
private String url;
132+
133+
public ImageRetrieveTask(String url, int zoomLevel, double offsetX,
134+
double offsetY, int tileX, int tileY, int moveX, int moveY) {
135+
this.zoomLevel = zoomLevel;
136+
this.offsetX = offsetX;
137+
this.offsetY = offsetY;
138+
this.tileX = tileX;
139+
this.tileY = tileY;
140+
this.moveX = moveX;
141+
this.moveY = moveY;
142+
this.url = url;
127143
}
128-
144+
129145
@Override
130146
protected ImageOffsetPair compute() {
131147

132-
ImageOffsetPair result=new ImageOffsetPair();
148+
ImageOffsetPair result = new ImageOffsetPair();
133149
try {
134-
String httpUrl=url.replace("$path$", zoomLevel+"/"+(tileX+moveX)+"/"+(tileY+moveY));
150+
if (url.endsWith("/"))
151+
url = url.substring(0, url.length() - 2);
152+
String httpUrl = url + "/" + zoomLevel + "/" + (tileX + moveX)
153+
+ "/" + (tileY + moveY) + ".png";
135154
URL imageUrl = new URL(httpUrl);
136155
Image image = new Image(ImageIO.read(imageUrl));
137-
result.image=image;
138-
result.offsetX=offsetX+moveX*TILE_SIZE;
139-
result.offsetY=offsetY+moveY*TILE_SIZE;
156+
result.image = image;
157+
result.offsetX = offsetX + moveX * TILE_SIZE;
158+
result.offsetY = offsetY + moveY * TILE_SIZE;
140159
} catch (IOException e) {
141160
logService.log(LogService.LOG_ERROR, e.getMessage(), e);
142161
}
143162
return result;
144163
}
145-
164+
146165
}
147-
148-
private class ImageOffsetPair{
166+
167+
private class ImageOffsetPair {
149168
Image image;
150169
double offsetX;
151170
double offsetY;
152171
}
153-
154-
172+
155173
@Override
156174
public SearchResult search(GisMap gisMap, SearchQuery searchQuery) {
157175
return null;

bundles/de.neufeld.gis.ui.application/src/de/neufeld/gis/ui/internal/application/handlers/AddMapHandler.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11

22
package de.neufeld.gis.ui.internal.application.handlers;
33

4+
import java.io.Serializable;
5+
46
import javax.inject.Named;
57

68
import org.eclipse.e4.core.di.annotations.Execute;
@@ -24,7 +26,8 @@ public void execute(ProjectService projectService,MapDataProviderRegistry mapDat
2426
if(Window.OK==dialog.open()){
2527
String mapName=addMapWizard.getMapName();
2628
MapDataProvider mapDataProvider=addMapWizard.getMapDataProvider();
27-
projectService.createMap(mapName, mapDataProvider);
29+
Serializable providerSpecificData=addMapWizard.getProviderSpecific();
30+
projectService.createMap(mapName, mapDataProvider,providerSpecificData);
2831
((NavigatorView)navigator.getObject()).refresh();
2932
}
3033
}

bundles/de.neufeld.gis.ui.application/src/de/neufeld/gis/ui/internal/application/wizards/AddMapWizard.java

+11
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package de.neufeld.gis.ui.internal.application.wizards;
22

3+
import java.io.Serializable;
34
import java.util.List;
45

56
import org.eclipse.jface.wizard.IWizardPage;
@@ -87,5 +88,15 @@ public String getMapName() {
8788
public MapDataProvider getMapDataProvider() {
8889
return selectProviderPage.getMapDataProvider();
8990
}
91+
public Serializable getProviderSpecific(){
92+
if(pages==null)
93+
return null;
94+
for(int i=0;i<pages.size();i++){
95+
Serializable data=pages.get(i).getMapProviderSpecifcData();
96+
if(data!=null)
97+
return data;
98+
}
99+
return null;
100+
}
90101

91102
}

0 commit comments

Comments
 (0)