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 which map provider to use: Google Maps (default), Azure Maps, Google Static Maps, or Bing Maps (deprecated).

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

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@link:../../packages/devextreme/artifacts/npm/devextreme/cjs', 'devextreme-react': 'npm:devextreme-react@link:../../packages/devextreme-react/npm/cjs', 'devextreme-quill': 'npm:devextreme-quill@1.7.1/dist/dx-quill.min.js', 'devexpress-diagram': 'npm:devexpress-diagram@2.2.5/dist/dx-diagram.js', 'devexpress-gantt': 'npm:devexpress-gantt@4.1.54/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.3/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. Azure Maps will be a single unified enterprise mapping platform available from Microsoft.

If you have an existing Bing Maps for Enterprise license, you can continue using Bing for our Map component until its support ends. You need to transition to the 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.