OpenStreetMap logo OpenStreetMap

Problem: Map a large volume of something that has distinct color.

Solution » High Level: * Highlight a sample square * Send a wanderer around in a perimeter * When the barrier is crossed, stop * Have the end user review

Solution » Low Level [LONG]: public main { //Describe sample square Let the user draw a square //Use sample square int minR, maxR, minB, maxB, minG, maxG; set all the mins to max value and all the max values to 0

for(every pixel in the square)
{
	does it need to be change one of the above 6 ints?
}

//Explore
while(endCondition not triggered)
{
	walk around the perimieter and send it to addSquare()
	if the addSquare says add it, send it to approvedSpots[][]
	else
	{
		ignore it
		but in future versions subdivide the square into 4 areas recursivley to minSizeOfArea;
	}
}

//Encase the area
Find our approved area and go to the top most point from the center.
Drop a point down
Go through the area, if 2 points are on the same line and not necessary, delete it. }

bool addSquare(all 6 rgb values, satteliteArea[][]) { //Filter out the blatantly false average out satteliteAreaRGB if satteliteArea violates the 6 rgb areas, return false.

//Check the square
for all the pixels, how many don't belong
percentDontBelong=numberDontBelong/howmany are in the satteliteArea
    Send it }

Concerns you might have: 1. Automation in OSM? The human has to: Define the sample and approve the result. 2. Junk Data: This would be a problem with a userbase, not a computational problem. We merely create tools. 3. What about non-90 degree angles? I agree that this would be a problem, I would hope someone made a tool that acts like the blender sculpt brush of smooth and bump, but for OSM.

Production: 1. Someone might have made this sort of thing already and I just don’t know about it? If not in JOSM, than in something that costs money. 2. I know that describing a solution is easy and that I did not do the hard part such as the following. How to draw a sample area and convert the pixels into an array, than how to convert the result back.

Edit: My solution (that someone has probably already though of) for non-grid areas is the pin and line model.

Solution » High Level We walk out to the North-most pixel that is compliant with our initial model. We use our string to go around in a circle as far as we can. If alot of errors occur, we place a new pin down where we left off. Repeat the process until we are back to our start.

Location: Shelby County, Iowa, United States

Discussion

Comment from spiregrain on 15 July 2022 at 19:33

You might also find the balloon Josm plugin useful - available here - https://github.com/ubipo/shrinkwrap.

Comment from vorpalblade on 15 July 2022 at 23:29

You might be interested in the areaselector plugin.

There are a couple of open bugs on it, notably it may cause JOSM to crash when you are closing JOSM. I’ve got a fix for that, but I’m waiting on one of the JOSM maintainers with GitHub write permissions to apply it.

Comment from benoitdd on 18 July 2022 at 08:11

the plugins Scanaerial and Lakewalker might also be helpful, but I didn’t test them

Comment from PhysicsArmature on 19 July 2022 at 02:54

Above solutions

@spiregrain: My idea converts the non-quad world into quads. This is a great add on for converting jagged edges of quads into organic looking worlds. Thank You.

@vorpalblade: This is a great edge detector that does its intended purpose well. Thank You. My purpose is to convert organic images of farmland into nodes. The above add-on targets solid color diagrams of buildings into nodes. I can convert organic images into inorganic diagrams through some sliders and then send it onto the above add on to create something more relevant.

If I where to handle this problem, what would I do now

Addons are hard

My addon making ability would be limited to a single program Java Code that uses previously existing libraries.

Things I would need: getPixelArea(x1,y1,x2,y2) getPixel(x,y) getWorldCordinate(x or y)

createAreaPoint(x,y) called several times closeNewArea() createAreaPoint(x,y) called several times closeNewArea()

moveUserCamera(x,y,screenspace VS worldspace)

setZoomLevel()

Current idea: Bash

I understand bash.

Time delay: sleep 4

Monitor: get: Kind of hard to get exactly 1 pixel.

Mouse get: xdotool getmouselocation –shell eval $(xdotool getmouselocation –shell) echo $X $Y

set: xdotool mousemove 35 243 click 1 &

Keyboard get: read -p ‘Username: ‘ uservar

set: xdotool key space

Current idea: Python

Time: delay

Monitor getPixel(x,y):

Mouse getXY():

setLeftClick():

Keyboard

getText():

setKey(“ “,1):

Comment from PhysicsArmature on 6 November 2022 at 03:48

Above solutions

@spiregrain: My idea converts the non-quad world into quads. This is a great add on for converting jagged edges of quads into organic looking worlds. Thank You.

@vorpalblade: This is a great edge detector that does its intended purpose well. Thank You. My purpose is to convert organic images of farmland into nodes. The above add-on targets solid color diagrams of buildings into nodes. I can convert organic images into inorganic diagrams through some sliders and then send it onto the above add on to create something more relevant.

If I where to handle this problem, what would I do now

Addons are hard

My addon making ability would be limited to a single program Java Code that uses previously existing libraries.

Things I would need: getPixelArea(x1,y1,x2,y2) getPixel(x,y) getWorldCordinate(x or y)

createAreaPoint(x,y) called several times closeNewArea() createAreaPoint(x,y) called several times closeNewArea()

moveUserCamera(x,y,screenspace VS worldspace)

setZoomLevel()

Current idea: Bash

I understand bash.

Time delay: sleep 4

Monitor: get: Kind of hard to get exactly 1 pixel.

Mouse get: xdotool getmouselocation –shell eval $(xdotool getmouselocation –shell) echo $X $Y

set: xdotool mousemove 35 243 click 1 &

Keyboard get: read -p ‘Username: ‘ uservar

set: xdotool key space

Current idea: Python

Time: delay

Monitor getPixel(x,y):

Mouse getXY():

setLeftClick():

Keyboard

getText():

setKey(“ “,1):

Log in to leave a comment