DevExtreme v24.2 is now available.

Explore our newest features/capabilities and share your thoughts with us.

Your search did not match any results.

React Map - Providers and Types

The provider property specifies the map provider used: Google Maps (default), Azure Maps, Google Static Maps, or Bing Maps (deprecated).

You can also set the type property to specify desired map type: road, satellite (photographic), or hybrid map.

NOTE

When copying this demo to CodeSandbox, specify your own apiKey for 'azure' and 'google' providers. Our demo keys can be used only on our website.

DevExtreme Accessibility Compliance
DevExtreme component libraries meet a variety of WCAG and Section 508 compliance standards. To assess this demo’s accessibility level, click the Run AXE® Validation button to launch the AXE® web accessibility evaluation tool.
All trademarks or registered trademarks are property of their respective owners. AXE® Terms of Use
The overall accessibility level of your application depends on the Map features used.
Backend API
import React, { useCallback, useState } from 'react'; import Map from 'devextreme-react/map'; import SelectBox from 'devextreme-react/select-box'; import { mapTypes, mapProviders, mapTypeLabel, mapProviderLabel } from './data.ts'; const apiKey = { azure: '6N8zuPkBsnfwniNAJkldM3cUgm3lXg3y9gkIKy59benICnnepK4DJQQJ99AIACYeBjFllM6LAAAgAZMPGFXE', bing: 'Aq3LKP2BOmzWY47TZoT1YdieypN_rB6RY9FqBfx-MDCKjvvWBbT68R51xwbL-AqC', google: 'AIzaSyBIw1-l1otL9v1bY-OR4p9w21l1VLu9L2k', }; const App = () => { const [mapTypeValue, setMapTypeValue] = useState(mapTypes[0].key); const [mapProviderValue, setMapProviderValue] = useState(mapProviders[0].key); const onMapTypeChange = useCallback((value) => { setMapTypeValue(value); }, [setMapTypeValue]); const onMapProviderChange = useCallback((value) => { setMapProviderValue(value); }, [setMapProviderValue]); return ( <div> <Map defaultCenter="40.7061, -73.9969" defaultZoom={14} height={400} width="100%" provider={mapProviderValue} type={mapTypeValue} apiKey={apiKey} > </Map> <div className="options"> <div className="caption">Options</div> <div className="option"> <span>Map Provider</span> <SelectBox value={mapProviderValue} onValueChange={onMapProviderChange} dataSource={mapProviders} inputAttr={mapProviderLabel} displayExpr="name" valueExpr="key" /> </div> <div className="option"> <span>Map Type</span> <SelectBox value={mapTypeValue} onValueChange={onMapTypeChange} dataSource={mapTypes} inputAttr={mapTypeLabel} displayExpr="name" valueExpr="key" /> </div> </div> </div> ); }; export default App;
import React, { useCallback, useState } from 'react'; import Map from 'devextreme-react/map'; import SelectBox from 'devextreme-react/select-box'; import { mapTypes, mapProviders, mapTypeLabel, mapProviderLabel, } from './data.js'; const apiKey = { azure: '6N8zuPkBsnfwniNAJkldM3cUgm3lXg3y9gkIKy59benICnnepK4DJQQJ99AIACYeBjFllM6LAAAgAZMPGFXE', bing: 'Aq3LKP2BOmzWY47TZoT1YdieypN_rB6RY9FqBfx-MDCKjvvWBbT68R51xwbL-AqC', google: 'AIzaSyBIw1-l1otL9v1bY-OR4p9w21l1VLu9L2k', }; const App = () => { const [mapTypeValue, setMapTypeValue] = useState(mapTypes[0].key); const [mapProviderValue, setMapProviderValue] = useState(mapProviders[0].key); const onMapTypeChange = useCallback( (value) => { setMapTypeValue(value); }, [setMapTypeValue], ); const onMapProviderChange = useCallback( (value) => { setMapProviderValue(value); }, [setMapProviderValue], ); return ( <div> <Map defaultCenter="40.7061, -73.9969" defaultZoom={14} height={400} width="100%" provider={mapProviderValue} type={mapTypeValue} apiKey={apiKey} ></Map> <div className="options"> <div className="caption">Options</div> <div className="option"> <span>Map Provider</span> <SelectBox value={mapProviderValue} onValueChange={onMapProviderChange} dataSource={mapProviders} inputAttr={mapProviderLabel} displayExpr="name" valueExpr="key" /> </div> <div className="option"> <span>Map Type</span> <SelectBox value={mapTypeValue} onValueChange={onMapTypeChange} dataSource={mapTypes} inputAttr={mapTypeLabel} displayExpr="name" valueExpr="key" /> </div> </div> </div> ); }; export default App;
import React from 'react'; import ReactDOM from 'react-dom'; import App from './App.tsx'; ReactDOM.render( <App />, document.getElementById('app'), );
import { MapType, MapProvider } from 'devextreme/ui/map'; export const mapTypes: { key: MapType, name: string }[] = [{ key: 'roadmap', name: 'Road Map', }, { key: 'satellite', name: 'Satellite (Photographic) Map', }, { key: 'hybrid', name: 'Hybrid Map', }]; export const mapProviders: { key: MapProvider, name: string }[] = [{ key: 'azure', name: 'Azure', }, { key: 'google', name: 'Google', }, { key: 'bing', name: 'Bing', }]; export const mapTypeLabel = { 'aria-label': 'Map Type' }; export const mapProviderLabel = { 'aria-label': 'Map Provider' };
window.exports = window.exports || {}; window.config = { transpiler: 'ts', typescriptOptions: { module: 'system', emitDecoratorMetadata: true, experimentalDecorators: true, jsx: 'react', }, meta: { 'react': { 'esModule': true, }, 'typescript': { 'exports': 'ts', }, 'devextreme/time_zone_utils.js': { 'esModule': true, }, 'devextreme/localization.js': { 'esModule': true, }, 'devextreme/viz/palette.js': { 'esModule': true, }, 'openai': { 'esModule': true, }, }, paths: { 'npm:': 'https://unpkg.com/', 'bundles:': '../../../../bundles/', 'externals:': '../../../../bundles/externals/', }, defaultExtension: 'js', map: { 'ts': 'npm:plugin-typescript@8.0.0/lib/plugin.js', 'typescript': 'npm:typescript@4.2.4/lib/typescript.js', 'jszip': 'npm:jszip@3.10.1/dist/jszip.min.js', 'react': 'npm:react@17.0.2/umd/react.development.js', 'react-dom': 'npm:react-dom@17.0.2/umd/react-dom.development.js', 'prop-types': 'npm:prop-types/prop-types.js', 'rrule': 'npm:rrule@2.6.4/dist/es5/rrule.js', 'luxon': 'npm:luxon@3.4.4/build/global/luxon.min.js', 'es6-object-assign': 'npm:es6-object-assign', 'devextreme': 'npm:devextreme@24.2.5/cjs', 'devextreme-react': 'npm:devextreme-react@24.2.5/cjs', 'devextreme-quill': 'npm:devextreme-quill@1.7.1/dist/dx-quill.min.js', 'devexpress-diagram': 'npm:devexpress-diagram@2.2.15/dist/dx-diagram.js', 'devexpress-gantt': 'npm:devexpress-gantt@4.1.59/dist/dx-gantt.js', '@devextreme/runtime': 'npm:@devextreme/runtime@3.0.12', 'inferno': 'npm:inferno@7.4.11/dist/inferno.min.js', 'inferno-compat': 'npm:inferno-compat/dist/inferno-compat.min.js', 'inferno-create-element': 'npm:inferno-create-element@7.4.11/dist/inferno-create-element.min.js', 'inferno-dom': 'npm:inferno-dom/dist/inferno-dom.min.js', 'inferno-hydrate': 'npm:inferno-hydrate/dist/inferno-hydrate.min.js', 'inferno-clone-vnode': 'npm:inferno-clone-vnode/dist/inferno-clone-vnode.min.js', 'inferno-create-class': 'npm:inferno-create-class/dist/inferno-create-class.min.js', 'inferno-extras': 'npm:inferno-extras/dist/inferno-extras.min.js', 'devextreme-cldr-data': 'npm:devextreme-cldr-data@1.0.3', // SystemJS plugins 'plugin-babel': 'npm:systemjs-plugin-babel@0.0.25/plugin-babel.js', 'systemjs-babel-build': 'npm:systemjs-plugin-babel@0.0.25/systemjs-babel-browser.js', // Prettier 'prettier/standalone': 'npm:prettier@2.8.8/standalone.js', 'prettier/parser-html': 'npm:prettier@2.8.8/parser-html.js', }, packages: { 'devextreme': { defaultExtension: 'js', }, 'devextreme-react': { main: 'index.js', }, 'devextreme/events/utils': { main: 'index', }, 'devextreme/localization/messages': { format: 'json', defaultExtension: 'json', }, 'devextreme/events': { main: 'index', }, 'es6-object-assign': { main: './index.js', defaultExtension: 'js', }, }, packageConfigPaths: [ 'npm:@devextreme/*/package.json', 'npm:@devextreme/runtime@3.0.12/inferno/package.json', ], babelOptions: { sourceMaps: false, stage0: true, react: true, }, }; System.config(window.config);
import React from 'react'; import ReactDOM from 'react-dom'; import App from './App.js'; ReactDOM.render(<App />, document.getElementById('app'));
export const mapTypes = [ { key: 'roadmap', name: 'Road Map', }, { key: 'satellite', name: 'Satellite (Photographic) Map', }, { key: 'hybrid', name: 'Hybrid Map', }, ]; export const mapProviders = [ { key: 'azure', name: 'Azure', }, { key: 'google', name: 'Google', }, { key: 'bing', name: 'Bing', }, ]; export const mapTypeLabel = { 'aria-label': 'Map Type' }; export const mapProviderLabel = { 'aria-label': 'Map Provider' };
<!DOCTYPE html> <html lang="en"> <head> <title>DevExtreme Demo</title> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=5.0" /> <link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/24.2.5/css/dx.light.css" /> <link rel="stylesheet" type="text/css" href="styles.css" /> <script src="https://unpkg.com/core-js@2.6.12/client/shim.min.js"></script> <script src="https://unpkg.com/systemjs@0.21.3/dist/system.js"></script> <script type="text/javascript" src="config.js"></script> <script type="text/javascript"> System.import("./index.tsx"); </script> </head> <body class="dx-viewport"> <div class="demo-container"> <div id="app"></div> </div> </body> </html>
.options { padding: 20px; background-color: rgba(191, 191, 191, 0.15); margin-top: 20px; } .caption { font-size: 18px; font-weight: 500; } .option { margin-top: 10px; display: flex; align-items: center; } .option > span { display: inline-block; width: 100px; } .option > .dx-selectbox { width: 100%; max-width: 350px; display: inline-block; vertical-align: middle; }
NOTE

On May 21, 2024, Microsoft announced that Bing Maps for Enterprise and its API will be discontinued. Moving forward, Azure Maps will be Microsoft’s unified enterprise mapping platform.

If you have an existing Bing Maps for Enterprise license, you can continue using Bing alongside our Map component until support ends. You need to transition to a new API before June 30, 2025 (free and basic license) or before June 30, 2028 (enterprise license).

The last date you can get a new Bing Maps for Enterprise license is June 30, 2024. If you do not have an existing license after this date, you can only use other map providers supported by our controls: Azure, Google, and Google Static.