"use strict";(self.webpackChunkdocs_v_2=self.webpackChunkdocs_v_2||[]).push([[4244],{95788:(e,t,n)=>{n.d(t,{Iu:()=>p,yg:()=>g});var r=n(11504);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 i(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 o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(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={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[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):o(o({},t),e)),n},p=function(e){var t=s(e.components);return r.createElement(u.Provider,{value:t},e.children)},c="mdxType",y={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,u=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),c=s(n),m=a,g=c["".concat(u,".").concat(m)]||c[m]||y[m]||i;return n?r.createElement(g,o(o({ref:t},p),{},{components:n})):r.createElement(g,o({ref:t},p))}));function g(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=m;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,o[1]=l;for(var s=2;s<i;s++)o[s]=n[s];return r.createElement.apply(null,o)}return r.createElement.apply(null,n)}m.displayName="MDXCreateElement"},74852:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>o,default:()=>y,frontMatter:()=>i,metadata:()=>l,toc:()=>s});var r=n(45072),a=(n(11504),n(95788));const i={title:"Country Map Tools",hide_title:!0,sidebar_position:1,version:1},o=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/edit/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 y(e){let{components:t,...n}=e;return(0,a.yg)(c,(0,r.c)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.yg)("h2",{id:"the-country-map-visualization"},"The Country Map Visualization"),(0,a.yg)("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.yg)("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.yg)("h2",{id:"included-maps"},"Included Maps"),(0,a.yg)("p",null,"The Country Maps visualization already ships with the maps for the following countries:"),(0,a.yg)("ul",null,(0,a.yg)("li",{parentName:"ul"},"Belgium"),(0,a.yg)("li",{parentName:"ul"},"Brazil"),(0,a.yg)("li",{parentName:"ul"},"Bulgaria"),(0,a.yg)("li",{parentName:"ul"},"Canada"),(0,a.yg)("li",{parentName:"ul"},"China"),(0,a.yg)("li",{parentName:"ul"},"Egypt"),(0,a.yg)("li",{parentName:"ul"},"France"),(0,a.yg)("li",{parentName:"ul"},"Germany"),(0,a.yg)("li",{parentName:"ul"},"India"),(0,a.yg)("li",{parentName:"ul"},"Iran"),(0,a.yg)("li",{parentName:"ul"},"Italy"),(0,a.yg)("li",{parentName:"ul"},"Japan"),(0,a.yg)("li",{parentName:"ul"},"Korea"),(0,a.yg)("li",{parentName:"ul"},"Liechtenstein"),(0,a.yg)("li",{parentName:"ul"},"Morocco"),(0,a.yg)("li",{parentName:"ul"},"Myanmar"),(0,a.yg)("li",{parentName:"ul"},"Netherlands"),(0,a.yg)("li",{parentName:"ul"},"Portugal"),(0,a.yg)("li",{parentName:"ul"},"Russia"),(0,a.yg)("li",{parentName:"ul"},"Singapore"),(0,a.yg)("li",{parentName:"ul"},"Spain"),(0,a.yg)("li",{parentName:"ul"},"Switzerland"),(0,a.yg)("li",{parentName:"ul"},"Syria"),(0,a.yg)("li",{parentName:"ul"},"Thailand"),(0,a.yg)("li",{parentName:"ul"},"Timorleste"),(0,a.yg)("li",{parentName:"ul"},"Turkey"),(0,a.yg)("li",{parentName:"ul"},"UK"),(0,a.yg)("li",{parentName:"ul"},"Ukraine"),(0,a.yg)("li",{parentName:"ul"},"Uruguay"),(0,a.yg)("li",{parentName:"ul"},"USA"),(0,a.yg)("li",{parentName:"ul"},"Zambia")),(0,a.yg)("h2",{id:"adding-a-new-country"},"Adding a New Country"),(0,a.yg)("p",null,"To add a new country to the list, you'd have to edit files in\n",(0,a.yg)("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.yg)("ol",null,(0,a.yg)("li",{parentName:"ol"},"Generate a new GeoJSON file for your country following the guide in ",(0,a.yg)("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.yg)("li",{parentName:"ol"},"Edit the countries list in ",(0,a.yg)("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.yg)("li",{parentName:"ol"},"Install superset-frontend dependencies: ",(0,a.yg)("inlineCode",{parentName:"li"},"cd superset-frontend && npm install")),(0,a.yg)("li",{parentName:"ol"},"Verify your countries in Superset plugins storybook: ",(0,a.yg)("inlineCode",{parentName:"li"},"npm run plugins:storybook"),"."),(0,a.yg)("li",{parentName:"ol"},"Build and install Superset from source code.")))}y.isMDXComponent=!0}}]);