私はWeb、Stackoverflow、Githubで見つけたものをすべて試しましたが、それでもまだ作成できません。
カスタムアイコンを使用してカスタムマーカーを作成したいのですが、以下のコードで常にエラーが発生しました: 'TypeError:options.icon.createIcon is not a function'
これが私のコードです(フォルダへのパスにエラーはありません、すべてがsrc/jsまたはsrc/imgにあります)
Icon.js
import L from 'leaflet';
const iconPerson = L.Icon.extend({
options: {
iconUrl: require('../img/marker-pin-person.svg'),
iconRetinaUrl: require('../img/marker-pin-person.svg'),
iconAnchor: null,
popupAnchor: null,
shadowUrl: null,
shadowSize: null,
shadowAnchor: null,
iconSize: new L.Point(60, 75),
className: 'leaflet-div-icon'
}
});
export { iconPerson };
MarkerPinPerson
import React from 'react';
import { Marker } from 'react-leaflet';
import { iconPerson } from './Icons';
export default class MarkerPinPerson extends React.Component {
render() {
return (
<Marker
position={this.props.markerPosition}
icon={ iconPerson }
>
</Marker>
);
}
}
本当にあなたの助けを探しています!
私は最終的にIcon.jsファイルの正しいコードを見つけました:
import L from 'leaflet';
const iconPerson = new L.Icon({
iconUrl: require('../img/marker-pin-person.svg'),
iconRetinaUrl: require('../img/marker-pin-person.svg'),
iconAnchor: null,
popupAnchor: null,
shadowUrl: null,
shadowSize: null,
shadowAnchor: null,
iconSize: new L.Point(60, 75),
className: 'leaflet-div-icon'
});
export { iconPerson };
(react-leaflet-universalを使用して)カスタムアイコンサーバー側をレンダリングする方法を理解しようとしているときに、私はここに連れてきました。同じ理由で将来誰かがここにいる場合に備えて、これを投稿すると思いました。 react-leaflet-markerclusterの場合と同様に、次のようにreturn関数内にリーフレットを要求することで、これを機能させることができました。
<Map center={this.props.center}
zoom={zoom}
className={leafletMapContainerClassName}
scrollWheelZoom={false}
maxZoom={18}
preferCanvas={false}
>
{() => {
const MarkerClusterGroup = require('react-leaflet-markercluster').default;
const L = require('leaflet');
const myIcon = L.icon({
iconUrl: require('../assets/marker.svg'),
iconSize: [64,64],
iconAnchor: [32, 64],
popupAnchor: null,
shadowUrl: null,
shadowSize: null,
shadowAnchor: null
});
return (
<React.Fragment>
<TileLayer
url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
attribution=''
setParams={true}
/>
<MarkerClusterGroup>
{coordArray.map(item => {
return (
<Marker icon={myIcon} key={item.toString()} position={[item.lat, item.lng]}>
{item.title && <Popup>
<span>{item.title}</span>
</Popup>}
</Marker>
)
})}
</MarkerClusterGroup>
</React.Fragment>
);
}}
</Map>