我使用叠加作为标记,这是我创建的下面的代码。
class PostCreateSerializer(serializers.ModelSerializer):
base64image = serializers.CharField(allow_blank=True, required=False)
categories = serializers.ListField(child=serializers.IntegerField(), required=False)
class Meta:
model = Post
fields = ('title', 'text', 'base64image', 'categories')
def create(self, validated_data):
# you don't need the if block
cats = validated_data.pop('categories', None)
# try calling the create method of ModelSerializer
post = super(PostCreateSerializer, self).create(validated_data)
if cats is not None:
for cat in cats:
PostCategory.objects.create(postid_id=post.id, categoryid_id=cat, isprimary=False)
return post
在上面的代码中,我创建了一个自定义标记,Mean - 当我为路径添加旋转时,当标记旋转更改为190以外时,假设为60,45,230,270。方向路径图标正在不同的地方展示。
目前轮换:190将正常工作。
如何设置相对于markerlabel设置的标记的旋转?
答案 0 :(得分:1)
设置您的圆圈,使其位于您想要标记的位置的中心位置。它是20x20,所以将它放在10,10:
function Label(opt_options) {
this.setValues(opt_options);
var div = this.div_ = document.createElement('div');
div.style.cssText = 'width: 20px; height: 20px; border-radius: 100%; position: absolute;' +
'background-color: #8dc73f; ';
};
//
Label.prototype.draw = function() {
var projection = this.getProjection();
var position = projection.fromLatLngToDivPixel(this.get('position'));
var div = this.div_;
div.style.left = position.x - 10 + 'px';
div.style.top = position.y - 10 + 'px';
div.style.display = 'block';
};
然后适当地设置锚点(在其中心也是如此,它可以旋转并仍然在圆圈的中心)。
goldStar = {
path: 'M57.996 -29.483q0 1.836 -1.332 3.24l-2.7 2.7q-1.368 1.368 -3.276 1.368 -1.944 0 -3.24 -1.368l-10.584 -10.548v25.344q0 1.872 -1.35 3.042t-3.258 1.17h-4.608q-1.908 0 -3.258 -1.17t-1.35 -3.042v-25.344l-10.584 10.548q-1.296 1.368 -3.24 1.368t-3.24 -1.368l-2.7 -2.7q-1.368 -1.368 -1.368 -3.24 0 -1.908 1.368 -3.276l23.436 -23.436q1.26 -1.332 3.24 -1.332 1.944 0 3.276 1.332l23.436 23.436q1.332 1.404 1.332 3.276z',
fillColor: 'red',
fillOpacity: 5,
scale: 0.2,
strokeWeight: 0,
rotation: 190,
anchor: new google.maps.Point(30,-30)
};
相关问题:
代码段
function initialize() {
var latLng = new google.maps.LatLng(40, -100),
map = new google.maps.Map(document.getElementById('map_canvas'), {
zoom: 15,
center: latLng,
mapTypeId: google.maps.MapTypeId.ROADMAP
}),
goldStar = {
path: 'M57.996 -29.483q0 1.836 -1.332 3.24l-2.7 2.7q-1.368 1.368 -3.276 1.368 -1.944 0 -3.24 -1.368l-10.584 -10.548v25.344q0 1.872 -1.35 3.042t-3.258 1.17h-4.608q-1.908 0 -3.258 -1.17t-1.35 -3.042v-25.344l-10.584 10.548q-1.296 1.368 -3.24 1.368t-3.24 -1.368l-2.7 -2.7q-1.368 -1.368 -1.368 -3.24 0 -1.908 1.368 -3.276l23.436 -23.436q1.26 -1.332 3.24 -1.332 1.944 0 3.276 1.332l23.436 23.436q1.332 1.404 1.332 3.276z',
fillColor: 'red',
fillOpacity: 5,
scale: 0.2,
strokeWeight: 0,
rotation: 190,
anchor: new google.maps.Point(30, -30)
};
var marker = new google.maps.Marker({
position: latLng,
map: map,
icon: goldStar,
});
var label = new Label({
map: map
});
label.bindTo('position', marker, 'position');
label.bindTo('text', marker, 'position');
var rotation = 190;
setInterval(function() {
rotation += 20;
goldStar.rotation = rotation;
marker.setIcon(goldStar);
}, 1000);
};
function Label(opt_options) {
this.setValues(opt_options);
var div = this.div_ = document.createElement('div');
div.style.cssText = 'width: 20px; height: 20px; border-radius: 100%; position: absolute;' +
'background-color: #8dc73f; ';
};
Label.prototype = new google.maps.OverlayView;
Label.prototype.onAdd = function() {
var pane = this.getPanes().overlayLayer;
pane.appendChild(this.div_);
};
Label.prototype.draw = function() {
var projection = this.getProjection();
var position = projection.fromLatLngToDivPixel(this.get('position'));
var div = this.div_;
div.style.left = position.x - 10 + 'px';
div.style.top = position.y - 10 + 'px';
div.style.display = 'block';
};
google.maps.event.addDomListener(window, "load", initialize);
html,
body,
#map_canvas {
height: 100%;
width: 100%;
margin: 0px;
padding: 0px
}
<script src="https://maps.googleapis.com/maps/api/js"></script>
<div id="map_canvas"></div>