<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.9.0">Jekyll</generator><link href="http://rchowe.com/blog/feed.xml" rel="self" type="application/atom+xml" /><link href="http://rchowe.com/blog/" rel="alternate" type="text/html" /><updated>2021-09-08T14:36:53+00:00</updated><id>http://rchowe.com/blog/feed.xml</id><title type="html">RC’s Blog</title><subtitle>A blog about programming and travel.</subtitle><entry><title type="html">Adding to our RTW Trip</title><link href="http://rchowe.com/blog/2021/09/06/rtw-additions.html" rel="alternate" type="text/html" title="Adding to our RTW Trip" /><published>2021-09-06T00:00:00+00:00</published><updated>2021-09-06T00:00:00+00:00</updated><id>http://rchowe.com/blog/2021/09/06/rtw-additions</id><content type="html" xml:base="http://rchowe.com/blog/2021/09/06/rtw-additions.html">&lt;p&gt;Somehow, it seems like I’m always adding people to this trip.&lt;/p&gt;

&lt;p&gt;I &lt;a href=&quot;/2021/06/15/i-booked-a-rtw-award.html&quot;&gt;booked a round-the-world award ticket for my family&lt;/a&gt; three months ago.
Well, it turns out that my brother will probably be able to come with us on the trip, which we did not expect. So, we
had to get him a ticket to come with us!&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;&lt;img src=&quot;/blog/assets/jl789.jpeg&quot; alt=&quot;A Japan Airlines 787-9&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;the-problem&quot;&gt;The Problem&lt;/h2&gt;

&lt;p&gt;My mother, father, and I booked our round-the-world trip as an Asia Miles multi-carrier award ticket. We booked pretty
close to when the window for award travel opened, and we had pretty flexible dates: our main constraint was that we want
to be in Japan at a time that we can see cherry blossums and in Switzerland for &lt;em&gt;Sechseläuten&lt;/em&gt;, which in 2022 is on
April 25.&lt;/p&gt;

&lt;p&gt;In this case, we wanted to optimize for different things:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;We wanted my brother to be on the same flights as we were on as much as possible.&lt;/li&gt;
  &lt;li&gt;Failing that, we wanted to arrive and depart at the airport at roughly the same times.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Having similar arrival/departure times was especially important in Rome, where were planning on taking a car to and from
the airport, since it is 30 km outside of the city.&lt;/p&gt;

&lt;p&gt;Booking the exact same award would have been great, except the only long-haul flight that had award seats available was
the New York to Tokyo segment on Japan Airlines. Therefore, I gave up on pricing his tickets as a single round-the-world
award and started looking for awards to cover individual legs of the trip. This also helps becuase I didn’t have to book
everything at once, so I could tinker with the exact scheduling.&lt;/p&gt;

&lt;h2 id=&quot;us-to-asia&quot;&gt;US to Asia&lt;/h2&gt;

&lt;p&gt;Since there was business class award availability on the same Japan Airlines flight that we were on, we booked it as an
American Airlines award for 60,000 miles and $5.60.&lt;/p&gt;

&lt;p&gt;There was not business class award availability on the American Airlines flight from Boston to JFK (it could have
something to do with the fact that my family was already taking up 3 of the 10 seats). This isn’t a huge deal because it
is such as short flight, and when you are forced to accept an economy segment on an international business class award,
American lets you choose an extra legroom seat for free.&lt;/p&gt;

&lt;p&gt;However, it gets better: this flight is operated by an A321T, the specially configured aircraft that normally flies
premium transcontinental routes like New York to Los Angeles and San Francisco. On the short flight to Boston, American
sells the 10 first class seats as domestic first class, and allows the 20 business class seats to be assigned as
extra-legroom economy seats. So, my brother will get a &lt;em&gt;lie-flat economy seat&lt;/em&gt; on the 50 minute flight to New York —
I told him the only difference will be the lack of glassware and a snack basket.&lt;/p&gt;

&lt;p&gt;If an award seat opens up in domestic first, I’ll call AA and grab it for him though.&lt;/p&gt;

&lt;h2 id=&quot;asia-to-europe&quot;&gt;Asia to Europe&lt;/h2&gt;

&lt;p&gt;We are booked to fly Japan Airlines from Tokyo to Helsinki, and then Finnair from Helsinki to Zürich.
Unfortunately, there was not another seat available from Tokyo to Helsinki on that date.&lt;/p&gt;

&lt;p&gt;There are a ton of ways to get from Japan to Europe though, including the Middle Eastern carriers, the northeast Asian
carriers, and the European carriers. In the end, I did the simplest thing: I have a bunch of AA miles and there was
award availability on Japan Airlines from Tokyo to London, so I booked him from Tokyo to London on Japan Airlines and
from London to Zürich on British Airways (there’s almost always short-haul business availability within Europe this
far out). His flight takes off 40 minutes after ours does, which ties up the airport transportation to Haneda nicely.&lt;/p&gt;

&lt;p&gt;Since all American Airlines award are changeable or cancellable for no fee, this also makes it possible to get him onto
the flights we are on, should space open up. I booked this for 75,000 miles and $94.50.&lt;/p&gt;

&lt;h2 id=&quot;zürich-to-rome&quot;&gt;Zürich to Rome&lt;/h2&gt;

&lt;p&gt;We paid 139 CHF for an economy flight on Swiss from Zürich to Rome. The price hasn’t changed since I bought the
other 3 tickets.&lt;/p&gt;

&lt;p&gt;We could have used 6,000 United miles and $39, which would give a value of 1.88 cents per mile which I consider good for
United, but we decided to keep it simple.&lt;/p&gt;

&lt;h2 id=&quot;europe-to-the-us&quot;&gt;Europe to the US&lt;/h2&gt;

&lt;p&gt;This was the hardest part. The rest of the family booked Rome to London to Boston with an overnight stopover in Boston.
Since the stopover was less than 24 hours, it counted as a connection and we were not hit by the United Kingdom’s
£180 Air Passenger Duty. Additionally, we booked the American Airlines service from London to Boston, which avoided
British Airways’ ridiculous fuel surcharges.&lt;/p&gt;

&lt;p&gt;However, there is no business class award space on the American Airlines flight any more (their dynamic pricing
algorithm wants 120,500 miles for the one-way flight, and the BA segment prices separately), and my brother wants to see
London with us.&lt;/p&gt;

&lt;p&gt;That left us with a few options that I seriously considered:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Fly British Airways the whole way from Rome to London to Boston, and pay about $300 extra in fuel surcharges.&lt;/li&gt;
  &lt;li&gt;Fly Alitalia from Rome to London and then Virgin Atlantic to Boston (ticketed by Delta).&lt;/li&gt;
  &lt;li&gt;Wait for &lt;a href=&quot;https://hub.united.com/2021-09-01-united-airlines-to-present-at-the-14th-annual-cowen-global-transportation-sustainable-mobility-conference-2654863903.html&quot;&gt;the new United flight&lt;/a&gt;
to go on sale, expecting award availability, and book Rome to London connecting in Brussels (or Copenhagen or
Frankfurt).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Delta wanted 120,000 miles and an additional fuel surcharge for originating in Europe for option 2, so that left
consideration even before they stopped selling Alitalia flights (Alitalia’s assets are being sold to a new company and
it may not stay in SkyTeam).&lt;/p&gt;

&lt;p&gt;In the end, we followed the path of least resistance and used AAdvantage miles to book the morning BA flight for 57,500
miles and $417.65. We could have also used BA miles, but again our expecation is that should a seat open up on the
American Airlines flight that we are on (or there is a schedule change with the BA flight) we can call in and switch to
that flight, saving $320.&lt;/p&gt;

&lt;h2 id=&quot;the-total-cost&quot;&gt;The Total Cost&lt;/h2&gt;

&lt;p&gt;So in total, we booked three awards, all with American Airlines miles, and a cash flight on Swiss:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Flights&lt;/th&gt;
      &lt;th&gt;Mileage Cost&lt;/th&gt;
      &lt;th&gt;Dollar Cost&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;BOS → JFK → HND&lt;/td&gt;
      &lt;td&gt;60,000&lt;/td&gt;
      &lt;td&gt;$5.60&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;HND → LHR → ZRH&lt;/td&gt;
      &lt;td&gt;75,000&lt;/td&gt;
      &lt;td&gt;$94.50&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;ZRH → FCO&lt;/td&gt;
      &lt;td&gt;—&lt;/td&gt;
      &lt;td&gt;$152.08&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;FCO → LHR → BOS&lt;/td&gt;
      &lt;td&gt;57,500&lt;/td&gt;
      &lt;td&gt;$417.65&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;So how does booking in segments compare to the round-the-world award the rest of my family booked?&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Segments: 192,500 AAdvantage miles and $670.&lt;/li&gt;
  &lt;li&gt;RTW Award: 155,000 Asia Miles and $633.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The round-the-world award is still the winner, but if we manage to dodge the BA fuel surcharge it gets a bit closer:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Segments: 192,500 AAdvantage miles and $350.&lt;/li&gt;
  &lt;li&gt;RTW Award: 155,000 Asia Miles and $633.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This depends much more on which currency you have miles in and what you value them at. Personally, I’d still probably
choose the second option, but booking individual segments through AAdvantage bought us more flexibility.&lt;/p&gt;

&lt;p&gt;Now Japan needs to re-open its borders.&lt;/p&gt;</content><author><name></name></author><category term="Travel" /><category term="Japan" /><category term="Zurich" /><category term="Rome" /><category term="London" /><summary type="html">Somehow, it seems like I’m always adding people to this trip. I booked a round-the-world award ticket for my family three months ago. Well, it turns out that my brother will probably be able to come with us on the trip, which we did not expect. So, we had to get him a ticket to come with us!</summary></entry><entry><title type="html">I Booked a Round-the-World Award!</title><link href="http://rchowe.com/blog/2021/06/15/i-booked-a-rtw-award.html" rel="alternate" type="text/html" title="I Booked a Round-the-World Award!" /><published>2021-06-15T00:00:00+00:00</published><updated>2021-06-15T00:00:00+00:00</updated><id>http://rchowe.com/blog/2021/06/15/i-booked-a-rtw-award</id><content type="html" xml:base="http://rchowe.com/blog/2021/06/15/i-booked-a-rtw-award.html">&lt;p&gt;I’ve been &lt;a href=&quot;/2020/06/22/new-trips.html&quot;&gt;writing about it since before COVID&lt;/a&gt;, but now I’ve finally
done it: I’ve actually booked a round-the-world award ticket. In April 2022, I’ll leave Boston and never stop flying
west until I get back to Boston.&lt;/p&gt;

&lt;!--more--&gt;

&lt;script src=&quot;https://d3js.org/d3.v4.js&quot;&gt;&lt;/script&gt;

&lt;script src=&quot;https://d3js.org/d3-scale-chromatic.v1.min.js&quot;&gt;&lt;/script&gt;

&lt;script src=&quot;https://d3js.org/d3-geo-projection.v2.min.js&quot;&gt;&lt;/script&gt;

&lt;p&gt;&lt;img src=&quot;/blog/assets/cherry-blossums.jpg&quot; alt=&quot;Cherry Blossoms in Ueno Park, Tokyo&quot; /&gt;
&lt;em&gt;Cherry Blossoms in Ueno Park, Tokyo&lt;/em&gt;&lt;/p&gt;

&lt;h2 id=&quot;the-routing&quot;&gt;The Routing&lt;/h2&gt;

&lt;p&gt;Award availability to Asia and Europe in April was sparse but I was able to make something work. There seemed to be
absolutely no transpacific Star Alliance award availability in early April, which pretty effectively eliminated the
&lt;a href=&quot;/2020/06/25/ana-round-the-world.html&quot;&gt;ANA round-the-world award&lt;/a&gt; as an option. There did seem to be a decent
number of Japan Airlines business awards available, so &lt;strong&gt;one&lt;/strong&gt;world seemed like the way to go (&lt;em&gt;n.b.&lt;/em&gt; the only SkyTeam
airline that offers a semi-attractive round-the-world award chart is AeroMexico and I use the adjective
“semi-attractive” for a reason). The routing we ended up taking looks like this:&lt;/p&gt;

&lt;div class=&quot;svg-container&quot; style=&quot;max-width: 1000px; margin: 1em auto;&quot;&gt;
    &lt;svg id=&quot;route-map&quot; data-hemisphere=&quot;pacific&quot; data-label-points=&quot;true&quot; style=&quot;width: 100%; max-width: 1000px;&quot;&gt;&lt;/svg&gt;
&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Boston (BOS) to New York – Kennedy (JFK)&lt;/strong&gt; — American Airlines, A321T &lt;em&gt;(First)&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;New York – Kennedy (JFK) to Tokyo – Haneda (HND)&lt;/strong&gt; — Japan Airlines, 777-300ER &lt;em&gt;(Business)&lt;/em&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;em&gt;8 days in Japan&lt;/em&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Tokyo – Haneda (HND) to Helsinki (HEL)&lt;/strong&gt; — Japan Airlines, 787-9 &lt;em&gt;(Business)&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Helsinki (HEL) to Zürich (ZRH)&lt;/strong&gt; — Finnair, A321 &lt;em&gt;(Business)&lt;/em&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;em&gt;7 days in Switzerland and Italy&lt;/em&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Rome (FCO) to London – Heathrow (LHR)&lt;/strong&gt; — British Airways, A319 &lt;em&gt;(Business)&lt;/em&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;em&gt;An night in London&lt;/em&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;London – Heathrow (LHR) to Boston (BOS)&lt;/strong&gt; — American Airlines, 777-200ER &lt;em&gt;(Business)&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is a really quick trip, but I think it will be a fun experience and there’s no risk of getting bored. Award
availability dictated our routing; I would have appreciated flying Finnair long haul again, but they seem not to release
award seats to partner airlines more than 60 days from departure. Similarly, I could not find award availability on the
Cathay Pacific nonstop from Hong Kong to Zürich. &lt;strong&gt;one&lt;/strong&gt;world is a weak airline alliance for flying within
continental Europe, so I set up Zürich to Rome as an open jaw and will buy a cheap economy ticket with cash for
that segment.&lt;/p&gt;

&lt;p&gt;The overnight in London is functional: British Airways imposes insane fuel surcharges on the award flights that they
operate, so it was dramatically preferable to fly American Airlines on the London to Boston segment. However, no flight
left early enough from Rome to connect to the one AA flight per day. Staying in London overnight allows us to take that
flight, and the fact that the transatlantic flight departs less than 24 hours after our flight from Rome arrives means
that it gets ticketed as a transit instead of as a stopover, which avoids the £180 per person
&lt;a href=&quot;https://en.wikipedia.org/wiki/Air_Passenger_Duty&quot;&gt;UK Air Passenger Duty&lt;/a&gt; for tickets in premium cabins. I’ll have a
good time just sitting in a pub in London, which seems worth the cost of the hotel and £11 of Heathrow Express
tickets per person (you can buy Heathrow Express tickets for £5.50 each way if you purchase them more than 90 days
out, which is cost-competitive with the tube and less than the TFL Rail).&lt;/p&gt;

&lt;h2 id=&quot;the-asia-miles-oneworld-multi-carrier-award&quot;&gt;The Asia Miles &lt;strong&gt;one&lt;/strong&gt;world Multi-Carrier Award&lt;/h2&gt;

&lt;p&gt;I booked this through Asia Miles, the frequent flyer program of Cathay Pacific. The award is officially called a
“&lt;a href=&quot;https://www.asiamiles.com/en/redeem-awards/flight-awards/flight-award-chart.html&quot;&gt;&lt;strong&gt;one&lt;/strong&gt;world Multi-Carrier Award&lt;/a&gt;”,
and the number of miles the award costs is based on how many miles you fly. In this case, I was flying 17,103 mi in
business class, so according to
&lt;a href=&quot;https://www.asiamiles.com/en/redeem-awards/flight-awards/flight-award-chart.html&quot;&gt;the award chart that Cathay Pacific publishes for this type of award&lt;/a&gt;,
it cost 155,000 Asia Miles per person, which was exactly how much I was charged.&lt;/p&gt;

&lt;p&gt;There are some routing rules, which are more onerous than you might expect if you are not solely looking to take
non-stop flights to &lt;strong&gt;one&lt;/strong&gt;world hubs. Specifically, you are allowed:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Five stopovers&lt;/li&gt;
  &lt;li&gt;Two open jaws&lt;/li&gt;
  &lt;li&gt;Two transits (less than 24 hours)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The two transit limitation is significant: Americans may be used to having to connect through a hub for a lot of flying,
but you can only do that twice on a round the world itinerary by these rules. In fact, when I booked this award, the
agent told me that I could not book the award since I had three transits: one in New York, one in Helsinki, and one in
London! Luckily, I had read about this: it seems that you can ask for what is normally a transit to be ticketed as
one of your stopovers. I asked the agent to change the JFK transit as a stopover, he warned me that it may change the
tax calculation, but was able to ticket it. I also knew that most domestic itineraries and itineraries leaving the
United States had minimal (about $6) taxes, which is why I chose New York over Helsinki or London.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/assets/jl-availability-calendar.png&quot; alt=&quot;Asia Miles website Chat Button&quot; /&gt;
&lt;br /&gt;
&lt;em&gt;Searching for Business Award Availability on Japan Airlines BOS-NRT in April 2022 using aa.com&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It’s worth mentioning as well that you have to find award availability, which can be tough. I used the Cathay Pacific
website to search when I could, but I found that the award calendar on the American Airlines website has a calendar with
good filter options (business class, non-stop, and specific airlines) and the British Airways website was good for a
“yes/no” answer on whether there actually was award availability. In my experience, it’s worth searching
segment-by-segment; the routing through Helsinki did not show up when I searched for Tokyo to Zürich, but I found
the availability on each segment.&lt;/p&gt;

&lt;h2 id=&quot;the-booking-experience&quot;&gt;The Booking Experience&lt;/h2&gt;

&lt;h3 id=&quot;transfering-points&quot;&gt;Transfering Points&lt;/h3&gt;

&lt;p&gt;I transferred American Express Membership Rewards points to Asia Miles to book this award. My research on the internet
said that Cathay Pacific might be willing to place an award on hold before you transfer the points, but space on other
airlines is not guaranteed while an award is on hold. Since I figured I would make this trip work in one way or another,
I transferred the points ahead of time. American Express said that the transfer process could take up to 48 hours, but
in this case the points transferred instantly.&lt;/p&gt;

&lt;h3 id=&quot;talking-to-asia-miles&quot;&gt;Talking to Asia Miles&lt;/h3&gt;

&lt;p&gt;I first tried to book the award on the Asia Miles website, but the website cannot book itineraries with more than four
cities (what?). Additionally, Cathay can only book Alaska Airlines, British Airways, Qantas, and Qatar Airways partner
awards online, which is an odd combination. With some apprehension, I got ready to call the Asia Miles call center, but
then I noticed a “Chat” button in the bottom right corner of my browser window. I thought, “this is complicated, and
even if they are set up to do it, the chat agent is just going to tell me to call the call center since they won’t be
able to process the tax payment at the end.” However, I figured I’d give it a try.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/assets/AsiaMilesChatButton.png&quot; alt=&quot;Asia Miles website Chat Button&quot; /&gt;
&lt;br /&gt;
&lt;em&gt;Praise the Chat Button!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It turns out Anthony the chat agent was amazing. It took about an hour, but he was able to see all of the award space
that I had seen on aa.com and ba.com. I just gave him the flight numbers and dates and, aside from having to change JFK
from a transit to a stopover, he came back and said everything was set. He told me I’d get an email with a link to pay
the taxes (and what fuel surcharges Cathay passes on), I had 24 hours to pay, and once I did that, they would issue
tickets. I got the email in about 20 minutes and the tickets were issued about 5 minutes once I had paid.&lt;/p&gt;

&lt;p&gt;The award ticket ended up costing 155,000 Asia Miles and $481 per person. The breakdown of the taxes and fees shows $291
of fuel surcharges, so it is worth being aware that Asia Miles passes on some fuel surcharges. It seems the bulk of the
fuel surcharge is a £200 surcharge for the American Airlines flight; it actually seems possible that we could have
flown BA home for the same price.&lt;/p&gt;

&lt;p&gt;Buying the Zürich to Rome flight separately on Swiss cost $130 per person.&lt;/p&gt;

&lt;h3 id=&quot;passports-and-seat-assignments&quot;&gt;Passports and Seat Assignments&lt;/h3&gt;

&lt;p&gt;Once the flights ticketed, I used the record locator from Cathay Pacific to go add our passport numbers, as well as add
my AAdvantage number to the booking. Since I have American Airlines elite status, this allows me to select seats on the
intra-Europe British Airways flight without having to pay. Shame on BA for charging for seat assignments in business
class.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/assets/BA-E190.JPG&quot; alt=&quot;Shame!&quot; /&gt;
&lt;em&gt;Shame! Bad airline!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Cathay Pacific’s website did not support changing the frequent flyer number on a booking that did not contain any
segments operated by Cathay Pacific, but I managed to put the record locator into Royal Jordanian’s website and change
the frequent flyer numbers. Once I had done that, I put the record locator into the American Airlines, Japan Airlines,
Finnair, and British Airways websites and was able to choose seats on all of the flights.&lt;/p&gt;

&lt;h2 id=&quot;the-bottom-line&quot;&gt;The Bottom Line&lt;/h2&gt;

&lt;p&gt;I finally booked it! This is going to be a great trip. Even booked with miles, it’s not cheap, requiring a $600 per
person cash outlay in addition to the value of the frequent flyer miles. However, since miles tend to be devalued, it
seems much better to sieze the day and use the miles rather than hoard them for the perfect redemption (e.g. the 105,000
mile per person Star Alliance round the world trip). Plus, you never know when the next plague will hit and stop all
international travel.&lt;/p&gt;

&lt;script&gt;
const maps = {
    &quot;route-map&quot;: [
        [&quot;BOS&quot;, -71.006388, 42.362944],
        [&quot;JFK&quot;, -73.778692, 40.639928],
        [&quot;HND&quot;, 139.781111, 35.553333],
        [&quot;HEL&quot;, 24.963333, 60.317222],
        [&quot;ZRH&quot;, 8.549167, 47.464722],
        &quot;-&quot;,
        [&quot;FCO&quot;, 12.250797, 41.804475],
        [&quot;LHR&quot;, -0.461388, 51.477500],
        [&quot;BOS&quot;, -71.006388, 42.362944],
    ]
};

const textPositionOrder = [
    [2, -3, &quot;red&quot;],
    [-3, -2, &quot;blue&quot;],
    [0, 7, &quot;green&quot;],
    [0, 5, &quot;orange&quot;]
];
let closeLabelRadius = 11;

for (let key in maps) {
    if (!maps.hasOwnProperty(key))
        continue;
    
    let airports = maps[key];
    
    let svg = d3.select(&quot;svg#&quot; + key);
    
    if (svg == null)
        continue;
    
    let width  = svg.node().getBoundingClientRect().width || 1000,
        height = width * 0.7;

    svg.attr(&quot;height&quot;, height);
    
    let projection = d3.geoOrthographic()
        .rotate([105, -90])
        .translate([width / 2, height / 2]);

    let links = airports.reduce(function (acc, point) {
        if (typeof(point) === &quot;string&quot; &amp;&amp; point.startsWith(&quot;-&quot;))
            acc.push([]);
        else
            acc[acc.length-1].push(point);
        return acc;
    }, [[]]).map(function (link) {
        return {
            type: &quot;LineString&quot;,
            coordinates: link.map(function (l) { return [l[1], l[2]]; })
        };
    });

    let path = d3.geoPath()
        .projection(projection);
    
    d3.json(&quot;https://raw.githubusercontent.com/holtzy/D3-graph-gallery/master/DATA/world.geojson&quot;, function (data) {
        var group = svg.append(&quot;g&quot;);
        group
            .selectAll(&quot;path&quot;)
            .data(data.features)
            .enter()
            .append(&quot;path&quot;)
                .attr(&quot;fill&quot;, &quot;#cccccc&quot;)
                .attr(&quot;d&quot;, d3.geoPath().projection(projection))
                .style(&quot;stroke&quot;, &quot;#fff&quot;)
                .style(&quot;stroke-width&quot;, 1);
        
        // Add the path
        for (let i = 0; i &lt; links.length; i++) {
            let link = links[i];
            group.append(&quot;path&quot;)
                .attr(&quot;d&quot;, path(link))
                .style(&quot;fill&quot;, &quot;none&quot;)
                .style(&quot;stroke&quot;, &quot;white&quot;)
                .style(&quot;stroke-width&quot;, 6);
            // Add the path
            group.append(&quot;path&quot;)
                .attr(&quot;d&quot;, path(link))
                .style(&quot;fill&quot;, &quot;none&quot;)
                .style(&quot;stroke&quot;, &quot;#00aaff&quot;)
                .style(&quot;stroke-width&quot;, 3);
        }

        // Airports and Labels
        for (let i = 0; i &lt; airports.length; i++) {
            let item = airports[i];
            if (typeof(item) === &quot;string&quot; &amp;&amp; item.startsWith(&quot;-&quot;))
                continue;
            let point = projection([item[1], item[2]]);
            group.append(&quot;circle&quot;)
                .attr(&quot;cx&quot;, point[0])
                .attr(&quot;cy&quot;, point[1])
                .attr(&quot;r&quot;, 5)
                .style(&quot;fill&quot;, &quot;#0088ee&quot;)
                .style(&quot;stroke&quot;, &quot;white&quot;)
                .style(&quot;stroke-width&quot;, 2);
        }

        if (svg.attr(&quot;data-label-points&quot;) == &quot;true&quot;)
        {
            let labelPositions = [];
            let pointsLabeled = {};
            for (let i = 0; i &lt; airports.length; i++) {
                let item = airports[i];
                if (pointsLabeled.hasOwnProperty(item[0]))
                    continue;
                pointsLabeled[item[0]] = true;

                let lx = item[1], ly = item[2];
                for (var j = 0; j &lt; textPositionOrder.length; j++)
                {
                    lx += textPositionOrder[j][0];
                    ly += textPositionOrder[j][1];
                    var closeLabels = labelPositions
                        .map(function (p) { return Math.sqrt((p[0] - lx) * (p[0] - lx) + (p[1] - ly) * (p[1] - ly)); });
                    closeLabels.sort();
                    if (closeLabels.length == 0 || closeLabels[0] &gt; closeLabelRadius)
                    {
                        labelPositions.push([lx, ly]);
                        
                        var text = svg.append(&quot;text&quot;)
                            .attr(&quot;x&quot;, projection([lx, ly])[0])
                            .attr(&quot;y&quot;, projection([lx, ly])[1])
                            .text(item[0])
                            .style(&quot;font-weight&quot;, &quot;bold&quot;)
                            .style(&quot;font-size&quot;, 12)
    //                        .style(&quot;fill&quot;, textPositionOrder[j][2])
                            .style(&quot;fill&quot;, &quot;#000000&quot;);
                        if (textPositionOrder[j][0] &lt; 0)
                            text.style(&quot;text-anchor&quot;, &quot;end&quot;);
                        break;
                    }
                }
            }
        }

        svg.select(&quot;g&quot;)
            .attr(&quot;transform&quot;, &quot;scale(&quot; + 1.35 * width / 1000 + &quot;)&quot;);
    });
}

function sizeChange() {
    for (let key in maps) {
        let svg    = d3.select(&quot;svg#&quot; + key),
            width  = svg.node().getBoundingClientRect().width || 1000,
            height = width * 0.6;
        
        console.log(&quot;size change&quot;);
        svg.select(&quot;g&quot;)
            .attr(&quot;transform&quot;, &quot;scale(&quot; + 1.35 * width / 1000 + &quot;)&quot;);
        svg.attr(&quot;height&quot;, height);
    }
}

d3.select(window).on(&quot;resize&quot;, sizeChange);

&lt;/script&gt;</content><author><name></name></author><category term="Travel" /><category term="Japan" /><category term="Zurich" /><category term="Rome" /><category term="London" /><summary type="html">I’ve been writing about it since before COVID, but now I’ve finally done it: I’ve actually booked a round-the-world award ticket. In April 2022, I’ll leave Boston and never stop flying west until I get back to Boston.</summary></entry><entry><title type="html">Around the World in 2022</title><link href="http://rchowe.com/blog/2021/02/28/round-the-world.html" rel="alternate" type="text/html" title="Around the World in 2022" /><published>2021-02-28T00:00:00+00:00</published><updated>2021-02-28T00:00:00+00:00</updated><id>http://rchowe.com/blog/2021/02/28/round-the-world</id><content type="html" xml:base="http://rchowe.com/blog/2021/02/28/round-the-world.html">&lt;p&gt;I want to take an around the world trip. I started writing about it on this blog
&lt;a href=&quot;/2020/06/25/ana-round-the-world.html&quot;&gt;in June 2020 when the Coronavirus pandemic cancelled all travel&lt;/a&gt;, but
components of it predate that. The plan is to take a trip in the spring to see cherry blossums in Asia and then keep
flying west to see some spring festivals in Europe.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;&lt;img src=&quot;/blog/assets/cherry-blossums.jpg&quot; alt=&quot;Cherry Blossums in Ueno Park, Tokyo&quot; /&gt;
&lt;em&gt;Cherry Blossums in Ueno Park, Tokyo&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The Japanese custom of &lt;em&gt;Hanami&lt;/em&gt;, or flower viewing, should be more realistically translated as the modern
interpretation: “having a picnic under a cherry tree and drinking”. I have been in Japan in April before and nobody
really explains to you that it feels like the cherry blossums surround you. Pictures do not do it justice.&lt;/p&gt;

&lt;p&gt;Then in Zürich, the spring festival of
&lt;a href=&quot;https://www.zuerich.com/en/visit/sechselaeuten&quot;&gt;&lt;em&gt;Sechseläuten&lt;/em&gt;&lt;/a&gt;, which my family has been playfully calling the
“festival of the exploding snowman.” Literally it means the six bells festival, and it marks the point at which Swiss
workers would start going home at 6 pm instead of 5 pm. The highlight of the celebration is the ignition of a paper
snowman (the &lt;em&gt;Böögg&lt;/em&gt;) whose head is packed with explosives, while guildsmen ride frantically around the base.
The concept sounds so ridiculous and wonderful.&lt;/p&gt;

&lt;h2 id=&quot;how-to-fly-there&quot;&gt;How to Fly There&lt;/h2&gt;

&lt;h3 id=&quot;booking-with-miles&quot;&gt;Booking with Miles&lt;/h3&gt;

&lt;p&gt;I would really like to use miles and points to book this trip. There are three main reasons: (1) I haven’t booked a big
trip using miles yet, (2) the trend over time is for miles to devalue, and (3) I’ll likely be traveling with family
and/or friends.&lt;/p&gt;

&lt;p&gt;If you are the type of person who enjoys optimizing mileage redemptions, the third point may surprise you. After all,
you are using your hard earned miles to take your family or friends on normally quite expensive business class flights,
they should be happy they are going through Tokyo, Hong Kong, AND London on the way to Rome to sample all of
the airline seats and first class lounges and decide which one is the best.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/assets/aa_hot_fudge_sundae.jpg&quot; alt=&quot;Airplane Hot Fudge Sundae&quot; /&gt;
&lt;em&gt;Your family cares more about a non-stop flight than a hot fudge sundae.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;“Normal” people just want to get on the plane, be pretty comfortable during the flight, and get off the plane and have
their vacation. That’s exactly what I plan to do – I am going to use my miles to book non-stop flights where otherwise
I may not due to cost or airline choice.&lt;/p&gt;

&lt;p&gt;Additionally, my dad does not want to be away from home for too long because the cats get lonely. I understand that, but
I also do not want to be so jet lagged to not enjoy the trip. He’s currently saying two weeks, and my mom is saying
“longer”, but either way I don’t want anyone to feel like they spent a significant amount of time during the trip in
airports and on airplanes. Additionally, I feel that country-hopping in Asia might be less possible than before due to
COVID-19 vaccine related entry requirements.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/assets/Buffy.jpg&quot; alt=&quot;Buffy&quot; /&gt;
&lt;em&gt;Lonely!&lt;/em&gt;&lt;/p&gt;

&lt;h3 id=&quot;round-the-world-options&quot;&gt;“Round the World” Options&lt;/h3&gt;

&lt;p&gt;Since this is a “round the world” trip, I’ve mostly been looking at the frequent flyer programs that have “round the
world” awards. I’ve written previously about two options:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/2020/06/22/new-trips.html&quot;&gt;&lt;strong&gt;Cathay Pacific oneworld Multi-Carrier Awards&lt;/strong&gt;&lt;/a&gt;, where awards are priced based
on distance. My example itinerary priced at about 165,000 Asia Miles per person in business class.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/2020/06/25/ana-round-the-world.html&quot;&gt;&lt;strong&gt;ANA Star Alliance Round the World Awards&lt;/strong&gt;&lt;/a&gt;, where awards are
similarly priced based on distance. My example itinerary priced at 115,000 miles per person in business class.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both of these are still good options, and Amex Membership Rewards points transfer to both programs.&lt;/p&gt;

&lt;p&gt;However, since I am now more interested in a “quick” round the world trip where generous stopover rules are less
important, that does open up some other options.&lt;/p&gt;

&lt;h3 id=&quot;virgin-points-and-something-else&quot;&gt;Virgin Points and Something Else&lt;/h3&gt;

&lt;p&gt;I transferred 120,000 Membership Rewards points to Virgin Atlantic’s frequent flyer program, which they have
re-christened “Virgin Points”, a while back and &lt;a href=&quot;/2020/04/15/japan-and-korea.html&quot;&gt;booked seats on Delta flights from Asia to the United
States&lt;/a&gt;. I had to cancel those flights due to the pandemic; I got my Virgin
Points back, but Virgin also significantly devalued their points for Delta awards between the United States and Asia.
The 60,000 point one way award tickets that I booked would cost 165,000 point one way under the new pricing structure.
That pricing change is nuts!&lt;/p&gt;

&lt;p&gt;Luckily, Virgin did not touch their &lt;a href=&quot;https://www.virginatlantic.com/us/en/flying-club/partners/airlines/all-nippon-airways.html&quot;&gt;ANA award chart&lt;/a&gt;,
so you can still book ANA business class for 95,000 miles roundtrip between the Eastern United States or Europe and
Japan. Only round trips are allowed, so this would not normally be particularly useful redemption for a round-the-world
trip, except for the fact that it seems multi-region open jaws are allowed at this pricing. So it’s possible to book
Chicago to Tokyo, spend 2 weeks in Tokyo, and then fly Tokyo to Munich.&lt;/p&gt;

&lt;p&gt;We would still need to find a way to get home from Europe, but I might go for using 60,000 Aeroplan miles to book Swiss
business class. I also expect excellent award availability on Boston to London, given that by next spring, it will be
flown by six different airlines. This adds up to 155,000 miles per person total, which is not bad, especially
considering I transferred Membership Rewards points to Virgin with a 30% bonus. There are quite a few frequent flyer
programs that offer one way business class tickets from Europe to the US for 50,000 to 60,000 miles.&lt;/p&gt;</content><author><name></name></author><category term="Travel" /><category term="Taipei" /><category term="Japan" /><summary type="html">I want to take an around the world trip. I started writing about it on this blog in June 2020 when the Coronavirus pandemic cancelled all travel, but components of it predate that. The plan is to take a trip in the spring to see cherry blossums in Asia and then keep flying west to see some spring festivals in Europe.</summary></entry><entry><title type="html">A (Fixed) More Optimal Round the World Trip</title><link href="http://rchowe.com/blog/2020/10/02/japan-fuel-surcharges.html" rel="alternate" type="text/html" title="A (Fixed) More Optimal Round the World Trip" /><published>2020-10-02T00:00:00+00:00</published><updated>2020-10-02T00:00:00+00:00</updated><id>http://rchowe.com/blog/2020/10/02/japan-fuel-surcharges</id><content type="html" xml:base="http://rchowe.com/blog/2020/10/02/japan-fuel-surcharges.html">&lt;p&gt;Back in June, &lt;a href=&quot;/2020/06/25/ana-round-the-world.html&quot;&gt;I wrote about a really good use of points for a round-the-world trip in business class&lt;/a&gt;
to see a bunch of Asian countries and then a few European countries, for 115,000 ANA miles. However, going back to it,
I realize there is one major flaw with the example itinerary I gave.&lt;/p&gt;

&lt;!--more--&gt;

&lt;script src=&quot;https://d3js.org/d3.v4.js&quot;&gt;&lt;/script&gt;

&lt;script src=&quot;https://d3js.org/d3-scale-chromatic.v1.min.js&quot;&gt;&lt;/script&gt;

&lt;script src=&quot;https://d3js.org/d3-geo-projection.v2.min.js&quot;&gt;&lt;/script&gt;

&lt;h2 id=&quot;the-original-route&quot;&gt;The Original Route&lt;/h2&gt;

&lt;p&gt;When I wrote the old post, I noted that there is not a direct flight from Boston to Asia on any Star Alliance airline,
however there are many more direct flight options to Zürich on Swiss. Here is the route that I proposed:&lt;/p&gt;

&lt;div class=&quot;svg-container&quot; style=&quot;max-width: 1000px; margin: 1em auto;&quot;&gt;
    &lt;svg id=&quot;route-map&quot; data-hemisphere=&quot;pacific&quot; data-label-points=&quot;true&quot; style=&quot;width: 100%; max-width: 1000px;&quot;&gt;&lt;/svg&gt;
&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Boston (BOS) to Chicago O’Hare (ORD)&lt;/strong&gt; — United&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Chicago O’Hare (ORD) to Tokyo Haneda (HND) or Narita (NRT)&lt;/strong&gt; — United or ANA&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Tokyo Haneda (HND) or Narita (NRT) to Seoul Incheon (ICN)&lt;/strong&gt; — ANA, Asiana, or Ethiopian&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Seoul Inceon (ICN) to Taipei Taoyuan (TPE)&lt;/strong&gt; — Asiana or EVA Air&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Taipei Taoyuan (TPE) to Bangkok (BKK)&lt;/strong&gt; — EVA Air or Thai Airways&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Bangkok (BKK) to Vienna (VIE)&lt;/strong&gt; — EVA Air&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Vienna (VIE) to Zürich (ZRH)&lt;/strong&gt; — Austrian Airlines or Swiss Air Lines&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Zürich (ZRH) to Boston (BOS)&lt;/strong&gt; — Swiss Air Lines&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;the-issue&quot;&gt;The Issue&lt;/h2&gt;

&lt;p&gt;That routing would be bookable. However, when I wrote the previous post, I did not realize that ANA passes on fuel
surcharges from Swiss, which total to about $700 for a one-way business class flight (this is unfortunately pretty
common among some European operators). As cool as business class on Swiss seems to be, I don’t think it’s worth a $700
fuel surcharge, so we need another way of getting there.&lt;/p&gt;

&lt;h2 id=&quot;options&quot;&gt;Options&lt;/h2&gt;

&lt;p&gt;Among European Star Alliance airlines, ANA only seems to charge fuel surcharges on the Lufthasna Group airlines
(Lufthansa, Swiss, Austrian, Brussels Airlines). All of the other options will involve a connection, but luckily there
are a bunch of other Star Alliance airlines that ANA does not charge fuel surcharges on, so our options are:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;United&lt;/strong&gt; - A ton of flights from Zürich to the United States, Polaris is apparently pretty good if you get a
  plane with the new seats, and you get US domestic first on a connection instead of EuroBusiness.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Air Canada&lt;/strong&gt; - Similar to United, but you have to go through immigration in both Canada and the US.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;TAP Air Portugal&lt;/strong&gt; – A bunch of flights via Lisbon to Boston, but feels like more of a budget carrier than some of
  the others on this list.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Scandanavian Airlines (SAS)&lt;/strong&gt; – Don’t know that much, but going via Copenhagen might be kind of cool.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Turkish Airlines&lt;/strong&gt; – It would be a bit of a backtrack (and you’d have to keep your eyes on the mileage since the
  RTW award is billed by mileage), but apparently the food is amazing. Unfortunately, they do seem to charge a ~$350
  fuel surcharge.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Unfortunately, the following are not options:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Singapore Airlines&lt;/strong&gt; – They fly Singapore to Frankfurt to New York (JFK), and they will sell you Frankfurt to JFK
  as a standalone segment, but they do not open business class awards to star alliance partner programs (they do to Alaska, but you cannot book JFK-FRA through Alaska and there are, in my opinion, better uses for Alaska miles).&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Virgin Atlantic&lt;/strong&gt; – You can book Virgin Atlantic flights with ANA miles, but sadly they do not qualify for the RTW
  awards since they are not a Star Alliance airline. They also have some hefty fuel surcharges.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;the-new-route&quot;&gt;The New Route&lt;/h2&gt;

&lt;p&gt;Who knows if I will ever get to fly this due to COVID-19, but here goes:&lt;/p&gt;

&lt;div class=&quot;svg-container&quot; style=&quot;max-width: 1000px; margin: 1em auto;&quot;&gt;
    &lt;svg id=&quot;new-route-map&quot; data-hemisphere=&quot;pacific&quot; data-label-points=&quot;true&quot; style=&quot;width: 100%; max-width: 1000px;&quot;&gt;&lt;/svg&gt;
&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Boston (BOS) to Chicago O’Hare (ORD)&lt;/strong&gt; — United&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Chicago O’Hare (ORD) to Tokyo Haneda (HND) or Narita (NRT)&lt;/strong&gt; — United or ANA&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Tokyo Haneda (HND) or Narita (NRT) to Seoul Incheon (ICN)&lt;/strong&gt; — ANA, Asiana, or Ethiopian&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Seoul Inceon (ICN) to Taipei Taoyuan (TPE)&lt;/strong&gt; — Asiana or EVA Air&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Taipei Taoyuan (TPE) to Bangkok (BKK)&lt;/strong&gt; — EVA Air or Thai Airways&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Bangkok (BKK) to Vienna (VIE)&lt;/strong&gt; — EVA Air&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Vienna (VIE) to Zürich (ZRH)&lt;/strong&gt; — Austrian Airlines or Swiss Air Lines&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Zürich (ZRH) to Copenhagen (CPH)&lt;/strong&gt; — Scandanavian Airlines or Swiss Air Lines&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Copenhagen (CPH) to Boston (BOS)&lt;/strong&gt; — Scandinavian Airlines&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;bottom-line&quot;&gt;Bottom Line&lt;/h2&gt;

&lt;p&gt;Fuel surcharges are annoying. Swiss has some outrageously high fuel surcharges, though it is not unique among European
carriers. To avoid them when booking through ANA, you have to fly another carrier.&lt;/p&gt;

&lt;script&gt;
const maps = {
    &quot;route-map&quot;: [
        [&quot;BOS&quot;, -71.006388, 42.362944],
        [&quot;ORD&quot;, -87.906596, 41.974522],
        [&quot;TYO&quot;, 139.781111, 35.553333],
        [&quot;ICN&quot;, 126.450517, 37.469075],
        [&quot;TPE&quot;, 121.232822, 25.077731],
        [&quot;BKK&quot;, 100.747283, 13.681108],
        [&quot;VIE&quot;, 16.569722, 48.110278],
        [&quot;ZRH&quot;, 8.549167, 47.464722],
        [&quot;BOS&quot;, -71.006388, 42.362944]
    ],
    &quot;new-route-map&quot;: [
        [&quot;BOS&quot;, -71.006388, 42.362944],
        [&quot;ORD&quot;, -87.906596, 41.974522],
        [&quot;TYO&quot;, 139.781111, 35.553333],
        [&quot;ICN&quot;, 126.450517, 37.469075],
        [&quot;TPE&quot;, 121.232822, 25.077731],
        [&quot;BKK&quot;, 100.747283, 13.681108],
        [&quot;VIE&quot;, 16.569722, 48.110278],
        [&quot;ZRH&quot;, 8.549167, 47.464722],
        [&quot;CPH&quot;, 12.655972, 55.617917],
        [&quot;BOS&quot;, -71.006388, 42.362944]
    ]
};

const textPositionOrder = [
    [2, -3, &quot;red&quot;],
    [-3, -2, &quot;blue&quot;],
    [0, 7, &quot;green&quot;],
    [0, 5, &quot;orange&quot;]
];
let closeLabelRadius = 11;

for (let key in maps) {
    if (!maps.hasOwnProperty(key))
        continue;
    
    let airports = maps[key];
    
    let svg = d3.select(&quot;svg#&quot; + key);
    
    if (svg == null)
        continue;
    
    let width  = svg.node().getBoundingClientRect().width || 1000,
        height = width * 0.7;

    svg.attr(&quot;height&quot;, height);
    
    let projection = d3.geoOrthographic()
        .rotate([105, -90])
        .translate([width / 2, height / 2]);

    let links = airports.reduce(function (acc, point) {
        if (typeof(point) === &quot;string&quot; &amp;&amp; point.startsWith(&quot;-&quot;))
            acc.push([]);
        else
            acc[acc.length-1].push(point);
        return acc;
    }, [[]]).map(function (link) {
        return {
            type: &quot;LineString&quot;,
            coordinates: link.map(function (l) { return [l[1], l[2]]; })
        };
    });

    let path = d3.geoPath()
        .projection(projection);
    
    d3.json(&quot;https://raw.githubusercontent.com/holtzy/D3-graph-gallery/master/DATA/world.geojson&quot;, function (data) {
        var group = svg.append(&quot;g&quot;);
        group
            .selectAll(&quot;path&quot;)
            .data(data.features)
            .enter()
            .append(&quot;path&quot;)
                .attr(&quot;fill&quot;, &quot;#cccccc&quot;)
                .attr(&quot;d&quot;, d3.geoPath().projection(projection))
                .style(&quot;stroke&quot;, &quot;#fff&quot;)
                .style(&quot;stroke-width&quot;, 1);
        
        // Add the path
        for (let i = 0; i &lt; links.length; i++) {
            let link = links[i];
            group.append(&quot;path&quot;)
                .attr(&quot;d&quot;, path(link))
                .style(&quot;fill&quot;, &quot;none&quot;)
                .style(&quot;stroke&quot;, &quot;white&quot;)
                .style(&quot;stroke-width&quot;, 6);
            // Add the path
            group.append(&quot;path&quot;)
                .attr(&quot;d&quot;, path(link))
                .style(&quot;fill&quot;, &quot;none&quot;)
                .style(&quot;stroke&quot;, &quot;#00aaff&quot;)
                .style(&quot;stroke-width&quot;, 3);
        }

        // Airports and Labels
        for (let i = 0; i &lt; airports.length; i++) {
            let item = airports[i];
            if (typeof(item) === &quot;string&quot; &amp;&amp; item.startsWith(&quot;-&quot;))
                continue;
            let point = projection([item[1], item[2]]);
            group.append(&quot;circle&quot;)
                .attr(&quot;cx&quot;, point[0])
                .attr(&quot;cy&quot;, point[1])
                .attr(&quot;r&quot;, 5)
                .style(&quot;fill&quot;, &quot;#0088ee&quot;)
                .style(&quot;stroke&quot;, &quot;white&quot;)
                .style(&quot;stroke-width&quot;, 2);
        }

        if (svg.attr(&quot;data-label-points&quot;) == &quot;true&quot;)
        {
            let labelPositions = [];
            let pointsLabeled = {};
            for (let i = 0; i &lt; airports.length; i++) {
                let item = airports[i];
                if (pointsLabeled.hasOwnProperty(item[0]))
                    continue;
                pointsLabeled[item[0]] = true;

                let lx = item[1], ly = item[2];
                for (var j = 0; j &lt; textPositionOrder.length; j++)
                {
                    lx += textPositionOrder[j][0];
                    ly += textPositionOrder[j][1];
                    var closeLabels = labelPositions
                        .map(function (p) { return Math.sqrt((p[0] - lx) * (p[0] - lx) + (p[1] - ly) * (p[1] - ly)); });
                    closeLabels.sort();
                    if (closeLabels.length == 0 || closeLabels[0] &gt; closeLabelRadius)
                    {
                        labelPositions.push([lx, ly]);
                        
                        var text = svg.append(&quot;text&quot;)
                            .attr(&quot;x&quot;, projection([lx, ly])[0])
                            .attr(&quot;y&quot;, projection([lx, ly])[1])
                            .text(item[0])
                            .style(&quot;font-weight&quot;, &quot;bold&quot;)
                            .style(&quot;font-size&quot;, 12)
    //                        .style(&quot;fill&quot;, textPositionOrder[j][2])
                            .style(&quot;fill&quot;, &quot;#000000&quot;);
                        if (textPositionOrder[j][0] &lt; 0)
                            text.style(&quot;text-anchor&quot;, &quot;end&quot;);
                        break;
                    }
                }
            }
        }

        svg.select(&quot;g&quot;)
            .attr(&quot;transform&quot;, &quot;scale(&quot; + 1.35 * width / 1000 + &quot;)&quot;);
    });
}

function sizeChange() {
    for (let key in maps) {
        let svg    = d3.select(&quot;svg#&quot; + key),
            width  = svg.node().getBoundingClientRect().width || 1000,
            height = width * 0.6;
        
        console.log(&quot;size change&quot;);
        svg.select(&quot;g&quot;)
            .attr(&quot;transform&quot;, &quot;scale(&quot; + 1.35 * width / 1000 + &quot;)&quot;);
        svg.attr(&quot;height&quot;, height);
    }
}

d3.select(window).on(&quot;resize&quot;, sizeChange);

&lt;/script&gt;</content><author><name></name></author><category term="Travel" /><category term="Japan" /><category term="ANA" /><summary type="html">Back in June, I wrote about a really good use of points for a round-the-world trip in business class to see a bunch of Asian countries and then a few European countries, for 115,000 ANA miles. However, going back to it, I realize there is one major flaw with the example itinerary I gave.</summary></entry><entry><title type="html">The New Japan Trip</title><link href="http://rchowe.com/blog/2020/06/26/new-trip-option.html" rel="alternate" type="text/html" title="The New Japan Trip" /><published>2020-06-26T00:00:00+00:00</published><updated>2020-06-26T00:00:00+00:00</updated><id>http://rchowe.com/blog/2020/06/26/new-trip-option</id><content type="html" xml:base="http://rchowe.com/blog/2020/06/26/new-trip-option.html">&lt;p&gt;I have officially cancelled my Japan trip in August. It makes me sad, but I also get to start thinking about the next
trip in April, which &lt;a href=&quot;/2020/06/22/new-trips.html&quot;&gt;I wrote about the other day&lt;/a&gt;.&lt;/p&gt;

&lt;!--more--&gt;

&lt;script src=&quot;https://d3js.org/d3.v4.js&quot;&gt;&lt;/script&gt;

&lt;script src=&quot;https://d3js.org/d3-scale-chromatic.v1.min.js&quot;&gt;&lt;/script&gt;

&lt;script src=&quot;https://d3js.org/d3-geo-projection.v2.min.js&quot;&gt;&lt;/script&gt;

&lt;h2 id=&quot;routing-options&quot;&gt;Routing Options&lt;/h2&gt;

&lt;p&gt;Broadly, I want to get three people, in business class, from the US to Asia to Europe and back to the US. I’m not too
concerned about having to buy a positioning flight in some regions, but I’d like the intercontinental flights to be
booked with miles. Additionally, given that I now have 120,000 Virgin Atlantic miles, I would like to use those if
possible.&lt;/p&gt;

&lt;p&gt;Virgin charges fuel surcharges on almost all transatlantic flights, including those operated by partners such as Delta,
so if possible I would also like to use the Virgin miles for the transpacific segment. Conveniently, there do seem to be
a number of options for awards on Delta.&lt;/p&gt;

&lt;h3 id=&quot;north-america-to-asia&quot;&gt;North America to Asia&lt;/h3&gt;

&lt;p&gt;Although you can also redeem Virgin Atlantic miles on ANA and Air China, ANA does not allow one-way awards and I would
prefer to avoid China. Therefore, we’re looking at non-stop Delta flights from the mainland US to Asia, which they fly
from their hubs in Atlanta (ATL), Detroit (DTW), Minneapolis (MSP), Seattle (SEA), and Los Angeles (LAX), as well as
a flight to Tokyo from Portland (PDX).&lt;/p&gt;

&lt;p&gt;Award availability looks pretty good in April on most of these, so we have some good options. Most of the options are on
the A350 too, which would be really cool.&lt;/p&gt;

&lt;p&gt;Based on the Asia to Europe routing, we will likely have to decide whether to go to Japan or Korea first, but it seems
that both are options.&lt;/p&gt;

&lt;h3 id=&quot;asia-to-europe&quot;&gt;Asia to Europe&lt;/h3&gt;

&lt;p&gt;This one is a bit trickier. For non-stop routings from Japan or South Korea to Zürich, we are looking at Swiss or
Korean Air. There are a lot of potential one-stop routings, but most programs charge more for an Asia to Europe flight
in business than a North America to Asia flight (about 75,000 miles, though there are a few programs that charge less).
This is where I likely expect to use American Airlines miles.&lt;/p&gt;

&lt;p&gt;There are three major ways to get from Asia to Europe using AA miles:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;You can fly from a oneworld hub in Asia; your options in east Asia are Tokyo (Japan Airlines) or Hong Kong (Cathay
Pacific). Cathay Pacific does have a nonstop flight from Hong Kong to Zürich, however I don’t currently know how
the political situation in Hong Kong will evolve within the next year.&lt;/li&gt;
  &lt;li&gt;You can fly to a oneworld hub in Europe; your options are London (British Airways), Helsinki (Finnair), or Madrid
(Iberia). Finnair has a quite large Asia network and is geographically favorable compared to the other two, but may
not release award seats in long-haul business to partner airlines.&lt;/li&gt;
  &lt;li&gt;You can fly through the Middle East; you can redeem American miles on Etihad and Qatar Airways.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Currently I have not decided what I want to do, but I am leaning towards flying through Helsinki. It seems that though
Finnair does not release award seats in long-haul business readily, Japan Airlines does.&lt;/p&gt;

&lt;h3 id=&quot;europe-to-north-america&quot;&gt;Europe to North America&lt;/h3&gt;

&lt;p&gt;There are several good deals here (as well as a lot of bad deals):&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Aeroplan charges 55,000 miles for a non-stop flight on Swiss.&lt;/li&gt;
  &lt;li&gt;American charges 57,500 miles for a flight via London or Philadelphia, though they add fuel surcharges.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Right now I think I am inclined to go with Aeroplan.&lt;/p&gt;

&lt;h2 id=&quot;my-tentative-routing&quot;&gt;My Tentative Routing&lt;/h2&gt;

&lt;p&gt;With all of these routing restrictions in mind, here is the routing I am thinking of:&lt;/p&gt;

&lt;div class=&quot;svg-container&quot; style=&quot;max-width: 1000px; margin: 1em auto;&quot;&gt;
    &lt;svg id=&quot;route-map&quot; data-hemisphere=&quot;pacific&quot; data-label-points=&quot;true&quot; style=&quot;width: 100%; max-width: 1000px;&quot;&gt;&lt;/svg&gt;
&lt;/div&gt;

&lt;p&gt;For 60,000 Virgin Atlantic miles + $5.60 per person:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Atlanta (ATL) to Seoul (ICN)&lt;/strong&gt; — Delta Air Lines, A350 &lt;em&gt;(Business)&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For 7,500 Delta SkyMiles + $23.46 per person:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Seoul - Gimpo (GMP) to Tokyo - Haneda (HND)&lt;/strong&gt; — Korean Air, 777-300 &lt;em&gt;(Economy)&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For 75,000 American Airlines miles + $45.70 per person:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Tokyo - Haneda (HND) to Helsinki (HEL)&lt;/strong&gt; — Japan Airlines, 787-9 or Finnair, A350 &lt;em&gt;(Business)&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Helsinki (HEL) to Zürich (ZRH)&lt;/strong&gt; — Finnair, A321 &lt;em&gt;(Business)&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For 55,000 Aeroplan miles + $54.38 per person:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Zürich (ZRH) to Boston (BOS)&lt;/strong&gt; — Swiss, A340 &lt;em&gt;(Business)&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Amazingly, all of these routes currently have three award seats for the dates I am interested in. Luckily, the fuel
surcharges and taxes total about $130 per person, which I think is pretty great for flying around the world in business
class. It’s not the 115,000 mile ANA deal, but it’s still pretty good in my book.&lt;/p&gt;

&lt;h2 id=&quot;bottom-line&quot;&gt;Bottom Line&lt;/h2&gt;

&lt;p&gt;Assuming the Coronavirus has subsided enough to travel by next April, this should be a great trip. I have been to Japan
enough that it is still quite cool but not amazingly special; this trip has the “trip of a lifetime” feeling to me,
because I get to go with my friends and circumnavigate the world.&lt;/p&gt;

&lt;script&gt;
const maps = {
    &quot;route-map&quot;: [
        [&quot;ATL&quot;, -84.427863, 33.636700],
        [&quot;ICN&quot;, 126.450517, 37.469075],
        [&quot;HND&quot;, 139.781111, 35.553333],
        [&quot;HEL&quot;, 24.963333, 60.317222],
        [&quot;ZRH&quot;, 8.549167, 47.464722],
        [&quot;BOS&quot;, -71.006388, 42.362944],
    ]
};

const textPositionOrder = [
    [2, -3, &quot;red&quot;],
    [-3, -2, &quot;blue&quot;],
    [0, 7, &quot;green&quot;],
    [0, 5, &quot;orange&quot;]
];
let closeLabelRadius = 11;

for (let key in maps) {
    if (!maps.hasOwnProperty(key))
        continue;
    
    let airports = maps[key];
    
    let svg = d3.select(&quot;svg#&quot; + key);
    
    if (svg == null)
        continue;
    
    let width  = svg.node().getBoundingClientRect().width || 1000,
        height = width * 0.7;

    svg.attr(&quot;height&quot;, height);
    
    let projection = d3.geoOrthographic()
        .rotate([105, -90])
        .translate([width / 2, height / 2]);

    let links = airports.reduce(function (acc, point) {
        if (typeof(point) === &quot;string&quot; &amp;&amp; point.startsWith(&quot;-&quot;))
            acc.push([]);
        else
            acc[acc.length-1].push(point);
        return acc;
    }, [[]]).map(function (link) {
        return {
            type: &quot;LineString&quot;,
            coordinates: link.map(function (l) { return [l[1], l[2]]; })
        };
    });

    let path = d3.geoPath()
        .projection(projection);
    
    d3.json(&quot;https://raw.githubusercontent.com/holtzy/D3-graph-gallery/master/DATA/world.geojson&quot;, function (data) {
        var group = svg.append(&quot;g&quot;);
        group
            .selectAll(&quot;path&quot;)
            .data(data.features)
            .enter()
            .append(&quot;path&quot;)
                .attr(&quot;fill&quot;, &quot;#cccccc&quot;)
                .attr(&quot;d&quot;, d3.geoPath().projection(projection))
                .style(&quot;stroke&quot;, &quot;#fff&quot;)
                .style(&quot;stroke-width&quot;, 1);
        
        // Add the path
        for (let i = 0; i &lt; links.length; i++) {
            let link = links[i];
            group.append(&quot;path&quot;)
                .attr(&quot;d&quot;, path(link))
                .style(&quot;fill&quot;, &quot;none&quot;)
                .style(&quot;stroke&quot;, &quot;white&quot;)
                .style(&quot;stroke-width&quot;, 6);
            // Add the path
            group.append(&quot;path&quot;)
                .attr(&quot;d&quot;, path(link))
                .style(&quot;fill&quot;, &quot;none&quot;)
                .style(&quot;stroke&quot;, &quot;#00aaff&quot;)
                .style(&quot;stroke-width&quot;, 3);
        }

        // Airports and Labels
        for (let i = 0; i &lt; airports.length; i++) {
            let item = airports[i];
            if (typeof(item) === &quot;string&quot; &amp;&amp; item.startsWith(&quot;-&quot;))
                continue;
            let point = projection([item[1], item[2]]);
            group.append(&quot;circle&quot;)
                .attr(&quot;cx&quot;, point[0])
                .attr(&quot;cy&quot;, point[1])
                .attr(&quot;r&quot;, 5)
                .style(&quot;fill&quot;, &quot;#0088ee&quot;)
                .style(&quot;stroke&quot;, &quot;white&quot;)
                .style(&quot;stroke-width&quot;, 2);
        }

        if (svg.attr(&quot;data-label-points&quot;) == &quot;true&quot;)
        {
            let labelPositions = [];
            let pointsLabeled = {};
            for (let i = 0; i &lt; airports.length; i++) {
                let item = airports[i];
                if (pointsLabeled.hasOwnProperty(item[0]))
                    continue;
                pointsLabeled[item[0]] = true;

                let lx = item[1], ly = item[2];
                for (var j = 0; j &lt; textPositionOrder.length; j++)
                {
                    lx += textPositionOrder[j][0];
                    ly += textPositionOrder[j][1];
                    var closeLabels = labelPositions
                        .map(function (p) { return Math.sqrt((p[0] - lx) * (p[0] - lx) + (p[1] - ly) * (p[1] - ly)); });
                    closeLabels.sort();
                    if (closeLabels.length == 0 || closeLabels[0] &gt; closeLabelRadius)
                    {
                        labelPositions.push([lx, ly]);
                        
                        var text = svg.append(&quot;text&quot;)
                            .attr(&quot;x&quot;, projection([lx, ly])[0])
                            .attr(&quot;y&quot;, projection([lx, ly])[1])
                            .text(item[0])
                            .style(&quot;font-weight&quot;, &quot;bold&quot;)
                            .style(&quot;font-size&quot;, 12)
    //                        .style(&quot;fill&quot;, textPositionOrder[j][2])
                            .style(&quot;fill&quot;, &quot;#000000&quot;);
                        if (textPositionOrder[j][0] &lt; 0)
                            text.style(&quot;text-anchor&quot;, &quot;end&quot;);
                        break;
                    }
                }
            }
        }

        svg.select(&quot;g&quot;)
            .attr(&quot;transform&quot;, &quot;scale(&quot; + 1.35 * width / 1000 + &quot;)&quot;);
    });
}

function sizeChange() {
    for (let key in maps) {
        let svg    = d3.select(&quot;svg#&quot; + key),
            width  = svg.node().getBoundingClientRect().width || 1000,
            height = width * 0.6;
        
        console.log(&quot;size change&quot;);
        svg.select(&quot;g&quot;)
            .attr(&quot;transform&quot;, &quot;scale(&quot; + 1.35 * width / 1000 + &quot;)&quot;);
        svg.attr(&quot;height&quot;, height);
    }
}

d3.select(window).on(&quot;resize&quot;, sizeChange);

&lt;/script&gt;</content><author><name></name></author><category term="Travel" /><category term="Japan" /><category term="Japan-Airlines" /><category term="Delta" /><summary type="html">I have officially cancelled my Japan trip in August. It makes me sad, but I also get to start thinking about the next trip in April, which I wrote about the other day.</summary></entry><entry><title type="html">A More Optimal Round-the-World Trip</title><link href="http://rchowe.com/blog/2020/06/25/ana-round-the-world.html" rel="alternate" type="text/html" title="A More Optimal Round-the-World Trip" /><published>2020-06-25T00:00:00+00:00</published><updated>2020-06-25T00:00:00+00:00</updated><id>http://rchowe.com/blog/2020/06/25/ana-round-the-world</id><content type="html" xml:base="http://rchowe.com/blog/2020/06/25/ana-round-the-world.html">&lt;p&gt;Earlier &lt;a href=&quot;/2020/06/22/new-trips.html&quot;&gt;I wrote about a potential round-the-world trip&lt;/a&gt; to see springtime events
in Asia and Europe, and I noted that using 165,000 Cathay Pacific miles to book my original itinerary was a good deal.&lt;/p&gt;

&lt;p&gt;Well move over Cathay Pacific, because there’s an even better deal.&lt;!--more--&gt; I won’t bury the lede: All Nippon Airways
(ANA) has fantastic Star Alliance round the world award prices, with a few caveats.&lt;/p&gt;

&lt;script src=&quot;https://d3js.org/d3.v4.js&quot;&gt;&lt;/script&gt;

&lt;script src=&quot;https://d3js.org/d3-scale-chromatic.v1.min.js&quot;&gt;&lt;/script&gt;

&lt;script src=&quot;https://d3js.org/d3-geo-projection.v2.min.js&quot;&gt;&lt;/script&gt;

&lt;h2 id=&quot;the-price&quot;&gt;The Price&lt;/h2&gt;

&lt;p&gt;ANA’s award chart for a round the world award is as follows:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/assets/ana-rtw-20200623.png&quot; alt=&quot;ANA Round-the-World Award Chart&quot; /&gt;&lt;/p&gt;

&lt;p&gt;These awards price based on total distance flown, not including ground sectors. For an itinerary similar to the one I
wrote about yesterday, you are probably looking at the 14,000 to 18,000 mile band, which prices at 105,000 miles in
business class, or the 18,000 to 20,000 mile band, which prices at 115,000 miles in business class. There are
&lt;a href=&quot;https://www.ana.co.jp/en/us/amc/reference/tukau/award/tk/zone.html&quot;&gt;a few more routing rules&lt;/a&gt;:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;You must fly Star Alliance airlines, not any other ANA partner airlines that you could normally redeem miles for.&lt;/li&gt;
  &lt;li&gt;You must cross both the Atlantic and Pacific oceans.&lt;/li&gt;
  &lt;li&gt;You must fly east-west or west-east, without backtracking.&lt;/li&gt;
  &lt;li&gt;Up to 8 stopovers are allowed; of those a maximum of 4 can be in Europe and a maximum of 3 can be in Japan.&lt;/li&gt;
  &lt;li&gt;A maximum of 12 flight segments and 4 ground segments are allowed on one ticket. Transfers between different airports
in the same city (e.g. taking the train from NRT to HND) count as a ground segment.&lt;/li&gt;
  &lt;li&gt;The trip must be at least 10 days.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;ANA also requires at least two degrees of kinship when booking an award for someone else; unfortunately they do not
have the same wonderfully complex chart that Japan Airlines has:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/assets/jal-two-degrees-kinship.png&quot; alt=&quot;JAL Kinship Chart&quot; /&gt;
&lt;em&gt;Japan Airlines provides a chart illustrating two degrees of kinship.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you are planning on using transferrable points to book this award, note that you might be able to bypass this
restriction if you trust a friend with a credit card – American Express allows you to transfer points to the frequent
flyer accounts of authorized users on your cards, for example.&lt;/p&gt;

&lt;p&gt;Lastly, note that some Star Alliance airlines limit award availability to partner airlines. Most notably, you can only
book Singapore Airlines business class through Singapore’s own frequent flyer program or Alaska Airlines’ program, but
not any other Star Alliance program.&lt;/p&gt;

&lt;h2 id=&quot;my-route&quot;&gt;My Route&lt;/h2&gt;

&lt;p&gt;Like oneworld route that I outlined yesterday, I find a diversity of airlines interesting. Unfortunately, there is not
a direct flight from Boston to Asia on any Star Alliance airline, however there are many more direct flight options
to Zürich on Swiss, so it is about a wash.&lt;/p&gt;

&lt;div class=&quot;svg-container&quot; style=&quot;max-width: 1000px; margin: 1em auto;&quot;&gt;
    &lt;svg id=&quot;route-map&quot; data-hemisphere=&quot;pacific&quot; data-label-points=&quot;true&quot; style=&quot;width: 100%; max-width: 1000px;&quot;&gt;&lt;/svg&gt;
&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Boston (BOS) to Chicago O’Hare (ORD)&lt;/strong&gt; — United&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Chicago O’Hare (ORD) to Tokyo Haneda (HND)&lt;/strong&gt; — United or ANA&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Tokyo Haneda (HND) to Seoul Incheon (ICN)&lt;/strong&gt; — ANA or Asiana&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Seoul Inceon (ICN) to Taipei Taoyuan (TPE)&lt;/strong&gt; — Asiana or EVA Air&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Taipei Taoyuan (TPE) to Bangkok (BKK)&lt;/strong&gt; — EVA Air or Thai Airways&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Bangkok (BKK) to Vienna (VIE)&lt;/strong&gt; — EVA Air&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Vienna (VIE) to Zürich (ZRH)&lt;/strong&gt; — Austrian Airlines or Swiss Air Lines&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Zürich (ZRH) to Boston (BOS)&lt;/strong&gt; — Swiss Air Lines&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I resisted the urge to stick Ethiopian Airlines’ flight from Tokyo to Seoul in there, no matter how cool I think it is,
given I’d be traveling with friends. However, I did put in a fifth freedom flight from Bangkok to Vienna on EVA Air.
There are a ton of Star Alliance options for jetting around Asia.&lt;/p&gt;

&lt;p&gt;This routing is 19,756 miles, per &lt;a href=&quot;http://www.gcmap.com&quot;&gt;gcmap.com&lt;/a&gt;, so it would actually cost 115,000 miles in business
class. It would be possible to get it under 18,000 miles by cutting out a few stops, but the 10,000 miles extra seemed
worth it.&lt;/p&gt;

&lt;h2 id=&quot;bottom-line&quot;&gt;Bottom Line&lt;/h2&gt;

&lt;p&gt;If you can find award availability on all of the segments you want, you can piece together a great round-the-world trip
at a great price, especially given that you can transfer American Express points to ANA. There is also a ton of value in
the number of free stopovers that you get. I probably will not use this option to book my next trip, but it’s a good one
to have for future reference.&lt;/p&gt;

&lt;script&gt;
const maps = {
    &quot;route-map&quot;: [
        [&quot;BOS&quot;, -71.006388, 42.362944],
        [&quot;ORD&quot;, -87.906596, 41.974522],
        [&quot;HND&quot;, 139.781111, 35.553333],
        [&quot;ICN&quot;, 126.450517, 37.469075],
        [&quot;TPE&quot;, 121.232822, 25.077731],
        [&quot;BKK&quot;, 100.747283, 13.681108],
        [&quot;VIE&quot;, 16.569722, 48.110278],
        [&quot;ZRH&quot;, 8.549167, 47.464722],
        [&quot;BOS&quot;, -71.006388, 42.362944],
    ]
};

const textPositionOrder = [
    [2, -3, &quot;red&quot;],
    [-3, -2, &quot;blue&quot;],
    [0, 7, &quot;green&quot;],
    [0, 5, &quot;orange&quot;]
];
let closeLabelRadius = 11;

for (let key in maps) {
    if (!maps.hasOwnProperty(key))
        continue;
    
    let airports = maps[key];
    
    let svg = d3.select(&quot;svg#&quot; + key);
    
    if (svg == null)
        continue;
    
    let width  = svg.node().getBoundingClientRect().width || 1000,
        height = width * 0.7;

    svg.attr(&quot;height&quot;, height);
    
    let projection = d3.geoOrthographic()
        .rotate([105, -90])
        .translate([width / 2, height / 2]);

    let links = airports.reduce(function (acc, point) {
        if (typeof(point) === &quot;string&quot; &amp;&amp; point.startsWith(&quot;-&quot;))
            acc.push([]);
        else
            acc[acc.length-1].push(point);
        return acc;
    }, [[]]).map(function (link) {
        return {
            type: &quot;LineString&quot;,
            coordinates: link.map(function (l) { return [l[1], l[2]]; })
        };
    });

    let path = d3.geoPath()
        .projection(projection);
    
    d3.json(&quot;https://raw.githubusercontent.com/holtzy/D3-graph-gallery/master/DATA/world.geojson&quot;, function (data) {
        var group = svg.append(&quot;g&quot;);
        group
            .selectAll(&quot;path&quot;)
            .data(data.features)
            .enter()
            .append(&quot;path&quot;)
                .attr(&quot;fill&quot;, &quot;#cccccc&quot;)
                .attr(&quot;d&quot;, d3.geoPath().projection(projection))
                .style(&quot;stroke&quot;, &quot;#fff&quot;)
                .style(&quot;stroke-width&quot;, 1);
        
        // Add the path
        for (let i = 0; i &lt; links.length; i++) {
            let link = links[i];
            group.append(&quot;path&quot;)
                .attr(&quot;d&quot;, path(link))
                .style(&quot;fill&quot;, &quot;none&quot;)
                .style(&quot;stroke&quot;, &quot;white&quot;)
                .style(&quot;stroke-width&quot;, 6);
            // Add the path
            group.append(&quot;path&quot;)
                .attr(&quot;d&quot;, path(link))
                .style(&quot;fill&quot;, &quot;none&quot;)
                .style(&quot;stroke&quot;, &quot;#00aaff&quot;)
                .style(&quot;stroke-width&quot;, 3);
        }

        // Airports and Labels
        for (let i = 0; i &lt; airports.length; i++) {
            let item = airports[i];
            if (typeof(item) === &quot;string&quot; &amp;&amp; item.startsWith(&quot;-&quot;))
                continue;
            let point = projection([item[1], item[2]]);
            group.append(&quot;circle&quot;)
                .attr(&quot;cx&quot;, point[0])
                .attr(&quot;cy&quot;, point[1])
                .attr(&quot;r&quot;, 5)
                .style(&quot;fill&quot;, &quot;#0088ee&quot;)
                .style(&quot;stroke&quot;, &quot;white&quot;)
                .style(&quot;stroke-width&quot;, 2);
        }

        if (svg.attr(&quot;data-label-points&quot;) == &quot;true&quot;)
        {
            let labelPositions = [];
            let pointsLabeled = {};
            for (let i = 0; i &lt; airports.length; i++) {
                let item = airports[i];
                if (pointsLabeled.hasOwnProperty(item[0]))
                    continue;
                pointsLabeled[item[0]] = true;

                let lx = item[1], ly = item[2];
                for (var j = 0; j &lt; textPositionOrder.length; j++)
                {
                    lx += textPositionOrder[j][0];
                    ly += textPositionOrder[j][1];
                    var closeLabels = labelPositions
                        .map(function (p) { return Math.sqrt((p[0] - lx) * (p[0] - lx) + (p[1] - ly) * (p[1] - ly)); });
                    closeLabels.sort();
                    if (closeLabels.length == 0 || closeLabels[0] &gt; closeLabelRadius)
                    {
                        labelPositions.push([lx, ly]);
                        
                        var text = svg.append(&quot;text&quot;)
                            .attr(&quot;x&quot;, projection([lx, ly])[0])
                            .attr(&quot;y&quot;, projection([lx, ly])[1])
                            .text(item[0])
                            .style(&quot;font-weight&quot;, &quot;bold&quot;)
                            .style(&quot;font-size&quot;, 12)
    //                        .style(&quot;fill&quot;, textPositionOrder[j][2])
                            .style(&quot;fill&quot;, &quot;#000000&quot;);
                        if (textPositionOrder[j][0] &lt; 0)
                            text.style(&quot;text-anchor&quot;, &quot;end&quot;);
                        break;
                    }
                }
            }
        }

        svg.select(&quot;g&quot;)
            .attr(&quot;transform&quot;, &quot;scale(&quot; + 1.35 * width / 1000 + &quot;)&quot;);
    });
}

function sizeChange() {
    for (let key in maps) {
        let svg    = d3.select(&quot;svg#&quot; + key),
            width  = svg.node().getBoundingClientRect().width || 1000,
            height = width * 0.6;
        
        console.log(&quot;size change&quot;);
        svg.select(&quot;g&quot;)
            .attr(&quot;transform&quot;, &quot;scale(&quot; + 1.35 * width / 1000 + &quot;)&quot;);
        svg.attr(&quot;height&quot;, height);
    }
}

d3.select(window).on(&quot;resize&quot;, sizeChange);

&lt;/script&gt;</content><author><name></name></author><category term="Travel" /><category term="Japan" /><category term="ANA" /><summary type="html">Earlier I wrote about a potential round-the-world trip to see springtime events in Asia and Europe, and I noted that using 165,000 Cathay Pacific miles to book my original itinerary was a good deal. Well move over Cathay Pacific, because there’s an even better deal.</summary></entry><entry><title type="html">What Now?</title><link href="http://rchowe.com/blog/2020/06/22/new-trips.html" rel="alternate" type="text/html" title="What Now?" /><published>2020-06-22T00:00:00+00:00</published><updated>2020-06-22T00:00:00+00:00</updated><id>http://rchowe.com/blog/2020/06/22/new-trips</id><content type="html" xml:base="http://rchowe.com/blog/2020/06/22/new-trips.html">&lt;p&gt;&lt;a href=&quot;/2020/01/04/trips-planned.html&quot;&gt;I wrote in January&lt;/a&gt;, before COVID-19 was a pandemic, about trips to
Switzerland and Japan that I had planned. By the time I was supposed to go to Switzerland in April, COVID was in full
force and I was &lt;a href=&quot;/2020/04/14/backpacking-through-europe.html&quot;&gt;unable to do so&lt;/a&gt;. However, I
&lt;a href=&quot;/2020/04/15/japan-and-korea.html&quot;&gt;wrote again in April&lt;/a&gt; that I still expected to travel to Japan in August.
Since then, two things have happened that make me much less optimistic about the Japan trip.&lt;/p&gt;

&lt;!--more--&gt;

&lt;script src=&quot;https://d3js.org/d3.v4.js&quot;&gt;&lt;/script&gt;

&lt;script src=&quot;https://d3js.org/d3-scale-chromatic.v1.min.js&quot;&gt;&lt;/script&gt;

&lt;script src=&quot;https://d3js.org/d3-geo-projection.v2.min.js&quot;&gt;&lt;/script&gt;

&lt;style&gt;
img {
    border-radius: 5px;
}
&lt;/style&gt;

&lt;p&gt;&lt;img src=&quot;/blog/assets/aa-bos-4r.jpg&quot; alt=&quot;American Airlines plane lines up for takeoff on 4R at BOS&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;japan-trip-5&quot;&gt;Japan Trip 5&lt;/h2&gt;

&lt;h3 id=&quot;original-itinerary&quot;&gt;Original Itinerary&lt;/h3&gt;

&lt;p&gt;The original itinerary for what I am calling “Japan Trip #5” in August 2020 was as follows.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/assets/jl789.jpeg&quot; alt=&quot;A Japan Airlines 787-9&quot; /&gt;&lt;/p&gt;

&lt;p&gt;On the outbound, I booked the following for 80,000 American Airlines miles per person:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Boston (BOS) to Chicago (ORD)&lt;/strong&gt; — American Airlines 737-800 &lt;em&gt;(First)&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Chicago (ORD) to Tokyo Haneda (HND)&lt;/strong&gt; — Japan Airlines 777-200 &lt;em&gt;(First)&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the return, I used 60,000 Virgin Atlantic miles (that I had obtained by transferring American Express points with a
30% bonus, so 46,154 Membership Rewards points) to book:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Nagoya (NGO) to Detroit (DTW)&lt;/strong&gt; — Delta A330-200 &lt;em&gt;(Business)&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The plan was then to buy a ticket back from Detroit to the Boston area later (which I have not done yet).&lt;/p&gt;

&lt;p&gt;Then when a third friend wanted to come along, I
&lt;a href=&quot;/2020/04/15/japan-and-korea.html&quot;&gt;found more award availability on Delta via Korea&lt;/a&gt;, but I did not follow
through and change our tickets. I did book him an outbound ticket in business on the same flight from Chicago to Tokyo,
given that at the time American was waiving all change and cancellation fees for new bookings.&lt;/p&gt;

&lt;h3 id=&quot;the-problems&quot;&gt;The Problems&lt;/h3&gt;

&lt;p&gt;However, around the beginning of June, Delta canceled the Nagoya to Detroit flight and dramatically cut how much Japan
flying they were doing in August. There was much less award availability by that point too, including via Korea, so I
left the return tickets alone (given that there is not much merit to cancelling tickets early).&lt;/p&gt;

&lt;p&gt;There have also been an uptick in COVID cases in the United States, and other Asian jurisdictions such as Hong Kong have
already extended their ban on US travelers to late September. The Japanese ban currently lasts until the end of June,
but I am expecting it to be extended.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/assets/japanese-food.jpeg&quot; alt=&quot;Japanese food&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Lastly, most of the fun of trips to Japan for me has been eating in restaurants (the food is amazing) and visiting
cultural sites such as shrines. I am not sure how much fun Japan will be with a bunch of new quarantine restrictions.&lt;/p&gt;

&lt;h2 id=&quot;the-new-trip-5&quot;&gt;The New Trip 5&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;(Sung to the tune of&lt;/em&gt; The New James Bond &lt;em&gt;by Eddie from Ohio.)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I currently do not expect to travel for a while. However, I enjoy trip planning, and I think with the current situation,
there is the opportunity to plan a really good trip when it is safe to travel again.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/assets/cherry-blossums.jpg&quot; alt=&quot;Cherry Blossums in Ueno Park&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Japan is rather hot in August. When I was there in January, it was rather pleasant compared to New England. That said,
I think that the best season in Japan is spring, especially in early April when the cherry blossoms are blooming.
Pictures do not do justice to exactly how it feels to be surrounded by a sea of flowering cherry trees.&lt;/p&gt;

&lt;p&gt;I also missed the opportunity to see &lt;em&gt;Sechseläuten&lt;/em&gt; (a Swiss spring festival which my family has been calling “the
festival of the exploding snowman”) in Zürich, which usually takes place in late April, though it was cancelled for
2020. It also just so happens that I have never taken a round-the-world trip…&lt;/p&gt;

&lt;p&gt;So the plan right now is to visit Japan in early April to see the cherry blossums, see some other Asian destinations,
then head to Europe and see &lt;em&gt;Sechseläuten&lt;/em&gt; and possibly find some more spring festivals in other countries. I am
expecting it to be about a three week trip — two weeks in Asia and one week in Europe, but I need to work out the
trip length with my friends.&lt;/p&gt;

&lt;h3 id=&quot;my-current-plan&quot;&gt;My Current Plan&lt;/h3&gt;

&lt;p&gt;The itinerary will likely completely change a few times before we go, but as I currently have it planned:&lt;/p&gt;

&lt;div class=&quot;svg-container&quot; style=&quot;max-width: 1000px; margin: 1em auto;&quot;&gt;
    &lt;svg id=&quot;route-map&quot; data-hemisphere=&quot;pacific&quot; data-label-points=&quot;true&quot; style=&quot;width: 100%; max-width: 1000px;&quot;&gt;&lt;/svg&gt;
&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Boston (BOS) to Tokyo Narita (NRT)&lt;/strong&gt; — Japan Airlines&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Tokyo Narita (NRT) to Taipei Taoyuan (TPE)&lt;/strong&gt; — Cathay Pacific or Japan Airlines&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Taipei Taoyuan (TPE) to Seoul Incheon (ICN)&lt;/strong&gt; — Cathay Pacific&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Seoul Incheon (ICN) to Helsinki (HEL)&lt;/strong&gt; — Finnair&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Helsinki (HEL) to Zürich (ZRH)&lt;/strong&gt; — Finnair&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Zürich (ZRH) to London Heathrow (LHR)&lt;/strong&gt; — British Airways&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;London Heathrow (LHR) to Boston (BOS)&lt;/strong&gt; — American Airlines or British Airways&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Note that I am not wedded to any particular airline on these routes, and may skip some destinations. Finnair recently
has been blocking long-haul award availability to partners more than 60 days out, so they may not be an option. However,
I think it would be fun to try a varied set of airlines, and there are a number of ways to get to Europe from Asia.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/assets/finnair-a350.jpeg&quot; alt=&quot;Finnair A350&quot; /&gt;
&lt;em&gt;Finnair’s A350 is quite nice, but may be tough to book with miles.&lt;/em&gt;&lt;/p&gt;

&lt;h3 id=&quot;the-best-way-to-book-it&quot;&gt;The Best Way to Book It&lt;/h3&gt;

&lt;p&gt;However, I did pick these routes for a reason: all of these airlines belong to the oneworld alliance. Cathay Pacific
offers quite affordable round-the-world awards in business, though they call them “oneworld Multi-Carrier Awards” and do
not require that you circumnavigate the world. This route would total 18,208 miles, which would price at 165,000 Asia
Miles (Cathay Pacific’s mileage currency) per person in business class. This itinerary meets all of the
&lt;a href=&quot;https://www.asiamiles.com/en/terms-and-conditions/service/flight-award-oneworld-multi-carrier-awards.html&quot;&gt;routing rules&lt;/a&gt;,
specifically:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Five stopovers and two open-jaws are allowed.&lt;/strong&gt; I imagine that we will not stop in both Helsinki or London; if we
feel the need to we can set up an open-jaw in Europe and find another mode of transportation within Europe.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;When booking 3+ airlines, one must be Cathay Pacific.&lt;/strong&gt; Given the turmoil in Hong Kong, I was interested in ways to
fulfill this requirement while avoiding Hong Kong. Luckily, Cathay Pacific flies a number of “fifth-freedom” flights out
of Taipei, and you do not have to be traveling to Hong Kong to book them. I fulfilled this requirement with a Taipei to
Seoul flight, but there are a few other ways as well.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Note that I think this is the best way to book this itinerary given the number of stopovers allowed, and that the main
value-add to booking it this way is the stopovers. If you have a simple trip without stopovers, e.g. Boston to Tokyo,
Tokyo to London, and London to Boston, you would be paying the equivalent of 51,667 miles per segment (this route costs
155,000 miles total because the distance is shorter). That is a competitive number of miles for segments of this length,
but is not amazingly low and you will need to only fly two airlines or fly at least one segment on Cathay Pacific.&lt;/p&gt;

&lt;p&gt;It may be a relatively easy redemption to get the points for because a number of transferrable points programs (American
Express, Citi, Capital One, and Marriott) transfer to Cathay Pacific. Oh if I hadn’t transferred 93,000 MR points to
Virgin…&lt;/p&gt;

&lt;h2 id=&quot;bottom-line&quot;&gt;Bottom Line&lt;/h2&gt;

&lt;p&gt;Now is not the time to travel. I have not cancelled my tickets for August yet, but I expect to. However, now is a good
time to look for award seats for 2021 (there seem to be quite a few of them) and plan new things.&lt;/p&gt;

&lt;script&gt;
const maps = {
    &quot;route-map&quot;: [
        [&quot;BOS&quot;, -71.006388, 42.362944],
        [&quot;NRT&quot;, 140.385556, 35.765278],
        [&quot;TPE&quot;, 121.232822, 25.077731],
        [&quot;ICN&quot;, 126.450517, 37.469075],
        [&quot;HEL&quot;, 24.963333, 60.317222],
        [&quot;ZRH&quot;, 8.549167, 47.464722],
        [&quot;LHR&quot;, -0.461388, 51.477500],
        [&quot;BOS&quot;, -71.006388, 42.362944],
    ]
};

const textPositionOrder = [
    [2, -3, &quot;red&quot;],
    [-3, -2, &quot;blue&quot;],
    [0, 7, &quot;green&quot;],
    [0, 5, &quot;orange&quot;]
];
let closeLabelRadius = 11;

for (let key in maps) {
    if (!maps.hasOwnProperty(key))
        continue;
    
    let airports = maps[key];
    
    let svg = d3.select(&quot;svg#&quot; + key);
    
    if (svg == null)
        continue;
    
    let width  = svg.node().getBoundingClientRect().width || 1000,
        height = width * 0.7;

    svg.attr(&quot;height&quot;, height);
    
    let projection = d3.geoOrthographic()
        .rotate([105, -90])
        .translate([width / 2, height / 2]);

    let links = airports.reduce(function (acc, point) {
        if (typeof(point) === &quot;string&quot; &amp;&amp; point.startsWith(&quot;-&quot;))
            acc.push([]);
        else
            acc[acc.length-1].push(point);
        return acc;
    }, [[]]).map(function (link) {
        return {
            type: &quot;LineString&quot;,
            coordinates: link.map(function (l) { return [l[1], l[2]]; })
        };
    });

    let path = d3.geoPath()
        .projection(projection);
    
    d3.json(&quot;https://raw.githubusercontent.com/holtzy/D3-graph-gallery/master/DATA/world.geojson&quot;, function (data) {
        var group = svg.append(&quot;g&quot;);
        group
            .selectAll(&quot;path&quot;)
            .data(data.features)
            .enter()
            .append(&quot;path&quot;)
                .attr(&quot;fill&quot;, &quot;#cccccc&quot;)
                .attr(&quot;d&quot;, d3.geoPath().projection(projection))
                .style(&quot;stroke&quot;, &quot;#fff&quot;)
                .style(&quot;stroke-width&quot;, 1);
        
        // Add the path
        for (let i = 0; i &lt; links.length; i++) {
            let link = links[i];
            group.append(&quot;path&quot;)
                .attr(&quot;d&quot;, path(link))
                .style(&quot;fill&quot;, &quot;none&quot;)
                .style(&quot;stroke&quot;, &quot;white&quot;)
                .style(&quot;stroke-width&quot;, 6);
            // Add the path
            group.append(&quot;path&quot;)
                .attr(&quot;d&quot;, path(link))
                .style(&quot;fill&quot;, &quot;none&quot;)
                .style(&quot;stroke&quot;, &quot;#00aaff&quot;)
                .style(&quot;stroke-width&quot;, 3);
        }

        // Airports and Labels
        for (let i = 0; i &lt; airports.length; i++) {
            let item = airports[i];
            if (typeof(item) === &quot;string&quot; &amp;&amp; item.startsWith(&quot;-&quot;))
                continue;
            let point = projection([item[1], item[2]]);
            group.append(&quot;circle&quot;)
                .attr(&quot;cx&quot;, point[0])
                .attr(&quot;cy&quot;, point[1])
                .attr(&quot;r&quot;, 5)
                .style(&quot;fill&quot;, &quot;#0088ee&quot;)
                .style(&quot;stroke&quot;, &quot;white&quot;)
                .style(&quot;stroke-width&quot;, 2);
        }

        if (svg.attr(&quot;data-label-points&quot;) == &quot;true&quot;)
        {
            let labelPositions = [];
            let pointsLabeled = {};
            for (let i = 0; i &lt; airports.length; i++) {
                let item = airports[i];
                if (pointsLabeled.hasOwnProperty(item[0]))
                    continue;
                pointsLabeled[item[0]] = true;

                let lx = item[1], ly = item[2];
                for (var j = 0; j &lt; textPositionOrder.length; j++)
                {
                    lx += textPositionOrder[j][0];
                    ly += textPositionOrder[j][1];
                    var closeLabels = labelPositions
                        .map(function (p) { return Math.sqrt((p[0] - lx) * (p[0] - lx) + (p[1] - ly) * (p[1] - ly)); });
                    closeLabels.sort();
                    if (closeLabels.length == 0 || closeLabels[0] &gt; closeLabelRadius)
                    {
                        labelPositions.push([lx, ly]);
                        
                        var text = svg.append(&quot;text&quot;)
                            .attr(&quot;x&quot;, projection([lx, ly])[0])
                            .attr(&quot;y&quot;, projection([lx, ly])[1])
                            .text(item[0])
                            .style(&quot;font-weight&quot;, &quot;bold&quot;)
                            .style(&quot;font-size&quot;, 12)
    //                        .style(&quot;fill&quot;, textPositionOrder[j][2])
                            .style(&quot;fill&quot;, &quot;#000000&quot;);
                        if (textPositionOrder[j][0] &lt; 0)
                            text.style(&quot;text-anchor&quot;, &quot;end&quot;);
                        break;
                    }
                }
            }
        }

        svg.select(&quot;g&quot;)
            .attr(&quot;transform&quot;, &quot;scale(&quot; + 1.35 * width / 1000 + &quot;)&quot;);
    });
}

function sizeChange() {
    for (let key in maps) {
        let svg    = d3.select(&quot;svg#&quot; + key),
            width  = svg.node().getBoundingClientRect().width || 1000,
            height = width * 0.6;
        
        console.log(&quot;size change&quot;);
        svg.select(&quot;g&quot;)
            .attr(&quot;transform&quot;, &quot;scale(&quot; + 1.35 * width / 1000 + &quot;)&quot;);
        svg.attr(&quot;height&quot;, height);
    }
}

d3.select(window).on(&quot;resize&quot;, sizeChange);

&lt;/script&gt;</content><author><name></name></author><category term="Travel" /><category term="Japan" /><category term="Japan-Airlines" /><category term="Delta" /><summary type="html">I wrote in January, before COVID-19 was a pandemic, about trips to Switzerland and Japan that I had planned. By the time I was supposed to go to Switzerland in April, COVID was in full force and I was unable to do so. However, I wrote again in April that I still expected to travel to Japan in August. Since then, two things have happened that make me much less optimistic about the Japan trip.</summary></entry><entry><title type="html">Adding Korea to my Next Japan Trip</title><link href="http://rchowe.com/blog/2020/04/15/japan-and-korea.html" rel="alternate" type="text/html" title="Adding Korea to my Next Japan Trip" /><published>2020-04-15T00:00:00+00:00</published><updated>2020-04-15T00:00:00+00:00</updated><id>http://rchowe.com/blog/2020/04/15/japan-and-korea</id><content type="html" xml:base="http://rchowe.com/blog/2020/04/15/japan-and-korea.html">&lt;p&gt;&lt;a href=&quot;/2020/01/04/trips-planned.html&quot;&gt;I wrote in January&lt;/a&gt;, before COVID-19 was a pandemic, about trips that I had
planned. One of those was a wonderful trip to Japan that I booked with frequent flyer miles – I managed to find two
seats in Japan Airlines First Class from Chicago to Tokyo, and then we were going to fly from Nagoya to Detroit on
Delta’s A330, which I loved becuase it’s a rather obscure route and it seems that there are almost always business class
award seats.&lt;/p&gt;

&lt;p&gt;Then I convinced a third friend to come along, and there weren’t any more award seats on Nagoya to Detroit near the date
we planned to leave.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;So, since the trip back was booked with Virgin Atlantic miles, I started poking around for a way to get three people
back on the same flight. COVID-19 has caused there to be a glut of award availability, but it seems that there is not
any Delta award availability out of Nagoya, Osaka, or Tokyo near our departure date. So I widened the search a bit and
checked out of Seoul. As luck would have it, there are three award seats on Delta’s A350, which has much nicer seats
in business class (suites with doors!).&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/assets/2020-04-15-award-search.png&quot; alt=&quot;&quot; /&gt;
&lt;em&gt;My award search (for 3 people).&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We were likely going to have to take a &lt;em&gt;Shinkansen&lt;/em&gt; or domestic flight down to Nagoya anyway, since we were planning on
exploring northern Japan. Now we will have to take an intra-Asia flight; although intra-Asia flights can actually be
quite expensive cash-wise, award ticket rates are usually quite good. For award tickets, it looks like we have the
following options for Japan to Korea:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Korean Air&lt;/strong&gt; - Bookable through Delta with 7,500 SkyMiles + $34 per person.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Asiana Airlines&lt;/strong&gt; - Bookable through United for 8,000 miles + $34 per person (and they fly an A380 on this route).&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Japan Airlines&lt;/strong&gt; - Bookable through Japan Airlines for 7,500 miles + $42, or British Airways for 9,000 miles + $42
per person.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When paid with cash, most of these tickets are in the $250 range, so it looks like it is possible to get between about
2.3 and 2.9 cents per mile, depending on whose miles you spend. Given that Delta SkyMiles are usually redeemable for
about 1.1 cents per point on domestic Delta flights, and in this case I would get 2.88, I probably will book the Korean
Air flights through Delta. Asiana’s A380 is quite attractive as well, though I think United miles are generally a bit
more valuable than Delta miles.&lt;/p&gt;

&lt;p&gt;Returning from Seoul also solves another problem – this flight gets in earlier than our other flight, and we were
probably going to get back to Boston or Providence at 10 pm. Now we can book an earlier connecting flight and get back
closer to 4 pm.&lt;/p&gt;

&lt;h2 id=&quot;bottom-line&quot;&gt;Bottom Line&lt;/h2&gt;

&lt;p&gt;Consider widening your search, and know the cost of positioning flights, especially the differences between the cash
cost and the miles cost. You might be able to take more people along and be pleasantly surprised with a nicer airplane
and a better routing.&lt;/p&gt;</content><author><name></name></author><category term="Travel" /><category term="Japan" /><category term="Japan-Airlines" /><category term="Delta" /><summary type="html">I wrote in January, before COVID-19 was a pandemic, about trips that I had planned. One of those was a wonderful trip to Japan that I booked with frequent flyer miles – I managed to find two seats in Japan Airlines First Class from Chicago to Tokyo, and then we were going to fly from Nagoya to Detroit on Delta’s A330, which I loved becuase it’s a rather obscure route and it seems that there are almost always business class award seats. Then I convinced a third friend to come along, and there weren’t any more award seats on Nagoya to Detroit near the date we planned to leave.</summary></entry><entry><title type="html">Backpacking Through Europe</title><link href="http://rchowe.com/blog/2020/04/14/backpacking-through-europe.html" rel="alternate" type="text/html" title="Backpacking Through Europe" /><published>2020-04-14T00:00:00+00:00</published><updated>2020-04-14T00:00:00+00:00</updated><id>http://rchowe.com/blog/2020/04/14/backpacking-through-europe</id><content type="html" xml:base="http://rchowe.com/blog/2020/04/14/backpacking-through-europe.html">&lt;p&gt;I have a ton of time in COVID-19 quarantine. However, what I expected to be doing now was taking a month and traveling
around Europe living out of a backpack. When I went to Japan and Taiwan, someone I met was quite surprised that I took
two weeks worth of clothes with me, so I was planning on bringing 3 sets of clothes and staying in hostels and doing
laundry. Instead of obsessive planning of every detail of my trips, I was going to take things a few days at a time and
figure out where to go as it comes. Then COVID-19 hit.&lt;/p&gt;

&lt;!--more--&gt;

&lt;h2 id=&quot;the-original-plan&quot;&gt;The Original Plan&lt;/h2&gt;

&lt;p&gt;I had planned to take some interesting flights on the way over. Specifically, &lt;a href=&quot;https://www.boston.com/travel/travel/2019/09/30/american-airlines-boston-london&quot;&gt;American Airlines is re-entering the
Boston to London market&lt;/a&gt;, and I wanted
to be on the first flight on March 29. Then, I wanted to fly on British Airways’ A380 on the way back, and had a seat on
the upper deck.&lt;/p&gt;

&lt;p&gt;Incidentally, I had bought a separate ticket to Germany on British Airways leaving 5 hours after I arrived in London,
since it’s cheaper that way than buying a through ticket.&lt;/p&gt;

&lt;p&gt;The one concrete plan that I had is that I wanted to be in Zürich for
&lt;a href=&quot;https://www.zuerich.com/en/visit/sechselaeuten&quot;&gt;&lt;em&gt;Sechseläuten&lt;/em&gt;&lt;/a&gt;, which my family has been playfully calling the
“festival of the exploding snowman.” Literally it means the six bells festival, and it marks the point at which Swiss
workers would start going home at 6 pm instead of 5 pm. The highlight of the celebration is the ignition of a paper
snowman (the &lt;em&gt;Böögg&lt;/em&gt;) whose head is packed with explosives, while guildsmen ride frantically around the base.
The concept sounds so ridiculous and wonderful, and I was so excited to see it. Next year for sure.&lt;/p&gt;

&lt;h2 id=&quot;cancellations&quot;&gt;Cancellations&lt;/h2&gt;

&lt;p&gt;I got quite lucky with getting refunds for my flight cancellations. Strangely the first thing that happened was that
British Airways cancelled my London to Hanover flight; I filled out their online form and got my £50 back. A few
weeks later, American pushed back the launch of the Boston to London flight to October and rebooked me via Miami – I
filled out their online refund form and the money showed up on my credit card a few days later. I’m very happy that I
did not need to call any airline.&lt;/p&gt;

&lt;h2 id=&quot;what-now&quot;&gt;What Now?&lt;/h2&gt;

&lt;p&gt;I’m disappointed. This was something that would push me out of my comfort zone, and I really wanted to go. If
international travel recovers by the fall I may go then, but it is possible that scenario does not happen. Hopefully my
Japan trip in August happens, but it is more important that everyone is safe. And I want to see some place new, and do
new things.&lt;/p&gt;</content><author><name></name></author><category term="American-Airlines" /><category term="British-Airways" /><category term="A380" /><category term="Trip-Plans" /><summary type="html">I have a ton of time in COVID-19 quarantine. However, what I expected to be doing now was taking a month and traveling around Europe living out of a backpack. When I went to Japan and Taiwan, someone I met was quite surprised that I took two weeks worth of clothes with me, so I was planning on bringing 3 sets of clothes and staying in hostels and doing laundry. Instead of obsessive planning of every detail of my trips, I was going to take things a few days at a time and figure out where to go as it comes. Then COVID-19 hit.</summary></entry><entry><title type="html">Can Booking Japan Airlines with Flying Blue Miles be a Good Value?</title><link href="http://rchowe.com/blog/2020/04/13/flying-blue-japan-airlines.html" rel="alternate" type="text/html" title="Can Booking Japan Airlines with Flying Blue Miles be a Good Value?" /><published>2020-04-13T00:00:00+00:00</published><updated>2020-04-13T00:00:00+00:00</updated><id>http://rchowe.com/blog/2020/04/13/flying-blue-japan-airlines</id><content type="html" xml:base="http://rchowe.com/blog/2020/04/13/flying-blue-japan-airlines.html">&lt;script src=&quot;https://d3js.org/d3.v4.js&quot;&gt;&lt;/script&gt;

&lt;script src=&quot;https://d3js.org/d3-scale-chromatic.v1.min.js&quot;&gt;&lt;/script&gt;

&lt;script src=&quot;https://d3js.org/d3-geo-projection.v2.min.js&quot;&gt;&lt;/script&gt;

&lt;p&gt;Doing my analysis of &lt;a href=&quot;/2020/04/12/amex-transfer-bonus-history.html&quot;&gt;American Express’s transfer bonus history&lt;/a&gt;
got me thinking about some of the uses for miles that are relatively rare in the blogosphere, but still might have
utility to someone, potentially with a transfer bonus. Flying Blue, the loyalty program of Air France and KLM (and Kenya
Airways and a few others) has a few interesting quirks.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;&lt;img src=&quot;/blog/assets/jl773.jpg&quot; alt=&quot;&quot; /&gt;
&lt;em&gt;A Japan Airlines 777-300&lt;/em&gt;&lt;/p&gt;

&lt;h2 id=&quot;why-flying-blue&quot;&gt;Why Flying Blue?&lt;/h2&gt;

&lt;p&gt;I will preface this by saying that Flying Blue now does dyanmic pricing of awards, though there is generally a known
lowest dynamic price for a route. They also add pretty high fuel surcharges to their European awards, and pass on fuel
surcharges from other carriers. Most programs have some kind of sweet spot though, and Flying Blue has much better award
availability on their own flights than partner programs like Delta’s does.&lt;/p&gt;

&lt;p&gt;Let me also say that the gold standard for US to Japan awards in the blogosphere seems to be transfering American
Express points to Virgin Atlantic during a 30% bonus and booking ANA business or first class. From the eastern US,
Virgin charges 95,000 miles &lt;em&gt;round trip&lt;/em&gt; in business class and 120,000  miles &lt;em&gt;round trip&lt;/em&gt; in first class. It is
important to make an apples-to-apples comparison, so that would be 36,539 American Express points each way for a
business class ticket to Japan, which is amazing.&lt;/p&gt;

&lt;p&gt;Generally, economy mileage redemptions are not a great value in most programs, so I will assume that business class and
first class are the default thing to redeem miles for.&lt;/p&gt;

&lt;h2 id=&quot;booking-methods-for-japan-airlines&quot;&gt;Booking Methods for Japan Airlines&lt;/h2&gt;

&lt;p&gt;But let’s say for some reason you have your heart set on flying Japan Airlines, or have some obscure routing requirement
(like originating in a small US airport with expensive domestic flights, or wanting to fly to Osaka without taking an
intra-Asia flight, &lt;a href=&quot;/2020/01/04/trips-planned.html&quot;&gt;which I did&lt;/a&gt;). So what are your options for booking JAL?
Looking at a one-way business class ticket from North America to Tokyo (I’ve included the number of miles with Amex’s
usual transfer bonus after the slash, and the number of miles necessary for one domestic connection):&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Frequent Flyer Program&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Miles (nonstop)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Miles (domestic connection)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Japan Airlines&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;50,000&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;50,000&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;American Airlines&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;60,000&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;60,000&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Alaska Airlines&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;60,000&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;60,000&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Cathay Pacific&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;75,000&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;100,000&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;British Airways&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;108,250 / 77,322&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;123,250 / 88,036&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Air France / KLM&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;115,000 / 92,000&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;115,000 / 92,000&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Emirates&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;125,000&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;–&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Flying Blue is still a quite expensive option (I included Emirates to demonstrate that it is not the most expensive),
though not by much with a 25% transfer bonus and a connection. There is a certain confluence of events where that might
prove useful:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;You can transfer points from any of the major transferrable point programs &lt;em&gt;(American Express, Chase, Citi, Capital
One, and Marriott Bonvoy)&lt;/em&gt; to Flying Blue.
&lt;a href=&quot;https://www.awardhacker.com/#f=Boston&amp;amp;t=NRT&amp;amp;o=0&amp;amp;c=j&amp;amp;s=1&amp;amp;p=1&quot;&gt;Award Hacker&lt;/a&gt; is a useful tool for figuring out which
points transfer to which frequent flyer programs, as well as the standard rates that each program has for a given
city pair.&lt;/li&gt;
  &lt;li&gt;You need to, or would prefer to, fly with a connection vs a non-stop flight.&lt;/li&gt;
  &lt;li&gt;You have a lot of points in one of the transferrable currencies and don’t many have Japan Airlines, American, or
Alaska miles. The only transferrable points program that transfers to those programs is Marriott Bonvoy, so they can
be more difficult to obtain.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;One interesting quirk here is that Flying Blue’s US partner is Delta, while all of the other programs partner with
American Airlines and/or Alaska Airlines. So booking with Flying Blue gets you access to a quite
different route map for domestic connections. Additionally, four of the cities that Japan Airlines flies to are Delta
hubs (Boston, New York, Los Angeles, and Seattle). See the map below for the full list of Japan Airlines’ North American
destinations.&lt;/p&gt;

&lt;div class=&quot;svg-container&quot; style=&quot;max-width: 1000px; margin: 1em auto;&quot;&gt;
    &lt;svg id=&quot;japan-map&quot; data-hemisphere=&quot;pacific&quot; data-label-points=&quot;true&quot; style=&quot;width: 100%; max-width: 1000px;&quot;&gt;&lt;/svg&gt;
    &lt;div style=&quot;font-style: italic; margin-bottom: 1em;&quot;&gt;Japan Airlines US Destinations&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Given that the cost in miles for a Flying Blue booking is only competitive for bookings with a connection within
North America, Flying Blue is going to be most valuable if you do not start in one of the cities listed, or you cannot
find award availability on the nonstop flights from the city you want to start in. If you live in a city with expensive
domestic flights, having both British Airways and Flying Blue as an option could be very valuable.&lt;/p&gt;

&lt;p&gt;Certain people (&lt;em&gt;*cough*&lt;/em&gt; crazy people like me) also like to fly interesting flights, and you could fly from Boston to Los
Angeles on Delta’s 757 with lie flat seats in business class, and then from Los Angeles to Osaka on Japan Airlines. Were
you to book through another program, you would have to fly American or Alaska from Boston to Los Angeles, which does not
have lie flat seats.&lt;/p&gt;

&lt;h2 id=&quot;other-flying-blue-quirks&quot;&gt;Other Flying Blue Quirks&lt;/h2&gt;

&lt;p&gt;There are a few other quirks worth mentioning that could be useful:&lt;/p&gt;

&lt;p&gt;First, if you live in a city served by Air France, they allow routing a North America to Asia route via Europe (the long
way). Strangely, the cost in miles for this is lower for this than the transpacific routing at 95,000 miles, but it also
comes with $400 in taxes and fuel surcharges. Depending on your valuation of Flying Blue miles and/or transferrable
points, this could be a good deal, but it likely is not.&lt;/p&gt;

&lt;p&gt;Second, if you are interested in flying Delta to Japan and then connecting on to somewhere within Japan or Asia, you
booking with Flying Blue allows you to connect from Delta on Japan Airlines, which could be useful because Delta does
not have a Japanese airline partner, and Japan Airlines flights can be quite expensive when booked with cash. However,
if you are a tourist, you might consider a &lt;a href=&quot;https://japanrailpass.net/en/&quot;&gt;Japan Rail Pass&lt;/a&gt;, a
&lt;a href=&quot;https://www.jal.co.jp/world/en/world/japan_explorer_pass/lp/&quot;&gt;JAL Japan Explorer Pass&lt;/a&gt;, or an
&lt;a href=&quot;https://www.ana.co.jp/en/us/promotions/share/experience_jp/&quot;&gt;ANA Experience Japan Fare&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Third, they have a similar partnership with Qantas, though awards are expensive and availability is very tough to find.
Connections from Delta to Qantas in Asia have the potential to be valuable, and Qantas’ Asia routes may have more award
availability, but it is still expensive and tough.&lt;/p&gt;

&lt;p&gt;Lastly, for travel to Europe on Air France and KLM flights, they have
&lt;a href=&quot;https://www.flyingblue.us/en/flights/promo-rewards&quot;&gt;promo awards&lt;/a&gt;, which can often be a good deal, but cannot get you
to Japan.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/assets/shrine.png&quot; alt=&quot;&quot; /&gt;
&lt;em&gt;A Shinto Shrine in Japan&lt;/em&gt;&lt;/p&gt;

&lt;h2 id=&quot;the-bottom-line&quot;&gt;The Bottom Line&lt;/h2&gt;

&lt;p&gt;If you want to fly Japan Airlines and have a certain confluence of events, it’s useful to keep Flying Blue in your
toolbox. This will be most useful for folks in cities without direct service on Japan Airlines and where a domestic
connection would be expensive to book with cash (like Philadelphia, Miami, or Atlanta) that has common flights to Delta
to a city served by Japan Airlines. However, if you have miles in a program like American or Alaska, you might consider
saving your transferrable points and using those (and consider
&lt;a href=&quot;/2020/01/08/japan-airlines-first.html&quot;&gt;whether the premium for first class is worth it&lt;/a&gt;).&lt;/p&gt;

&lt;script&gt;
const maps = {
    &quot;japan-map&quot;: [
        [&quot;TYO&quot;, 139.781111, 35.553333],
        [&quot;BOS&quot;, -71.006388, 42.362944],
        &quot;-&quot;,
        [&quot;TYO&quot;, 139.781111, 35.553333],
        [&quot;LAX&quot;, -118.408048, 33.942496],
        &quot;-&quot;,
        [&quot;TYO&quot;, 139.781111, 35.553333],
        [&quot;SFO&quot;, -122.375416, 37.618806],
        &quot;-&quot;,
        [&quot;TYO&quot;, 139.781111, 35.553333],
        [&quot;SEA&quot;, -122.311777, 47.449889],
        &quot;-&quot;,
        [&quot;TYO&quot;, 139.781111, 35.553333],
        [&quot;ORD&quot;, -87.906596, 41.974522],
        &quot;-&quot;,
        [&quot;TYO&quot;, 139.781111, 35.553333],
        [&quot;DFW&quot;, -97.037694, 32.897232],
        &quot;-&quot;,
        [&quot;TYO&quot;, 139.781111, 35.553333],
        [&quot;JFK&quot;, -73.778692, 40.639928],
        &quot;-&quot;,
        [&quot;TYO&quot;, 139.781111, 35.553333],
        [&quot;HNL&quot;, -157.920262, 21.317827],
        &quot;-&quot;,
        [&quot;TYO&quot;, 139.781111, 35.553333],
        [&quot;KOA&quot;, -156.045630, 19.738766],
        &quot;-&quot;,
        [&quot;TYO&quot;, 139.781111, 35.553333],
        [&quot;YVR&quot;, -123.183888, 49.194722],
        &quot;-&quot;,
        [&quot;KIX&quot;, 135.244072, 34.427306],
        [&quot;LAX&quot;, -118.408048, 33.942496],
    ]
};

const textPositionOrder = [
    [2, -3, &quot;red&quot;],
    [-3, -2, &quot;blue&quot;],
    [0, 7, &quot;green&quot;],
    [0, 5, &quot;orange&quot;]
];
let closeLabelRadius = 11;

for (let key in maps) {
    if (!maps.hasOwnProperty(key))
        continue;
    
    let airports = maps[key];
    
    let svg = d3.select(&quot;svg#&quot; + key);
    
    if (svg == null)
        continue;
    
    let width  = svg.node().getBoundingClientRect().width || 1000,
        height = width * 0.7;

    svg.attr(&quot;height&quot;, height);
    
    let projection = d3.geoOrthographic()
        .rotate([105, -70])
        .translate([width / 2, height / 2]);

    let links = airports.reduce(function (acc, point) {
        if (typeof(point) === &quot;string&quot; &amp;&amp; point.startsWith(&quot;-&quot;))
            acc.push([]);
        else
            acc[acc.length-1].push(point);
        return acc;
    }, [[]]).map(function (link) {
        return {
            type: &quot;LineString&quot;,
            coordinates: link.map(function (l) { return [l[1], l[2]]; })
        };
    });

    let path = d3.geoPath()
        .projection(projection);
    
    d3.json(&quot;https://raw.githubusercontent.com/holtzy/D3-graph-gallery/master/DATA/world.geojson&quot;, function (data) {
        var group = svg.append(&quot;g&quot;);
        group
            .selectAll(&quot;path&quot;)
            .data(data.features)
            .enter()
            .append(&quot;path&quot;)
                .attr(&quot;fill&quot;, &quot;#cccccc&quot;)
                .attr(&quot;d&quot;, d3.geoPath().projection(projection))
                .style(&quot;stroke&quot;, &quot;#fff&quot;)
                .style(&quot;stroke-width&quot;, 1);
        
        // Add the path
        for (let i = 0; i &lt; links.length; i++) {
            let link = links[i];
            group.append(&quot;path&quot;)
                .attr(&quot;d&quot;, path(link))
                .style(&quot;fill&quot;, &quot;none&quot;)
                .style(&quot;stroke&quot;, &quot;white&quot;)
                .style(&quot;stroke-width&quot;, 6);
            // Add the path
            group.append(&quot;path&quot;)
                .attr(&quot;d&quot;, path(link))
                .style(&quot;fill&quot;, &quot;none&quot;)
                .style(&quot;stroke&quot;, &quot;#cc0000&quot;)
                .style(&quot;stroke-width&quot;, 3);
        }

        // Airports and Labels
        for (let i = 0; i &lt; airports.length; i++) {
            let item = airports[i];
            if (typeof(item) === &quot;string&quot; &amp;&amp; item.startsWith(&quot;-&quot;))
                continue;
            let point = projection([item[1], item[2]]);
            group.append(&quot;circle&quot;)
                .attr(&quot;cx&quot;, point[0])
                .attr(&quot;cy&quot;, point[1])
                .attr(&quot;r&quot;, 5)
                .style(&quot;fill&quot;, &quot;#cc0000&quot;)
                .style(&quot;stroke&quot;, &quot;white&quot;)
                .style(&quot;stroke-width&quot;, 2);
        }

        if (svg.attr(&quot;data-label-points&quot;) == &quot;true&quot;)
        {
            let labelPositions = [];
            let pointsLabeled = {};
            for (let i = 0; i &lt; airports.length; i++) {
                let item = airports[i];
                if (pointsLabeled.hasOwnProperty(item[0]))
                    continue;
                pointsLabeled[item[0]] = true;

                let lx = item[1], ly = item[2];
                for (var j = 0; j &lt; textPositionOrder.length; j++)
                {
                    lx += textPositionOrder[j][0];
                    ly += textPositionOrder[j][1];
                    var closeLabels = labelPositions
                        .map(function (p) { return Math.sqrt((p[0] - lx) * (p[0] - lx) + (p[1] - ly) * (p[1] - ly)); });
                    closeLabels.sort();
                    if (closeLabels.length == 0 || closeLabels[0] &gt; closeLabelRadius)
                    {
                        labelPositions.push([lx, ly]);
                        
                        var text = svg.append(&quot;text&quot;)
                            .attr(&quot;x&quot;, projection([lx, ly])[0])
                            .attr(&quot;y&quot;, projection([lx, ly])[1])
                            .text(item[0])
                            .style(&quot;font-weight&quot;, &quot;bold&quot;)
                            .style(&quot;font-size&quot;, 12)
    //                        .style(&quot;fill&quot;, textPositionOrder[j][2])
                            .style(&quot;fill&quot;, &quot;#000000&quot;);
                        if (textPositionOrder[j][0] &lt; 0)
                            text.style(&quot;text-anchor&quot;, &quot;end&quot;);
                        break;
                    }
                }
            }
        }

        svg.select(&quot;g&quot;)
            .attr(&quot;transform&quot;, &quot;scale(&quot; + 1.35 * width / 1000 + &quot;)&quot;);
    });
}

function sizeChange() {
    for (let key in maps) {
        let svg    = d3.select(&quot;svg#&quot; + key),
            width  = svg.node().getBoundingClientRect().width || 1000,
            height = width * 0.6;
        
        console.log(&quot;size change&quot;);
        svg.select(&quot;g&quot;)
            .attr(&quot;transform&quot;, &quot;scale(&quot; + 1.35 * width / 1000 + &quot;)&quot;);
        svg.attr(&quot;height&quot;, height);
    }
}

d3.select(window).on(&quot;resize&quot;, sizeChange);

&lt;/script&gt;</content><author><name></name></author><category term="Air-France" /><category term="KLM" /><category term="Flying-Blue" /><category term="Points" /><category term="Japan-Airlines" /><summary type="html">Doing my analysis of American Express’s transfer bonus history got me thinking about some of the uses for miles that are relatively rare in the blogosphere, but still might have utility to someone, potentially with a transfer bonus. Flying Blue, the loyalty program of Air France and KLM (and Kenya Airways and a few others) has a few interesting quirks.</summary></entry></feed>