HERE 地图可拖动和可编辑的半径几何形状(例如:圆形)
HERE maps draggable & editable radius geoshapes (example : Circle)
我需要帮助来修改此代码以使圆形可拖动山墙和可编辑半径。
示例: 用户应该能够将圆拖动到不同的位置并更改半径。
我不确定是否有任何参数或选项可以传递值来激活此功能,如果有人可以帮助我,那将是非常大的帮助。
提前致谢。
function addCircleToMap(map){
map.addObject(new H.map.Circle(
// The central point of the circle
{lat:36.178699, lng:-115.146171},
// The radius of the circle in meters
1000,
{
style: {
strokeColor: 'rgba(55, 85, 170, 0.6)', // Color of the perimeter
lineWidth: 2,
fillColor: 'rgba(0, 128, 0, 0.7)' // Color of the circle
}
}
));
}
//Step 1: initialize communication with the platform
var platform = new H.service.Platform({
app_id: 'DemoAppId01082013GAL',
app_code: 'AJKnXv84fjrb0KIHawS0Tg',
useCIT: true,
useHTTPS: true
});
var defaultLayers = platform.createDefaultLayers();
//Step 2: initialize a map - this map is centered over las vegas
var map = new H.Map(document.getElementById('map'),
defaultLayers.normal.map,{
center: {lat:36.178699, lng:-115.146171},
zoom: 13
});
//Step 3: make the map interactive
// MapEvents enables the event system
// Behavior implements default interactions for pan/zoom (also on mobile touch environments)
var behavior = new H.mapevents.Behavior(new H.mapevents.MapEvents(map));
// Create the default UI components
var ui = H.ui.UI.createDefault(map, defaultLayers);
// Now use the map as required...
addCircleToMap(map);
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, width=device-width" />
<link rel="stylesheet" type="text/css" href="https://js.cit.api.here.com/v3/3.0/mapsjs-ui.css" />
<script type="text/javascript" src="https://js.cit.api.here.com/v3/3.0/mapsjs-core.js"></script>
<script type="text/javascript" src="https://js.cit.api.here.com/v3/3.0/mapsjs-service.js"></script>
<script type="text/javascript" src="https://js.cit.api.here.com/v3/3.0/mapsjs-ui.js"></script>
<script type="text/javascript" src="https://js.cit.api.here.com/v3/3.0/mapsjs-mapevents.js"></script>
</head>
<body>
<div id="map" style="width: 100%; height: 400px; background: grey" />
</body>
</html>
根据HERE map API,您需要在开始拖动圆形对象时禁用底层地图的默认可拖动性:
map.addEventListener('dragstart', (ev) => {
const target = ev.target;
if (target instanceof H.map.Circle) {
behavior.disable();
}
}, false);
圆拖动时,需要监听拖动事件并移动圆的位置:
map.addEventListener('drag', (ev) => {
const target = ev.target,
pointer = ev.currentPointer;
if (target instanceof H.map.Circle) {
target.setCenter(map.screenToGeo(pointer.viewportX, pointer.viewportY));
}
}, false);
完成拖动后,需要重新启用底层地图的默认可拖动性。
map.addEventListener('dragend', (ev) => {
const target = ev.target;
if (target instanceof H.map.Circle) {
behavior.enable();
}
}, false);
您可以通过在圆形对象上调用 setRadius
来更改圆形半径。
function addCircleToMap(map){
var circle = new H.map.Circle(
new H.geo.Point(36.1786991, -115.146171), //center
1000, // Radius in meters
{
style: {
strokeColor: '#FF0000', // Color of the perimeter
lineWidth: 3,
fillColor: 'rgba(226, 180, 183, 0.5)' // Color of the circle
}
}
);
circle.draggable = true;
map.addObject(circle);
}
//Step 1: initialize communication with the platform
var platform = new H.service.Platform({
app_id: 'DemoAppId01082013GAL',
app_code: 'AJKnXv84fjrb0KIHawS0Tg',
useCIT: true,
useHTTPS: true
});
var defaultLayers = platform.createDefaultLayers();
//Step 2: initialize a map - this map is centered over las vegas
var map = new H.Map(document.getElementById('map'),
defaultLayers.normal.map,{
center: {lat:36.178699, lng:-115.146171},
zoom: 13
});
//Step 3: make the map interactive
// MapEvents enables the event system
// Behavior implements default interactions for pan/zoom (also on mobile touch environments)
var behavior = new H.mapevents.Behavior(new H.mapevents.MapEvents(map));
//Step 4, initilize drag for map objects.
map.addEventListener('dragstart', (ev) => {
const target = ev.target;
if (target instanceof H.map.Circle) {
behavior.disable();
}
}, false);
map.addEventListener('drag', (ev) => {
const target = ev.target,
pointer = ev.currentPointer;
if (target instanceof H.map.Circle) {
target.setCenter(map.screenToGeo(pointer.viewportX, pointer.viewportY));
}
}, false);
map.addEventListener('dragend', (ev) => {
const target = ev.target;
if (target instanceof H.map.Circle) {
behavior.enable();
}
}, false);
// Create the default UI components
var ui = H.ui.UI.createDefault(map, defaultLayers);
// Now use the map as required...
addCircleToMap(map);
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, width=device-width" />
<link rel="stylesheet" type="text/css" href="https://js.cit.api.here.com/v3/3.0/mapsjs-ui.css" />
<script type="text/javascript" src="https://js.cit.api.here.com/v3/3.0/mapsjs-core.js"></script>
<script type="text/javascript" src="https://js.cit.api.here.com/v3/3.0/mapsjs-service.js"></script>
<script type="text/javascript" src="https://js.cit.api.here.com/v3/3.0/mapsjs-ui.js"></script>
<script type="text/javascript" src="https://js.cit.api.here.com/v3/3.0/mapsjs-mapevents.js"></script>
</head>
<body>
<div id="map" style="width: 100%; height: 400px; background: grey" />
</body>
</html>
我需要帮助来修改此代码以使圆形可拖动山墙和可编辑半径。
示例: 用户应该能够将圆拖动到不同的位置并更改半径。
我不确定是否有任何参数或选项可以传递值来激活此功能,如果有人可以帮助我,那将是非常大的帮助。
提前致谢。
function addCircleToMap(map){
map.addObject(new H.map.Circle(
// The central point of the circle
{lat:36.178699, lng:-115.146171},
// The radius of the circle in meters
1000,
{
style: {
strokeColor: 'rgba(55, 85, 170, 0.6)', // Color of the perimeter
lineWidth: 2,
fillColor: 'rgba(0, 128, 0, 0.7)' // Color of the circle
}
}
));
}
//Step 1: initialize communication with the platform
var platform = new H.service.Platform({
app_id: 'DemoAppId01082013GAL',
app_code: 'AJKnXv84fjrb0KIHawS0Tg',
useCIT: true,
useHTTPS: true
});
var defaultLayers = platform.createDefaultLayers();
//Step 2: initialize a map - this map is centered over las vegas
var map = new H.Map(document.getElementById('map'),
defaultLayers.normal.map,{
center: {lat:36.178699, lng:-115.146171},
zoom: 13
});
//Step 3: make the map interactive
// MapEvents enables the event system
// Behavior implements default interactions for pan/zoom (also on mobile touch environments)
var behavior = new H.mapevents.Behavior(new H.mapevents.MapEvents(map));
// Create the default UI components
var ui = H.ui.UI.createDefault(map, defaultLayers);
// Now use the map as required...
addCircleToMap(map);
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, width=device-width" />
<link rel="stylesheet" type="text/css" href="https://js.cit.api.here.com/v3/3.0/mapsjs-ui.css" />
<script type="text/javascript" src="https://js.cit.api.here.com/v3/3.0/mapsjs-core.js"></script>
<script type="text/javascript" src="https://js.cit.api.here.com/v3/3.0/mapsjs-service.js"></script>
<script type="text/javascript" src="https://js.cit.api.here.com/v3/3.0/mapsjs-ui.js"></script>
<script type="text/javascript" src="https://js.cit.api.here.com/v3/3.0/mapsjs-mapevents.js"></script>
</head>
<body>
<div id="map" style="width: 100%; height: 400px; background: grey" />
</body>
</html>
根据HERE map API,您需要在开始拖动圆形对象时禁用底层地图的默认可拖动性:
map.addEventListener('dragstart', (ev) => {
const target = ev.target;
if (target instanceof H.map.Circle) {
behavior.disable();
}
}, false);
圆拖动时,需要监听拖动事件并移动圆的位置:
map.addEventListener('drag', (ev) => {
const target = ev.target,
pointer = ev.currentPointer;
if (target instanceof H.map.Circle) {
target.setCenter(map.screenToGeo(pointer.viewportX, pointer.viewportY));
}
}, false);
完成拖动后,需要重新启用底层地图的默认可拖动性。
map.addEventListener('dragend', (ev) => {
const target = ev.target;
if (target instanceof H.map.Circle) {
behavior.enable();
}
}, false);
您可以通过在圆形对象上调用 setRadius
来更改圆形半径。
function addCircleToMap(map){
var circle = new H.map.Circle(
new H.geo.Point(36.1786991, -115.146171), //center
1000, // Radius in meters
{
style: {
strokeColor: '#FF0000', // Color of the perimeter
lineWidth: 3,
fillColor: 'rgba(226, 180, 183, 0.5)' // Color of the circle
}
}
);
circle.draggable = true;
map.addObject(circle);
}
//Step 1: initialize communication with the platform
var platform = new H.service.Platform({
app_id: 'DemoAppId01082013GAL',
app_code: 'AJKnXv84fjrb0KIHawS0Tg',
useCIT: true,
useHTTPS: true
});
var defaultLayers = platform.createDefaultLayers();
//Step 2: initialize a map - this map is centered over las vegas
var map = new H.Map(document.getElementById('map'),
defaultLayers.normal.map,{
center: {lat:36.178699, lng:-115.146171},
zoom: 13
});
//Step 3: make the map interactive
// MapEvents enables the event system
// Behavior implements default interactions for pan/zoom (also on mobile touch environments)
var behavior = new H.mapevents.Behavior(new H.mapevents.MapEvents(map));
//Step 4, initilize drag for map objects.
map.addEventListener('dragstart', (ev) => {
const target = ev.target;
if (target instanceof H.map.Circle) {
behavior.disable();
}
}, false);
map.addEventListener('drag', (ev) => {
const target = ev.target,
pointer = ev.currentPointer;
if (target instanceof H.map.Circle) {
target.setCenter(map.screenToGeo(pointer.viewportX, pointer.viewportY));
}
}, false);
map.addEventListener('dragend', (ev) => {
const target = ev.target;
if (target instanceof H.map.Circle) {
behavior.enable();
}
}, false);
// Create the default UI components
var ui = H.ui.UI.createDefault(map, defaultLayers);
// Now use the map as required...
addCircleToMap(map);
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, width=device-width" />
<link rel="stylesheet" type="text/css" href="https://js.cit.api.here.com/v3/3.0/mapsjs-ui.css" />
<script type="text/javascript" src="https://js.cit.api.here.com/v3/3.0/mapsjs-core.js"></script>
<script type="text/javascript" src="https://js.cit.api.here.com/v3/3.0/mapsjs-service.js"></script>
<script type="text/javascript" src="https://js.cit.api.here.com/v3/3.0/mapsjs-ui.js"></script>
<script type="text/javascript" src="https://js.cit.api.here.com/v3/3.0/mapsjs-mapevents.js"></script>
</head>
<body>
<div id="map" style="width: 100%; height: 400px; background: grey" />
</body>
</html>