<div dir="ltr">Have they added z-ordering to the Tiger data?&nbsp; I am still hoping to get a routing application based on Tiger data, which requires that I can disambiguate the overpasses from the roads they &quot;touch&quot;<br>
<br>Cordially,<br><br>Joe Bussell<br><br><br><div class="gmail_quote">On Wed, Jul 23, 2008 at 8:13 AM, Stephen Woodbridge &lt;<a href="mailto:woodbri@swoodbridge.com">woodbri@swoodbridge.com</a>&gt; wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hi John,<br>
<br>
These reports and analysis are really great! Sorry, that I have not been able to contribute more, but I have been distracted by a client on another project. I hope to get back to this and add my two cents into it also.<br>

<br>
I have also run into the address number range issues that you mentioned and I like you idea of dropping the extraneous characters, I was just throwing an error in my code.<br>
<br>
Can you talk a little bit about your development environment. It looks like you are using Perl. Are you using database as a backing store to help with the processing? MySQL, postgresql, sqlite, other?<br>
<br>
Thanks,<div class="Ih2E3d"><br>
 &nbsp;-Steve<br>
<br>
John P. Linderman wrote:<br>
</div><div><div></div><div class="Wj3C7c"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
As I mentioned earlier in this thread, one aid to disambiguating<br>
street segments where address ranges are increasing on one side,<br>
but decreasing on the other, is to link segments for the same<br>
street together, and see how adjacent ranges line up. &nbsp;But<br>
sometimes a street enters an intersection from more than two<br>
directions. &nbsp;See, for example, 40.670528,-74.457660 in google<br>
maps, where Chaucer Dr forms a topological &quot;lollipop&quot;, with houses<br>
on both sides of the loop and along the stem. &nbsp;If you come to the<br>
loop from the stem, and want to choose which edge to take out,<br>
the address ranges may be helpful in making the choice. &nbsp;For<br>
example, if the houses along the outside of the loop have odd<br>
addresses, and those on the inside, even addresses, then the<br>
&quot;obvious&quot; choice would be edge preserving the parity of the stem.<br>
That is, if the stem has odd edges on the right approaching the loop,<br>
then one would want to turn right, keeping the odd edges on the right<br>
(outside), and vice versa. &nbsp;Address numbers might also be a guide,<br>
trying to minimize the gap as one moves from edge to edge. &nbsp;But to<br>
measure gaps, or establish parity, there must be a &quot;number&quot;,<br>
which is obvious when address ranges are purely numeric,<br>
but less obvious when there are non-digits involved.<br>
So, before worrying about linking edges together, I wanted to<br>
get a handle on the nature of individual ranges from the<br>
Address Ranges Relationship File.<br>
<br>
Here are some summary data for the entire Tiger2007 distribution.<br>
<br>
 &nbsp; &nbsp;Address range grand totals<br>
 &nbsp; &nbsp; &nbsp; &nbsp;All Digits: 70505410<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Mixed: &nbsp;1608442<br>
 &nbsp; &nbsp; &nbsp; &nbsp; No Digits: &nbsp; &nbsp; &nbsp; 36<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Total: 72113888<br>
<br>
 &nbsp; &nbsp;Errors in all address ranges<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Errors: &nbsp; &nbsp;14937<br>
 &nbsp; &nbsp; &nbsp; &nbsp;Warnings: &nbsp; &nbsp; &nbsp;742<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Clean: 36041265<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Total: 36056944<br>
<br>
There are (exactly) twice as many sample points in the &quot;grand totals&quot;<br>
summary as the error summary because each range has a TO and FROM<br>
address. &nbsp;There are very few addresses with no digits (a few each in<br>
MI, WI and PR). &nbsp;We can ignore them completely without much loss of<br>
generality. &nbsp;But there are enough with both digits and non-digits<br>
that we had best do something sensible. &nbsp;So I wrote some scripts to<br>
&quot;extend&quot; the basic record, attempting to add a FROM_num and TO_num<br>
field that is always digits only. &nbsp;For All Digits addresses, these<br>
are the same as the FROMHN and TOHN fields. &nbsp;If FROMHN and TOHN<br>
agree on everything but a single all-digit subsequence, that<br>
subsequence is a logical choice for the FROM_num and TO_num fields.<br>
When FROMHN and TOHN differ elsewhere, the errors and warnings<br>
start popping up. &nbsp;The difference between an error and a warning<br>
is not crystal clear; if I can see a simple way to adjust the<br>
range to &quot;make sense&quot;, I do so, and it&#39;s a warning. &nbsp;If the range<br>
is pretty hopeless, it&#39;s an error. &nbsp;Here&#39;s an example of a warning<br>
(and the last time I&#39;ll include the entire &quot;extended&quot; record,<br>
where any field name including lower case letter is added by me,<br>
except for &quot;_deleted&quot;, which is there in the original record).<br>
<br>
County 01005 (Barbour, AL), record 5468<br>
$record = {<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;SIDE&#39; =&gt; &#39;L&#39;,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;TO_num&#39; =&gt; &#39;6&#39;,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;_deleted&#39; =&gt; &#39;&#39;,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;TLID&#39; =&gt; &#39;69077027&#39;,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;TOTYP&#39; =&gt; &#39;&#39;,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;FROMTYP&#39; =&gt; &#39;I&#39;,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;PLUS4&#39; =&gt; &#39;&#39;,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;ARID&#39; =&gt; &#39;400541338686&#39;,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;warnings&#39; =&gt; [<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;trimmed 1 off 1F2&#39;<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;],<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;TOHN&#39; =&gt; &#39;F6&#39;,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;FROM_parts&#39; =&gt; [<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;F&#39;,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;2&#39;<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;],<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;FROMHN&#39; =&gt; &#39;1F2&#39;,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;FROM_num&#39; =&gt; 2,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;MTFCC&#39; =&gt; &#39;D1000&#39;,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;addresses&#39; =&gt; 3,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;ZIP&#39; =&gt; &#39;36027&#39;,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;TO_parts&#39; =&gt; [<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;F&#39;,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;6&#39;<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;],<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;parity&#39; =&gt; &#39;E&#39;<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;};<br>
<br>
The original range was 1F2 =&gt; F6, a pattern (extraneous digits at the<br>
front of one address endpoint) that happens often enough (about 650<br>
times in the entire distribution) that it might (or might not) be worth<br>
correcting. &nbsp;I simply drop the extraneous digits, with a warning,<br>
yielding range F2 =&gt; F6, 3 addresses with Even parity.<br>
<br>
Another, less common, pattern is an extraneous - at the start of<br>
one address endpoint, 92 occurrences in the distribution. &nbsp;For example,<br>
<br>
County 10001 (Kent, DE), record 97<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;TLID&#39; =&gt; &#39;68092276&#39;,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;ARID&#39; =&gt; &#39;400404723907&#39;,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;TOHN&#39; =&gt; &#39;B9&#39;,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;FROMHN&#39; =&gt; &#39;-B1&#39;,<br>
<br>
Here the original range, -B1 =&gt; B9, gets converted to the reasonably<br>
obvious B1 =&gt; B9. &nbsp;After this correction, in all but about 50 cases,<br>
mixed from/to addresses agree on all the non-numeric components.<br>
One of the exceptions is<br>
<br>
County 72021 (Bayamon, PR), record 3144<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;TLID&#39; =&gt; &#39;206027274&#39;,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;ARID&#39; =&gt; &#39;400583928652&#39;,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;TOHN&#39; =&gt; &#39;OO-227&#39;,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;FROMHN&#39; =&gt; &#39;O3&#39;,<br>
<br>
This range is so far off the wall that I can&#39;t think of any way<br>
to adjust it that isn&#39;t an outright guess. &nbsp;But losing 50 address<br>
ranges is certainly tolerable. &nbsp;By far the largest class of what<br>
I categorized as errors is mixed addresses differing on two or<br>
more numerical components, which occurred about 13200 times.<br>
All but 2 of these differed at the first and second numerical<br>
component. &nbsp;A typical instance is<br>
<br>
County 06037 (Los_Angeles, CA), record 34696<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;TLID&#39; =&gt; &#39;141604200&#39;,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;ARID&#39; =&gt; &#39;4001117732741&#39;,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;TOHN&#39; =&gt; &#39;1318-9&#39;,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;FROMHN&#39; =&gt; &#39;1316-5&#39;,<br>
<br>
When the second components are the same length, as I believe is<br>
usually the case (but I&#39;ll have to check), it&#39;s not unreasonable<br>
to simply drop whatever separates the components, which would<br>
yield FROM_num =&gt; 13165 and TO_num =&gt; 13189, an Odd range<br>
having 13 addresses. &nbsp;Given any odd number in that range,<br>
we could reconstruct the &quot;real&quot; address by re-inserting the<br>
non-digit components, for example, 13171 =&gt; 1317-1.<br>
I&#39;ll probably do that, and turn the errors into warnings,<br>
but it&#39;s almost certainly going to mask some real errors, like<br>
<br>
County 06035 (Lassen, CA), record 3888<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;TLID&#39; =&gt; &#39;126954239&#39;,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;ARID&#39; =&gt; &#39;400360492549&#39;,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;TOHN&#39; =&gt; &#39;708-402&#39;,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;FROMHN&#39; =&gt; &#39;463-500&#39;,<br>
<br>
It is improbable that there are really 122452 even addresses<br>
along the street. &nbsp;But we&#39;ve seen preposterously large<br>
all-numeric ranges before in this thread, so maybe that<br>
should just be a warning of its own.<br>
<br>
I figured that there wouldn&#39;t be any parity errors, since<br>
that&#39;s so easy to check for, but there were nearly 1700<br>
in the distribution. &nbsp;For example<br>
<br>
County 55035 (Eau_Claire, WI), record 4214<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;TLID&#39; =&gt; &#39;600641201&#39;,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;ARID&#39; =&gt; &#39;400696181628&#39;,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;TOHN&#39; =&gt; &#39;4253&#39;,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;FROMHN&#39; =&gt; &#39;4232&#39;,<br>
<br>
The FROMHN is even, the TOHN is odd. &nbsp;I don&#39;t believe this<br>
is supposed to happen, but I happen to like the ability to<br>
express the concept that all the numbers from 4232 through<br>
4253 can appear. &nbsp;The US postal service data include a<br>
parity character, E, O or B, for Even, Odd or Both,<br>
in their address ranges, a scheme I prefer. &nbsp;However,<br>
assuming the endpoints really were intended to have the<br>
same parity, perhaps we can use the opposite side,<br>
or adjacent edges, to resolve the ambiguity, much as I<br>
hope to do for ambiguities about increasing/decreasing<br>
ranges.<br>
<br>
Next step: start linking adjacent edges. &nbsp;-- jpl<br>
<br>
<br>
_______________________________________________<br>
Geodata mailing list<br>
<a href="mailto:Geodata@lists.osgeo.org" target="_blank">Geodata@lists.osgeo.org</a><br>
<a href="http://lists.osgeo.org/mailman/listinfo/geodata" target="_blank">http://lists.osgeo.org/mailman/listinfo/geodata</a><br>
</blockquote>
<br>
_______________________________________________<br>
Geodata mailing list<br>
<a href="mailto:Geodata@lists.osgeo.org" target="_blank">Geodata@lists.osgeo.org</a><br>
<a href="http://lists.osgeo.org/mailman/listinfo/geodata" target="_blank">http://lists.osgeo.org/mailman/listinfo/geodata</a><br>
</div></div></blockquote></div><br></div>