diff --git a/samples/dds-region-viewer/README.md b/samples/dds-region-viewer/README.md
new file mode 100644
index 00000000..4675fed5
--- /dev/null
+++ b/samples/dds-region-viewer/README.md
@@ -0,0 +1,63 @@
+# Google Maps JavaScript Sample
+
+The Region Viewer lets you view all types of boundaries for every supported region.
+It is intended as a utility rather than a direct code demonstration.
+
+## Run the conversion scripts
+
+The Region Viewer relies on Google-provided JSON coverage data files to populate
+its menus. The Coverage data is periodically updated. Authors can generate new
+coverage data from CSV files using the Python scripts located in `/scripts`.
+
+The conversion scripts have specific sorting requirements for the input CSV files:
+
+- `csv_to_html.py` requires the CSV to be sorted by the "Country Code" column. Used
+to generate the HTML table for the documentation page.
+- `csv_to_json.py` requires the CSV to be sorted by the "Country Name En" column.
+Used to generate JSON data for menu logic.
+
+To update coverage data:
+
+1. Update the CSV files with ones containing the latest data.
+2. From the `samples/dds-region-viewer/` folder, run the following commands:
+
+ ```bash
+ python3 scripts/csv_to_html.py
+ python3 scripts/csv_to_json.py
+ ```
+
+## Setup
+
+### Before starting run:
+
+`npm i`
+
+### Run an example on a local web server
+
+`cd samples/dds-region-viewer`
+`npm start`
+
+### Build an individual example
+
+`cd samples/dds-region-viewer`
+`npm run build`
+
+From 'samples':
+
+`npm run build --workspace=dds-region-viewer/`
+
+### Build all of the examples.
+
+From 'samples':
+
+`npm run build-all`
+
+### Run lint to check for problems
+
+`cd samples/dds-region-viewer`
+`npx eslint index.ts`
+
+## Feedback
+
+For feedback related to this sample, please open a new issue on
+[GitHub](https://github.com/googlemaps-samples/js-api-samples/issues).
diff --git a/samples/dds-region-viewer/index.html b/samples/dds-region-viewer/index.html
new file mode 100644
index 00000000..8f9effd9
--- /dev/null
+++ b/samples/dds-region-viewer/index.html
@@ -0,0 +1,90 @@
+
+
+
+
+
+ Region Coverage Viewer
+
+
+
+
+
+
+
+
+
+
+
Region Coverage Viewer
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/samples/dds-region-viewer/index.ts b/samples/dds-region-viewer/index.ts
new file mode 100644
index 00000000..a403aa27
--- /dev/null
+++ b/samples/dds-region-viewer/index.ts
@@ -0,0 +1,455 @@
+/**
+ * @license
+ * Copyright 2025 Google LLC. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/**
+ * Data-driven styling region coverage viewer!
+ * - View feature boundary availability around the world.
+ * - Set color for fill and stroke of feature polygons.
+ */
+
+// [START maps_dds_region_viewer]
+const mapElement = document.querySelector('gmp-map') as google.maps.MapElement;
+let placeAutocomplete;
+let innerMap;
+let countryMenu: HTMLSelectElement;
+let featureMenu: HTMLSelectElement;
+let searchInputOption: HTMLInputElement;
+let fillColorPicker: HTMLInputElement;
+let strokeColorPicker: HTMLInputElement;
+let contentDiv: HTMLElement;
+
+let allLayers;
+let countryLayer;
+let admin1Layer;
+let admin2Layer;
+let localityLayer;
+let postalCodeLayer;
+let schoolDistrictLayer;
+
+let selectedPlaceId: string;
+
+import * as countries from './src/countries.json';
+
+async function initMap() {
+ (await google.maps.importLibrary('maps')) as google.maps.MapsLibrary;
+ (await google.maps.importLibrary('places')) as google.maps.PlacesLibrary;
+ (await google.maps.importLibrary('marker')) as google.maps.MarkerLibrary;
+
+ // Get the inner map.
+ innerMap = mapElement.innerMap;
+ innerMap.setOptions({
+ mapTypeControl: false,
+ });
+
+ // Create the Place Autocomplete widget.
+ placeAutocomplete = document.querySelector(
+ 'gmp-place-autocomplete'
+ ) as google.maps.places.PlaceAutocompleteElement;
+ placeAutocomplete.includedPrimaryTypes = ['(regions)'];
+
+ contentDiv = document.getElementById('pac-content') as HTMLElement;
+ searchInputOption = document.getElementById(
+ 'pac-filter-option'
+ ) as HTMLInputElement;
+ countryMenu = document.getElementById(
+ 'country-select'
+ ) as HTMLSelectElement;
+ featureMenu = document.getElementById(
+ 'feature-type-select'
+ ) as HTMLSelectElement;
+ fillColorPicker = document.getElementById(
+ 'fill-color-picker'
+ ) as HTMLInputElement;
+ strokeColorPicker = document.getElementById(
+ 'stroke-color-picker'
+ ) as HTMLInputElement;
+
+ // Set up input events.
+ countryMenu.addEventListener('change', onCountrySelected);
+ featureMenu.addEventListener('change', featureTypeChanged);
+ fillColorPicker.addEventListener('change', styleChanged);
+ strokeColorPicker.addEventListener('change', styleChanged);
+
+ searchInputOption.addEventListener('change', () => {
+ if (searchInputOption.checked) {
+ // Do not show school_district since AC cannot use it for filtering.
+ featureMenu.item(5)!.disabled = true;
+ setFeatureType();
+ } else {
+ // Show school districts.
+ featureMenu.item(5)!.disabled = false;
+ setFeatureType();
+ }
+ });
+
+ // Handle autocomplete widget selection.
+ placeAutocomplete.addEventListener(
+ 'gmp-select',
+ async ({ placePrediction }) => {
+ const types = placePrediction.types as string[];
+
+ // Find the first type that matches a feature menu option.
+ const validFeatureTypes = [
+ 'country',
+ 'administrative_area_level_1',
+ 'administrative_area_level_2',
+ 'locality',
+ 'postal_code',
+ 'school_district',
+ ];
+ for (const type of types) {
+ if (validFeatureTypes.includes(type)) {
+ featureMenu.value = type; // Set the menu value directly
+ break; // Use the first matching type found
+ }
+ }
+ setFeatureType(); // Update autocomplete filtering based on new menu selection
+ showSelectedPolygon(placePrediction.placeId, 1);
+ }
+ );
+
+ // Add all the feature layers.
+ countryLayer = innerMap.getFeatureLayer('COUNTRY');
+ admin1Layer = innerMap.getFeatureLayer('ADMINISTRATIVE_AREA_LEVEL_1');
+ admin2Layer = innerMap.getFeatureLayer('ADMINISTRATIVE_AREA_LEVEL_2');
+ localityLayer = innerMap.getFeatureLayer('LOCALITY');
+ postalCodeLayer = innerMap.getFeatureLayer('POSTAL_CODE');
+ schoolDistrictLayer = innerMap.getFeatureLayer('SCHOOL_DISTRICT');
+
+ // Add event listeners for feature layers.
+ countryLayer.addListener('click', handlePlaceClick);
+ admin1Layer.addListener('click', handlePlaceClick);
+ admin2Layer.addListener('click', handlePlaceClick);
+ localityLayer.addListener('click', handlePlaceClick);
+ postalCodeLayer.addListener('click', handlePlaceClick);
+ schoolDistrictLayer.addListener('click', handlePlaceClick);
+
+ // List of all the layers when they get initialized.
+ allLayers = [
+ countryLayer,
+ admin1Layer,
+ admin2Layer,
+ localityLayer,
+ postalCodeLayer,
+ schoolDistrictLayer,
+ ];
+
+ // Init map styles.
+ applyStyle();
+
+ // Set up country and feature menus.
+ buildMenu();
+ onCountrySelected();
+ featureMenu.selectedIndex = 0; // Set to COUNTRY.
+}
+
+// Restyle and make a request when the feature type is changed.
+function featureTypeChanged() {
+ // Style for coloring the outline of the entire feature type.
+ let styleStrokeOnly = /** @type {!google.maps.FeatureStyleOptions} */ {
+ fillColor: 'white',
+ fillOpacity: 0.01,
+ strokeColor: strokeColorPicker.value,
+ strokeOpacity: 1.0,
+ strokeWeight: 2.0,
+ };
+
+ revertStyles();
+ setFeatureType();
+ selectedPlaceId = '';
+ contentDiv.innerHTML = '';
+
+ // Apply the style to the selected feature layer.
+ switch (featureMenu.value) {
+ case 'country':
+ countryLayer.style = styleStrokeOnly;
+ searchInputOption.disabled = false;
+ break;
+ case 'administrative_area_level_1':
+ admin1Layer.style = styleStrokeOnly;
+ searchInputOption.disabled = false;
+ break;
+ case 'administrative_area_level_2':
+ admin2Layer.style = styleStrokeOnly;
+ searchInputOption.disabled = false;
+ break;
+ case 'locality':
+ localityLayer.style = styleStrokeOnly;
+ searchInputOption.disabled = false;
+ break;
+ case 'postal_code':
+ postalCodeLayer.style = styleStrokeOnly;
+ searchInputOption.disabled = false;
+ break;
+ case 'school_district':
+ schoolDistrictLayer.style = styleStrokeOnly;
+ searchInputOption.disabled = true;
+ break;
+ default:
+ break;
+ }
+}
+
+// Toggle autocomplete types based on restrict search checkbox.
+function setFeatureType() {
+ if (searchInputOption.checked) {
+ // Set autocomplete to the selected type.
+ placeAutocomplete.includedPrimaryTypes = [featureMenu.value];
+ } else {
+ // Set autocomplete to return all feature types.
+ placeAutocomplete.includedPrimaryTypes = ['(regions)'];
+ }
+}
+
+// Restyle when the stroke or fill is changed.
+function styleChanged() {
+ if (selectedPlaceId) {
+ applyStyle(selectedPlaceId);
+ }
+}
+
+// Apply styling to a polygon.
+function applyStyle(placeid?) {
+ // Define styles.
+ let styleStrokeOnly = /** @type {!google.maps.FeatureStyleOptions} */ {
+ strokeColor: strokeColorPicker.value,
+ strokeOpacity: 1.0,
+ strokeWeight: 2.0,
+ fillColor: 'white',
+ fillOpacity: 0.1,
+ };
+
+ let styleStrokeFill = /** @type {!google.maps.FeatureStyleOptions} */ {
+ strokeColor: strokeColorPicker.value,
+ strokeOpacity: 1.0,
+ strokeWeight: 2.0,
+ fillColor: fillColorPicker.value,
+ fillOpacity: 0.5,
+ };
+
+ revertStyles();
+
+ const featureStyle = (params) => {
+ if (params.feature.placeId == placeid) {
+ return styleStrokeFill;
+ } else {
+ return styleStrokeOnly;
+ }
+ };
+
+ // Only style the selected feature type.
+ switch (featureMenu.value) {
+ case 'country':
+ countryLayer.style = featureStyle;
+ searchInputOption.disabled = false;
+ break;
+ case 'administrative_area_level_1':
+ admin1Layer.style = featureStyle;
+ searchInputOption.disabled = false;
+ break;
+ case 'administrative_area_level_2':
+ admin2Layer.style = featureStyle;
+ searchInputOption.disabled = false;
+ break;
+ case 'locality':
+ localityLayer.style = featureStyle;
+ searchInputOption.disabled = false;
+ break;
+ case 'postal_code':
+ postalCodeLayer.style = featureStyle;
+ searchInputOption.disabled = false;
+ break;
+ case 'school_district':
+ schoolDistrictLayer.style = featureStyle;
+ searchInputOption.disabled = true;
+ break;
+ default:
+ break;
+ }
+}
+
+// Populate the countries menu.
+function buildMenu() {
+ for (const item of (countries as any).default) {
+ let countryOption = document.createElement('option');
+ countryOption.textContent = item.name;
+ countryOption.value = item.code;
+ // Set U.S. as the default.
+ if (item.code == 'US') {
+ countryOption.selected = true;
+ }
+ countryMenu.appendChild(countryOption);
+ }
+}
+
+// Populate the feature type menu with the supported feature types.
+function onCountrySelected() {
+ // Get the selected value.
+ const selectedCountryCode = countryMenu.value;
+ updateFeatureMenuAvailability(selectedCountryCode);
+
+ // Set the feature list selection to 'country'.
+ featureMenu.namedItem('country')!.selected = true;
+
+ showSelectedCountry(countryMenu.options[countryMenu.selectedIndex].text);
+}
+
+// Enables or disables items in the feature menu based on country support.
+function updateFeatureMenuAvailability(countryCode: string) {
+ const featureAvailabilityMap = getFeatureAvailability(countryCode);
+
+ // Do a comparison on the map, and disable any false items.
+ for (const [feature, isAvailable] of featureAvailabilityMap) {
+ const menuItem = featureMenu.namedItem(feature) as HTMLOptionElement;
+ if (menuItem) menuItem.disabled = !isAvailable;
+ }
+}
+
+// Return a map of feature availability for a country.
+function getFeatureAvailability(countryName) {
+ // Return the data for the selected country.
+ const selectedCountry = (countries as any).default.find((country) => {
+ return country.code === countryName;
+ });
+
+ // Create a map for our values.
+ let featureAvailabilityMap = new Map([
+ ['country', selectedCountry?.feature.country],
+ [
+ 'administrative_area_level_1',
+ selectedCountry?.feature.administrative_area_level_1,
+ ],
+ [
+ 'administrative_area_level_2',
+ selectedCountry?.feature.administrative_area_level_2,
+ ],
+ ['postal_code', selectedCountry?.feature.postal_code],
+ ['locality', selectedCountry?.feature.locality],
+ ['school_district', selectedCountry?.feature.school_district],
+ ]);
+
+ return featureAvailabilityMap;
+}
+
+// Restyle all feature layers to be invisible.
+function revertStyles() {
+ for (const layer of allLayers) {
+ layer.style = null;
+ }
+}
+
+// Apply styling to the clicked place.
+function handlePlaceClick(event) {
+ let clickedPlaceId = event.features[0].placeId;
+ if (!clickedPlaceId) return;
+ showSelectedPolygon(clickedPlaceId, 0);
+}
+
+// Get the place ID for the selected country, then call showSelectedPolygon().
+async function showSelectedCountry(countryName) {
+ const { Place } = (await google.maps.importLibrary(
+ 'places'
+ )) as google.maps.PlacesLibrary;
+
+ contentDiv.textContent = '';
+
+ const request = {
+ textQuery: countryName,
+ fields: ['id'],
+ };
+
+ const { places } = await Place.searchByText(request);
+
+ if (places.length > 0) {
+ showSelectedPolygon(places[0].id, 0);
+ }
+}
+
+// Event handler for when a polygon is selected.
+// mode 0 = click, mode 1 = autocomplete.
+async function showSelectedPolygon(placeid, mode) {
+ let isFeatureSupported;
+ const { Place } = (await google.maps.importLibrary(
+ 'places'
+ )) as google.maps.PlacesLibrary;
+ selectedPlaceId = placeid;
+ contentDiv.textContent = ''; // Clear the info display.
+
+ const place = new Place({
+ id: placeid,
+ });
+
+ await place.fetchFields({
+ fields: [
+ 'displayName',
+ 'formattedAddress',
+ 'viewport',
+ 'types',
+ 'addressComponents',
+ ],
+ });
+
+ // Zoom to the polygon and change the country menu selection.
+ const countryComponent = place.addressComponents?.find((c) =>
+ c.types.includes('country')
+ );
+ if (countryComponent) {
+ countryMenu.value = countryComponent.shortText!;
+ updateFeatureMenuAvailability(countryMenu.value);
+
+ // Check if the selected feature type is supported by the new country.
+ isFeatureSupported = getFeatureAvailability(countryMenu.value).get(
+ featureMenu.value
+ );
+ }
+ var viewport = place.viewport as google.maps.LatLngBounds;
+ innerMap.fitBounds(viewport, 155);
+
+ // Build the HTML.
+ contentDiv.appendChild(document.createElement('hr'));
+
+ const types = place.types as string[];
+
+ // Create HTML for place information.
+ const placeInfo = document.createElement('div');
+ placeInfo.id = 'place-info';
+
+ // Show information if boundary was clicked (mode 0).
+ if (mode == 0) {
+ const boldAddress = document.createElement('b');
+ boldAddress.textContent = place.formattedAddress!;
+ const placeIdCode = document.createElement('code');
+ placeIdCode.textContent = placeid;
+ const featureTypeCode = document.createElement('code');
+ featureTypeCode.textContent = types[0];
+
+ placeInfo.append(boldAddress);
+ placeInfo.append(
+ document.createElement('br'),
+ 'Place ID: ',
+ placeIdCode
+ );
+ placeInfo.append(
+ document.createElement('br'),
+ 'Feature type: ',
+ featureTypeCode
+ );
+ } else {
+ // Display other information if autocomplete was used (mode 1).
+ if (!isFeatureSupported) {
+ placeInfo.textContent = `Feature type (${featureMenu.value}) is not supported for this country.`;
+ } else {
+ placeInfo.textContent = `Click a boundary to see its place ID and feature type.`;
+ }
+ }
+ contentDiv.appendChild(placeInfo);
+
+ // Call the global styling function.
+ applyStyle(placeid);
+}
+
+initMap();
+// [END maps_dds_region_viewer]
diff --git a/samples/dds-region-viewer/package.json b/samples/dds-region-viewer/package.json
new file mode 100644
index 00000000..45361ba3
--- /dev/null
+++ b/samples/dds-region-viewer/package.json
@@ -0,0 +1,14 @@
+{
+ "name": "@js-api-samples/dds-region-viewer",
+ "version": "1.0.0",
+ "scripts": {
+ "build": "tsc && bash ../jsfiddle.sh dds-region-viewer && bash ../app.sh dds-region-viewer && bash ../docs.sh dds-region-viewer && npm run build:vite --workspace=. && bash ../dist.sh dds-region-viewer",
+ "test": "tsc && npm run build:vite --workspace=.",
+ "start": "tsc && vite build --base './' && vite",
+ "build:vite": "vite build --base './'",
+ "preview": "vite preview"
+ },
+ "dependencies": {
+
+ }
+}
diff --git a/samples/dds-region-viewer/scripts/countries-HTML.csv b/samples/dds-region-viewer/scripts/countries-HTML.csv
new file mode 100644
index 00000000..6aac3d3b
--- /dev/null
+++ b/samples/dds-region-viewer/scripts/countries-HTML.csv
@@ -0,0 +1,251 @@
+Country Code,Country Name En,Country,Administrative Area1,Administrative Area2,Administrative Area3,Administrative Area4,Postal Code,Locality,Sublocality1,Neighborhood,School District
+AD,Andorra,INCLUDE,INCLUDE,,,,INCLUDE,,,,
+AE,United Arab Emirates,INCLUDE,,,,,,,,,
+AF,Afghanistan,INCLUDE,INCLUDE,,,,,,,,
+AG,Antigua & Barbuda,INCLUDE,INCLUDE,,,,,,,,
+AI,Anguilla,INCLUDE,,,,,,,,,
+AL,Albania,INCLUDE,INCLUDE,,,,,,,,
+AM,Armenia,INCLUDE,INCLUDE,,,,,,,,
+AO,Angola,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+AQ,Antarctica,INCLUDE,,,,,,,,,
+AR,Argentina,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+AS,American Samoa,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+AT,Austria,INCLUDE,INCLUDE,INCLUDE,INCLUDE,,,,,,
+AU,Australia,INCLUDE,INCLUDE,INCLUDE,,,,INCLUDE,,,
+AW,Aruba,INCLUDE,,,,,,,,,
+AX,Åland Islands,INCLUDE,INCLUDE,,,,,,,,
+AZ,Azerbaijan,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+BA,Bosnia & Herzegovina,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+BB,Barbados,INCLUDE,INCLUDE,,,,,,,,
+BD,Bangladesh,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+BE,Belgium,INCLUDE,INCLUDE,INCLUDE,INCLUDE,,INCLUDE,INCLUDE,,,
+BF,Burkina Faso,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+BG,Bulgaria,INCLUDE,INCLUDE,INCLUDE,,,,INCLUDE,,,
+BH,Bahrain,INCLUDE,INCLUDE,,,,,,,,
+BI,Burundi,INCLUDE,INCLUDE,,,,,,,,
+BJ,Benin,INCLUDE,INCLUDE,,,,,,,,
+BL,St. Barthélemy,INCLUDE,,,,,,,,,
+BM,Bermuda,INCLUDE,INCLUDE,,,,,,,,
+BN,Brunei,INCLUDE,INCLUDE,,,,,,,,
+BO,Bolivia,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+BQ,Caribbean Netherlands,INCLUDE,INCLUDE,,,,,,,,
+BR,Brazil,INCLUDE,INCLUDE,INCLUDE,,INCLUDE,,,,,
+BS,Bahamas,INCLUDE,INCLUDE,,,,,,,,
+BT,Bhutan,INCLUDE,INCLUDE,,,,,,,,
+BV,Bouvet Island,INCLUDE,,,,,,,,,
+BW,Botswana,INCLUDE,INCLUDE,,,,,,,,
+BY,Belarus,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+BZ,Belize,INCLUDE,INCLUDE,,,,,,,,
+CA,Canada,INCLUDE,INCLUDE,,,,,,,,
+CC,Cocos (Keeling) Islands,INCLUDE,INCLUDE,,,,INCLUDE,,,,
+CD,Congo - Kinshasa,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+CF,Central African Republic,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+CG,Congo - Brazzaville,INCLUDE,INCLUDE,,,,,,,,
+CH,Switzerland,INCLUDE,INCLUDE,INCLUDE,,,INCLUDE,,,,
+CI,Côte d’Ivoire,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+CK,Cook Islands,INCLUDE,,,,,,,,,
+CL,Chile,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+CM,Cameroon,INCLUDE,INCLUDE,,,,,,,,
+CN,China,INCLUDE,INCLUDE,,,,,,,,
+CO,Colombia,INCLUDE,INCLUDE,INCLUDE,,,INCLUDE,,,,
+CR,Costa Rica,INCLUDE,INCLUDE,,,,,,,,
+CU,Cuba,INCLUDE,INCLUDE,,,,,,,,
+CV,Cape Verde,INCLUDE,,,,,,,,,
+CW,Curaçao,INCLUDE,,,,,,,,,
+CX,Christmas Island,INCLUDE,,,,,INCLUDE,,,,
+CY,Cyprus,INCLUDE,,,,,,,,,
+CZ,Czechia,INCLUDE,INCLUDE,INCLUDE,,,,INCLUDE,,,
+DE,Germany,INCLUDE,INCLUDE,INCLUDE,INCLUDE,INCLUDE,INCLUDE,INCLUDE,INCLUDE,INCLUDE,
+DJ,Djibouti,INCLUDE,INCLUDE,,,,,,,,
+DK,Denmark,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+DM,Dominica,INCLUDE,INCLUDE,,,,,,,,
+DO,Dominican Republic,INCLUDE,INCLUDE,,,,,,,,
+DZ,Algeria,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+EC,Ecuador,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+EE,Estonia,INCLUDE,INCLUDE,INCLUDE,,,INCLUDE,INCLUDE,,,
+EG,Egypt,INCLUDE,INCLUDE,,,,,,,,
+ER,Eritrea,INCLUDE,INCLUDE,,,,,,,,
+ES,Spain,INCLUDE,INCLUDE,INCLUDE,,,INCLUDE,,,,
+ET,Ethiopia,INCLUDE,INCLUDE,,,,,,,,
+FI,Finland,INCLUDE,INCLUDE,INCLUDE,INCLUDE,,,,,,
+FJ,Fiji,INCLUDE,INCLUDE,,,,,,,,
+FK,Falkland Islands (Islas Malvinas),INCLUDE,,,,,,,,,
+FM,Micronesia,INCLUDE,INCLUDE,,,,,,,,
+FO,Faroe Islands,INCLUDE,INCLUDE,,,,,,,,
+FR,France,INCLUDE,INCLUDE,INCLUDE,INCLUDE,INCLUDE,INCLUDE,INCLUDE,INCLUDE,INCLUDE,
+GA,Gabon,INCLUDE,INCLUDE,,,,,,,,
+GB,United Kingdom,INCLUDE,INCLUDE,INCLUDE,INCLUDE,INCLUDE,,INCLUDE,,INCLUDE,
+GD,Grenada,INCLUDE,INCLUDE,,,,,,,,
+GE,Georgia,INCLUDE,INCLUDE,,,,,,,,
+GF,French Guiana,INCLUDE,INCLUDE,,,,,,,,
+GG,Guernsey,INCLUDE,INCLUDE,,,,,,,,
+GH,Ghana,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+GI,Gibraltar,INCLUDE,,,,,INCLUDE,,,,
+GL,Greenland,INCLUDE,INCLUDE,,,,,,,,
+GM,Gambia,INCLUDE,INCLUDE,,,,,,,,
+GN,Guinea,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+GP,Guadeloupe,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+GQ,Equatorial Guinea,INCLUDE,INCLUDE,,,,,,,,
+GR,Greece,INCLUDE,INCLUDE,INCLUDE,INCLUDE,INCLUDE,,,,,
+GS,South Georgia & South Sandwich Islands,INCLUDE,,,,,INCLUDE,,,,
+GT,Guatemala,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+GU,Guam,INCLUDE,,,,,,,,,
+GW,Guinea-Bissau,INCLUDE,INCLUDE,,,,,,,,
+GY,Guyana,INCLUDE,INCLUDE,,,,,,,,
+HK,Hong Kong,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+HM,Heard & McDonald Islands,INCLUDE,,,,,,,,,
+HN,Honduras,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+HR,Croatia,INCLUDE,INCLUDE,,,,,,,,
+HT,Haiti,INCLUDE,INCLUDE,,,,,,,,
+HU,Hungary,INCLUDE,INCLUDE,INCLUDE,,,,INCLUDE,,,
+IC,Canary Islands,INCLUDE,INCLUDE,,,,,,,,
+ID,Indonesia,INCLUDE,INCLUDE,INCLUDE,INCLUDE,INCLUDE,,,,,
+IE,Ireland,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+IL,Israel,INCLUDE,,,,,,,,,
+IM,Isle of Man,INCLUDE,INCLUDE,,,,,,,,
+IN,India,INCLUDE,INCLUDE,INCLUDE,INCLUDE,INCLUDE,INCLUDE,INCLUDE,,,
+IO,British Indian Ocean Territory,INCLUDE,,,,,,,,,
+IQ,Iraq,INCLUDE,INCLUDE,,,,,,,,
+IR,Iran,INCLUDE,INCLUDE,,,,,,,,
+IS,Iceland,INCLUDE,INCLUDE,,,,INCLUDE,,,,
+IT,Italy,INCLUDE,INCLUDE,INCLUDE,INCLUDE,,INCLUDE,,,,
+JE,Jersey,INCLUDE,INCLUDE,,,,,,,,
+JM,Jamaica,INCLUDE,INCLUDE,,,,,,,,
+JO,Jordan,INCLUDE,INCLUDE,,,,,,,,
+JP,Japan,INCLUDE,INCLUDE,INCLUDE,,,INCLUDE,INCLUDE,INCLUDE,INCLUDE,
+KE,Kenya,INCLUDE,INCLUDE,,,,,,,,
+KG,Kyrgyzstan,INCLUDE,INCLUDE,,,,,,,,
+KH,Cambodia,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+KI,Kiribati,INCLUDE,INCLUDE,,,,,,,,
+KM,Comoros,INCLUDE,INCLUDE,,,,,,,,
+KN,St. Kitts & Nevis,INCLUDE,INCLUDE,,,,,,,,
+KP,North Korea,INCLUDE,INCLUDE,,,,,,,,
+KR,South Korea,INCLUDE,,,,,,,,,
+KW,Kuwait,INCLUDE,INCLUDE,,,,,,,,
+KY,Cayman Islands,INCLUDE,INCLUDE,,,,,,,,
+KZ,Kazakhstan,INCLUDE,INCLUDE,,,,,,,,
+LA,Laos,INCLUDE,INCLUDE,,,,,,,,
+LB,Lebanon,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+LC,St. Lucia,INCLUDE,INCLUDE,,,,,,,,
+LI,Liechtenstein,INCLUDE,INCLUDE,,,,,,,,
+LK,Sri Lanka,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+LR,Liberia,INCLUDE,INCLUDE,,,,,,,,
+LS,Lesotho,INCLUDE,INCLUDE,,,,,,,,
+LT,Lithuania,INCLUDE,INCLUDE,INCLUDE,INCLUDE,,,,,,
+LU,Luxembourg,INCLUDE,INCLUDE,,,,,INCLUDE,,,
+LV,Latvia,INCLUDE,INCLUDE,INCLUDE,,,INCLUDE,,,,
+LY,Libya,INCLUDE,INCLUDE,,,,,,,,
+MA,Morocco,INCLUDE,,,,,,,,,
+MC,Monaco,INCLUDE,,,,,,,,,
+MD,Moldova,INCLUDE,INCLUDE,,,,,,,,
+ME,Montenegro,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+MF,St. Martin,INCLUDE,,,,,INCLUDE,,,,
+MG,Madagascar,INCLUDE,INCLUDE,,,,,,,,
+MH,Marshall Islands,INCLUDE,INCLUDE,,,,,,,,
+MK,North Macedonia,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+ML,Mali,INCLUDE,,,,,,,,,
+MM,Myanmar (Burma),INCLUDE,INCLUDE,INCLUDE,,,,,,,
+MN,Mongolia,INCLUDE,INCLUDE,,,,,,,,
+MO,Macao,INCLUDE,,,,,,,,,
+MP,Northern Mariana Islands,INCLUDE,INCLUDE,,,,INCLUDE,,,,
+MQ,Martinique,INCLUDE,INCLUDE,,,,,,,,
+MR,Mauritania,INCLUDE,INCLUDE,,,,,,,,
+MS,Montserrat,INCLUDE,INCLUDE,,,,,,,,
+MT,Malta,INCLUDE,,,,,,INCLUDE,,,
+MU,Mauritius,INCLUDE,INCLUDE,,,,,,,,
+MV,Maldives,INCLUDE,INCLUDE,,,,,,,,
+MW,Malawi,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+MX,Mexico,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+MY,Malaysia,INCLUDE,INCLUDE,,,,,,,,
+MZ,Mozambique,INCLUDE,INCLUDE,,,,,,,,
+NA,Namibia,INCLUDE,INCLUDE,,,,,,,,
+NC,New Caledonia,INCLUDE,INCLUDE,,,,,,,,
+NE,Niger,INCLUDE,INCLUDE,,,,,,,,
+NF,Norfolk Island,INCLUDE,,,,,,,,,
+NG,Nigeria,INCLUDE,INCLUDE,,,,,,,,
+NI,Nicaragua,INCLUDE,INCLUDE,,,,,,,,
+NL,Netherlands,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+NO,Norway,INCLUDE,INCLUDE,INCLUDE,,,INCLUDE,,,,
+NP,Nepal,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+NR,Nauru,INCLUDE,INCLUDE,,,,,,,,
+NU,Niue,INCLUDE,INCLUDE,,,,,,,,
+NZ,New Zealand,INCLUDE,INCLUDE,INCLUDE,,,,INCLUDE,,,
+OM,Oman,INCLUDE,INCLUDE,,,,,,,,
+PA,Panama,INCLUDE,INCLUDE,,,,,,,,
+PE,Peru,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+PF,French Polynesia,INCLUDE,INCLUDE,,,,,,,,
+PG,Papua New Guinea,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+PH,Philippines,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+PK,Pakistan,INCLUDE,,,,,,,,,
+PL,Poland,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+PM,St. Pierre & Miquelon,INCLUDE,INCLUDE,,,,INCLUDE,,,,
+PN,Pitcairn Islands,INCLUDE,,,,,INCLUDE,,,,
+PR,Puerto Rico,INCLUDE,INCLUDE,,,,INCLUDE,,,,
+PS,Palestine,INCLUDE,,,,,,,,,
+PT,Portugal,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+PW,Palau,INCLUDE,INCLUDE,,,,,,,,
+PY,Paraguay,INCLUDE,INCLUDE,,,,,,,,
+QA,Qatar,INCLUDE,INCLUDE,,,,,,,,
+RE,Réunion,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+RO,Romania,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+RS,Serbia,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+RW,Rwanda,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+SA,Saudi Arabia,INCLUDE,INCLUDE,,,,,,,,
+SB,Solomon Islands,INCLUDE,INCLUDE,,,,,,,,
+SC,Seychelles,INCLUDE,INCLUDE,,,,,,,,
+SD,Sudan,INCLUDE,INCLUDE,,,,,,,,
+SE,Sweden,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+SG,Singapore,INCLUDE,,,,,,,,,
+SH,St. Helena,INCLUDE,INCLUDE,,,,,,,,
+SI,Slovenia,INCLUDE,INCLUDE,INCLUDE,,,INCLUDE,INCLUDE,,,
+SJ,Svalbard & Jan Mayen,INCLUDE,INCLUDE,,,,,,,,
+SK,Slovakia,INCLUDE,INCLUDE,INCLUDE,,,INCLUDE,INCLUDE,,,
+SL,Sierra Leone,INCLUDE,INCLUDE,,,,,,,,
+SM,San Marino,INCLUDE,INCLUDE,,,,,,,,
+SN,Senegal,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+SO,Somalia,INCLUDE,INCLUDE,,,,,,,,
+SR,Suriname,INCLUDE,INCLUDE,,,,,,,,
+SS,South Sudan,INCLUDE,,,,,,,,,
+ST,São Tomé & Príncipe,INCLUDE,INCLUDE,,,,,,,,
+SU,Russia,INCLUDE,INCLUDE,,,,,,,,
+SV,El Salvador,INCLUDE,INCLUDE,,,,,,,,
+SX,Sint Maarten,INCLUDE,INCLUDE,,,,,,,,
+SY,Syria,INCLUDE,INCLUDE,,,,,,,,
+SZ,Eswatini,INCLUDE,INCLUDE,,,,,,,,
+TC,Turks & Caicos Islands,INCLUDE,INCLUDE,,,,INCLUDE,,,,
+TD,Chad,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+TF,French Southern Territories,INCLUDE,,,,,,,,,
+TG,Togo,INCLUDE,INCLUDE,,,,,,,,
+TH,Thailand,INCLUDE,INCLUDE,,,,INCLUDE,INCLUDE,,,
+TJ,Tajikistan,INCLUDE,INCLUDE,,,,,,,,
+TK,Tokelau,INCLUDE,INCLUDE,,,,,,,,
+TL,Timor-Leste,INCLUDE,INCLUDE,,,,,,,,
+TM,Turkmenistan,INCLUDE,INCLUDE,,,,,,,,
+TN,Tunisia,INCLUDE,INCLUDE,,,,,,,,
+TO,Tonga,INCLUDE,INCLUDE,,,,,,,,
+TR,Türkiye,INCLUDE,INCLUDE,,,,,,,,
+TT,Trinidad & Tobago,INCLUDE,INCLUDE,,,,,,,,
+TV,Tuvalu,INCLUDE,INCLUDE,,,,,,,,
+TW,Taiwan,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+TZ,Tanzania,INCLUDE,INCLUDE,,,,,,,,
+UA,Ukraine,INCLUDE,INCLUDE,,,,,,,,
+UG,Uganda,INCLUDE,INCLUDE,,,,,,,,
+UM,U.S. Outlying Islands,INCLUDE,,,,,,,,,
+US,United States,INCLUDE,INCLUDE,INCLUDE,,,INCLUDE,INCLUDE,INCLUDE,INCLUDE,INCLUDE
+UY,Uruguay,INCLUDE,INCLUDE,,,,,,,,
+UZ,Uzbekistan,INCLUDE,INCLUDE,,,,,,,,
+VA,Vatican City,INCLUDE,,,,,,,,,
+VC,St. Vincent & Grenadines,INCLUDE,INCLUDE,,,,,,,,
+VE,Venezuela,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+VG,British Virgin Islands,INCLUDE,INCLUDE,,,,,,,,
+VI,U.S. Virgin Islands,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+VN,Vietnam,INCLUDE,INCLUDE,,,,,,,,
+VU,Vanuatu,INCLUDE,INCLUDE,,,,,,,,
+WF,Wallis & Futuna,INCLUDE,INCLUDE,,,,,,,,
+WS,Samoa,INCLUDE,INCLUDE,,,,,,,,
+XK,Kosovo,INCLUDE,INCLUDE,,,,,,,,
+YE,Yemen,INCLUDE,INCLUDE,,,,,,,,
+YT,Mayotte,INCLUDE,INCLUDE,,,,,,,,
+ZA,South Africa,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+ZM,Zambia,INCLUDE,INCLUDE,,,,,,,,
+ZW,Zimbabwe,INCLUDE,INCLUDE,,,,,,,,
\ No newline at end of file
diff --git a/samples/dds-region-viewer/scripts/countries-JSON.csv b/samples/dds-region-viewer/scripts/countries-JSON.csv
new file mode 100644
index 00000000..7694cd70
--- /dev/null
+++ b/samples/dds-region-viewer/scripts/countries-JSON.csv
@@ -0,0 +1,251 @@
+Country Code,Country Name En,Country,Administrative Area1,Administrative Area2,Administrative Area3,Administrative Area4,Postal Code,Locality,Sublocality1,Neighborhood,School District
+AF,Afghanistan,INCLUDE,INCLUDE,,,,,,,,
+AX,Åland Islands,INCLUDE,INCLUDE,,,,,,,,
+AL,Albania,INCLUDE,INCLUDE,,,,,,,,
+DZ,Algeria,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+AS,American Samoa,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+AD,Andorra,INCLUDE,INCLUDE,,,,INCLUDE,,,,
+AO,Angola,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+AI,Anguilla,INCLUDE,,,,,,,,,
+AQ,Antarctica,INCLUDE,,,,,,,,,
+AG,Antigua & Barbuda,INCLUDE,INCLUDE,,,,,,,,
+AR,Argentina,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+AM,Armenia,INCLUDE,INCLUDE,,,,,,,,
+AW,Aruba,INCLUDE,,,,,,,,,
+AU,Australia,INCLUDE,INCLUDE,INCLUDE,,,,INCLUDE,,,
+AT,Austria,INCLUDE,INCLUDE,INCLUDE,INCLUDE,,,,,,
+AZ,Azerbaijan,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+BS,Bahamas,INCLUDE,INCLUDE,,,,,,,,
+BH,Bahrain,INCLUDE,INCLUDE,,,,,,,,
+BD,Bangladesh,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+BB,Barbados,INCLUDE,INCLUDE,,,,,,,,
+BY,Belarus,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+BE,Belgium,INCLUDE,INCLUDE,INCLUDE,INCLUDE,,INCLUDE,INCLUDE,,,
+BZ,Belize,INCLUDE,INCLUDE,,,,,,,,
+BJ,Benin,INCLUDE,INCLUDE,,,,,,,,
+BM,Bermuda,INCLUDE,INCLUDE,,,,,,,,
+BT,Bhutan,INCLUDE,INCLUDE,,,,,,,,
+BO,Bolivia,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+BA,Bosnia & Herzegovina,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+BW,Botswana,INCLUDE,INCLUDE,,,,,,,,
+BV,Bouvet Island,INCLUDE,,,,,,,,,
+BR,Brazil,INCLUDE,INCLUDE,INCLUDE,,INCLUDE,,,,,
+IO,British Indian Ocean Territory,INCLUDE,,,,,,,,,
+VG,British Virgin Islands,INCLUDE,INCLUDE,,,,,,,,
+BN,Brunei,INCLUDE,INCLUDE,,,,,,,,
+BG,Bulgaria,INCLUDE,INCLUDE,INCLUDE,,,,INCLUDE,,,
+BF,Burkina Faso,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+BI,Burundi,INCLUDE,INCLUDE,,,,,,,,
+KH,Cambodia,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+CM,Cameroon,INCLUDE,INCLUDE,,,,,,,,
+CA,Canada,INCLUDE,INCLUDE,,,,,,,,
+IC,Canary Islands,INCLUDE,INCLUDE,,,,,,,,
+CV,Cape Verde,INCLUDE,,,,,,,,,
+BQ,Caribbean Netherlands,INCLUDE,INCLUDE,,,,,,,,
+KY,Cayman Islands,INCLUDE,INCLUDE,,,,,,,,
+CF,Central African Republic,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+TD,Chad,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+CL,Chile,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+CN,China,INCLUDE,INCLUDE,,,,,,,,
+CX,Christmas Island,INCLUDE,,,,,INCLUDE,,,,
+CC,Cocos (Keeling) Islands,INCLUDE,INCLUDE,,,,INCLUDE,,,,
+CO,Colombia,INCLUDE,INCLUDE,INCLUDE,,,INCLUDE,,,,
+KM,Comoros,INCLUDE,INCLUDE,,,,,,,,
+CG,Congo - Brazzaville,INCLUDE,INCLUDE,,,,,,,,
+CD,Congo - Kinshasa,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+CK,Cook Islands,INCLUDE,,,,,,,,,
+CR,Costa Rica,INCLUDE,INCLUDE,,,,,,,,
+CI,Côte d’Ivoire,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+HR,Croatia,INCLUDE,INCLUDE,,,,,,,,
+CU,Cuba,INCLUDE,INCLUDE,,,,,,,,
+CW,Curaçao,INCLUDE,,,,,,,,,
+CY,Cyprus,INCLUDE,,,,,,,,,
+CZ,Czechia,INCLUDE,INCLUDE,INCLUDE,,,,INCLUDE,,,
+DK,Denmark,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+DJ,Djibouti,INCLUDE,INCLUDE,,,,,,,,
+DM,Dominica,INCLUDE,INCLUDE,,,,,,,,
+DO,Dominican Republic,INCLUDE,INCLUDE,,,,,,,,
+EC,Ecuador,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+EG,Egypt,INCLUDE,INCLUDE,,,,,,,,
+SV,El Salvador,INCLUDE,INCLUDE,,,,,,,,
+GQ,Equatorial Guinea,INCLUDE,INCLUDE,,,,,,,,
+ER,Eritrea,INCLUDE,INCLUDE,,,,,,,,
+EE,Estonia,INCLUDE,INCLUDE,INCLUDE,,,INCLUDE,INCLUDE,,,
+SZ,Eswatini,INCLUDE,INCLUDE,,,,,,,,
+ET,Ethiopia,INCLUDE,INCLUDE,,,,,,,,
+FK,Falkland Islands (Islas Malvinas),INCLUDE,,,,,,,,,
+FO,Faroe Islands,INCLUDE,INCLUDE,,,,,,,,
+FJ,Fiji,INCLUDE,INCLUDE,,,,,,,,
+FI,Finland,INCLUDE,INCLUDE,INCLUDE,INCLUDE,,,,,,
+FR,France,INCLUDE,INCLUDE,INCLUDE,INCLUDE,INCLUDE,INCLUDE,INCLUDE,INCLUDE,INCLUDE,
+GF,French Guiana,INCLUDE,INCLUDE,,,,,,,,
+PF,French Polynesia,INCLUDE,INCLUDE,,,,,,,,
+TF,French Southern Territories,INCLUDE,,,,,,,,,
+GA,Gabon,INCLUDE,INCLUDE,,,,,,,,
+GM,Gambia,INCLUDE,INCLUDE,,,,,,,,
+GE,Georgia,INCLUDE,INCLUDE,,,,,,,,
+DE,Germany,INCLUDE,INCLUDE,INCLUDE,INCLUDE,INCLUDE,INCLUDE,INCLUDE,INCLUDE,INCLUDE,
+GH,Ghana,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+GI,Gibraltar,INCLUDE,,,,,INCLUDE,,,,
+GR,Greece,INCLUDE,INCLUDE,INCLUDE,INCLUDE,INCLUDE,,,,,
+GL,Greenland,INCLUDE,INCLUDE,,,,,,,,
+GD,Grenada,INCLUDE,INCLUDE,,,,,,,,
+GP,Guadeloupe,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+GU,Guam,INCLUDE,,,,,,,,,
+GT,Guatemala,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+GG,Guernsey,INCLUDE,INCLUDE,,,,,,,,
+GN,Guinea,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+GW,Guinea-Bissau,INCLUDE,INCLUDE,,,,,,,,
+GY,Guyana,INCLUDE,INCLUDE,,,,,,,,
+HT,Haiti,INCLUDE,INCLUDE,,,,,,,,
+HM,Heard & McDonald Islands,INCLUDE,,,,,,,,,
+HN,Honduras,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+HK,Hong Kong,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+HU,Hungary,INCLUDE,INCLUDE,INCLUDE,,,,INCLUDE,,,
+IS,Iceland,INCLUDE,INCLUDE,,,,INCLUDE,,,,
+IN,India,INCLUDE,INCLUDE,INCLUDE,INCLUDE,INCLUDE,INCLUDE,INCLUDE,,,
+ID,Indonesia,INCLUDE,INCLUDE,INCLUDE,INCLUDE,INCLUDE,,,,,
+IR,Iran,INCLUDE,INCLUDE,,,,,,,,
+IQ,Iraq,INCLUDE,INCLUDE,,,,,,,,
+IE,Ireland,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+IM,Isle of Man,INCLUDE,INCLUDE,,,,,,,,
+IL,Israel,INCLUDE,,,,,,,,,
+IT,Italy,INCLUDE,INCLUDE,INCLUDE,INCLUDE,,INCLUDE,,,,
+JM,Jamaica,INCLUDE,INCLUDE,,,,,,,,
+JP,Japan,INCLUDE,INCLUDE,INCLUDE,,,INCLUDE,INCLUDE,INCLUDE,INCLUDE,
+JE,Jersey,INCLUDE,INCLUDE,,,,,,,,
+JO,Jordan,INCLUDE,INCLUDE,,,,,,,,
+KZ,Kazakhstan,INCLUDE,INCLUDE,,,,,,,,
+KE,Kenya,INCLUDE,INCLUDE,,,,,,,,
+KI,Kiribati,INCLUDE,INCLUDE,,,,,,,,
+XK,Kosovo,INCLUDE,INCLUDE,,,,,,,,
+KW,Kuwait,INCLUDE,INCLUDE,,,,,,,,
+KG,Kyrgyzstan,INCLUDE,INCLUDE,,,,,,,,
+LA,Laos,INCLUDE,INCLUDE,,,,,,,,
+LV,Latvia,INCLUDE,INCLUDE,INCLUDE,,,INCLUDE,,,,
+LB,Lebanon,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+LS,Lesotho,INCLUDE,INCLUDE,,,,,,,,
+LR,Liberia,INCLUDE,INCLUDE,,,,,,,,
+LY,Libya,INCLUDE,INCLUDE,,,,,,,,
+LI,Liechtenstein,INCLUDE,INCLUDE,,,,,,,,
+LT,Lithuania,INCLUDE,INCLUDE,INCLUDE,INCLUDE,,,,,,
+LU,Luxembourg,INCLUDE,INCLUDE,,,,,INCLUDE,,,
+MO,Macao,INCLUDE,,,,,,,,,
+MG,Madagascar,INCLUDE,INCLUDE,,,,,,,,
+MW,Malawi,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+MY,Malaysia,INCLUDE,INCLUDE,,,,,,,,
+MV,Maldives,INCLUDE,INCLUDE,,,,,,,,
+ML,Mali,INCLUDE,,,,,,,,,
+MT,Malta,INCLUDE,,,,,,INCLUDE,,,
+MH,Marshall Islands,INCLUDE,INCLUDE,,,,,,,,
+MQ,Martinique,INCLUDE,INCLUDE,,,,,,,,
+MR,Mauritania,INCLUDE,INCLUDE,,,,,,,,
+MU,Mauritius,INCLUDE,INCLUDE,,,,,,,,
+YT,Mayotte,INCLUDE,INCLUDE,,,,,,,,
+MX,Mexico,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+FM,Micronesia,INCLUDE,INCLUDE,,,,,,,,
+MD,Moldova,INCLUDE,INCLUDE,,,,,,,,
+MC,Monaco,INCLUDE,,,,,,,,,
+MN,Mongolia,INCLUDE,INCLUDE,,,,,,,,
+ME,Montenegro,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+MS,Montserrat,INCLUDE,INCLUDE,,,,,,,,
+MA,Morocco,INCLUDE,,,,,,,,,
+MZ,Mozambique,INCLUDE,INCLUDE,,,,,,,,
+MM,Myanmar (Burma),INCLUDE,INCLUDE,INCLUDE,,,,,,,
+NA,Namibia,INCLUDE,INCLUDE,,,,,,,,
+NR,Nauru,INCLUDE,INCLUDE,,,,,,,,
+NP,Nepal,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+NL,Netherlands,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+NC,New Caledonia,INCLUDE,INCLUDE,,,,,,,,
+NZ,New Zealand,INCLUDE,INCLUDE,INCLUDE,,,,INCLUDE,,,
+NI,Nicaragua,INCLUDE,INCLUDE,,,,,,,,
+NE,Niger,INCLUDE,INCLUDE,,,,,,,,
+NG,Nigeria,INCLUDE,INCLUDE,,,,,,,,
+NU,Niue,INCLUDE,INCLUDE,,,,,,,,
+NF,Norfolk Island,INCLUDE,,,,,,,,,
+KP,North Korea,INCLUDE,INCLUDE,,,,,,,,
+MK,North Macedonia,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+MP,Northern Mariana Islands,INCLUDE,INCLUDE,,,,INCLUDE,,,,
+NO,Norway,INCLUDE,INCLUDE,INCLUDE,,,INCLUDE,,,,
+OM,Oman,INCLUDE,INCLUDE,,,,,,,,
+PK,Pakistan,INCLUDE,,,,,,,,,
+PW,Palau,INCLUDE,INCLUDE,,,,,,,,
+PS,Palestine,INCLUDE,,,,,,,,,
+PA,Panama,INCLUDE,INCLUDE,,,,,,,,
+PG,Papua New Guinea,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+PY,Paraguay,INCLUDE,INCLUDE,,,,,,,,
+PE,Peru,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+PH,Philippines,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+PN,Pitcairn Islands,INCLUDE,,,,,INCLUDE,,,,
+PL,Poland,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+PT,Portugal,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+PR,Puerto Rico,INCLUDE,INCLUDE,,,,INCLUDE,,,,
+QA,Qatar,INCLUDE,INCLUDE,,,,,,,,
+RE,Réunion,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+RO,Romania,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+SU,Russia,INCLUDE,INCLUDE,,,,,,,,
+RW,Rwanda,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+WS,Samoa,INCLUDE,INCLUDE,,,,,,,,
+SM,San Marino,INCLUDE,INCLUDE,,,,,,,,
+ST,São Tomé & Príncipe,INCLUDE,INCLUDE,,,,,,,,
+SA,Saudi Arabia,INCLUDE,INCLUDE,,,,,,,,
+SN,Senegal,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+RS,Serbia,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+SC,Seychelles,INCLUDE,INCLUDE,,,,,,,,
+SL,Sierra Leone,INCLUDE,INCLUDE,,,,,,,,
+SG,Singapore,INCLUDE,,,,,,,,,
+SX,Sint Maarten,INCLUDE,INCLUDE,,,,,,,,
+SK,Slovakia,INCLUDE,INCLUDE,INCLUDE,,,INCLUDE,INCLUDE,,,
+SI,Slovenia,INCLUDE,INCLUDE,INCLUDE,,,INCLUDE,INCLUDE,,,
+SB,Solomon Islands,INCLUDE,INCLUDE,,,,,,,,
+SO,Somalia,INCLUDE,INCLUDE,,,,,,,,
+ZA,South Africa,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+GS,South Georgia & South Sandwich Islands,INCLUDE,,,,,INCLUDE,,,,
+KR,South Korea,INCLUDE,,,,,,,,,
+SS,South Sudan,INCLUDE,,,,,,,,,
+ES,Spain,INCLUDE,INCLUDE,INCLUDE,,,INCLUDE,,,,
+LK,Sri Lanka,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+BL,St. Barthélemy,INCLUDE,,,,,,,,,
+SH,St. Helena,INCLUDE,INCLUDE,,,,,,,,
+KN,St. Kitts & Nevis,INCLUDE,INCLUDE,,,,,,,,
+LC,St. Lucia,INCLUDE,INCLUDE,,,,,,,,
+MF,St. Martin,INCLUDE,,,,,INCLUDE,,,,
+PM,St. Pierre & Miquelon,INCLUDE,INCLUDE,,,,INCLUDE,,,,
+VC,St. Vincent & Grenadines,INCLUDE,INCLUDE,,,,,,,,
+SD,Sudan,INCLUDE,INCLUDE,,,,,,,,
+SR,Suriname,INCLUDE,INCLUDE,,,,,,,,
+SJ,Svalbard & Jan Mayen,INCLUDE,INCLUDE,,,,,,,,
+SE,Sweden,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+CH,Switzerland,INCLUDE,INCLUDE,INCLUDE,,,INCLUDE,,,,
+SY,Syria,INCLUDE,INCLUDE,,,,,,,,
+TW,Taiwan,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+TJ,Tajikistan,INCLUDE,INCLUDE,,,,,,,,
+TZ,Tanzania,INCLUDE,INCLUDE,,,,,,,,
+TH,Thailand,INCLUDE,INCLUDE,,,,INCLUDE,INCLUDE,,,
+TL,Timor-Leste,INCLUDE,INCLUDE,,,,,,,,
+TG,Togo,INCLUDE,INCLUDE,,,,,,,,
+TK,Tokelau,INCLUDE,INCLUDE,,,,,,,,
+TO,Tonga,INCLUDE,INCLUDE,,,,,,,,
+TT,Trinidad & Tobago,INCLUDE,INCLUDE,,,,,,,,
+TN,Tunisia,INCLUDE,INCLUDE,,,,,,,,
+TR,Türkiye,INCLUDE,INCLUDE,,,,,,,,
+TM,Turkmenistan,INCLUDE,INCLUDE,,,,,,,,
+TC,Turks & Caicos Islands,INCLUDE,INCLUDE,,,,INCLUDE,,,,
+TV,Tuvalu,INCLUDE,INCLUDE,,,,,,,,
+UM,U.S. Outlying Islands,INCLUDE,,,,,,,,,
+VI,U.S. Virgin Islands,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+UG,Uganda,INCLUDE,INCLUDE,,,,,,,,
+UA,Ukraine,INCLUDE,INCLUDE,,,,,,,,
+AE,United Arab Emirates,INCLUDE,,,,,,,,,
+GB,United Kingdom,INCLUDE,INCLUDE,INCLUDE,INCLUDE,INCLUDE,,INCLUDE,,INCLUDE,
+US,United States,INCLUDE,INCLUDE,INCLUDE,,,INCLUDE,INCLUDE,INCLUDE,INCLUDE,INCLUDE
+UY,Uruguay,INCLUDE,INCLUDE,,,,,,,,
+UZ,Uzbekistan,INCLUDE,INCLUDE,,,,,,,,
+VU,Vanuatu,INCLUDE,INCLUDE,,,,,,,,
+VA,Vatican City,INCLUDE,,,,,,,,,
+VE,Venezuela,INCLUDE,INCLUDE,INCLUDE,,,,,,,
+VN,Vietnam,INCLUDE,INCLUDE,,,,,,,,
+WF,Wallis & Futuna,INCLUDE,INCLUDE,,,,,,,,
+YE,Yemen,INCLUDE,INCLUDE,,,,,,,,
+ZM,Zambia,INCLUDE,INCLUDE,,,,,,,,
+ZW,Zimbabwe,INCLUDE,INCLUDE,,,,,,,,
\ No newline at end of file
diff --git a/samples/dds-region-viewer/scripts/csv_to_html.py b/samples/dds-region-viewer/scripts/csv_to_html.py
new file mode 100644
index 00000000..155d3878
--- /dev/null
+++ b/samples/dds-region-viewer/scripts/csv_to_html.py
@@ -0,0 +1,79 @@
+import csv
+
+table = ""
+tr = ""
+
+file_name = "countries-HTML.csv"
+
+with open(file_name) as file:
+ table += """