User:Lupin/mapping

From Wikipedia, the free encyclopedia

Contents

[edit] coords

Data from http://freepages.genealogy.rootsweb.com/~agene/locations/ converted into text files in ./locations

Also now on wikisource.

#!/bin/bash

DIR=./locations

for i in "$@"; do
    #echo $i
    j=$(echo "$i" | sed -e 's/^\(.\).*$/\1/')
    k=$(echo $j | tr a-z A-Z)
    l=$(echo $j | tr A-Z a-z)
    cat $DIR/*{$k,$l}* 2>/dev/null | \
        grep -i "$i"   | \
        sed -e 's/^ *\([^0-9]*\)\([0-9NWSE.]* [0-9NWSE.]*\).*/\2 \1/' \
          -e 's/\([0-9]\)[NE]/\1/g' \
          -e 's/\(^[0-9.]*\)S/-\1/' \
          -e 's/ \([0-9.]*\)W/ -\1/' \
          -e 's/^\([-0-9.]*\) \([-0-9.]*\)/\2 \1/'  | \
        grep -i '[0-9] '"$i"
done

[edit] params

china-params3   SCALE=5/.7/20/400 VIEWPORT=72/136.2/17/54
finland2        VIEWPORT=18/35/59/82 SCALE=4.75/1/62/200
france-corsica-params   VIEWPORT=-5.3/10/41/51.2 SCALE=.5/2/10/100
france-params-2 SCALE=.85/2/48/200 VIEWPORT=-5.3/9/42/51.2
italy-params2   SCALE=.5/1.7/10/100 VIEWPORT=6.4/19/35.5/47.25
japan   SCALE=4.8/1/26/400 VIEWPORT=122/151.4/22/46.6
liechtenstein   SCALE=4.5/9/47.15/5 VIEWPORT=9.44/9.66/47.04/47.28
switzerland     SCALE=5/.8/45.5/100 VIEWPORT=5.8/10.6/45.3/48

[edit] makemap

#!/bin/bash

# GB map with red dot

x=$1
y=$2

if [ -n "$VIEWPORT" ]; then
    VIEWPORT=-R$VIEWPORT
else
    VIEWPORT=-R-9/2/49.7/58.9
fi

PROJECTION=-JM6i
BDY_ANNOTATION=$BDY_ANNOTATION
PORTRAIT=-P

COMMON_OPTIONS="$VIEWPORT $PROJECTION $BDY_ANNOTATION $PORTRAIT"

LAND_COLOUR=32/141/43
SEA_COLOUR=100/164/217

# high res data (not full)
: ${COAST_DATA:=h}

RIVERS=a/.01p/100/164/217
POLITICAL=a/1.5p/0/60/0

if [ -n "$SCALE" ]; then
    SCALE=-Lx$SCALE
else
    SCALE=-Lx1/1.3/51.47/200 
fi

DOT=c.35c
DOT_COLOUR=255/255/0

# standard GB map
# -K means no PS trailer (more to come)
pscoast $COMMON_OPTIONS\
    -D$COAST_DATA\
    -G$LAND_COLOUR\
    -S$SEA_COLOUR\
    -K\
    -I$RIVERS\
    -N$POLITICAL\
    $SCALE | sed \
    -e "s/^\([0-9]*\) \([0-9]*\) M\(.* km[)]\)/\1 \2 58 sub M\3/" \
    -e 's/58 F0/145 F0/' \
    -e 's/S 2 W/S 10 W/'

# the sed expressions: (1) move "200 km" down by 58
#                      (2) make it a larger font
#                      (3) make the scale line thicker

# -O means no PS header (overlay)
echo $1 $2 | \
    psxy $COMMON_OPTIONS\
    -S$DOT -G$DOT_COLOUR -O 

[edit] mappng

#!/bin/bash

RES=300
FIFO=$(tempfile -p $(basename $0) -s .ps)
rm $FIFO
mkfifo $FIFO

while read lat long place; do
    echo $lat $long $place
    safeplace=$(echo "$place" | sed -e 's/ /_/g')
    file="$safeplace"_dot.png
    (./makemap $lat $long > $FIFO ) &
    convert -density $RES -trim $FIFO $file 
    optipng -zc 9 -zm 8 -zs 0 -f 0 $file    
done

rm -v $FIFO