- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 SVG 路径作为标记图标,并尝试根据它的前进方向旋转它。图标正确旋转,但一旦图标旋转,我似乎无法对齐标签。有没有办法做到这一点?
如您所见,固定标记 (5060) 没有旋转,因此我可以将标签居中对齐,但是当我根据航向旋转它时,它使用左下角作为 anchor 而不是中心。此外,标签本身不会旋转,只有图像 (1705, 784)。
var ArrowIcon = {
path: path,//SVG path based on status - moving or stationary
fillColor: 'rgb(79, 151, 240)',
labelOrigin: labelOrigin,
//The SVGs are different to scale and shape
//that's why i need different origin for the label
fillOpacity: 1,
scale: scale, //Again because different SVGs
strokeColor: 'white',
strokeWeight: 1,
rotation: rotation,
}
var Marker = new google.maps.Marker({
position: new google.maps.LatLng(Vehicle.Latitude, Vehicle.Longitude),
map: TrackingMap,
title: Vehicle.Name,
label: {text: Vehicle.Name, color: 'white', fontSize: fontSize, fontWeight: 'bold', fontFamily: '"Roboto", sans-serif'},
content: Vehicle.Name,
icon: ArrowIcon,
// anchor: new google.maps.Point(500,500),
// this just moves the whole marker, doesn't affect rotation
});
更新:
工作 JSFiddle例子
最佳答案
要使文本保留在图标上,您需要适本地设置 labelOrigin。对于您的箭头(至少是 fiddle 中的那个),(20,30) 的值对我有用:
var icon = {
path: path,
fillColor: 'rgb(79, 151, 240)',
labelOrigin: new google.maps.Point(25,30), // labelOrigin,
fillOpacity: 1,
scale: scale,
strokeColor: 'white',
strokeWeight: 1,
rotation: rotation,
}
var Marker = new google.maps.Marker({
position: new google.maps.LatLng(Vehicle.Latitude, Vehicle.Longitude),
map: TrackingMap,
title: Vehicle.Name,
label: {
text: Vehicle.Name,
color: 'white',
fontSize: fontSize,
fontWeight: 'bold',
fontFamily: '"Roboto", sans-serif',
labelClass: 'TrackingMapLabel',
background: 'blue'
},
icon: icon,
// anchor: new google.maps.Point(500,500),
});
代码片段:
var VehicleList = [{
Name: "76",
Latitude: 37.020423,
Longitude: -94.534732,
Location: "I-44, Joplin, MO 64804, USA",
ActivityDateTime: "2017-06-26T07:24:09.167",
FullActivity: {
ActivityDateTime: "2017-06-26T07:24:09.167",
Latitude: 37.020423,
Longitude: -94.534732,
GPSValid: true,
OnSiteTime: 4846,
Location: "I-44, Joplin, MO 64804, USA",
IgnitionOn: true,
HDG: 216,
Speed: 111,
EventSubType: "SMDP_EVENT_TIME_OR_DISTANCE",
IncrementalDistance: "9.4",
ODOMeter: "112580.203125",
TripDistance: "135.2",
ReceivedDateTime: "2017-06-26T07:24:04.477",
CustomType: -1,
MaxSpeed: 111,
IsUnauthorised: false,
HDOP: "0.80",
NumSatellites: 11,
CustomDescription: "",
CustomData: "",
OffRoadMetres: 122.90157756779,
DegreesBearing: 61,
LocationType: 1,
NamedArea: "Undefined",
EventPriority: "Low",
Version: 0,
Private: false,
CommunicationChannel: "Cellular",
EventTypeDescription: "Timed Update"
}
}];
var TrackingMap;
var TrackingMapCenter = {
lat: 37.020423,
lng: -94.534732
};
var TrackingMapZoom = 5;
function initTrackingMap() {
TrackingMap = new google.maps.Map(document.getElementById('tracking-map'), {
center: TrackingMapCenter,
zoom: TrackingMapZoom,
mapTypeId: 'hybrid'
});
}
initTrackingMap();
function SetMarkers(VehicleList) {
for (i = 0; i < VehicleList.length; i++) {
Vehicle = VehicleList[i];
var DT = Vehicle.ActivityDateTime;
var Offset = moment(DT).format('ZZ');
Offset = parseInt(Math.abs(Offset.substring(0, Offset.length - 2)));
// console.log(moment(DT).add(Offset ,'h').format('MMM D, HH:mm:ss'));
var Speed = (Vehicle.FullActivity.Speed <= 0) ? 0 : (Vehicle.FullActivity.Speed / 1.60934).toFixed(0);
var Directon = '<i class="fa fa-arrow-up" style="transform: rotate(' + Vehicle.FullActivity.HDG + 'deg); width:15px;margin:2px;" aria-hidden="true"></i>';
var contentString = '<b>Truck# ' + Vehicle.Name + '</b>' + '<br /><i class="fa fa-map-marker" style="width:15px;margin:2px;"></i>' + Vehicle.Location + '<br /><i class="fa fa-clock-o" style="width:15px;margin:2px;"></i>' + moment(DT).subtract(Offset, 'h').format('MMM D, HH:mm:ss') + '<br /><i class="fa fa-comment" style="width:15px;margin:2px;"></i>' + Vehicle.FullActivity.EventTypeDescription + '<br /><i class="fa fa-tachometer" style="width:15px;margin:2px;"></i>' + Speed + ' MPH'
// +'<br />Direction: '+Directon
+
'<br /><div class="input-group" style="max-width: 200px;padding:5px 0;"><input type="text" class="form-control input-sm" placeholder="Get directions"/> <div class="input-group-addon btn-sm" style="cursor: pointer;" onclick="GetDirections_TrackingMap($(this),\'' + Vehicle.Location + '\');">Go!</div></div>';
var infowindow = new google.maps.InfoWindow({
content: contentString
});
var pathArrow = 'M 1.958 11.5 h 33.531 c 0.444 0 0.875 0.151 1.221 0.428 l 17.556 14.045 c 0.978 0.783 0.978 2.271 0 3.053 L 36.71 43.072 c -0.347 0.277 -0.777 0.428 -1.221 0.428 H 1.958 C 0.877 43.5 0 42.623 0 41.542 l 0 -28.084 C 0 12.377 0.877 11.5 1.958 11.5 Z';
var pathArrowScale = 0.6;
var pathCircle = 'M 409.133 109.203 c -19.608 -33.592 -46.205 -60.189 -79.798 -79.796 C 295.736 9.801 259.058 0 219.273 0 c -39.781 0 -76.47 9.801 -110.063 29.407 c -33.595 19.604 -60.192 46.201 -79.8 79.796 C 9.801 142.8 0 179.489 0 219.267 c 0 39.78 9.804 76.463 29.407 110.062 c 19.607 33.592 46.204 60.189 79.799 79.798 c 33.597 19.605 70.283 29.407 110.063 29.407 s 76.47 -9.802 110.065 -29.407 c 33.593 -19.602 60.189 -46.206 79.795 -79.798 c 19.603 -33.596 29.403 -70.284 29.403 -110.062 C 438.533 179.485 428.732 142.795 409.133 109.203 Z';
var pathCircleScale = 0.06;
var pathSquare = 'M 414.41 24.123 C 398.333 8.042 378.963 0 356.315 0 H 82.228 C 59.58 0 40.21 8.042 24.126 24.123 C 8.045 40.207 0.003 59.576 0.003 82.225 v 274.084 c 0 22.647 8.042 42.018 24.123 58.102 c 16.084 16.084 35.454 24.126 58.102 24.126 h 274.084 c 22.648 0 42.018 -8.042 58.095 -24.126 c 16.084 -16.084 24.126 -35.454 24.126 -58.102 V 82.225 C 438.532 59.576 430.49 40.204 414.41 24.123 Z';
var pathSquareScale = 0.06;
var path = (Vehicle.FullActivity.Speed > 0) ? pathArrow : (Vehicle.FullActivity.IgnitionOn) ? pathCircle : pathSquare;
var scale = (Vehicle.FullActivity.Speed > 0) ? pathArrowScale : (Vehicle.FullActivity.IgnitionOn) ? pathCircleScale : pathSquareScale;
var rotation = (Vehicle.FullActivity.Speed > 0) ? -90 + Vehicle.FullActivity.HDG : (Vehicle.FullActivity.IgnitionOn) ? 0 : 0;
var labelOrigin = (Vehicle.FullActivity.Speed > 0) ? new google.maps.Point(0, 0) : (Vehicle.FullActivity.IgnitionOn) ? new google.maps.Point(220, 220) : new google.maps.Point(220, 220);
var fontSize = (Vehicle.FullActivity.Speed > 0) ? '12px' : (Vehicle.FullActivity.IgnitionOn) ? '10px' : '10px';
var icon = {
path: path,
fillColor: 'rgb(79, 151, 240)',
labelOrigin: new google.maps.Point(25, 30), // labelOrigin,
fillOpacity: 1,
scale: scale,
strokeColor: 'white',
strokeWeight: 1,
rotation: rotation,
}
var Marker = new google.maps.Marker({
position: new google.maps.LatLng(Vehicle.Latitude, Vehicle.Longitude),
map: TrackingMap,
title: Vehicle.Name,
label: {
text: Vehicle.Name,
color: 'white',
fontSize: fontSize,
fontWeight: 'bold',
fontFamily: '"Roboto", sans-serif',
labelClass: 'TrackingMapLabel',
background: 'blue'
},
icon: icon,
// anchor: new google.maps.Point(500,500),
});
google.maps.event.addListener(Marker, 'click', (function(Marker, contentString, infowindow) {
return function() {
infowindow.setContent(contentString);
infowindow.open(TrackingMap, Marker);
};
})(Marker, contentString, infowindow));
setInterval(function() {
var icon = Marker.getIcon();
icon.rotation += 10;
icon.rotation %= 360;
Marker.setIcon(icon);
}, 1000);
}
}
SetMarkers(VehicleList);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.js"></script>
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&libraries=places,geometry&language=en®ion=EN"></script>
<div class="google-map " id="tracking-map" style="height: 525px">
</div>
关于javascript - 标记 + 标签旋转 - Google Maps API v3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44763730/
...沮丧。我希望我的游戏仅在横向模式下运行。我已将适当的键/值添加到 Info.plist 文件中,以强制设备方向在启动时正确。 我现在正在尝试旋转 OpenGL 坐标空间以匹配设备的坐标空间。我正
我如何创建一个旋转矩阵,将 X 旋转 a,Y 旋转 b,Z 旋转 c? 我需要公式,除非您使用的是 ardor3d api 的函数/方法。 矩阵是这样设置的 xx, xy, xz, yx, yy, y
假设我有一个包含 3 个 vector 的类(一个用于位置,一个用于缩放,一个用于旋转)我可以使用它们生成一个变换矩阵,该矩阵表示对象在 3D 空间中的位置、旋转和大小。然后我添加对象之间的父/子关系
所以我只是在玩一个小的 javascript 游戏,构建一个 pacman 游戏。你可以在这里看到它:http://codepen.io/acha5066/pen/rOyaPW 不过我对旋转有疑问。你
在我的应用程序中,我有一个 MKMapView,其中显示了多个注释。 map 根据设备的航向旋转。要旋转 map ,请执行以下语句(由方法 locationManager 调用:didUpdateHe
使用此 jquery 插件时:http://code.google.com/p/jqueryrotate/wiki/Documentation我将图像旋转 90 度,无论哪个方向,它们最终都会变得模糊
我有以下代码:CSS: .wrapper { margin:80px auto; width:300px; border:none; } .square { widt
我只想通过小部件的轴移动图像并围绕小部件的中心旋转(就像任何数字绘画软件中的 Canvas ),但它围绕其左顶点旋转...... QPainter p(this); QTransform trans;
我需要先旋转图像,然后再将其加载到 Canvas 中。据我所知,我无法使用 canvas.rotate() 旋转它,因为它会旋转整个场景。 有没有好的JS方法来旋转图片? [不依赖于浏览器的方式] 最
我需要知道我的 Android 设备屏幕何时从一个横向旋转到另一个横向(rotation_90 到 rotation_270)。在我的 Android 服务中,我重新实现了 onConfigurati
**摘要:**本篇文章主要讲解Python调用OpenCV实现图像位移操作、旋转和翻转效果,包括四部分知识:图像缩放、图像旋转、图像翻转、图像平移。 本文分享自华为云社区《[Python图像处理] 六
我只是在玩MTKView中的模板设置;并且,我一直在尝试了解以下内容: 相机的默认位置。 使用MDLMesh和MTKMesh创建基元时的默认位置。 为什么轮换还涉及翻译。 相关代码: matrix_f
我正在尝试使用包 dendexend 创建一个树状图。它创建了非常好的 gg 树状图,但不幸的是,当你把它变成一个“圆圈”时,标签跟不上。我将在下面提供一个示例。 我的距离对象在这里:http://s
我想将一个完整的 ggplot 对象旋转 90°。 我不想使用 coord_flip因为这似乎会干扰 scale="free"和 space="free"使用刻面时。 例如: qplot(as.fac
我目前可以通过首先平移到轴心点然后执行旋转最后平移回原点来围绕轴心点旋转。在我的例子中,我很容易为肩膀做到这一点。但是,我不知道如何为前臂添加绕肘部的旋转。 我已经尝试了以下围绕肘部旋转的前臂: 平移
我想使用此功能旋转然后停止在特定点或角度。现在该元素只是旋转而不停止。代码如下: $(function() { var $elie = $("#bkgimg");
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 4 年前。 Improve this ques
我正在尝试创建一个非常简单的关键帧动画,其中图形通过给定的中点从一个角度旋转到另一个角度。 (目的是能够通过大于 180 度的 OBTUSE 弧角来制作旋转动画,而不是让动画“作弊”并走最短路线,即通
我需要旋转 NSView 实例的框架,使其宽度变为其高度,其高度变为其宽度。该 View 包含一个字符串,并且该字符串也被旋转,这一点很重要。 我查看了 NSView 的 setFrameRotati
我正在编写一个脚本,用于在 javascript 中旋转/循环浏览图像,同时遵守循环浏览图像的次数限制。我所拥有的如下: var delay = 3000; //6000 = change to
我是一名优秀的程序员,十分优秀!