"use strict";(self.webpackChunkdocs_v_2=self.webpackChunkdocs_v_2||[]).push([[7271],{79925:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>i,default:()=>m,frontMatter:()=>o,metadata:()=>l,toc:()=>s});var r=n(83117),a=(n(67294),n(3905));const o={title:"Country Map Tools",hide_title:!0,sidebar_position:1,version:1},i=void 0,l={unversionedId:"miscellaneous/country-map-tools",id:"miscellaneous/country-map-tools",title:"Country Map Tools",description:"The Country Map Visualization",source:"@site/docs/miscellaneous/country-map-tools.mdx",sourceDirName:"miscellaneous",slug:"/miscellaneous/country-map-tools",permalink:"/docs/miscellaneous/country-map-tools",draft:!1,editUrl:"https://github.com/apache/superset/tree/master/docs/docs/miscellaneous/country-map-tools.mdx",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Country Map Tools",hide_title:!0,sidebar_position:1,version:1},sidebar:"tutorialSidebar",previous:{title:"Querying across databases",permalink:"/docs/databases/meta-database"},next:{title:"Timezones",permalink:"/docs/miscellaneous/timezones"}},u={},s=[{value:"The Country Map Visualization",id:"the-country-map-visualization",level:2},{value:"Included Maps",id:"included-maps",level:2},{value:"Adding a New Country",id:"adding-a-new-country",level:2}],p={toc:s},c="wrapper";function m(e){let{components:t,...n}=e;return(0,a.kt)(c,(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"the-country-map-visualization"},"The Country Map Visualization"),(0,a.kt)("p",null,"The Country Map visualization allows you to plot lightweight choropleth maps of\nyour countries by province, states, or other subdivision types. It does not rely\non any third-party map services but would require you to provide the\n",(0,a.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/ISO_3166-2"},"ISO-3166-2")," codes of your country's\ntop-level subdivisions. Comparing to a province or state's full names, the ISO\ncode is less ambiguous and is unique to all regions in the world."),(0,a.kt)("h2",{id:"included-maps"},"Included Maps"),(0,a.kt)("p",null,"The Country Maps visualization already ships with the maps for the following countries:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Belgium"),(0,a.kt)("li",{parentName:"ul"},"Brazil"),(0,a.kt)("li",{parentName:"ul"},"Bulgaria"),(0,a.kt)("li",{parentName:"ul"},"Canada"),(0,a.kt)("li",{parentName:"ul"},"China"),(0,a.kt)("li",{parentName:"ul"},"Egypt"),(0,a.kt)("li",{parentName:"ul"},"France"),(0,a.kt)("li",{parentName:"ul"},"Germany"),(0,a.kt)("li",{parentName:"ul"},"India"),(0,a.kt)("li",{parentName:"ul"},"Iran"),(0,a.kt)("li",{parentName:"ul"},"Italy"),(0,a.kt)("li",{parentName:"ul"},"Japan"),(0,a.kt)("li",{parentName:"ul"},"Korea"),(0,a.kt)("li",{parentName:"ul"},"Liechtenstein"),(0,a.kt)("li",{parentName:"ul"},"Morocco"),(0,a.kt)("li",{parentName:"ul"},"Myanmar"),(0,a.kt)("li",{parentName:"ul"},"Netherlands"),(0,a.kt)("li",{parentName:"ul"},"Portugal"),(0,a.kt)("li",{parentName:"ul"},"Russia"),(0,a.kt)("li",{parentName:"ul"},"Singapore"),(0,a.kt)("li",{parentName:"ul"},"Spain"),(0,a.kt)("li",{parentName:"ul"},"Switzerland"),(0,a.kt)("li",{parentName:"ul"},"Syria"),(0,a.kt)("li",{parentName:"ul"},"Thailand"),(0,a.kt)("li",{parentName:"ul"},"Timorleste"),(0,a.kt)("li",{parentName:"ul"},"Turkey"),(0,a.kt)("li",{parentName:"ul"},"UK"),(0,a.kt)("li",{parentName:"ul"},"Ukraine"),(0,a.kt)("li",{parentName:"ul"},"Uruguay"),(0,a.kt)("li",{parentName:"ul"},"USA"),(0,a.kt)("li",{parentName:"ul"},"Zambia")),(0,a.kt)("h2",{id:"adding-a-new-country"},"Adding a New Country"),(0,a.kt)("p",null,"To add a new country to the list, you'd have to edit files in\n",(0,a.kt)("a",{parentName:"p",href:"https://github.com/apache/superset/tree/master/superset-frontend/plugins/legacy-plugin-chart-country-map"},"@superset-ui/legacy-plugin-chart-country-map"),"."),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Generate a new GeoJSON file for your country following the guide in ",(0,a.kt)("a",{parentName:"li",href:"https://github.com/apache/superset/blob/master/superset-frontend/plugins/legacy-plugin-chart-country-map/scripts/Country%20Map%20GeoJSON%20Generator.ipynb"},"this Jupyter notebook"),"."),(0,a.kt)("li",{parentName:"ol"},"Edit the countries list in ",(0,a.kt)("a",{parentName:"li",href:"https://github.com/apache/superset/blob/master/superset-frontend/plugins/legacy-plugin-chart-country-map/src/countries.ts"},"legacy-plugin-chart-country-map/src/countries.ts"),"."),(0,a.kt)("li",{parentName:"ol"},"Install superset-frontend dependencies: ",(0,a.kt)("inlineCode",{parentName:"li"},"cd superset-frontend && npm install")),(0,a.kt)("li",{parentName:"ol"},"Verify your countries in Superset plugins storybook: ",(0,a.kt)("inlineCode",{parentName:"li"},"npm run plugins:storybook"),"."),(0,a.kt)("li",{parentName:"ol"},"Build and install Superset from source code.")))}m.isMDXComponent=!0},3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>y});var r=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var u=r.createContext({}),s=function(e){var t=r.useContext(u),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=s(e.components);return r.createElement(u.Provider,{value:t},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,u=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),c=s(n),d=a,y=c["".concat(u,".").concat(d)]||c[d]||m[d]||o;return n?r.createElement(y,i(i({ref:t},p),{},{components:n})):r.createElement(y,i({ref:t},p))}));function y(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=d;var l={};for(var u in t)hasOwnProperty.call(t,u)&&(l[u]=t[u]);l.originalType=e,l[c]="string"==typeof e?e:a,i[1]=l;for(var s=2;s<o;s++)i[s]=n[s];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}d.displayName="MDXCreateElement"}}]);