I wouldn't say we've got many complex weathermaps. At my former employer, we had developed a few of them into more complex ones (with a network focus, not a device/server focus).
I've extracted an example of what I'm doing with templates and included it below.
I change the text on the hovergraph to present the device and interface info, plus I flip the graph rrd to be the one relevant to that interface (so yes, the in/out flip based on which end of the link you are looking at). We also track IP SLA metrics on the weathermap with a narrow link that runs next to the data link. We apply different scales for local (within a datacentre), interstate and cross-country so that the relevant changes in latency can be correspondingly coloured.
It might give people some ideas. I'll see if I can dig up some sanitised versions out of my former workplace...
NODE ROUTER
ICON 130 60 round
LABELOUTLINECOLOR none
USESCALE STATUS
TARGET gauge:../../rrd/{node:this:label}/status.rrd:status:-
INFOURL
https://observium/device/device={node:this:label}LINK DEFAULT
ARROWSTYLE compact
BWLABEL bits
BANDWIDTH 100G
BWLABELPOS 70 30
COMMENTFONT 10
COMMENTSTYLE center
COMMENTFONTCOLOR contrast
INOVERLIBGRAPH /graph.php?height=100&width=512&id={link:this:b_graph_id}&type=port_bits&legend=no&from=-21600
OUTOVERLIBGRAPH /graph.php?height=100&width=512&id={link:this:a_graph_id}&type=port_bits&legend=no&from=-21600
ININFOURL /graphs/type=port_bits/id={link:this:b_graph_id}/
OUTINFOURL /graphs/type=port_bits/id={link:this:a_graph_id}/
TARGET ../../rrd/{link:this:a_end}/{link:this:a_rrd}:INOCTETS:OUTOCTETS
INOVERLIBCAPTION {link:this:b_end} {link:this:b_int}
OUTOVERLIBCAPTION {link:this:a_end} {link:this:a_int}
LINK SLA
WIDTH 2
BANDWIDTH 100G
BWLABELPOS 60 40
OVERLIBGRAPH /graph.php?height=100&width=512&id={link:this:sla_id}&type=sla_echo&legend=no&from=-21600
INFOURL /graphs/type=sla_echo/id={link:this:sla_id}/
TARGET gauge:../../rrd/{link:this:a_end}/{link:this:a_rrd}:rtt:- gauge:../../rrd/{link:this:b_end}/{link:this:b_rrd}:-:rtt
INOVERLIBCAPTION {link:this:b_end} {link:this:b_int}
OUTOVERLIBCAPTION {link:this:a_end} {link:this:a_int}
USESCALE LOCAL absolute
################################
#### NODES ####
################################
NODE hy_myrouter
TEMPLATE ROUTER
LABEL myrouter
POSITION hy_otherrouter 240 0
################################
#### DIRECT LINKS ####
################################
NK data_hy_otherrouter_myrouter
TEMPLATE NATIVE
SET a_graph_id 3877
SET a_end myrouter
SET a_int Hu0/0/2/0
SET a_rrd port-122.rrd
SET b_graph_id 3778
SET b_end myrouter
SET b_int Hu0/0/2/0
SET b_rrd port-98.rrd
NODES hy_otherrouter:60:0 hy_myrouter:-60:0
################################
#### SLA LINKS ####
################################
LINK sla_hy_otherrouter_hy_myrouter
TEMPLATE SLA
SET sla_id 82
SET a_end otherrouter
SET a_int Hu0/0/2/0
SET a_rrd sla-cisco-rttmon-mib-2.rrd
SET b_end myrouter
SET b_int Hu0/0/2/0
SET b_rrd sla-cisco-rttmon-mib-1.rrd
NODES hy_otherrouter:60:-5 hy_myrouter:-60:-5