反应传单标记旋转
React Leaflet marker rotation
我已经按照 构建了一个旋转标记,但不幸的是,它在这里不起作用是我创建的组件
class RotatedMarker extends MapLayer {
static defaultProps = {
rotationOrigin: 'center',
};
createLeafletElement(props) {
const el = new LeafletMarker(props.position, this.getOptions(props));
this.contextValue = {...props.leaflet, popupContainer: el};
return el;
}
updateLeafletElement(fromProps, toProps) {
if (toProps.position !== fromProps.position) {
this.leafletElement.setLatLng(toProps.position);
}
if (toProps.icon !== fromProps.icon) {
this.leafletElement.setIcon(toProps.icon);
}
if (toProps.zIndexOffset !== fromProps.zIndexOffset) {
this.leafletElement.setZIndexOffset(toProps.zIndexOffset);
}
if (toProps.opacity !== fromProps.opacity) {
this.leafletElement.setOpacity(toProps.opacity);
}
if (toProps.draggable !== fromProps.draggable) {
if (toProps.draggable === true) {
this.leafletElement.dragging.enable();
} else {
this.leafletElement.dragging.disable();
}
}
if (toProps.rotationAngle !== fromProps.rotationAngle) {
this.leafletElement.setRotationAngle(toProps.rotationAngle);
}
if (toProps.rotationOrigin !== fromProps.rotationOrigin) {
this.leafletElement.setRotationOrigin(toProps.rotationOrigin);
}
}
render() {
const {children} = this.props;
return children == null || this.contextValue == null ? null : (
<LeafletProvider value={this.contextValue}>{children}</LeafletProvider>
);
}
}
这就是我使用组件的方式:
<RotatedMarker
rotationAngle={120}
rotationOrigin="center"
position={[violation.latitude,violation.longitude,]}
icon={getMarkerIcon().icon}>
</RotatedMarker>
我试图直接调用此函数 this.leafletElement.setRotationAngle(toProps.rotationAngle);
但出现以下错误:
TypeError: this.leafletElement.setRotationAngle is not a function
我正在使用 react-leaflet V2
对我有用。不确定您的设置是什么,但您需要安装 leaflet-rotatedmarker
插件并将其导入您的自定义组件中,以免收到该错误。
你应该有这个
import React from "react";
import { Marker as LeafletMarker } from "leaflet";
import { LeafletProvider, withLeaflet, MapLayer } from "react-leaflet";
import "leaflet-rotatedmarker"; //here import the plugin
class RotatedMarker extends MapLayer {
static defaultProps = {
rotationOrigin: "center"
};
...
这是一个有效的demo
我已经按照
class RotatedMarker extends MapLayer {
static defaultProps = {
rotationOrigin: 'center',
};
createLeafletElement(props) {
const el = new LeafletMarker(props.position, this.getOptions(props));
this.contextValue = {...props.leaflet, popupContainer: el};
return el;
}
updateLeafletElement(fromProps, toProps) {
if (toProps.position !== fromProps.position) {
this.leafletElement.setLatLng(toProps.position);
}
if (toProps.icon !== fromProps.icon) {
this.leafletElement.setIcon(toProps.icon);
}
if (toProps.zIndexOffset !== fromProps.zIndexOffset) {
this.leafletElement.setZIndexOffset(toProps.zIndexOffset);
}
if (toProps.opacity !== fromProps.opacity) {
this.leafletElement.setOpacity(toProps.opacity);
}
if (toProps.draggable !== fromProps.draggable) {
if (toProps.draggable === true) {
this.leafletElement.dragging.enable();
} else {
this.leafletElement.dragging.disable();
}
}
if (toProps.rotationAngle !== fromProps.rotationAngle) {
this.leafletElement.setRotationAngle(toProps.rotationAngle);
}
if (toProps.rotationOrigin !== fromProps.rotationOrigin) {
this.leafletElement.setRotationOrigin(toProps.rotationOrigin);
}
}
render() {
const {children} = this.props;
return children == null || this.contextValue == null ? null : (
<LeafletProvider value={this.contextValue}>{children}</LeafletProvider>
);
}
}
这就是我使用组件的方式:
<RotatedMarker
rotationAngle={120}
rotationOrigin="center"
position={[violation.latitude,violation.longitude,]}
icon={getMarkerIcon().icon}>
</RotatedMarker>
我试图直接调用此函数 this.leafletElement.setRotationAngle(toProps.rotationAngle);
但出现以下错误:
TypeError: this.leafletElement.setRotationAngle is not a function
我正在使用 react-leaflet V2
对我有用。不确定您的设置是什么,但您需要安装 leaflet-rotatedmarker
插件并将其导入您的自定义组件中,以免收到该错误。
你应该有这个
import React from "react";
import { Marker as LeafletMarker } from "leaflet";
import { LeafletProvider, withLeaflet, MapLayer } from "react-leaflet";
import "leaflet-rotatedmarker"; //here import the plugin
class RotatedMarker extends MapLayer {
static defaultProps = {
rotationOrigin: "center"
};
...
这是一个有效的demo