Skip to content

Instantly share code, notes, and snippets.

@RafalR
Created May 30, 2016 16:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save RafalR/886d91005f6c8c94b3e3f43827434d0a to your computer and use it in GitHub Desktop.
Save RafalR/886d91005f6c8c94b3e3f43827434d0a to your computer and use it in GitHub Desktop.
var JOptionPane = javax.swing.JOptionPane;
var Main = org.openstreetmap.josm.Main;
var Robot = java.awt.Robot;
var Point = java.awt.Point;
var System = java.lang.System;
var Node = org.openstreetmap.josm.data.osm.Node;
var Way = org.openstreetmap.josm.data.osm.Way;
var LatLon = org.openstreetmap.josm.data.coor.LatLon;
var AddCommand = org.openstreetmap.josm.command.AddCommand;
var SequenceCommand = org.openstreetmap.josm.command.SequenceCommand;
var BufferedReader = java.io.BufferedReader;
var InputStreamReader = java.io.InputStreamReader;
var URL = java.net.URL;
var ConnectWays = org.openstreetmap.josm.plugins.tracer2.ConnectWays;
var ServerParam = org.openstreetmap.josm.plugins.tracer2.preferences.ServerParam;
var cmd = new Array();
var errors ="";
var serverUrl = "http://localhost:49243/";
var sName = "geo";
var sUrl = "wms:http://mapy.geoportal.gov.pl/wss/service/pub/guest/G2_BDOT_BUD_2010/MapServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=1,2,3,4,5,6,7,8,9&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}";
var sTileSize = 0.0004;
var sResolution = 2048;
var sMode = "boundary";
var sThreshold = 127;
var sPointsPerCircle = 16;
var colors = {
"house": [203, 68, 0], // cb4400,
"yes": [248, 186, 113], //f8ba71,
"industrial": [161, 161, 161]//, //a1a1a1
//"public": [159, 64, 44] //9f402c
};
function getMapView() {
if (Main.main == null) return null;
if (Main.map == null) return null;
return Main.map.mapView;
}
function contains(pn){
var x = pn.getX() - pm.getX();
var y = pn.getY() - pm.getY();
return (sm.height > y && sm.width > x)
}
function colorDiff(r1, g1, b1, r2, g2, b2){
var r = 255 - Math.abs(r1 - r2);
var g = 255 - Math.abs(g1 - g2);
var b = 255 - Math.abs(b1 - b2);
r /= 255;
g /= 255;
b /= 255;
return (r + g + b) / 3;
}
function checkColor(c){
for(k in colors){
//k - typ budynku
var df = colorDiff(c.getRed(), c.getGreen(), c.getBlue(), colors[k][0], colors[k][1], colors[k][2]);
if(.92<df){
var x = pn.getX() - pm.getX();
var y = pn.getY() - pm.getY();
var nPos = mv.getLatLon(x, y)
trace(nPos, k);
//getPos(pn)
}
}
}
function trace(pos) {
var oUrl = new URL(serverUrl + "traceOrder=GetTrace" + "&traceLat=" + pos.lat + "&traceLon=" + pos.lon + "&traceName=" + sName + "&traceUrl=" + sUrl + "&traceTileSize=" + sTileSize + "&traceResolution=" + sResolution + "&traceMode=" + sMode + "&traceThreshold=" + sThreshold + "&tracePointsPerCircle=" + sPointsPerCircle);
try{
var oReader = new BufferedReader(new InputStreamReader(oUrl.openStream()));
var str ="";
while ((strLine = oReader.readLine()) != null) {
str += strLine;
}
str = str.slice(1,-1);
var ll = str.split(")(");
var way = new Way();
var firstNode = null;
for(var i=0;i<ll.length;i++){
ll[i] = ll[i].split(":");
var cord = new LatLon(ll[i][0], ll[i][1]);
var node = new Node(cord);
if (firstNode == null){
firstNode = node;
}
way.addNode(node)
}
way.addNode(firstNode)
way.put("building", k)
var sp = new ServerParam();
Main.main.undoRedo.add(ConnectWays.connect(way, pos, sp, false, false))
//System.out.println(str);
}catch (e) {
errors+=e;
//System.out.println(e);
};
}
var step = 10;
var mv = getMapView();
var pm = mv.getLocationOnScreen();
var sm = mv.getSize();
var px = pm.getX();
var py = pm.getY()+45;
var pn
/*var fr = new JFrame()
var tx = new JTextField()
fr.add(t)
fr.setSize(100,100)
fr.setLocation(800, 600)
fr.setVisible(true)*/
//JOptionPane.showMessageDialog(Main.parent, Integer.toHexString(16));
for(var y=1;y<=140;y++){
for(var x=1;x<=260;x++){
pn = new Point(px+x*step, py+y*step)
if(contains(pn)){
var c = new Robot().getPixelColor(px+x*step, py+y*step);
checkColor(c, pn)
}else{break}
}
//JOptionPane.showMessageDialog(Main.parent, x);
}
//Main.main.undoRedo.add(new SequenceCommand("Script", cmd));
//JOptionPane.showMessageDialog(Main.parent, mv.getLocationOnScreen());
//System.out.println("Errors: "+errors)
System.out.println("Done...");
JOptionPane.showMessageDialog(Main.parent, "Done...");
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment