AIS Ship Tracking Data Shows False Vessel Tracks Circling Above Point Reyes, Near San Francisco

Analysis from SkyTruth and Global Fishing Watch shows ship tracks jumping thousands of miles from their true locations.

Bjorn Bergman works with SkyTruth and with the Global Fishing Watch research team to track vessels broadcasting false automatic identification system (AIS) locations and to investigate new sources of satellite data for vessel tracking and for detecting dark targets at sea. In this blog post, Bjorn spots an unusual pattern of false AIS broadcasts concentrated at one location, Point Reyes, northwest of San Francisco on the California coast. Why would vessels thousands of miles away be suddenly popping up in circles over Point Reyes? Could this reflect an intentional disruption of the underlying global positioning system (GPS) that AIS relies on, or is there some other explanation for this pattern?

In December 2019, SkyTruth reported on a number of locations on the Chinese coast (mostly oil terminals) where ship tracking positions from the automatic identification system (AIS)  became scrambled as soon as ships approached within a few miles of a point on shore. Importantly, we knew that this was actual disruption of the underlying global positioning system (GPS) — or more broadly the Global Navigation Satellite System — and not just a shipboard AIS malfunction. We determined this because another source of GPS data, Strava’s heat map of fitness trackers, showed the same ring pattern. A quick recent check of the data showed that this GPS manipulation is ongoing at oil terminals in four of the cities (Shanghai, Dalian, Fuzhou, and Quanzhou) where we had detected it last year. We still don’t know if this manipulation is specifically intended to mask ship traffic or if there is some other reason for disrupting GPS.

Following the findings last year on the Chinese coast, I began looking globally for any similar patterns in AIS tracking data around the world. While I haven’t found the precise pattern observed at the Chinese oil terminals outside of China, I did find a somewhat different false AIS broadcast pattern which, strangely enough, appears concentrated above Point Reyes northwest of San Francisco, California in the United States. Although the circling tracks look similar in both locations, the vessels on the Chinese coast were at most a few miles from the circling tracks, while the vessels broadcasting tracks above Point Reyes are actually thousands of miles away. So far I’ve found vessels in nine locations affected. Some of these locations are near oil terminals or where GPS disruption has been reported before, but there is no clear pattern linking all of the affected areas.  

Image 1: AIS tracks from a number of vessels have appeared circling over Point Reyes near San Francisco even though the ships can be confirmed to be thousands of miles away. False circling tracks from five vessels are shown here. AIS data courtesy of Global Fishing Watch / Orbcomm / Spire.

The AIS positions being broadcast over Point Reyes are obviously false (some of them are over land and they show a constant speed and oval pattern we wouldn’t see with a real ship track). But how can we be sure where the ship really is? The most important indication is the location broadcast just prior to the jump to Point Reyes and then where the vessel reappears after the apparent circling finishes. The duration of the circling pattern varies, from less than an hour for one ship in the Indian Ocean, to as much as two weeks for some of the other vessels. However, besides seeing the true locations before and after the jump to Point Reyes, it’s also possible to look at where the AIS receiving satellites were while the vessels were broadcasting positions around Point Reyes.

Image 2: The colored lines show AIS tracks from five of the ships whose broadcast positions jumped suddenly to Point Reyes, California, northwest of San Francisco. The time of the tracking disruption varies from less than one hour for one vessel to about two weeks for some others. Two of the vessels (Princess Janice and Alkahfi Maryam) also have tracks appearing over land in North America. The reason for this displacement is unknown although some of the vessels are in areas where GPS disruption has been reported (Eastern Mediterranean and Sea of Azov). AIS data courtesy of Global Fishing Watch / Orbcomm / Spire.

To get an approximate location for one vessel’s real position during the two weeks it broadcast over Point Reyes and the Western United States, SkyTruth analyst Christian Thomas and I analyzed the footprints of the satellites receiving the AIS positions. This was possible thanks to data Spire Global, Inc. provided to Global Fishing Watch. Spire’s data gives the identity of the receiving satellite with each AIS position. This allowed the Global Fishing Watch research team to access orbit information, which they used to calculate exactly the point above the surface of the earth where each satellite was when it received an AIS position and then calculate the distance from the satellite position to the ship’s broadcast AIS position. Because AIS broadcasts are only received within an approximately 5,000 kilometer (3,100 mile) diameter footprint, we know that the vessel was somewhere within this area. We can even narrow down the location further based on successive passes of AIS receiving satellites. 

Image 3: Broadcast AIS positions from Princess Janice. The track makes multiple jumps between a real location in an oil terminal on the coast of Nigeria (inset lower right) and false positions over the United States. Over two weeks in June 2019 the false track initially circles over Point Reyes northwest of San Francisco before veering over the Pacific and over the interior of the United States. More circling is seen around Salt Lake City Utah (inset upper right). AIS data courtesy of Global Fishing Watch / Orbcomm / Spire.

This vessel, the Princess Janice, is a crew boat traveling to offshore oil installations. It broadcasts a normal track out of a Nigerian oil terminal until June 5, 2019. For the following two weeks the vessel then broadcasts a false location track circling above Point Reyes and eventually veering off above Utah (during this time the track occasionally jumped back briefly to the Nigerian oil terminal). Unlike other false AIS broadcasts we have documented, which have a constant location offset or flipped coordinate values (producing a mirror image of the actual position), these circling tracks appear to not reflect the true movements of the vessel in any way. 

When we looked at the footprint of the satellite receiving AIS positions from Princess Janice, it’s clear that the vessel remained on a stretch of the central Nigerian coast or in nearby waters in the Gulf of Guinea (see Image 4) throughout the two-week period when false locations were being broadcast. 

Image 4: Princess Janice broadcasts an AIS track over Point Reyes near San Francisco and over the Western United States from June 5 – 21, 2019 (see Image 3). Analysis of the footprints for the satellites receiving these positions demonstrates that the vessel was actually within a region on the central Nigerian coast and adjacent Gulf of Guinea. Frame 1: Location over the Earth’s surface (red dots) of satellites receiving false position messages. Frame 2: Extent of satellite footprints for AIS reception (large red circles). Frame 3: Density of satellite coverage overlap, areas of increasing density shown as Blue → Green → Yellow → White. Frame 4: Area where all satellite footprints overlap (maximum coverage) shown in white. The white shaded region on the central Nigerian coast contains the true location of the Princess Janice during the period when the vessel was broadcasting a false location track. Analysis was done in Google Earth Engine using approximate satellite footprints of 5,000 km (3,100 miles) diameter.

Both the manipulated GPS positions seen on the Chinese coast and these new examples over Point Reyes are characterized by rings of positions. The rings have similar shapes, somewhat wider east to west than north to south. However circles appearing over Point Reyes vary greatly in size and the broadcast vessel courses may be oriented clockwise or counterclockwise around the ring. All speeds are exactly 20 knots. In contrast, the rings on the Chinese vessels last year had positions that were 21 or 31 knots with the 31 knot positions always oriented counterclockwise. Critically, while we could confirm that GPS interference caused the rings of AIS positions on the Chinese coast, we don’t yet know if that is the case with the positions over Point Reyes. An alternative is that this is simply a malfunction affecting the individual ships’ AIS systems. We were able to confirm that the false circling positions over Point Reyes occur in data from all available AIS providers (Orbcomm, Spire, and ExactEarth) and in AIS positions received by both satellites and terrestrial receivers.

The list of affected vessels below (Table 1) shows that many types of vessels in different geographic locations have displayed this same pattern of AIS disruption. Some were in areas where GPS problems have been reported by others (the Eastern Mediterranean, Sea of Azov, Libyan coast); other locations are seemingly random. A number of the vessels, but not all, appear near oil terminals and are involved in supporting offshore platforms. 


Table 1: Vessels showing a pattern of false circling AIS positions. Reported locations are where circling tracks appeared (mainly at Point Reyes near San Francisco). Real locations are where the vessel was determined to be while broadcasting the false circling AIS track. AIS data courtesy of Global Fishing Watch / Orbcomm / Spire.

The presence of three of these vessels in areas of documented GPS interference is intriguing. The cargo ship Berezovets shown below was operating in one such area in the Sea of Azov, north of the Black Sea. Following the Russian annexation of Crimea in 2014 and the takeover of Eastern Ukraine by Russian-backed separatists, the front line in the ongoing civil war has cut through Eastern Ukraine north of the Sea of Azov. There have also been conflicts on the water and a Russian blockade of the Kerch Strait leading north from the Black Sea.

Image 5: The Russian flagged cargo ship Berezovets transits through the Sea of Azov in June 2019 and has its AIS track jump suddenly to Point Reyes near San Francisco (inset). Incidents of documented GPS disruption occurred in March 2019 east of the Bilosarai Spit and in July 2019 in the city of Starohnatvka. AIS data courtesy of Global Fishing Watch / Orbcomm / Spire.

The Russian flagged Berezovets transited through the Kerch Strait on June 3, 2019 then headed northeast passing south of the conflict zone towards Russian ports. As the vessel enters Russian waters (location 1 in Image 5) and anchors, its June 4-8 positions broadcast by the AIS system are scrambled, some appearing scattered 20 miles from the vessel’s anchor point. The vessel track then moves east towards port before jumping 20 miles north to a point on land (2) and then jumping about 11,000 miles west to circle above Point Reyes (3). This circling continues for about 60 hours from June 11 – 14, including some irregular positions extending about 40 miles into the Pacific. As with the Princess Janice track, it’s unclear why the false track would jump to California and what accounts for the individual variations in the different tracks we see appearing at this location. On June 14, 2019 the Berezovets AIS track jumps back to the vessel’s real location, now in the Russian port of Azov (4) and can then be seen to proceed eastward up the River Don.  

The unusual disruption in the Berezovets broadcast AIS track was both preceded and followed by similar reported disruptions in GPS in the same region. On March 7, 2019 a Ukrainian military website reported that three vessels on the Sea of Azov experienced failures in their navigation systems. One of these failures occurred the day before, east of Bilosarai Spit (see Image 5). The other two reported disruptions were in the preceding month at other locations in the Sea of Azov. On July 23, 2019 according to a report from the Organization for Security and Co-operation in Europe’s Special Monitoring Mission to Ukraine a UAV (unmanned aerial vehicle) flying over the city of Starohnativka in Ukraine, was one of several UAVs that experienced GPS interference assessed to be likely from jamming. While not conclusive, the proximity of these other reported incidents makes it possible that the disruption seen in the Berezovets track was a result of the GPS interference known to be occuring in the area. 

Two other vessels were also in areas with documented GPS disruptions, Suha Queen II approaching the coast of Libya, and Haj Sayed I transiting from the Suez canal to Eastern Turkey. However, in searching for vessels showing the same circling pattern seen over Point Reyes, I have not yet found that multiple vessels in areas like the Sea of Azov were similarly affected. Global AIS data does show a few vessels with tracks circling over other locations. Two pilot vessels on the Chilean coast had their broadcast positions suddenly jump to circling tracks over Madrid. The Suha Queen II approaching the coast of Libya had its track jump to the Chinese city of Shanwei. The most recent vessel to appear circling over Point Reyes is the Ting Yuk, a tugboat operating in Hong Kong, which had its AIS track disrupted for a few hours at the end of March. 

So far it remains a mystery why these circling AIS tracks are appearing specifically at Point Reyes and a few other locations. It’s tempting to speculate that there might be some connection to a major U.S. Coast Guard communication station in Point Reyes which was an important historic location for developing maritime communications technology. While the Coast Guard left the area several years ago, volunteers continue to maintain at Point Reyes the only operational ship-to-shore maritime radio station. Still, it’s unclear why this location would somehow appear on AIS trackers. The fact that individual vessels in many different locations have been affected is puzzling and it’s unknown if any of these examples reflect actual disruptions of the GPS system. However some studies, such as a yearlong cruise by researchers of the German Aerospace Center which measured instances of GPS interference even during high seas transits, indicate that we may still have a great deal to learn about the true extent of global disruptions to this critical navigation system.

7 Things You Didn’t Know You Could Do With SkyTruth Alerts

SkyTruth Alerts is better than ever. Learn how to make our new Alerts work for you.

SkyTruth’s new Alerts app is a year old! Or, in human terms, our new Alerts is in early childhood, a period of tremendous growth across all areas of development with occasional wobbles and stumbles.

SkyTruth Alerts show subscribers and users where environmental incidents have occurred in their Areas of Interest (AOIs), particularly for oil and gas activities. In making Alerts available to the public — at no charge — SkyTruth has provided access to tools, data and satellite imagery that environmentalists and citizen-scientists otherwise wouldn’t have. You can learn more about SkyTruth Alerts here

In 2018, we gave Alerts a facelift and SkyTruth began looking for additional datasets that would help subscribers monitor their AOI. We’ve expanded oil and gas permitting to include West Virginia, Colorado, Wyoming, New Mexico, Montana and Utah. We’ve also added pollution alerts for Florida, New Mexico and New York. (If you’d like to see more datasets, let us know!)

The new Alerts was developed to meet three goals: 

  • Provide users access to satellite imagery;
  • Give users the ability to create, annotate and share their own custom maps;
  • Enable a quicker process for adding new Alert data sources.

Whether you’re a longtime Alerts subscriber or are just starting out, here are seven features you might have missed.

1. Drawing Setback Distances Around an Alert

While Alerts incidents are generally tied to a specific point on a map, they can also greatly affect the surrounding areas. Alerts helps highlight these areas of impact by letting you define setback distances around an incident. (For example, you may get an Alert that your state government has issued a permit to drill and frack a new gas well in your AOI, and you want to create a map showing the 2500-foot zone of potential public health risk around that drilling site.)

Start by viewing the full details of an incident, either by clicking on an incident from an Alerts email, or when navigating the map by clicking an Alert icon, followed by the View Full Report link from the pop-up window.

You’ll find the Draw setbacks link at the top of the left sidebar. After clicking this link:

  1. Select a unit of measure (meter, km, mile).
  2. Select a distance.
  3. Click Draw.
  4. Repeat as necessary.

2. Navigating by Latitude/Longitude

Just like every house has its own address (house number, name of the street, city, etc), every point on the surface of earth can be specified by its own latitude and longitude coordinates. Sometimes, a latitude/longitude is all you have. Fortunately the Alerts Location Search box — located on the upper-right corner of the map — will accept these coordinates just as well as a city, state, or house address.

Try it out by on the Alerts Map by seeing where these latitude/longitude coordinates take you:

  • 36.0986, -112.1107
  • 30, -90

Wondering what the latitude/longitude is for where you are on the Alerts map? If you use a mouse or touchpad, Alerts will always show you the lat/lng for the current location of the pointer. You’ll find these coordinates on the right side of the heading, just under the Login link.

3. Search Alerts by Keyword and Time Period

Alerts has about 420,000 incidents in its database. The primary method for narrowing these down to the ones you’re interested in is by moving around the map, zooming in and out, and creating AOIs. You’ll always see the most recent 100 incidents on your current map.

Looking for a specific incident can seem impossible without the additional filtering that Alerts provides:

  • Start and end dates: Enter either or both dates. Results are shown automatically when completing each date.
  • Keyword: Alerts will search all incidents in the current map boundaries for the keyword you enter here. Keyword search is not case sensitive, so TAYLOR and taylor will return the same results. However, the incident must contain your typed keyword(s) with exactly the same spelling, spacing and syntax. 

Click the  when you’re finished typing the search keyword.

Some of the uses of this feature include searching incidents for a specific owner, address, material, well number (for oil and gas permits), or description. Also, many Alerts sources use special keywords to identify incidents. For example, we add the keyword BIGSPILL for spills over 100 gallons reported to the National Response Center, and for spills that we estimate are bigger than 100 gallons. Essentially, any words you see while viewing an incident can be used to search for similar incidents.

Some examples: 

  • 063-37531

4. Download the Data to Analyze for yourself

Once you’ve got the map positioned just so, with the map boundaries and zoom level showing the area you’re interested in and any required filtering applied, you can take a closer look at the data and even download a CSV or KML file.

Start by clicking the Table view/Download icon, located on the Alerts tab:

You’re presented with a spreadsheet-like view of the data:

Here are some of the capabilities you’ll have:

  • Show top 20,000 alerts: check to show the most recent 20,000 instead of 100 incidents. [Update 8 May 2020: We’ve increased the number from 2,000 to 20000.]
  • Download KML File: KML files are used in an Earth browser such as Google Earth to layer the incidents visually on a map outside of Alerts. 
  • Download CSV File: CSV files can be opened by spreadsheets or viewed in text editors.
  • Previous and Next buttons take you through the data, page by page.
  • 20 rows dropdown list: allows you to change the number of incidents per page, up to 100.
  • Click on any column header (Id, Title, Incident Date, etc.) to sort on that column. Click again to sort in descending sequence.
  • Pull the vertical bars between column headings to increase/decrease the width of a column.

5. Play a Visualization of How Many Alerts Occurred Over Time

Before running this timeline, position the map with the boundaries and zoom level you want and apply any required filtering.  Start by clicking the Timeline link on the Alerts tab:

Alerts will create annual counts of incidents. Try running the visualization by clicking the
Play button:

From here, you’ll have controls to adjust the visualization:

  • Define how long each step represents (defaults to 1 year): Can select 1, 2, 3, 4, 6, 12, or 24 months.
  • Define how long each step lasts (defaults to 1 second)
  • Select Marker plot or Heat map (defaults to Marker plot): The marker plot visualization will place a marker on the map for each alert; a heat map uses a warm-to-cool color spectrum to show where the incidents are most concentrated.
  • Select a date range (begin and end month/year)
  • Clear markers after each step, or not. If you don’t clear markers after each step, the map will represent a sum of incidents for the current step and and all prior steps.
  • Cluster markers, or not. For marker plots, you can cluster the incidents together instead of showing individual markers. Clustering provides a count of incidents in relative proximity to each other.

You must be logged into Alerts to use the remaining features in this post, making you a SkyTruth Alerts super-user!

6. Measure an Area on the Map

Navigate to any AOI on the map. You may want to switch to the Satellite basemap for a better view of the area. You’ll find basemap selection in the upper-middle section of the map:

Look for something you want to measure, such as a body of water, housing development, industrial complex, or agricultural field.

Start by clicking the Annotations icon , which opens the Annotations window:

There’s a lot to explore here, but for this exercise click the polygon () to start identifying the area you want to measure. You’ll find on-screen help in the Annotations window. In short, you start the measurement by clicking anywhere on the map, then use additional clicks to create new lines around the area you’re measuring. Complete the polygon by clicking the original starting point.

When finished, you’ll have these options:

By checking the Include area checkbox, Alerts will measure and display the selected area in square kilometers.

7. Share a Map Image

Create your custom map — any map! Select the alerts, basemaps, satellite imagery, layers, and annotations you want to show. When the map is ready to share, click the Share icon:

Then click the Download image of map button:

The image that’s downloaded will be a JPG file and can be found where your browser stores downloaded files. It will have a filename starting with skytruthalertsmap followed by the date and time. This is an experimental feature in Alerts and we would appreciate any feedback on its use.


Alerts is becoming one of the go-to applications in an environmentalist’s toolbox. Soon, you’ll be able to create your own Issue Maps so that you can focus on the area, data, and map controls relevant to a specific topic. We also have high hopes for User Generated Alerts, planned for later in 2020, so you can show the world what’s happening in the places you care about. Stay tuned for new features in the year to come!

Serious Brainpower Tackled SkyTruth Challenge at AWS re:Invent Hackathon for Good

SkyTruth’s goal to stop oil pollution at sea from bilge dumping is off to a strong start.

The call came two weeks in advance: SkyTruth was chosen to be one of four nonprofits featured at the AWS re:Invent Hackathon for Good held December 2, 2019 in Las Vegas, Nevada. What followed was a frenzy of activity in the SkyTruth offices. Assembling databases for the hackathon teams to work from. Generating FAQs and documentation. Developing materials to share the SkyTruth story. Crafting just the right pitch to lure the best and brightest from a roomful of 150 computer scientists and engineers to work on our challenge — namely, automating the detection of bilge dumping at sea by vessels violating international law and polluting the ocean. 

Finally, the big day arrived. Early in the morning, SkyTruthers Ry Covington, Jona Raphael, and John Amos staffed a table at Vegas’ MGM Grand, offering SkyTruth swag to entice hackers to our cause. 


But cool T-shirts and stickers are one thing, and a compelling challenge is another. Here’s SkyTruth President John Amos’ pitch to the crowd: Help us stop oil pollution at sea.



The competition was tough. Three other worthy nonprofits were vying for the same brilliant brainpower that we were. After a convincing presentation and a little Q & A, SkyTruth attracted seven separate teams with a total of 35 computer scientists and engineers to work on different components of our goal: an automated system that detects bilge dumping every day around the world, identifies the perpetrators, and alerts law enforcement and the public in near real-time.



Time to roll up the sleeves and work.



And work.



And work.  Eight straight hours on laptops, at flip charts, and in discussion. Lots of Red Bull to stay alert and free massages to stay limber after hours hunched over a keyboard. 



Finally, at 6 p.m. it was time to present the results to the judges.



And here’s just a sample of what our teams came up with.



But that’s not the end; it’s just the beginning. We’re still evaluating all of the new material our teams generated and we’re excited about the possibilities. And the week-long AWS re:Invent conference followed the Hackathon, with lots of opportunities to make valuable contacts.



Have a little fun.



And, perhaps most importantly, win an AWS Imagine Grant to support continued work to stop illegal bilge dumping at sea. Here’s Vice President of AWS-Worldwide Public Sector, Teresa Carlson, announcing the seven Imagine Grant winners – including SkyTruth.



With the valuable contacts we made at the AWS re:Invent Hackathon and conference, the volunteers who promised to continue helping us with this project, and support from the AWS Imagine Grant and others, SkyTruth will find a way to stop illegal oil pollution at sea. 


Photos by John Amos and Jona Raphael.

Systematic GPS Manipulation Occuring at Chinese Oil Terminals and Government Installations

Analysis reveals precise location and timing of GPS interference but purpose remains unclear.

Last month, an article in MIT Technology Review described strange GPS anomalies  in Shanghai. I began investigating, and have now found evidence of a novel form of GPS manipulation occuring at at least 20 sites on the Chinese coast during the past year. The majority of these sites are oil terminals, but government installations in Shanghai and Qingdao also show the same striking pattern of interference in GPS positioning. We don’t know the reason for this interference. It may simply be a general security or anti-surveillance system but it is also possible that it is intended to avoid scrutiny of imports of Iranian crude which have recently come under U.S. sanctions. Whatever the intention, we are able to demonstrate here, through analysis of vessel tracking data, that this GPS interference can be pinpointed very precisely in both time and location.

According to the MIT Technology Review article, this phenomenon was first documented by the U.S. flagged container ship Manukai when the vessel entered the port of Shanghai in July. The captain noticed that the vessel’s AIS (Automatic Identification System) appeared to malfunction — vessels on the navigation screen appeared and disappeared without explanation and appeared to move when they were in fact stationary. AIS, originally designed for collision avoidance, transmits vessels’ GPS locations, courses, and speed every few seconds via VHF (very high frequency) radio. These signals are not only picked up by nearby vessels and terrestrial antennas, but some private companies have also launched satellites able to receive these signals. For this analysis we were able to use data made available by two of these companies, Spire and Orbcomm, through our research partnership with Global Fishing Watch.

An investigation by non-profit C4ADS (Center for Advanced Defence Studies) showed that AIS vessel locations from hundreds of ships navigating Shanghai’s Huangpu river were coming up at false locations. Strangely, vessels on the river would have their GPS location jump to a ring of positions appearing on land. And this was not just affecting ships; looking at the cycling and running app STRAVA’s tracking map of cyclists, C4ADS also confirmed that this strange pattern of interference was affecting all GPS receivers.

To further investigate the GPS manipulation documented in Shanghai, I examined AIS position broadcasts from ships in the area. A distinct pattern emerged. Upon approaching the area of interference, a vessel’s broadcast position jumps from the vessel’s true location to a point on land where false AIS broadcasts occur in a ring approximately 200 meters in diameter. Many of the positions within the ring had speeds of precisely 31 knots or 21 knots (much faster than vessels would be moving near dock) and showed a course varying depending on the position within the ring. The GPS anomaly appears to affect vessels once they are a few kilometers out from the center of the ring. Once affected, vessels begin broadcasting seemingly random positions within the ring or from other high speed positions scattered around it.

Image 1. The Chinese cargo ship Huai Hia Ji 1 Hao (yellow) transits southeast on the Huangpu river. Upon nearing the center of GPS interference area the track jumps to the ring on land and to other random positions nearby. Positions from other affected vessels are shown in red. AIS data courtesy Global Fishing Watch / Orbcomm / Spire.

Image 2. GPS interference can be pinpointed based on this ring of false AIS positions. Approximately 200 meters in diameter, many of the positions in the ring had reported speeds near 31 knots (much faster than a normal vessel speed) and a course going counterclockwise around the circle. AIS data courtesy Global Fishing Watch / Orbcomm / Spire.

Because the ring of false AIS broadcasts follows this very specific pattern, I was able to query AIS tracking data to check if there are other locations where these rings are also occurring. The results are striking. This GPS manipulation is occuring not only in Shanghai but has occurred in at least 20 locations in six Chinese cities within the past year. The focus of these apparent GPS manipulation devices is clearly oil terminals (where 16 of the 20 detected locations were observed). But three prominent office buildings in Shanghai and Qingdao are also affected: the Industrial and Commercial Bank of China in Shanghai, the Qingdao tax administration office, and the Qingdao headquarters of the Qingjian industrial group.

Image 3. A ring of false AIS positions marks an apparent GPS interference device deployed in an office building identified as the Qingdao tax administration office. AIS data courtesy Global Fishing Watch / Orbcomm / Spire.

Image 4. Locations of detected GPS manipulation occuring in six Chinese cities in 2019. Interference following this pattern was not found beyond the Chinese coast.

It seems likely that the centers of these rings of false AIS positions actually mark the physical location of some sort of GPS disrupting device. A device having precisely this effect on GPS receivers, including shipborne AIS systems, has not been previously documented, though there have been other cases of GPS blocking and manipulation. Earlier this year C4ADS published a report with details on GPS manipulation clearly being carried out by the Russian government. These Russian systems appeared to have the effect of making all receiving devices within range show some particular location, such as a nearby airport, rather than the true location of the device. This was seen in one striking example of vessels approaching Putin’s alleged palace on the Black Sea coast.

This Chinese system is clearly being deployed both at central government offices and at the much more remote locations of oil terminals. In the case of the government office buildings it seems likely that these GPS disrupting devices were activated as a security measure. Some are only active for a few days, perhaps to coincide with the visit of an important official. However,  the AIS manipulation occuring at oil terminals particularly interests us at SkyTruth: One possible motive for deploying GPS manipulation devices at oil terminals could be recent U.S. sanctions on Chinese companies importing Iranian crude. And the intentional disruption of a navigation safety system, in close proximity to crude oil storage, is a serious concern.

Almost half of the specific locations where these presumed GPS disrupting devices have been deployed are at oil terminals near Dalian in northeast China. In an August analysis, The New York Times matched Planet satellite imagery from June and July with AIS tracking data to show Iranian tankers delivering oil to China in violation of U.S. sanctions. The Financial Times also documented Chinese flagged tankers importing Iranian crude after ship to ship transfers with Iranian tankers.

I took a closer look at exactly how this GPS disruption is affecting vessel tracking in one oil terminal east of Dalian. Here I identified four locations where GPS disrupting devices appear to have been deployed in 2019. I compared AIS vessel position data from March 1, 2019  and September 5, 2019. The differences were dramatic.

These two days showed similar numbers of AIS positions in the area. But on September 5 approximately two-thirds of the vessel positions at dock disappeared and appeared to be replaced by positions orbiting the GPS disrupting devices or scattered randomly in the region. At the same time, it does appear that some normal AIS broadcasts are coming through and that the GPS disruption does not entirely mask all vessel movements in the area.

Image 5. On March 1, 2019 AIS vessel position data around an oil terminal east of Dalian China shows accurate vessel positions and speeds. On that date, none of the four locations of GPS interference were active. Consequently no vessel positions appear on land and stationary vessels are accurately shown with near 0 speeds (green). AIS data courtesy Global Fishing Watch / Orbcomm / Spire.

Image 6. On September 5, 2019 two GPS interference locations were active and this had a dramatic effect on scrambling vessel positions in the area. Many positions now appear orbiting the presumed GPS interference devices and others appear scattered on land. On the water many positions are appearing with very high speeds (over 25 knots, red) and it’s not possible to distinguish true and false locations. However some slow speed positions (green) are appearing at dock where they would be expected, so some AIS broadcasts appear to be unaffected. AIS data courtesy Global Fishing Watch / Orbcomm / Spire.

Image 7. The distribution of AIS speeds in the area is significantly altered by the activation of the GPS interference devices. Above AIS speed distributions are compared between March 1 (left, no GPS interference) and September 5 (right, active GPS interference). On Sept 5 the total number of slow speed positions from docked vessels is greatly reduced and spikes now appear at 21 and 31 knots from positions orbiting the presumed GPS interference devices.

I also examined one individual vessel track to see how it was affected by GPS interference. This is the Chinese flagged tanker Jin Nui Zou which entered the Dalian oil terminal on September 5. Initially a normal track is seen as the vessel approaches the terminal from the southeast. With closer proximity to the presumed interference device, scrambled positions — often with very high speeds — start to appear. Eventually almost all of the vessel’s AIS positions appear in the ring orbiting the interference device.

Image 8. The tanker Jin Niu Zuo approaches an oil terminal east of Dalian on September 5. Initially, positions with normal transit speeds appear (yellow). With closer proximity, scattered high speed positions begin to emerge (red) and eventually most positions appear in the ring surrounding the presumed AIS interference device. AIS data courtesy Global Fishing Watch / Orbcomm / Spire.

The timing of GPS interference at different sites on the Chinese coast can be inferred based on the appearance of AIS positions on land with 21 and 31 knot speeds. Of the 20 locations identified, interference appears earliest at office buildings in Qingdao but only over a couple days (April 17 – 18, 2019). The first GPS interference at oil terminals appears in June and has continued until recently but timing varies by location. Activation of interference at different terminals is intermittent and may be in response to specific events. For instance at an oil terminal near Quanzhou GPS interference appears to have been activated only between September 25th and 27th, 2019.

At the Dalian oil terminals GPS interference appears to have begun in late June 2019. It is possible that this was a reaction to increased scrutiny of crude imports after the U.S. ended exemptions for purchase of Iranian oil on May 2nd. In fact, Dalian is the headquarters of two subsidiaries of Cosco shipping which were sanctioned on September 25 for importing Iranian crude. Based on what can be seen with vessel activity in Dalian, it is clear that GPS interference is not able to entirely mask vessels approaching the terminal. However, it likely would make it impossible to reliably link a vessel’s AIS track with satellite imagery of a vessel discharging crude at dock. While it is not at all clear that GPS interference was intended to obscure shipping activity, we do see that it had a significant impact on AIS tracking and that the interference was specifically concentrated at oil terminals.

In the November article first documenting the strange GPS anomaly in Shanghai, the question was posed whether this was the work of the Chinese state or some other actor like a mafia engaged in smuggling river sand. Based on the very specific characteristics of the GPS manipulation observed and its deployment at high level installations, it seems very likely that the Chinese state is responsible. It remains to be seen whether this is simply a security measure or if GPS manipulation is also being deployed specifically to prevent monitoring of oil imports.

Training Computers to See What We See

To analyze satellite data for environmental impacts, computers need to be trained to recognize objects.

The vast quantities of satellite image data available these days provide tremendous opportunities for identifying environmental impacts from space. But for mere humans, there’s simply too much — there are only so many hours in the day. So at SkyTruth, we’re teaching computers to analyze many of these images for us, a process called machine learning. The potential for advancing conservation with machine learning is tremendous. Once taught, computers potentially can detect features such as roads infiltrating protected areas, logging decimating wildlife habitat, mining operations growing beyond permit boundaries, and other landscape changes that reveal threats to biodiversity and human health. Interestingly, the techniques we use to train computers rely on the same techniques used by people to identify objects.

Common Strategies for Detecting Objects

When people look at a photograph, they find it quite easy to identify shapes, features, and objects based on a combination of previous experience and context clues in the image itself. When a computer program is asked to describe a picture, it relies on the same two strategies. In the image above, both humans and computers attempting to extract meaning and identify object boundaries would use similar visual cues:

  • Colors (the bedrock is red)
  • Shapes (the balloon is oval)
  • Lines (the concrete has seams)
  • Textures (the balloon is smooth)
  • Sizes (the feet are smaller than the balloon)
  • Locations (the ground is at the bottom)
  • Adjacency (the feet are attached to legs)
  • Gradients (the bedrock has shadows)

While none of the observations in parentheses capture universal truths, they are useful heuristics: if you have enough of them, you can have some confidence that you’ve interpreted a given image correctly.

Pixel Mask

If our objective is to make a computer program that can find the balloon in the picture above as well as a human can, then we first need to create a way to compare the performances of computers and humans. One solution is to task both a person and a computer to identify, or “segment,” all the pixels that are part of the balloon. If results from the computer agree with those from the person, then it is fair to say that the computer has found the balloon. The results  are captured in an image called a “mask,” in which every pixel is either black (not balloon) or white (balloon), like the following image.

However, unlike humans, most computers don’t wander around and collect experiences on their own. Computers require datasets of explicitly annotated examples, called “training data,” to learn to identify and distinguish specific objects within data. The black and white mask above is one such example. After seeing enough examples of an object, a computer will have embedded some knowledge about what differentiates balloons from their surroundings.

Well Pad Discovery

At SkyTruth, we are starting our machine learning process with oil and gas well pads. Well pads are the base of operations for most active oil and gas drilling sites in the United States, and we are identifying them as a way to quantify the impact of these extractive industries on the natural environment and neighboring communities. Well pads vary greatly in how they appear. Just take a look at how different these three are from each other.

Given this diversity, we need to provide the computer many examples, so that the machine learning model we are creating can distinguish between important features that characterize well pads (e.g. having an access road) and unimportant ones that are allowed to vary (e.g. the shape of the well pad, or the color of its surroundings). Our team generates masks (the black and white pixel labels) for these images by hand, and inputs them as “training data” into the computer. We provide both the image and its mask separately to the machine learning model, but for the rest of this post we will superimpose the mask in blue.

Finally, our machine learning model looks at each image (about 120 of them), learns a little bit from the mask provided with it, and then moves onto the next image. After looking at each picture once, it has already reached 92% accuracy. But we can then tell it to go back and look at each one again (about 30 times), and add a little more detail to its learning, until it reaches almost 98% accuracy.

After the model is trained, we can feed it raw satellite images and ask it to create a mask that identifies all the pixels belonging to any well pads in the picture. Here are some actual outputs from our trained machine learning model:

The top three images show well pads that were correctly identified, and fairly well masked — note the blue mask overlaying the well pads. The bottom three images do not contain well pads, and you can see that our model ignores forests, fields, and houses very well in the first two images, but is a little confused by parking lots — it has masked the parking lot in the third image in blue (incorrectly), as if it were a well pad. This is reasonable, as parking lots share many features with well pads — they are usually rectangular, gray, contain vehicles, and have an access road. This is not the end of the machine learning process; rather it is a first pass through that informs us of a need to capture more images of parking lots and further train the model that those are negative examples.

When working on image segmentation, there are a number of challenges that we need to mitigate. 

Biased Training Data

Predictions that the computer makes are based solely on training data, so it is possible for idiosyncrasies in the training data set to be encoded (unintentionally) as meaningful. For instance, imagine a model that detects a person’s happiness from a picture of their face. If it is only shown open-mouth smiles in the training data, then it is possible that when presented with real world images, it classifies closed-mouth smiles as unhappy.

This challenge often affects a model in unanticipated ways because those biases can be inherent in the data scientist. We try to mitigate this by making sure that our training dataset comes from the same set of images as those that we need to be automatically classified. Two examples of how biased data might creep into our work are: training a machine learning model on well pads in Pennsylvania and then asking it to identify pads from California (bias in the data source), or training a model on well pads centered in the picture, and then asking it to identify them when halfway out of the image (bias in the data preprocessing).

Garbage In, Garbage Out

The predictions that the computer makes can only be as good as the samples that we provide in the training data. For instance, if the person responsible for training accidentally includes the string of a balloon in half of the images created for the training dataset and excludes it in the other half, then the model will be confused about whether or not to mask the string in its predictions. We try to mitigate this by adhering to strict explicit guidelines about what constitutes the boundary of a well pad.

Measuring Success

In most other machine learning systems, it is useful to measure success as a product of two factors. First, was the guess right or wrong? And second, how confident was the guess? However, in image segmentation, that is not a great metric, because the model can be overwhelmed by an imbalance between the number of pixels in each class. For instance, imagine the task is to find a single ant on a large white wall. Out of 1000 white pixels, only 1 is gray. If your model makes a mask that searches long and hard and guesses that one pixel correctly, then it gets 100% accuracy. However, a much simpler model would say there is no ant, that every pixel is white wall, and get rewarded with 99.9% accuracy. This second model is practically unusable, but is very easy for a training algorithm to achieve.

We mitigate this issue by using a metric known as the F-beta score, which for our purposes avoids objects that are very small being ignored in favor of ones that are very large. If you’re hungry for a more technical explanation of this metric, check out the Wikipedia page.

Next Steps

In the coming weeks we will be creating an online environment in which our machine learning model can be installed and fed images with minimal human guidance. Our objective is to create two pipelines: the first allows training data to flow into the model, so it can learn. The second allows new images from satellites to flow into the model, so it can perform image segmentation and tell us the acreage dedicated to these well pads.

We’ll keep you posted as our machine learning technology progresses.

Update 2019-12-13:

In a major step forward, we set up Google SQL and Google Storage environments to house a larger database of training data, containing over 2000 uniquely generated polygons that cover multiple states in the Colorado River Basin. The GeoJSON is publicly available for download at These data were used as fodder for a deep learning neural network, which was trained in this iPython notebook. We reached DICE accuracies up to 86.3%. The trained models were then used to run inference on sites that were permitted for drilling to identify the extent of the well pads in this second iPython notebook.