If you have technical questions, please create a support ticket in the DevExpress Support Center.
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;
xxxxxxxxxx
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;
xxxxxxxxxx
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.tsx';
ReactDOM.render(
<App />,
document.getElementById('app'),
);
xxxxxxxxxx
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' };
xxxxxxxxxx
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.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);
xxxxxxxxxx
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.js';
ReactDOM.render(<App />, document.getElementById('app'));
xxxxxxxxxx
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' };
xxxxxxxxxx
<html lang="en">
<head></head>
<body class="dx-viewport">
<div class="demo-container">
<div id="app"></div>
</div>
</body>
</html>
xxxxxxxxxx
.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;
}
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.