I perform manual linear referencing (geocoding) on a daily basis.
The area I do this for is large. Because of this, a consultant was hired to study the region and develop a grid some time ago that we could use to assign a min and max to the endpoints of roads; also incorporating orientation of the civic address on the road (north/south vs east/west side)
You will need a policy or some guidelines to go by.
For example, when it comes to road orientation, we first look at the roads orientation: is it travelling north/south or east/west?
Then we look at the side of the road that the new address is: on the west/east side or north/south side.
From those two, we can decide whether or not the new number is going to be even or odd!
The guiding chart we use:
West/North side of road = EVEN
East/South side of road = ODD
Now you need to have someway of giving the min and max... Like I said, for our case, we have a grid to use and depending on where the road intersects the grid, that is the assigned min and max.
We also assign the new number based on where the driveway intersects the nearest public road.
There are two methods that I mostly use. One involves using existing house numbers as a reference to get the new number and the other involves using the 'reference grid'.
- Method 1) Using existing house numbers:
In the following image
- houses 1465 and 1592 are the closest (being on either side of the new house), so I start with those where:
h1 = 1465, h2 = 1592 and...
d1 = "distance from h1 to new house", d2 = "distance from h2 to new house"...
which would look like:
( ((h2-h1)/(d2 + d1)) * d1 ) + h1 -> ( ((1592-1465)/(510m+156m)) * 156 ) + 1465
( (127/666) * 156 ) + 1465
= 1494.8 (+/-1 to round and make even or odd...)
Note, that above, when I measure along the road, I am measuring where those houses driveways meet the road, NOT the distance between the physical location of the house!
- Method 2) Using the 'reference grid':
First measure the total length of one reference grid to the other.
In the image, we need to measure from West 1600 to West 1400 (r1) (off the map) which gives us a total of 2800m (d2) .
This is HUGE! Usually I deal with a smaller distance of around 500-1000m.
Also get the difference between the two grid lines you measured, so 1600-1400 = 200 (d1) !
Finally, measure from the grid line with the lowest number (West 1400) to the point where the new buildings driveway meets the road: 2400m (d3) .
Your formula will look like:
( (d1/d2)*d3 ) + r1 -> ( (200/2800)*2400 ) + 1400
= 1571.4 (+/- for rounding to make odd/even)
Why do I get different results?
Because the existing numbers were most likely issued 'before my time' and had to be issued when little to no data was available. Eg, parcel lines could of been missing, road centrelines have changes, reference grid wasn't available.
So most of the time I end up issuing new numbers based off of existing numbers instead of the reference grid because a) the new number fits better and b) the reference grid is fairly new so it wasn't always used. Not sure what was used before it was created either!
So I guess in the end, you could use method 1 and determine what the min and max would be for a road segment then place points along the road at equal intervals of 1-10 m then interpolate what those points 'would be'. Then, when you get a new number to geocode, you can look at what point it lies nearest to (where the driveway meets the road) and determine the number from that.
Also be aware that in our case, because we have a manual method based off a custom grid, Google cannot be used reliably for geocoding results unless we were to share this information with them directly.
EDIT: I really like the look of the tool from MMQGIS suggested by @underark That will definitely make things easier.