DefinitelyTyped/types/heremaps/heremaps-tests.ts

210 lines
6.2 KiB
TypeScript

// Test file for HERE Maps API for JavaScript Definition file
/**
* EXAMPLE from the HERE Maps API
* Takes a snapshot of the map.
*
* @param {Element} resultContainer Reference to DOM Element to show the captured map area
* @param {H.Map} map Reference to initialized map object
* @param {H.ui.UI} ui Reference to UI component
*/
function capture(resultContainer: HTMLElement, map: H.Map, ui: H.ui.UI) {
// Capturing area of the map is asynchronous, callback function receives HTML5 canvas
// element with desired map area rendered on it.
// We also pass an H.ui.UI reference in order to see the ScaleBar in the output.
// If dimensions are omitted, whole veiw port will be captured
map.capture((canvas: HTMLCanvasElement) => {
if (canvas) {
resultContainer.innerHTML = '';
resultContainer.appendChild(canvas);
} else {
// For example when map is in Panorama mode
resultContainer.innerHTML = 'Capturing is not supported';
}
}, [ui], 50, 50, 500, 200);
}
/**
* Boilerplate map initialization code starts below:
*/
// Step 1: initialize communication with the platform
let platform = new H.service.Platform({
app_id: 'DemoAppId01082013GAL',
app_code: 'AJKnXv84fjrb0KIHawS0Tg',
useHTTPS: true,
useCIT: true
});
let defaultLayers = platform.createDefaultLayers();
let mapContainer = document.getElementById('map');
// Step 2: initialize a map
let map = new H.Map(mapContainer, defaultLayers.normal.map, {
// initial center and zoom level of the map
zoom: 16,
// Champs-Elysees
center: { lat: 48.869145, lng: 2.314298 }
});
// Step 3: make the map interactive
// MapEvents enables the event system
// Behavior implements default interactions for pan/zoom (also on mobile touch environments)
let behavior = new H.mapevents.Behavior(new H.mapevents.MapEvents(map));
// Step 4: Create the default UI
let ui = H.ui.UI.createDefault(map, defaultLayers, 'en-US');
// Step 6: Create "Capture" button and place for showing the captured area
let resultContainer = document.getElementById('panel');
// Create container for the "Capture" button
let containerNode = document.createElement('div');
containerNode.setAttribute('style',
'position:absolute;top:0;left:0;background-color:#fff; padding:10px;');
containerNode.className = 'btn-group';
// Create the "Capture" button
let captureBtn = document.createElement('input');
captureBtn.value = 'Capture';
captureBtn.type = 'button';
captureBtn.className = 'btn btn-sm btn-default';
// Add both button and container to the DOM
containerNode.appendChild(captureBtn);
mapContainer.appendChild(containerNode);
// Step 7: Handle capture button click event
captureBtn.onclick = () => {
capture(resultContainer, map, ui);
};
let icon = new H.map.Icon('svg', { size: 5, crossOrigin: false });
let polyline = new H.map.Polyline(new H.geo.Strip());
// tslint:disable-next-line:array-type
let clipArr: Array<Array<number>>;
clipArr = polyline.clip(new H.geo.Rect(5, 5, 5, 5));
let lineString = new H.geo.LineString();
lineString.pushPoint({ lat: 53.3477, lng: -6.2597 });
lineString.pushPoint({ lat: 51.5008, lng: -0.1224 });
lineString.pushPoint({ lat: 48.8567, lng: 2.3508 });
lineString.pushPoint({ lat: 52.5166, lng: 13.3833 });
lineString.eachLatLngAlt((lat: number, lng: number, alt: number, i: number) => {
console.log(lat, lng, alt, i);
});
lineString.getBounds();
lineString.getPointCount();
lineString.insertPoint(2, { lat: 53.3477, lng: -6.2597 });
lineString.removePoint(2);
let polyline2 = new H.map.Polyline(lineString);
let router = platform.getRoutingService();
let calculateRouteParams = {
waypoint0: 'geo!52.5,13.4',
waypoint1: 'geo!52.5,13.45',
mode: 'fastest;car;traffic:disabled'
};
router.calculateRoute(
calculateRouteParams,
(result) => {
console.log(result.response.route[0]);
},
(error) => {
console.log(error);
}
);
let places = platform.getPlacesService();
let entryPoint = H.service.PlacesService.EntryPoint;
places.request(
entryPoint.SEARCH,
{
at: '52.5044,13.3909',
q: 'pizza'
},
(response) => {
console.log(response);
const items = response.results.items;
places.follow(
items[0].href,
(resp) => {
console.log(resp);
},
(resp) => {
console.log('ERROR: ' + resp);
}
);
},
(error) => {
console.log('ERROR: ' + error);
}
);
let geocoder = platform.getGeocodingService();
let geocodingParams: H.service.ServiceParameters = {
searchText: '425 W Randolph Street, Chicago'
};
geocoder.geocode(
geocodingParams,
(result) => {
console.log(result);
console.log(result.Response.View[0].Result[0].Location.DisplayPosition);
},
(error) => {
console.log(error);
}
);
// deprecated but w/e
let enterprieseRouter = platform.getEnterpriseRoutingService();
let calculateIsoline: H.service.ServiceParameters = {
start: 'geo!52.5,13.4',
distance: '1000,2000',
mode: 'fastest;car;traffic:disabled'
};
enterprieseRouter.calculateIsoline(
calculateIsoline,
(result) => {
console.log(result);
console.log(result.Response.isolines[0]);
},
(error) => {
console.log(error);
}
);
// Create a clustering provider
const clusteredDataProvider = new H.clustering.Provider([], {
clusteringOptions: {
// Maximum radius of the neighborhood
eps: 64,
// minimum weight of points required to form a cluster
minWeight: 3
}
});
// Create a layer that will consume objects from our clustering provider
const layer = new H.map.layer.ObjectLayer(clusteredDataProvider);
const pixelProjection = new H.geo.PixelProjection();
pixelProjection.rescale(12);
const point = pixelProjection.geoToPixel({ lat: 53, lng: 12 });
pixelProjection.xyToGeo(point.x, point.y);
const engine = map.getEngine();
engine.getAnimationDuration();
engine.setAnimationDuration(1000);
engine.getAnimationEase();
engine.setAnimationEase(H.util.animation.ease.EASE_IN_QUAD);
const engineListener = (e: Event) => {
console.log(e);
};
engine.addEventListener('tap', engineListener);
engine.removeEventListener('tap', engineListener);