Undo / Redo - v3.16.8

Undo / Redo (Finally!)

Any operation which alters geometries is automatically saved in an undo stack. This includes adding, moving, and deleting markers or routes, as well as reversing routes or trips. The entire state of the trip (routes, markers, and scripts) as of that moment is saved as a snapshot. The size of the undo and redo stacks is not limited. Any new geometry change resets the redo stack. Loading or saving a trip resets both the undo and the redo stacks.

Note that changes which do not affect the geometry are not automatically saved. So modifications to say route start time or route color are not saved unless the geometry is affected. While this may seem like a somewhat arbitrary distinction, undoing state with no immediately visible outcome didn’t seem user friendly.

The undo / redo buttons are only visible when in editing mode.


Merge routes - v3.16.6

Merging routes

You can now merge routes by dragging endpoints together. The route endpoint being dragged is the source route, the other route is the destination route. The name, direction, speed, and color properties of the destination route are preserved.

Other new features

  • An account now includes boatname, which is going to be displayed as part of a future tracking feature.
  • Added webcam marker icon.
  • Added bidirectional client/server communication using signalR. At present this is used to indicate when the server will be going down for maintenance.

Bug Fixes

  • Markers were sometimes not saved in a trip. Doh! Sorry! Fixed.
  • Improved route editing by eliminating spurious route snipping and vertex deletion.

Link Features - v3.15.9

DeepZoom Links are created using the clipboard copy button, above. Links now include relevant state values such as date and time, playing/paused status, duration, location, zoom, layers, weather and opacities, and tide station, buoy, or marker selected. This makes it easy to share conditions at a particular location. Note that routes, tracks, and private markers are NOT included in the link. To share these items, you’ll need to continue sharing a trip.

The goal here is to make sharing easier without the necessity of logging in, creating, naming, and saving a trip. In summary, there are now three methods of launching DeepZoom while specifying initial content:

Type sample url contents where is it?
Trip https://www.deepzoom.com/trip/dwmfjt2f all routes, tracks, and private markers Trips.Share
Marker https://www.deepzoom.com/marker/GNIS1512376/0/ just select a marker Copy Link on info tab dropdown
Clipboard https://www.deepzoom.com/s/20250101-Gori7e5ZYP most state except routes, tracks, and public markers Clipboard copy button

Clipboard Examples

Largest Deception Pass Ebb in 2025 (December 4) Current West Sea Otter Buoy conditions near Cape Caution Wind and Weather around Cape Cod Statue of Liberty current

Bug Fixes

  • Some iOS devices failed to load the map due to this Mapbox bug: mapbox/mapbox-gl-js#13361.

  • Improved tide and current station click selection accuracy.

Tip! You can embed DeepZoom in your own web pages https://blog.deepzoom.com/release/embed-deepzoom/


Tide Stations and Search - v3.15.6

Tide Stations

Tide stations now have a new symbol:

You can now get search results (links) for points of interest (POI) and major geographical locations like parks, towns, mountains, and airports within DeepZoom. Just click on the POI.

Search reults are advertising free and are provided by Brave Search. .gov and .org sites are prioritized. Unfortunately, Brave only filters search results to the country level (instead of state or some finer granularity), so there can be spurious results if the search text isn’t fairly unique.

Other new features

  • You can now change the trip departure date without time jumping back to the beginning of the first route.

  • When performing a location search, a marker is now automatically added.

Bug Fixes

  • You can now export and then import a DeepZoom trip in .gpx format with minimal loss of information.

  • Improved tide and current station click selection accuracy.

  • When editing documents, don’t follow links if they are clicked.

  • Reduced jitter of position marker when animating.

  • Reduced number of entries in the time zone list. Color coded entries for easy selection. Results of changing zones are updated in UI immediately.

  • Performance improvements.

Scripting

  • Script dialog wasn’t always setting the relative time properly.

  • Added a new event showDialog to scripting. Scripts can now programmatically open: trip-find, login, register, account, search, forgot-password, help, splash, about, demos, payday, add-public-markers, timebase, rate.

  • The selectMarker event now works with NDCB buoys and Wikipedia locations.


NDBC Buoys - v3.14.93

NDBC Buoys

NDBC Buoys provide real time measurements of wind speed, water and air temperature, barometric pressure, and wave height.

DeepZoom now displays these on a separate layer which can be enabled or disabled on the Layers dialog. Data is automatically refreshed every 5 minutes.

Other new features

  • You can now use the search dialog to find tide and current stations.

Bug Fixes

  • Creating routes on touch devices has long been a bit flakey, with accidental double taps ending the route creation prematurely. I’ve been trying to work around this bug in the Mapbox drawing component for years now and the problem seems to be finally fixed! The gory details are here.

  • The Celsius selection on the Settings tab now actually does something.

  • DeepZoom would sometimes forget that you were logged in after a browser refresh.

  • If startup fails, prompt user to initiate refresh.

  • Trips saved with the Public option sometimes would not appear when searching using “Find Trips in this Area”.


Scripting Documentation - v3.14.84

Scripting

Finally completed the scripting documentation.

New scripting features:

New document features:

  • Image links can now be added to a document. This is useful for webcams: Seattle ferry dock
  • Added a button to remove formatting.
  • Ensure all images are loaded before allowing save.

Other new featues

  • Allow changing the departure time for all routes simultaneously in the departure time dialog.
  • Always show the timebase duration above the time readout.
  • Added UTC to the timezone list.

Editing Route and Marker properties

You can now change a route name, departure date, departure time, speed, and color right from the route edit dialog.

For example, to change the speed, click on the speed readout and then drag the slider.


Close the routes/markers dialog to exit edit mode.

Tip! To quickly toggle between routes and markers click the “routes” or “markers” label in the upper left corner of the dialog.

Update all NOAA charts

Updated all NOAA charts to the 2024.05.28 NOAA release. Charts were publilshed to DeepZoom on 2024.06.11.


The Infinite π release - v3.14

The π release

This is a major update. New charts, new tides and currents, and plenty of UI improvements.

Charts

The lovely, traditional, hand-drawn NOAA charts featured artistically placed curving labels, a nice variety of fonts, and lots of annotations. In our mad rush to digitize the world, these charts are being phased out, and are being replaced by machine drawn vector charts which lack all of these attributes. With this release, we’ve accepted the inevitable and also adopted vector-based charts in DeepZoom.

But, a major benefit of the vector based charts is that a smooth land / water cutout can be established, allowing seamless transitions between NOAA (sea) and Mapbox (land) imagery. And instead of the confusing mix of depths in feet, fathoms, and sometimes meters, all NOAA charts now show depths in feet. Non USA charts still show depths in meters.

Tides

All NOAA tide and current stations have been updated to match the December 2023 (xtide) release.

UI

Fit and finish of the UI has significantly improved in this release.

Problems with editing routes on touchscreens are (hopefully) gone. Clicking on any object type (tide or current station, marker, private marker, route, track, or wikipedia) selects the object.

Add and edit routes and markers

At the top of the map are three new buttons.

Trip.New (trash, erase everything) is in the middle.

Add or edit routes and markers buttons are on the left and right, and they turn on edit mode.

Use the plus to add, or you can just edit existing markers or routes.

Use the arrows to quickly jump between already created routes and markers.

Edit the name, change color or icon, and jump to the details dialog to change route speed or departure date and time.

Close the routes/markers dialog to exit edit mode.

Tip! To quickly toggle between routes and markers click the “routes” or “markers” label in the upper left corner of the dialog.

Contribute public markers

A long term goal for DeepZoom is to become a public resource for detailed trip planning: a non-commercial, user-sourced map with ratings, comments, images, and videos.

Use the new “Add Public Markers” dialog to make contributions to the public map.

Contribute your private markers (previously saved in a trip) to the public map . Once added to the public map, you can still make changes to the marker, and of course, anyone can add comments.

Private markers appear larger on the map than public markers. So, after adding markers to the public map, if you reopen the trip containing the source markers they will exactly overlay the public markers, and appear larger.

If you wish to rename or reposition a public marker you have contributed, use the settings button on the info page.

Only a single definitive source for content (comments, images, videos) exists and is shown on both the private and public versions of a marker. If you reposition a private marker in your trip, the change will not automatically appear on the public map.

Routes

Routes can now be disabled. Disabled routes no longer have vertex points displayed, so this is a way to make boundaries, starting lines, and the like. Here’s an example: West Coast Crabber/Towboat Lanes

Try it out: https://deepzoom.com/trip/vbbzth7e


Major UI Work - v3.0

Version 3 is out!

Whew! Stop! Enough already! I surrender!

Version 3 is a culmination of the work over the winter. Learning WebGL. Rethinking some of the UI. Weather display is pretty much a complete redo.

UI updates

Until this release, a lot of the important functionality in DeepZoom hasn’t been, er, easily discoverable. It’s there, but often buried a bit too deep. For example, switching between layers required dragging multiple opacity sliders back and forth. Now, just click on a button to show/hide charts, tides and currents, and pilot charts.

Toggle charts, tides and currents, and pilot charts

Any or all of these can be active simultaneously. An orange border indicates that the layer is active.

You can still control opacity of each layer separately using the sliders in the layers dialog. Even if a script changes the opacity of a layer, the values you’ve manually set using the slider will be restored when you manually toggle the layer.

Quick access to route creation

Creating and editing routes and markers is now more accessible.

Weather

Weather display got a total makeover with plenty of kudos going to Windy and Ventusky for inspiration. Notice that precipitation, temperature, and wind velocity and direction are all updated simultaneously and synchronous to whatever location is displayed in the exact center of the screen.

Toggle a weather layer on or off with these buttons. Notice you have to click the circular part of the readout to toggle the layer.

Precipitation, temperature, and wind overlay and obscure most everything in layers below. But you can set a zoom level beyond which the weather layer is hidden.

Hide weather layers based on zoom

As you zoom in and out there is a threshold zoom where weather layers transition between visible and transparent. And there is a separate setting which controls whether the wind streamer lines are visible. These controls are on the settings page.

If you want to hide the streamers completely, just move the bottom slider to the far left.

Weather resolution

DeepZoom club members can choose the resolution of weather data displayed. The free version includes 1°x1° resolution data. DeepZoom club members can choose either 0.5°x0.5° (4x data) or 0.25°x0.25° (16x data) with time resolution of either 1 or 3 hours. If you don’t have great bandwidth, performance will be smoother with lower resolution settings.


DeepZoom
Club


Days
Time
granularity
in hours
Spatial
granularity
in degrees
No -1 / +3 3
Yes -10 / +10 1 or 3 0.25°, 0.5°, 1°

Goodbye 3D

Rotation and tilt of the map have been features since version 2.0. These, along with 3D terrain views made nice eye candy, but probably weren’t that functional for most users.
3D also increases DeepZoom’s memory footprint and CPU/GPU/bandwidth usage. Critically, 3D was never flawless as you may have noticed if you ever tried editing a route while in 3D mode. At random moments, the draw code would crash in a way that I couldn’t work around. While this could have been due to issues in my code, I’m pretty sure there’s a problem inside of mapbox and mapbox-draw, specifically mapbox#10927 and mapbox-draw#1077

So, I’ve made the somewhat painful decision to disable 3D, tilt, and rotation until these issues are resolved. All of this code is still in the codebase, but is just dormant. All existing scripts continue to function, but any 3D operation is quietly ignored.

I’m curious how many users will actually miss the 3D views. Take a poll here (you need to be logged into GitHub to vote): https://github.com/jaybo/deepzoom-blog/discussions/18.

Scripting

Scripting has a few new features. I’ve long wanted to put a real programming language inside of DeepZoom, but sharing trips which contain executable javascript is a security risk. So as a partial solution, I’ve added a simple javascript phrase parser (abstract syntax tree) which allows conditional execution of any script event. The if conditional is:

"if": "<condition is true>"

I’ve begun exposing internal DeepZoom variables which can be used in the conditional phrase: loopCount, isPlaying, isDragging, and sliderPosition. These variables are read-only. You can’t perform assignment operations in the conditional.

loopCount is incremented once each pass through a trip. The current value of loopCount is shown at the top of the Script dialog (there’s a reset button beside the shown value which sets loopCount back to zero).
Here’s how to toggle the wind layer on and off every other pass through a trip playback:

{ "weather":"wind-wind", "if": "loopCount % 2 == 0" }  // if loopCount is even
{ "weather":"off", "if": "loopCount % 2 == 1" }  // if loopCount is odd

”%” is a remainder operation in javascript, so the top line reads “if the remainder of loopCount / 2 is zero”.

A few new script events have been added. Of note for embedding use is the ability to specify a particular timezone:

timezone: {"zone":"America/Los_Angeles"}

If you’d like to access any additional internal variables, here’s where to make a request. https://github.com/jaybo/deepzoom-blog/discussions/19.

Bug fixes

  1. Lots.

Embed DeepZoom - v2.8

Embedding DeepZoom in your own website

DeepZoom can be embedded in your own website via an iframe. You can specify a particular trip or page to be loaded via the Url passed in the src parameter. Here are some typical examples

The HTML:

<div>
    <iframe id="iFrame1"
        title="DeepZoom embedded iFrame1"
        width="100%"
        style="min-width: 365px; height: 85vh; max-height: 700px"
        src="https://www.deepzoom.com/trip/yzahbfym">
    </iframe>
</div>

Notice that these are fully functional instances of DeepZoom, not just a movie playing. A few features are disabled by browser security when running in an iFrame such as all geolocation APIs.

Load a trip

This is the most flexible means of specifying the location, zoom, layers, tab displayed, and virtually all of the settings in DeepZoom. You can optionally customize the user experience by adding a script to the trip. https://www.deepzoom.com/doc/index.html

https://www.deepzoom.com/trip/4jvmcnf6

Load a marker

If you want to always zoom to a particular public or private marker use marker/{markerID} as in:

https://www.deepzoom.com/marker/a61cae5ca877eb87218b82fbdaebe599

Clipboard links let you set most state variables in DeepZoom. Use s/{StateID} as in:

https://www.deepzoom.com/s/20250101-6TTprQ1xJf

For more info on clipboard links, see https://blog.deepzoom.com/release/copy-link/

Or you could have more elaborate scenarios with buttons to load different markers or trips:

<script >
    let changeSrc = function (src) {
        let iFrame = document.getElementById("theIframe");
        iFrame.src = src;
    }
    changeSrc("https://www.deepzoom.com/trip/4jvmcnf6");
</script>

<btn 
  onclick="changeSrc('https:\/\/www.deepzoom.com/marker/a61cae5ca877eb87218b82fbdaebe599')" > 
  Jump to marker ID: a61cae5ca877eb87218b82fbdaebe599 
</btn>

Hoboken to Carnegie Hall

Hey, how do you get from Hoboken to Carnegie Hall?

How to Pay for Embedding

  • You can experiment with embedding DeepZoom for free.
  • When you get serious and exceed the free tier, you can add page load credits to your account at: https://www.deepzoom.com/embed

Rich Media - v2.7

Rich Media

I’m a daily user of Wikipedia and Twitter. And I’ve long imagined adapting the spirit of these innovations into DeepZoom, creating an authoritative information source for trips and markers (the Wikipedia part) along with user contributions including comments, images, videos, and ratings (the Twitter part).

This release marks the introduction of both of these features.

To some extent, these features overlap those offered by https://activecaptain.com and https://marinas.com. Since I don’t have the bandwidth/time/money to keep track of all of the details for every commercial establishment, DeepZoom will just provide a link to the authoritative source at the top of each marker description.

But what is unique here is that each marker and trip can optionally include a series of comments with images and video. The user interaction model is similar to Twitter, and you can comment on others comments.

Anyone who has tried to spelunk through Amazon product reviews for valid information knows that the tragedy of the commons applies to the internet. Mindless and irrelevant comments and reviews seem to be the norm, and bots are rapidly taking over. To try and limit such flotsam and jetsam on DeepZoom, only subscribers can post new content or add ratings.

There are two classes of markers: public markers appear on everyone’s chart, and private markers are only stored within a Trip. The next planned feature will allow users to promote their private markers into the public arena. For example, if you have a collection of Puget Sound SCUBA sites with accompanying rich media you’ll be able to have these show up on everyone’s chart. Just mark the Trip containing the markers as public and if the trip garners a high enough star ranking and votes (number to be determined) the markers will become automagically become public. To be eligible to transition to public marker status, the Trip must only contain markers and no routes.

The content editor

The editor is divided into three sections: text, images, videos. Each section is optional.
Both images and videos can be drag and dropped onto the editing page. Images retain their full original resolution. At this time, videos must be hosted on YouTube.

Seattle to Lopez Island Loop

This trip has been updated to demonstrate adding rich media at each port of call.

Try it: https://www.deepzoom.com/trip/yzp5ybrk

Seattle To Glacier Bay via Inside Passage

This trip has been updated to demonstrate adding rich media to the trip itself. Scroll down on the “Trip” tab to see comments and images.

Try it: https://www.deepzoom.com/trip/4jvmcnf6

Bug fixes

  1. Sometimes when changing properties of a route another route would be incorrectly selected. Sorry for all the aggravation this bug has caused, but it is now fixed!
  2. The “Kingman - Cuttyhunk” Trip could hang the app. Fixed.

Recent Posts

Rich Media - v2.7

6 minute read

Rich Media I’m a daily user of Wikipedia and Twitter. And I’ve long imagined adapting the spirit of these innovations into DeepZoom, creating an authoritat...