MCD from Tiger

James Darrell McCauley mccauley at ecn.purdue.edu
Sun Mar 5 07:16:43 EST 1995


James Darrell McCauley (mccauley at ecn.purdue.edu) writes to grassu-list
on 5 March 1995:
>Now, if anyone knows of a way to relate MCD (township) records in
>TIGER/Geographic Names Files to Type P records, please share.  I'm
>still pouring through Chapter 6 of the TIGER stuff, but for now I've
>got all these pretty polygons but no labels.

after some hacking, I was able to solve my own problem (it's not
efficient or pretty--the faint-of-heart may leave the room now).

Results are in the format:

         <easting>|<northing>|#FIPS-55-code "Geographic Name"

This script converts LL to UTM and would thus need
to be modified if you are working in LL.

Appended, for the archives, is my approach.

Darrell

#!/bin/sh 
# I call this little diddy "s.in.tig.mcd.labels"
#
# This is a quick hack to import label points for MCDs polygons as a
# GRASS sites list from TIGER data. There may be problems where the
# label point lies ON a polygon node and not INTERNAL to the polygon. 
# See page 27 of the tiger.RIM tutorial
#
# If someone wants to add bells-n-whistles necessary to make this
# a bona fide GRASS Shell Script, be my guest.
#
# It's not pretty, but...
#
# Author:
# James Darrell McCauley, PhD        http://soils.ecn.purdue.edu/~mccauley/
# Dept of Agricultural Engineering   mccauley at ecn.purdue.edu
# Purdue University                  tel: 317.494.1198 fax: 317.496.1115
# 
# Date: 4 March 1995
#
# These variables need to be set. the first four are tiger files
# and the last is the sites file.
# e.g. typeone=/cdrom/tiger/18/085/tgr18085.f51
#
typeone=tgr18085.f51
typei=tgr18085.f5i
typep=tgr18085.f5p
name=../tgr92s18.nam 
sites=koscuisko.mcd

# note: if your system doesn't have printf, use 'echo -n'
PRINT=printf

$PRINT "[Finding MCD boundaries in Record Type 1..."
awk '{if (substr($0,141,5) != substr($0,146,5)) \
     printf "%d %d %d\n", substr($0,141,5),substr($0,146,5),substr($0,6,10);}'\
 $typeone | sort | uniq | \
 awk 'BEGIN{pa=pa=0;} {if ($1!=pa && $2!=pb) print $0; pa=$1; pb=$2; }' |\
 awk '{print $1,$3,"L"; print $2,$3, "R"}' | sort | \
 awk 'BEGIN{pa=pa=0;} {if ($1 != 0) if ($1!=pa && $2!=pb) print $0; \
      pa=$1; pb=$2;}' \
 | awk '{print $2,$1,$3}' | sort > /tmp/phase1
echo "done]"
#
# results in TLID MCD B (either "L" or "R")
#
$PRINT "[Finding Polygon Identification Numbers in Record Type I..."
awk '{printf "%d %d %d\n", \
     substr($0,6,10),substr($0,27,10),substr($0,42,10)}' \
 $typei | sort | join - /tmp/phase1 | \
 awk '{if ($5=="L") print $2,$4; else print $3,$4}' | sort > /tmp/phasei
echo "done]"
#
# results in POLYID MCD
#
$PRINT "[Finding Label Coordinates in Record Type P..."
awk '{printf "%d %d %s\n",substr($0,16,10),substr($0,26,10),substr($0,37,8)}' \
 $typep | sort | join - /tmp/phasei | \
 awk '{printf "%f %f %d\n",$2/1000000.,$3/1000000.,$4}' | \
 m.ll2u -z sph=clark66 | s.in.ascii tmpa$$
echo "done]"
#
# results in sites list with MCD as third column
#
# all that's left is to join this with the TIGER/Geographic Names
#
$PRINT "[Relating coordinates to FIPS 55-3 names of MCDs..."
s.out.ascii -d tmpa$$ | awk '{print $3,$1,$2}' | sort > /tmp/s
awk '{if (substr($0,1,7)=="0318085") print substr($0,8,5),substr($0,13,40)}' \
 $name | join - /tmp/s | \
 awk '{printf "%s %s #%s ",$(NF-1),$NF,$1; for(i=2;i<=NF-2;++i) \
 printf "%s ", $i; printf "\n";}' | s.in.ascii $sites
echo "done]"
/bin/rm $LOCATION/site_lists/tmpa$$ /tmp/s /tmp/phasei /tmp/phase1
echo "Results are in "$sites
exit 0



More information about the grass-user mailing list