WXforum.net

Web Weather => Weather Website PHP/AJAX scripting => Topic started by: Ian. on May 02, 2018, 05:02:16 PM

Title: Google API billing
Post by: Ian. on May 02, 2018, 05:02:16 PM
Hi,

Received an e-mail from Google regarding API billing for use of maps, the mail says that the new systems comes into play in June and you get $200 monthly credit free, it goes on that my sites usage is below this, but they need billing details should it be exceeded.

Is this genuine?


Title: Re: Google API billing
Post by: dupreezd on May 02, 2018, 05:12:50 PM
Ian, just hover your mouse over the link they provided. DO NOT CLICK. It will show where the link is going to take you. Check if it makes sense, spelling mistakes etc.
You are below your quota, so if you ignore the email, what is the worse that can happen?  :-)

Title: Re: Google API billing
Post by: Jasiu on May 02, 2018, 06:05:19 PM
It's real. I was about to post something and saw a thread was started already.

Google had announced last year that they'd stop supporting Maps use without API keys.  That and more is explained here:

https://cloud.google.com/maps-platform/user-guide/ (https://cloud.google.com/maps-platform/user-guide/)

It's short, but the even shorter tl;dr version is that as of July 11:

1) If you don't have a key, you have to create one;

2) You have to associate a credit card with your key for it to work so they can charge you if you go over the $200 limit.

In the email I got, they say I haven't exceeded the $200/month quota since I've had an API key.

Title: Re: Google API billing
Post by: DaleReid on May 02, 2018, 07:15:14 PM
Is this for those programs with plot data pulled from Google Maps, or ALL users, whether you just are zoomed in to a view or location, say with doing a google search, getting a diner's address and a pin on a map where the location is, for example?

I know lots of folks who just use their cellphones, and a map pops up many times a day.  To think that they all are going to apply for an API key and use it (it took me an hour to figure out how to get one) they are going to loose a lot of folks using Google maps.

On the other hand, I'm not sure what I got a Google key for.  How do I find out where it is used or just wait till things stop working?

I use Blitzortung, and I think that has google maps display.  I have TOA lightning, too, and don't know if that uses a key, I doubt it since I think I just set up and used it. 

I read their little discussion, and there is no way I will link a charge card, without having some option of being notified I'm about to be charge, and the option to not go forward.  It's like dad and mom finding out their minutes used (before unlimited plans) were far exceeding the amount they were entitled to when they got the $500 bill for last month when junior was romancing his new sweetheart.

This is very strange. 
Title: Re: Google API billing
Post by: Jasiu on May 02, 2018, 07:41:12 PM
The key is needed by the developer of the web site, app, etc.  It isn't the end user that does this or has to pay.

For example, if you are using the Saratoga template and use the NWS alerts code, look in nws-alerts-config.php.  There is a variable called $googleAPI which is where the API key goes. That is then used in the javascript Google API code in nws-alerts-details-inc.php. Essentially, it will have to be included in the request for the map in the code to operate successfully.

Ken's code already checks to see if a properly formatted key is in $googleAPI and, if not, it does not attempt to pull in the map.
Title: Re: Google API billing
Post by: Jasiu on May 02, 2018, 07:44:07 PM
Also wanted to note that this issue is why Weather Underground changed from using Google to using Mapbox / OpenStreetMap for Wundermap. They obviously get a lot more traffic than I do.  8-)
Title: Re: Google API billing
Post by: DaleReid on May 02, 2018, 07:54:19 PM
Thank you, that extra explanation goes a long way to my understanding this.  Hat's off to the developers who obviously know this stuff VERY well.
Title: Re: Google API billing
Post by: 92merc on May 03, 2018, 08:59:51 AM
I received the email as well yesterday.  My Plains Weather Network also uses the API.  I guess I'll have to put a card in as well.  I'm easily under the $200 mark as well.
Title: Re: Google API billing
Post by: yamiacaveman on May 03, 2018, 09:24:59 PM
I did follow some of the links from google but did not look at this is in great deal. I did not yet get to the place where my google letter explains how I am "way under" and should not have to worry about a 200.00 charge.

So does anyone know once you give a credit card is there a way to stop access or limit access so you will never reach the 200.00???  I mean is it based on the amount of hits your site takes with google maps? If so to me it's a pretty bad plan. I mean if it's base on hits or usage, come June I could go on anyone's site using google maps, keep clicking on that map and create a very hefty bill for some one. But I might be way out of line here cause I really did't look into yet.

Did or does anyone understand how this all works??
Title: Re: Google API billing
Post by: Jasiu on May 07, 2018, 10:18:57 AM
I've been doing some experimenting with Mapbox and it looks like a very feasible replacement for google for alert maps. You still need an API key but no credit card on file. As far as I can tell from the documentation, if you go beyond the freebie volume, the user experience just degrades.

The basics:

The Google code that defines a map looks like this:

Code: [Select]
<script>
function initMap() {
             var map = new google.maps.Map(document.getElementById('map'), {
               zoom: 8,
               center: {lat: 42.15, lng: -71.7},
               mapTypeId: 'roadmap'
             });
</script>
<script async defer
            src="https://maps.googleapis.com/maps/api/js?key=your key&callback=initMap">
</script>


For Mapbox, it looks like this:

Code: [Select]
<script>
mapboxgl.accessToken = 'your key';
             var map = new mapboxgl.Map({
               container: 'map',
               style: 'mapbox://styles/mapbox/streets-v10',
               center: [-71.7, 42.15],
               zoom: 6.5
             });
</script>

Adding polygons with Google:

Code: [Select]
var polyc0 = [
{lat: FIRST LATITUDE POINT, long: FIRST LONGITUDE POINT},
  ... etc ...
]

var mapoly0 = new google.maps.Polygon({
      paths: polyc0,
      strokeColor: "COLOR",
      strokeOpacity: OPACITY,
      strokeWeight: "WEIGHT",
      fillColor: "FILL COLOR",
      fillOpacity: FILL OPACITY
    });
 mapoly0.setMap(map);

Adding polygons with Mapbox:

Code: [Select]
map.on('load', function() {
  map.addLayer({
    'id': 'poly0 ',
    'type': 'fill',
    'source': {
      'type': 'geojson',
      'data': {
        'type': 'Feature',
        'geometry': {
          'type': 'Polygon',
          'coordinates': [ [
[FIRST LONGITUDE POINT, FIRST LATITUDE POINT],
 ... etc ...
] ]
          }
        }
      },
    'layout': {},
    'paint': {
      'fill-color': 'FILL COLOR',
      'fill-opacity': FILL OPACITY
    }
  });
  // more map.addLayer definitions can go here
});

There doesn't seem to be a way to get a different stroke color for the boundary without adding another polygon layer, but the alerts code uses the same color for the stroke and fill anyway.

I recently did a lot of additions to the alert code on my site to include maps even when there is no polygon in the NWS alert (using geocode definitions of counties and zones) so my code is far afield from the base Saratoga. However, I'd be willing to help someone get this running with the base code if Ken and the rest of us (especially Ken) think this is a good way to go.

My Mapbox stuff is still in my sandbox but when I take it live I can let you all know if you'd like to see it in action (although the weather here is supposed to be nice and boring this week).
Title: Re: Google API billing
Post by: saratogaWX on May 07, 2018, 11:12:00 AM
I'm back from the cruise and looking at converting all my Google Map scripts to use Leaflet/OpenStreetMap in the near future.  It should be done well before the June, 2018 Google implementation date.  That would cover quake-json.php, global-map.php, mesonet-map.php, nws-alerts.php and radio.php scripts.  I'm working on the quake-json.php script right now.
Title: Re: Google API billing
Post by: Jasiu on May 07, 2018, 11:42:56 AM
Awesome!
Title: Re: Google API billing
Post by: 92merc on May 07, 2018, 11:48:07 AM
I'm guessing Blitzortung is going to have to do a major re-work.  Looks like he's on Google.  I'm sure that site gets more hits than any of our smaller sites do.
Title: Re: Google API billing
Post by: mikeym2m on May 07, 2018, 12:13:44 PM
Sounds Great Ken - thanks!

 :grin:

MikeyM
Title: Re: Google API billing
Post by: yamiacaveman on May 07, 2018, 01:34:06 PM
Yes! Thanks Ken!!!
Title: Re: Google API billing
Post by: gwwilk on May 07, 2018, 10:42:59 PM
Looking forward to the changes.  Thanks, Ken!
Title: Re: Google API billing
Post by: Jasiu on May 08, 2018, 08:04:59 AM
I did side-by-side comparison tests and have to say Leaflet is a far superior choice over Mapbox. Rendering speed is comparable to Google. Mapbox is slooooooooooow.

I like the API better also and it is well documented.

Good call, Ken!
Title: Re: Google API billing
Post by: saratogaWX on May 08, 2018, 12:05:34 PM
Leaflet JS library allows you to use many different map tile providers (like Mapbox or thunderforest.com), and including OpenStreetMaps.

My current work on quake-json.php uses Leaflet/OpenStreetMaps for display, and I must admit, it is very much faster than Google AND easier to use.  There's a really nice clustering plugin and the Marker has a built-in label property.   Here's what my sample code looks like with Leaflet/OpenStreetMaps in the current development phase.

I did that conversion in about 6 hours, and it doesn't require an API key for map use (bonus).  I need to add the ability to use other map tile providers (and their API key info), then the script should be completed .. it will be a replacement for the current quake-json script set.
Title: Re: Google API billing
Post by: spweather on May 08, 2018, 12:39:58 PM
Thank you, Ken!

Dennis
Title: Re: Google API billing
Post by: saratogaWX on May 10, 2018, 06:26:17 PM
Ok, Version 3.00 - 10-May-2018 of the quake-json scripts has been released.

It replaces the Google map with a Leaflet/OpenStreetMaps+other tile providers map.  5 different tiles are available (4 are https so one is not shown on https sites), and if you acquire a Mapbox.com API key, two additional maps (Terrain3 and Satellite) are also available.

Standalone users: download from the script page (https://saratoga-weather.org/scripts-quake.php#quakePHP)
Template users: use the update tool page (https://saratoga-weather.org/wxtemplates/updates.php) with a query of Base-*,Plugin-*, 10-May-2018

Enjoy!

Best regards,
Ken
Title: Re: Google API billing
Post by: SteveFitz1 on May 10, 2018, 08:01:59 PM
Ken,

I just downloaded the non-template code and it is working. However, when I want to change the default map tile to OSM, no change seems to occur if I do this in quakes.php. I had to change quakes-json.php to get the map tile to change. I noticed your recommendation not to make any customization changes in quakes-json.php, so I'm wondering whether something isn't working correctly, or if I'm just misunderstanding which file to make changes in.

Thanks very much.

Steve
Title: Re: Google API billing
Post by: gwwilk on May 10, 2018, 08:03:12 PM
Fantastic job, Ken!

Here (https://www.gwwilkins.org/wxquake.php) it is on my site.  (I like to see even minor tremors of magnitude 1.5, so there's a longer list than you would see with magnitude 2.0.)

Many thanks. =D&gt; =D&gt; =D&gt;
Title: Re: Google API billing
Post by: Jasiu on May 10, 2018, 09:03:19 PM
I'm a big fan of the "detectRetina" option in Leaflet, although it's only going to matter if you have a retina display. Here are without and with screenshots on an iMac with a retina display for a chunk of southern New England.
Title: Re: Google API billing
Post by: saratogaWX on May 10, 2018, 09:39:51 PM
Ken,

I just downloaded the non-template code and it is working. However, when I want to change the default map tile to OSM, no change seems to occur if I do this in quakes.php. I had to change quakes-json.php to get the map tile to change. I noticed your recommendation not to make any customization changes in quakes-json.php, so I'm wondering whether something isn't working correctly, or if I'm just misunderstanding which file to make changes in.

Thanks very much.

Steve
Hmm... that's odd.  In quakes.php script (and wxquake.php for the template) using
Code: [Select]
$setMapProvider = 'OSM';     // OpenStreetMap - no key neededshould set it to Open Street Map as the default page.  I just tried and it worked  :?
Title: Re: Google API billing
Post by: SteveFitz1 on May 10, 2018, 10:11:09 PM
Ken,

Here's my code from quakes.php
Code: [Select]
# $mapProvider = 'Esri_WorldTopoMap'; // ESRI topo map - no key needed
  $setMapProvider = 'OSM';     // OpenStreetMap - no key needed
# $setMapProvider = 'Terrain'; // Terrain map by stamen.com - no key needed
# $setMapProvider = 'OpenTopo'; // OpenTopoMap.com - no key needed
# $setMapProvider = 'Wikimedia'; // Wikimedia map - no key needed
 
#  $mapProvider = 'MapboxSat';  // Map by Mapbox.com - API KEY needed in $setMapboxAPIkey
#  $mapProvider = 'MapboxTer';  // Map by Mapbox.com - API KEY needed in $setMapboxAPIkey

and here's my code from quake-json.php

Code: [Select]
      $mapProvider = 'Esri_WorldTopoMap'; // ESRI topo map - no key needed
//$mapProvider = 'OSM';     // OpenStreetMap - no key needed
//$mapProvider = 'Terrain'; // Terrain map by stamen.com - no key needed
//$mapProvider = 'OpenTopo'; // OpenTopoMap.com - no key needed
//$mapProvider = 'Wikimedia'; // Wikimedia map - no key needed
//
//$mapProvider = 'MapboxSat';  // Maps by Mapbox.com - API KEY needed in $mapboxAPIkey
//$mapProvider = 'MapboxTer';  // Maps by Mapbox.com - API KEY needed in $mapboxAPIkey

I'm still getting the ESRI map. You can see it here http://tylertexasweather.com/quake-json.php (http://tylertexasweather.com/quake-json.php).

Steve
Title: Re: Google API billing
Post by: saratogaWX on May 10, 2018, 11:36:34 PM
Ok, that is strange.  Your quake-json.php does have
Code: [Select]
if (isset($setMapProvider))     { $mapProvider = $setMapProvider; }
so it should honor the selection
Code: [Select]
$setMapProvider = 'OSM';     // OpenStreetMap - no key needed in quakes.php

Title: Re: Google API billing
Post by: Breezy on May 11, 2018, 10:59:42 PM
Nice job Ken ...  \:D/  Great looking script and no Google API :!:

Thank you.  =D&gt;
Title: Re: Google API billing
Post by: zeppline on May 13, 2018, 09:05:28 PM
I downloaded the new earthquake script but I have no maps. Do I have to download something else? Using template.
http://lasvegaswx.com/wxquake.php (http://lasvegaswx.com/wxquake.php) Thanks Joe
Title: Re: Google API billing
Post by: saratogaWX on May 13, 2018, 11:25:33 PM
The map looks fine to me.. You are missing the leaflet.png and leaflet-2x.png files in ajax-images/ directory, but other than that.. it seems to be working.
Title: Re: Google API billing
Post by: zeppline on May 14, 2018, 12:17:05 PM
Thanks loaded to wrong directory. Should it be leaflet.png or layers.png? I loaded layers.
Title: Re: Google API billing
Post by: saratogaWX on May 14, 2018, 12:18:42 PM
My bad.. should be layers.png and layers-2x.png
Title: Re: Google API billing
Post by: zeppline on May 14, 2018, 02:42:32 PM
Thanks. Joe
Title: Re: Google API billing
Post by: zmarfak on May 23, 2018, 05:40:10 PM
Ok, Version 3.00 - 10-May-2018 of the quake-json scripts has been released.

Ken,
thanks for the nice work.

Works like a charm
Title: Re: Google API billing
Post by: saratogaWX on August 12, 2018, 07:57:47 PM
I just posted V4.00 of the global-map script set converted to use Leaflet/OpenStreetMaps -- no API key required :)

Download from the script page (https://saratoga-weather.org/scripts-mesomap.php)

If you had the V2.x version on your site, after you do the configuration/upload, be sure to shift-reload in your browser to clear the cache of the old CSS/JavaScript.  Also note that if you embedded it in your page previously, the method to invoke the script has changed a bit.. see global-map.php (or wxglobal.php) for the example methods.   Also, only the English and Spanish wxglobal-LL.html files were included at this time.. I don't have other examples ready.

Here's the global-map-README.txt
Code: [Select]
This is Version 4.00 of the Regional Affiliated Networks Global map.

This 4.xx version provides for Saratoga template or standalone usage (unlike previous
versions with came in separate template/standalone versions)

This version requires no API keys to operate as it uses Leaflet/OpenStreetMaps
for map tile services instead of the prior Google JavaScript Map API.
Support is also provided for optional Mapbox.com map tiles if you have
acquired a Mapbox Access Token (API key). Two additional maps will be enabled
(Terrain3 and Satellite) with a valid Mapbox Access Token.

Files in the distribution:

global-map-README.txt   (this file)

./MESO-images/*         Image files used by the map display

global-map-settings.php (this file contains ALL the configuration settings for the script set)

global-map.php          (this is a single-page, non-template PHP sample page)


global-map.css          (style sheet for all the above pages)
global-map.js           (common JavaScript routines used by all the global map pages)

global-map-inc.php      (generation script used by wxglobal.php or global-map-sample.php pages)

global-map-lang-inc.php (PHP serialize[d] array of language entries for legend text.
                         NOTE: do NOT edit or modify in any way or the script will break)

global-map-genjs-inc.php (generates the JavaScript to control the Leaflet map)

global-conditions-json.php (common script for getting conditions data from the network hub site)\
  it will update the following file (so make sure permissions on it are 664 if need be):
     global-conditions.json

global-links.php        (script for getting data/links about the regional networks -
  it will update the following files (so make sure permissions on them are 664 if need be):
     member-count.txt
     members-list-inc.html
     network-links-inc.html
     network-list-inc.html

These scripts are used by the wxglobal.php (Saratoga Template):
wxglobal.php            (global map page for V2 or V3 of Saratoga template set)
wxglobal-en.html        (English boilerplate page for V2 or V3 of Saratoga template set)
wxglobal-es.html        (Spanish boilerplate page for V2 or V3 of Saratoga template set)

Configuration for the wxglobal.php or global-map.php pages is in global-map-settings.php
and looks like this:

// ------------- Required settings for global-map.* scripts ----------------------------------------
//
  $lang = 'en';      // default language
  $condIconsDir = './MESO-images/';  // relative directory for pin/cluster/conditions images
  $netLinksPath = './';  // relative path for including the network links files from get-links.php
  //   units-of-measure defaults for display
  $gmTempUOM = 'F';   // units for Temperature ='C' or ='F';
  $gmWindUOM = 'mph'; // units for Wind Speed ='mph', ='km/h', ='m/s', ='kts'
  $gmBaroUOM = 'inHg';// units for Barometer ='inHg', ='hPa', ='mb'
  $gmRainUOM = 'in';  // units for Rain ='in', ='mm'
  //  map settings
  $gmMapCenter = '42.8115,10.8984'; // latitude,longitude for initial map center display (decimal degrees)
  $gmMapZoom = 2; // initial map zoom level 2=world, 10=city;
  $gmClusterRadius = 5;     // default =5 number of pixels difference marker points to cluster
                    // should be number from 5 to 80=max clustering
  $gmProvider = 'Esri_WorldTopoMap'; // ESRI topo map - no key needed
  //$gmProvider = 'OSM';     // OpenStreetMap - no key needed
  //$gmProvider = 'Terrain'; // Terrain map by stamen.com - no key needed
  //$gmProvider = 'OpenTopo'; // OpenTopoMap.com - no key needed
  //$gmProvider = 'Wikimedia'; // Wikimedia map - no key needed
  //
  //$gmProvider = 'MapboxSat';  // Maps by Mapbox.com - API KEY needed in $mapboxAPIkey
  //$gmProvider = 'MapboxTer';  // Maps by Mapbox.com - API KEY needed in $mapboxAPIkey
  $mapboxAPIkey = '--mapbox-API-key--';  // use this for the Access Token (API key) to MapBox

  $gmShowFireDanger = false; // =true; show Fire Danger based on Chandler Burning Index; =false don't show

  $doLinkTarget = true; // =true to add target="_blank" to links in popups
  $doRotatingLegends = true; // =true to do rotating legends, =false for no rotating legends on map
//
//end settings
############################################################################


Adjust the settings as guided by the comments next to each variable to configure your display.

----------------------------------------------------------------------------
Installation:

1) unzip the distribution file (preserving the directory structure) to your document root directory

2) upload the ./MESO-images/ directory and contents.

3) Edit your global-map-settings.php for your desired display configuration and upload.
   Note: if using the Saratoga template set, you can use the following entries in Settings.php
   to specify your settings.  They will OVERRIDE the similar settings inside global-map-settings.php

   $SITE['lang']
   $SITE['gmMapZoom']
   $SITE['gmMapCenter']
   $SITE['gmTempUOM']
   $SITE['gmWindUOM']
   $SITE['gmBaroUOM']
   $SITE['gmRainUOM']
   $SITE['gmShowFireDanger']
   $SITE['gmDoRotatingLegends']
   $SITE['gmDoLinkTarget']
   $SITE['gmProvider']
   $SITE['mapboxAPIkey']
   $SITE['gmClusterRadius']

4) Upload (WITHOUT modifications):
   global-map.css
   global-map.js
   global-map.php
   global-map-inc.php
   global-map-lang-inc.php
   global-map-genjs-inc.php
   global-conditions-json.php
   global-links.php
   wxglobal.php
   wxglobal-en.html
 
and these files (which should be writable by PHP with permissions 664 or 666)
   member-count.txt
   members-list-inc.html
   network-links-inc.html
   network-list-inc.html
   global-conditions.json
   

If using the Saratoga template, you can copy wxglobal-en.html to wxglobal-LL.html to add new language support

Also add to the language-LL.txt entries for

langlookup|Global Station Map|Global Station Map|
langlookup|Global Station Map of Affiliated Weather Networks|Global Station Map of Affiliated Weather Networks|
langlookup|Nets|Nets|
langlookup|Weather, Lightning, WebCam|Weather, Lightning, WebCam|
langlookup|Weather, WebCam, Lightning|Weather, WebCam, Lightning|
langlookup|Weather, Lightning|Weather, Lightning|
langlookup|Weather, WebCam|Weather, WebCam|
langlookup|Weather|Weather|
langlookup|Conditions not available|Conditions not available|
langlookup|Temp|Temp|
langlookup|Hum|Hum|
langlookup|DewPT|DewPT|
langlookup|Baro|Baro|
langlookup|About the Global Map|About the Global Map|
langlookup|Affiliated Regional Weather Networks|Affiliated Regional Weather Networks|

Enjoy!
Title: Re: Google API billing
Post by: gwwilk on August 12, 2018, 09:43:08 PM
I don't use any language translation on my site, Ken, but this is a persistent problem when I try to implement V4.00 of the global-map script set:
Warning: global-map-lang-inc.php is not usable. Upload an unmodified copy from the global-map.zip distribution.

I've not modified this file, and I'm unable to easily find and correct the problem in the script set.
Title: Re: Google API billing
Post by: saratogaWX on August 12, 2018, 09:46:29 PM
You're the second person to experience this.. Hmmm.

Try uploading the global-map-lang-inc.php file in BINARY instead of ASCII and see if that fixes it.  If it doesn't, I'll have to switch to using unserialize(base64_decode(...)) to ensure the character fidelity of the non ISO-8859-1 characters in the file.
Title: Re: Google API billing
Post by: saratogaWX on August 12, 2018, 10:00:12 PM
D'Oh.. I discovered a small issue with the program I'd used to scrape the mesonet-map-lang-LL.txt files and create the single global-map-lang-inc.php script.   Try the attached version (unzipped on your site) and see if that fixes the issue.
And.. be sure to upload that file in BINARY mode (not ASCII mode).

I updated the global-map-V4.00.zip file with this already.
Title: Re: Google API billing
Post by: gwwilk on August 12, 2018, 10:53:05 PM
Bingo!  Thanks, Ken.

It wasn't until I uploaded the file in binary (which resulted in a 1 byte difference) with Filezilla that the script set now works (https://www.gwwilkins.org/wxglobal.php).

Great job, which is much appreciated :!: \:D/ =D&gt; :-)
Title: Re: Google API billing
Post by: saratogaWX on August 12, 2018, 11:54:45 PM
Ok, with several folks having issues due to ASCII v.s. BINARY update (and PHP scripts should be uploaded in ASCII),

I decided to fix that issue by using base64 decode, then unserialize to reconstitute the $L language translation array.
Also fixed an issue with global-map-genjs.php where station links wern't working properly on the popups

you can (with this update) now view  global-map-lang-inc.php?sce=view to see the source, and
global-map-lang-inc.php?sce=dump to see the print_r($L) contents of the $L master language array.

Four scripts changed to 4.01:
global-map-lang-inc.php
global-map-settings.php
global-map-inc.php
global-map-genjs-inc.php

Available on the distribution script page or just the update attached.

Thanks for being sports and testing it out!
Title: Re: Google API billing
Post by: gwwilk on August 13, 2018, 07:36:18 AM
Thanks again, Ken!  Updated files loaded in ASCII and working as intended (https://www.gwwilkins.org/wxglobal.php).