### Makefile --- Make experimental address (non?) grids for Taichung, Taiwan ## Author: Dan Jacobson https://www.jidanni.org/ ## Copyright: https://www.gnu.org/licenses/gpl.html ## Created: 2025-01-24T23:19:31+0000 ## Last-Updated: 2025-01-27T19:55:45+0000 ## Update #: 134 #DS =\ -dsco NAME="Taichung fingerprint whorl / loop address grids" \ -dsco DESCRIPTION="See $(subst $(HOME)/,https://www.,$(PWD))" # Alas, the best I could do would be to apply ../xinshe/lanes concepts, # of laying a perfect grid over each perfectly aligned area of streets. # South of tracks: area 1, north of tracks: area 2... # Let's see, area 1 would be 10000... 2 would be 20000... # Else concentric, fingerprint whorl, etc. ideas all create internal # conflicts when the substreets end up crossing themselves... # Well, at least we can suggest something. Better than nothing: X=25000 S:=本門牌規劃演習,各路採兩側五公尺一個號碼,亦即一公里四百個號碼。\ 所有過台灣大道兼太平路軸線之路,過路點訂為其門牌值 $X。\ 其餘者,以其假定延伸點訂之。 S:=$S而台灣大道本身,採遇台鐵火車軌訂為 $X。#Or maybe don\'t touch it, lest be accused of # changing my mind (as I participated in its numbering, years ago.) P=a $P.road.vik: a:; @echo $S # Practice linear referencing T:=$T 24.137653 120.684997 #台灣大道起點(火車站前) T:=$T 24.147561 120.673453 #台灣大道 / 屋前 T:=$T 24.153004 120.666715 #台灣大道 / 英才 T:=$T 24.162480 120.649549 #台灣大道 / 文心 T:=$T 24.166239 120.642812 #台灣大道 / 秋紅谷附近 clean:; rm *.csv *.kml $P.road_raw.csv:; echo $T|xargs --max-args 2 > $@ %.road.csv:%.road_raw.csv #I'm not sure this is the best way, but it works: ogr2ogr $@ $< -lco GEOMETRY=AS_WKT -dialect SQLite -sql \ 'SELECT "台灣大道" AS Name,'\ 'MakeLine(MakePoint(field_2+0, field_1+0)) AS WKT FROM "$(basename $<)"' %.road.kml: %.road.csv ogr2ogr -f LIBKML $@ $< -sql \ 'SELECT Name from "$(basename $<)"' #SELECT: for smaller KML #.PRECIOUS: %.road.kml v=viking %.vik:%.kml if pidof -q $v; then killall --wait --signal SIGHUP $v; fi; \ $v -e $(PWD)/$< & sleep 11 # Well I put KM markers (except for 0) along 台灣大道: oi.csv:$P.road.csv ogr2ogr -explodecollections $@ $< -dialect SQLite -lco GEOMETRY=AS_WKT -sql \ 'SELECT Line_Interpolate_Equidistant_Points(GEOMETRY,360.0/40000) AS WKT FROM "$(basename $<)"' perl -i -pwle 'if(/WKT/){s/^/Name,/}else{s/^/($$.-1).","/e;}' $@ cat $@ # How to make Line_Interpolate_Equidistant_Points include also the start and end points? oi.iii:$P.road.csv ogrinfo $< -dialect SQLite -sql \ 'SELECT Line_Interpolate_Point(geometry,0),'\ 'Line_Interpolate_Equidistant_Points(GEOMETRY,360.0/40000),'\ 'Line_Interpolate_Point(geometry,1) FROM "$(basename $<)"' oi.kml:oi.csv ogr2ogr $@ $< -f LIBKML #-sql 'SELECT Z FROM "$(basename $<)"' cat $@ oi.vik: # other junk: ooo:;ogrinfo mstones.json -al %.csv:%.json; ogr2ogr /vsistdout/ -f CSV $< -lco GEOMETRY=AS_WKT k:=parts.json mstones.json paths.json o:=$(k:.json=.csv) qL:$ox lrf: $P.road.csv # ogrlineref -f KML -create -o parts -l $< -ln $(basename $<) #-l $< -p references -pm dist -o parts -s 1000 ogrlineref -f CSV -create -l paths.json -p mstones.json -pm pos -o m.csv -s 1000 mmm.csv:$P.road.csv ogr2ogr $@ $< -sql 'SELECT Name FROM "$(basename $<)"' \ -lco GEOMETRY=AS_WKT -s_srs EPSG\:4326 -t_srs EPSG\:3826 moo.csv:mmm.csv ogr2ogr -explodecollections $@ $< -dialect SQLite -lco GEOMETRY=AS_WKT -sql \ 'SELECT *,Line_Interpolate_Equidistant_Points(GEOMETRY,1000) AS WKT FROM "$(basename $<)"' # perl -i -pwle 'if(/WKT/){s/^/Name,/}else{s/^/($$.-1).","/e;}' $@ cat $@ nnn.csv:mmm.csv ogr2ogr $@ $< -sql 'SELECT Name FROM "$(basename $<)"' \ -lco GEOMETRY=AS_WKT -segmentize 1000 ooo.kml:nnn.csv ogr2ogr $@ $< -sql 'SELECT Name,DissolvePoints(GEOMETRY) FROM "$(basename $<)"' \ -s_srs EPSG\:3826 -t_srs EPSG\:4326 -f LIBKML -explodecollections -dialect SQLite ooo.vik: q.csv:; { echo WKT; echo '"LINESTRING(0 0,1 0,1 1)"';}> $@ qqq.o:qqq.csv; ogrinfo -al $< rrr.csv:qqq.csv ogr2ogr -explodecollections $@ $< -dialect SQLite -lco GEOMETRY=AS_WKT -sql \ 'SELECT Line_Interpolate_Equidistant_Points(GEOMETRY,1) AS WKT FROM "$(basename $<)"' cat $@