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@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);
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. 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.