ç»åã®URLãªãŒãã¬ããã¯https://uismedia.geo-info-manager.com/apis/leaflet_1/imagesmarker-icon-2x.pngã§ãã ã/ããæ¬ èœããŠããããã§ã
ããã«ããšã©ãŒãçºçããŸãã
leaflet.min.jsïŒ5 GET https://uismedia.geo-info-manager.com/apis/leaflet_1/images/ 403ïŒçŠæ¢ïŒ
leaflet.min.jsïŒ5 GET https://uismedia.geo-info-manager.com/apis/leaflet_1/images/ 403ïŒçŠæ¢ïŒ
ããã¯ã httpsïŒ//github.com/Leaflet/Leaflet/issues/4849ã§èª¬æãããŠããã®ãšåãåé¡ã«ãããã®ã§ããå¯èœæ§ããã
ããã¯ããã ãã®ããããããåçŸã§ããç¶æ³ãç¥ãããã®ã§ããããã«å¯ŸããŠåäœãã¹ããè¡ãããšãã§ããŸãã
RC3ãã1.0.1ã«ç§»è¡ãããšãã«åãåé¡ãçºçããŸãããã³ãŒãã«ã¯ãL.Icon.Default.imagePath = 'images'ãšããè¡ããããŸããã -ããããªãã ã£ãã®ãããæãåºããŸããããã³ã¡ã³ãã¢ãŠãããããšã§åé¡ã¯è§£æ±ºããŸãã-䌌ããããªãã®ããªãããšã確èªãã䟡å€ããããããããŸãã
webpackãšleafletã®äž¡æ¹ã䜿çšããŠã2ã€ã®ãŸã£ããç°ãªããããžã§ã¯ãã§çªç¶åãåé¡ãçºçããŸããã
ãããã«ããŒã«ãŒãè¿œå ãããšãç»åãèŠã€ãããŸããã ãã©ãŠã¶ã¯ãã®ãšã©ãŒãã¹ããŒããŸãïŒ
ããããŸãããäœããæã«å ¥ããŸããã
ãããã£ãŠãç»åïŒã¢ã€ã³ã³ãšåœ±ïŒãèŠã€ãããªããããããŒã«ãŒã¯çŸåšãã®ããã«èŠããŸãã
ãªãŒãã¬ããã®ãã®é¢æ°ïŒ
_getIconUrl: function (name) {
if (!L.Icon.Default.imagePath) { // Deprecated, backwards-compatibility only
L.Icon.Default.imagePath = this._detectIconPath();
}
// <strong i="10">@option</strong> imagePath: String
// `L.Icon.Default` will try to auto-detect the absolute location of the
// blue icon images. If you are placing these images in a non-standard
// way, set this option to point to the right absolute path.
return (this.options.imagePath || L.Icon.Default.imagePath) + L.Icon.prototype._getIconUrl.call(this, name);
},
data:image
urlã®URLã®æåŸã«æ¬¡ã®æååãå«ãŸããããã«ãªããŸãïŒ
")marker-icon-2x.png
ã
+ L.Icon.prototype._getIconUrl.call(this, name)
ãåé€ãããšããã¡ã€ã«ã®ååãåé€ã§ããŸãã ")
éšåã¯ããããã_detectIconPath
æ£èŠè¡šçŸã®éæ³ã«ãããã®ã§ãã ç§ã¯ãããä¿®æ£ã§ããªãã®ã§ãæåŸã®2æåãåãåã£ãŠã¿ãŸãããããã«ããã次ã®é¢æ°ãçæãããŸãã
_getIconUrl: function (name) {
if (!L.Icon.Default.imagePath) { // Deprecated, backwards-compatibility only
L.Icon.Default.imagePath = this._detectIconPath();
}
// <strong i="21">@option</strong> imagePath: String
// `L.Icon.Default` will try to auto-detect the absolute location of the
// blue icon images. If you are placing these images in a non-standard
// way, set this option to point to the right absolute path.
var url = (this.options.imagePath || L.Icon.Default.imagePath);
return url.slice(0, - 2);
},
ããã«è¡ããšãã¢ã€ã³ã³ã衚瀺ãããŸãã æåŸã®åé¡ã¯ã圱ã®ç»åãããŒã«ãŒã¢ã€ã³ã³ã§ãããããšã§ããsrcãã¹ã¯ãã§ã«ééã£ãŠããŸããçç±ã¯ïŒãŸã ïŒããããŸããã ãããã£ãŠãããŒã«ãŒã¯æ¬¡ã®ããã«ãªããŸãã
@IvanSanchezããã¯ãåé¡ãå°ãçµã蟌ãã®ã«åœ¹ç«ã¡ãŸããïŒ
@codeofsumitã¯ã _detectIconPath
ãã¹ãããã¹ã«ãŒããŠãããã§äœãèµ·ãã£ãŠããããç¹ã«path
å€æ°ãæ£èŠè¡šçŸãééããåã«ã©ã®ãããªå€ãæã£ãŠãããã確èªãããšäŸ¿å©ã§ãã
@ IvanSanchez @ perliedmanãã°ãèŠã€ãããšæããŸãã
ããã¯_detectIconPath
_detectIconPath: function () {
var el = L.DomUtil.create('div', 'leaflet-default-icon-path', document.body);
var path = L.DomUtil.getStyle(el, 'background-image') ||
L.DomUtil.getStyle(el, 'backgroundImage'); // IE8
document.body.removeChild(el);
return path.indexOf('url') === 0 ?
path.replace(/^url\([\"\']?/, '').replace(/marker-icon\.png[\"\']?\)$/, '') : '';
}
path
å€æ°ã¯æ¬¡ã®ãããªãã®ã§ãã
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAApCAYAAADAk4LOAAAFgUlEQâŠn3EUrUZ10EYNw7BWm9x1GiPssi3GgiGRDKWRYZfXlON+dfNbM+GgIwYdwAAAAASUVORK5CYII=")
ã
ã©ã¡ããæ£ããã
ããã§ãæ£èŠè¡šçŸã¯ããããdata.image URLãæœåºããå¿ èŠãããããããè¿ããŸãã
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAApCAYAAADAk4LOAAAFgUlEQâŠn3EUrUZ10EYNw7BWm9x1GiPssi3GgiGRDKWRYZfXlON+dfNbM+GgIwYdwAAAAASUVORK5CYII=")
path
å€æ°ããåé€ãããŠããªãæåŸã®")
泚æããŠãã ããã æ£èŠè¡šçŸ/^url\([\"\']?/
ã¯ããã¹ã®æåã®url("
/^url\([\"\']?/
ã®ã¿ã察象ãšããæåŸã®")
ããŸããã
ãã®æ£èŠè¡šçŸã®äœ¿çšã¯æ©èœããŸãïŒ
return path.indexOf('url') === 0 ?
path.replace(/^url\([\"\']?/, '').replace(/\"\)$/, '').replace(/marker-icon\.png[\"\']?\)$/, '') : '';
ããã«ãããç»åã®åé¡ãä¿®æ£ãããŸãã
var url = (this.options.imagePath || L.Icon.Default.imagePath);
_getIconUrl
ã ããããããã¯åœ±ãä¿®æ£ããŸãã-ç§ã¯ãŸã 圱ã§äœãèµ·ãã£ãŠããã®ãããããŸããã
åãåé¡ãæ±ããŠããã
_detectIconPathã®ãã¹å€ã¯ããurlïŒ "dataïŒimage / png; base64ãi ... 5CYII ="ïŒãã®ãããªãã®ã§ãã
_getIconUrlãš_detectIconPathã¯ããŒã¿URLãåŠçããããã«èšèšãããŠããªãããã§ã
圱ã®åé¡ãã§ãŠãããšããäºå®ã«ãã£ãŠãåå ã®ããã _getIconUrl
ã®å€ã¯L.Icon.Default.imagePath
ãã§ã«ããŒã«ãŒããŒã¿ã®URLãèšå®ãããŠããã®ã§ãããŒã«ãŒã®ç»åã䜿çšããŠäŒžã³ãŠããŸã
ããŒã«ãŒç»åãããŒãã³ãŒãã£ã³ã°ãããã®ã³ãããã«é¢é£ããŠããå¯èœæ§ããããŸããïŒ
https://github.com/Leaflet/Leaflet/commit/837d19093307eb5eeb1fca6536962a1ab1573dd5
@ Radu-Filipç§ã¯ããªãã®PRã«ãããã®å€æŽãå ããããšã§ãããä¿®æ£ããããšãã§ããŸãã-ãããä»ã«ã©ã®ãããªåœ±é¿ãäžããå¯èœæ§ããããã¯ããããŸããïŒ
åé¡ã¯ãããªããèšã£ãããã«ãåºæ¬çã«ãã¹ãŠã®ã¢ã€ã³ã³ã®ããã©ã«ãURLãããŒã«ãŒç»åã§ãããšããããšã§ãã
ããã§ãŸããã·ã£ããŠã®ããã©ã«ãURLãCSSã«è¿œå ããŸããã
/* Default icon URLs */
.leaflet-default-icon-path {
background-image: url(images/marker-icon.png);
}
.leaflet-default-shadow-path {
background-image: url(images/marker-shadow.png);
}
次ã«ãååã_getIconUrl
ãã_detectIconPath
ã«æž¡ããããã䜿çšããŠããã¹ãæœåºãããèŠçŽ ã«ã¯ã©ã¹ãè¿œå ããŸããã
_getIconUrl: function (name) {
L.Icon.Default.imagePath = this._detectIconPath(name);
// <strong i="15">@option</strong> imagePath: String
// `L.Icon.Default` will try to auto-detect the absolute location of the
// blue icon images. If you are placing these images in a non-standard
// way, set this option to point to the right absolute path.
var path = this.options.imagePath || L.Icon.Default.imagePath;
return path.indexOf("data:") === 0 ? path : path + L.Icon.prototype._getIconUrl.call(this, name);
},
_detectIconPath: function (name) {
var el = L.DomUtil.create('div', 'leaflet-default-' + name + '-path', document.body);
var path = L.DomUtil.getStyle(el, 'background-image') ||
L.DomUtil.getStyle(el, 'backgroundImage'); // IE8
document.body.removeChild(el);
return path.indexOf('url') === 0 ? path.replace(/^url\([\"\']?/, '').replace(/(marker-icon\.png)?[\"\']?\)$/, '') : '';
}
ãŸãã圱ã®ã¢ã€ã³ã³ãåŒã³åºãããªãã£ãããã detectIconPath
åšèŸºã®if / elseãåé€ããå¿
èŠããããŸããã ããã§ããã¹ãŠãããã©ã«ãã®ããŒã«ãŒã¢ã€ã³ã³ã§æ©èœããŸããã«ã¹ã¿ã ã¢ã€ã³ã³ã«ã€ããŠã¯ããããããŸããã
@codeofsumitãããç§ã¯ããã§äŒŒããããªããšãããŸããhttps://github.com/Radu-Filip/Leaflet/tree/temp
ä»ã®ãšããããã¯ãšããŠäœ¿çšããŸãã ããŸãããã°ãwebpackãªã©ã䜿çšããŠãã人ã®ããã®ããå°æ¥ã®èšŒæ ãšãªã解決çãããã§ããã
@ Radu-Filipã¯ããã®ãœãªã¥ãŒã·ã§ã³ã§PRãæŽæ°ããŠãããããã§ããïŒ ããŒãžãããå¯èœæ§ããããŸãã
@codeofsumitãå®äºããŸããããããééãããã©ããèŠãŠã¿ãŸããã
ããã«ã¡ã¯ã
äœãã足ããªããããããŸããããWebpackæ§ç¯ã®ãã®åé¡ã¯ã L.Icon.Default
åäœããªãŒããŒã©ã€ãããLeafletãã©ã°ã€ã³ã§ç°¡åã«å¯ŸåŠã§ããããã§ãã
ãã¢ïŒ http ïŒ
ãã®ã¢ãããŒãã䜿çšãããšãããªãããŒãªRegExpãåãé€ãããšãã§ããããã©ã«ãã®ããŒã«ãŒç»åãã€ã³ã©ã€ã³åãããŸãïŒããŒãã³ãŒãã£ã³ã°ã«ãã£ãŠïŒãããã¯ããšã«ããå°ããªç»åã«å¯ŸããŠWebpackãæå³ããçµæã®1ã€ã§ãã
èããããæ¬ ç¹ã¯ãåããŒã«ãŒã«ç¬èªã®base64ã¢ã€ã³ã³ãããããã©ãŠã¶ãŒãããããã£ãã·ã¥ã§ãããã©ããããããªãããšã§ãâŠïŒPRïŒ5041ã®å Žåãšåãæ¬ ç¹ïŒ
ããšãã°ãã¬ã€ã€ãŒã³ã³ãããŒã«ã¢ã€ã³ã³ã®ããã«ãç»åã®src
å±æ§ã«é
眮ããã®ã§ã¯ãªããèæ¯ç»åãšããŠèšå®ããããšã§ãæŽç·Žããããã®ãæ³åããããšãã§ããŸãã
ãã®ã¢ã€ãã¢ã«ã¯é ããçœ ããããããããŸããïŒç·šéïŒãã®ããã«èãããŸãïŒãããã§ãªããã°ãããããç»åãã¹ã®æ€åºãåé¿ããŠããã®ã§ããã£ãšåã«å®è£
ãããŠããã¯ãã§ãã
ãã¢ïŒ http ïŒ
ãã©ã°ã€ã³ã¢ãããŒãã®æ倧ã®å©ç¹ã¯ãWebpackãããžã§ã¯ãã«å¯ŸããŠã®ã¿ãã®ç¹å®ã®åäœãç¶æããããšã§ãã
ã圹ã«ç«ãŠãã°ã
ãšããã§ãããã«ã¯æ¬è³ªçã«äœããééã£ãŠããããã«æããŸãã
Leafletã¯ãç»åãžã®ãè€éãªããã¹æ€åºãè¡ããŸããç»åã¯ãCSSãã¡ã€ã«ãšæ¯èŒããŠäºåå®çŸ©ãããå Žæã«ããå¿ èŠããããŸãã
ãã ããwebpackãã«ãããã»ã¹ã¯ãã®CSSããã³ãã«ããŠãããéçºè
ãwebpackã«èŠæ±ããå
容ïŒç»åã®èŠæ±ãªã©ïŒã«å¿ããŠãç»åã移åããïŒãŸãã¯ç§»åããªãïŒå ŽåããããŸãïŒååãå€æŽããŸãïŒã
ãããã£ãŠãwebpackã䜿çšãããšããªãŒãã¬ããã®æ€åºã¯ç¢ºå®ã«å€±æããŸãã
PRïŒ5041ã¯ãBase64ç»åãåããŒã«ãŒã«è€è£œããããšãç ç²ã«ããŠãwebpackãç»åãCSSã«ã€ã³ã©ã€ã³åããå Žåãåãå ¥ããããã®ããªãã¯ã®ãããªãã®ã§ãã Webpack以å€ã®ãŠãŒã¶ãŒã®ã³ã¹ãã«ã€ããŠã話ããŠããŸããã
PRïŒ4979ã¯ãïŒãã¡ã€ã«ãèŠã€ãããªãããã«ïŒwebpackãã«ããšã©ãŒã¡ãã»ãŒãžãé²ãããã ãã®ãã®ã§ãããå®éã®ç»åãã¹ã®è§£å床ããŸã£ããåŠçããããã«ã¯èŠããŸããã
éçºè
ã¯æåã§L.Icon.Default.imagePath
æå®ãããšæããŸããïŒ
@jasongroutãš@Eschon ãããªãã¯ãããã©ã®ããã«ç®¡çããããå
±æã§ããŸããïŒ
ç§ã¯æ¬åœã«ããã管çããŠããŸããã ç§ã¯ããã©ã«ãã®ã¢ã€ã³ã³ã䜿çšããŠããªãã®ã§ããã®ãã°ã¯ä»ãŸã§ç§ã«ãšã£ãŠåé¡ã§ã¯ãããŸããã§ããã
ããã«ã¡ã¯ããã®ã©ã€ãã©ãªã®1.0.1ããŒãžã§ã³ã䜿çšããŠããã®ãã¹ãšã©ãŒãåçŸã§ããããšããç¥ããããŸãã
ãªãŒãã¬ããã®Drupalã¢ãžã¥ãŒã«ïŒ7.x-1.x-devïŒãšäžç·ã«äœ¿çšããŠããŸãããã¢ãžã¥ãŒã«ã«å ±åãããåé¡ããããŸãïŒ https ïŒ
ç§ãèŠãéãããåé¡ãã¯_getIconUrlé¢æ°ã«ãããŸããïŒ L.Icon.Default.imagePath
åŸã«ã¹ã©ãã·ã¥ããªããããããšãã°Drupalã®ç»åãã¹ã¯ã /sites/all/libraries/leaflet/imagesmarker-icon.png ãã®ããã«çæãããŸãã ç»åãã¹ãšããŒã«ãŒç»åãã¡ã€ã«åïŒmarker-icon.pngïŒã®éã¯ãã¹ã©ãã·ã¥/ã§ããå¿
èŠããããŸãã
ããã«ã¡ã¯@ anairamzap-mobomoã
ããªããå ±åããããšã¯å¥ã®åé¡ã®ããã«èãããŸãã
æ®å¿µãªããããã¬ãŒã ã¯ãŒã¯ïŒDrupalïŒãžã®ç§»æ€ãé¢ä¿ããŠããããã«æããããããæåã«ããã°ããã®ç§»æ€ã®åäœã«é¢é£ããŠããªãããšã確èªããå¿ èŠããããŸãã
ããã©JSãå«ãLeaflet1.0.xã«ã¯ãæ«å°Ÿã®ã¹ã©ãã·ã¥ãæ£ããå«ãŸããŠããŸãïŒ http ïŒ
ããšãã°ã httpïŒ//cgit.drupalcode.org/leaflet/tree/leaflet.module#n51ãåç
§ããŠL.Icon.Default.imagePath
ã¯Drupalã¢ãžã¥ãŒã«ã«ãã£ãŠãªãŒããŒã©ã€ããããŸãã
ãã®ã¢ãžã¥ãŒã«ã¯Leaflet0.7.xãš1.0.xã®éã®å€æŽãåŠçããŠããªãããã§ããããã§ãã¹ã©ãã·ã¥ã¯L.Icon.Default.imagePath
å«ãŸããŠããå¿
èŠããããŸãã
Leaflet 1.0.0ã¯ã¡ãžã£ãŒãªãªãŒã¹ã§ãããããäžäœäºææ§ã«ã€ããŠã¯ç¢ºçŽãããŠããªããšæããŸãã
ãã@ghybsãªãã»ã©... Drupalã¢ãžã¥ãŒã«ã®ã¡ã³ãããŒã«é£çµ¡ããŠãããç¥ãããŸãã ããªããèšã£ãããã«ã圌ãã¯ã©ã€ãã©ãªã®1.0.xããŒãžã§ã³ã«ããŸãé©åããããã«ã¢ãžã¥ãŒã«ãå€æŽããããå°ãªããšãããã«ã€ããŠèŠåããããã¥ã¡ã³ãã«ããã€ãã®è¡ãè¿œå ããå¿ èŠãããããã§ãã
ãæèŠããããšãããããŸãïŒ
aurulia skeleton / esnext + webpackãããžã§ã¯ãã§ãæåã«å ±åããããã®ãšãŸã£ããåãåé¡ãçºçããŠããŸãã
ãããä¿®æ£ããããŸã§ãç»åããœãŒã¹ãã©ã«ããŒã«ã³ããŒããã«ã¹ã¿ã ããŒã«ãŒã䜿çšããŠããŸãããµã€ãº/é 眮æ å ±ãçç¥ããŠãåé¡ãªãããã§ã...
var customDefault = L.icon({
iconUrl: 'images/marker-icon.png',
shadowUrl: 'images/marker-shadow.png',
});
ç¡å¹ãªdataïŒurlã®åé¡ãåé¿ããããã«ç§ãè¡ã£ãããšãå ±æãããã£ãã åºæ¬çã«ãããã©ã«ãã®ã¢ã€ã³ã³ããæäŸãããããŒã«ãŒã¢ã€ã³ã³ãšåœ±ã䜿çšããæ°ããã¢ã€ã³ã³ã«èšå®ããŸãããwebpackããããã®ç»åã®ããŒã¿ãšã³ã³ãŒãã£ã³ã°ãåå¥ã«åŠçã§ããããã«ããŸãã ãã®ãããªãã¡ã€ã«ãã©ããã«å«ããã ãã§ãã
import L from 'leaflet';
import icon from 'leaflet/dist/images/marker-icon.png';
import iconShadow from 'leaflet/dist/images/marker-shadow.png';
let DefaultIcon = L.icon({
iconUrl: icon,
shadowUrl: iconShadow
});
L.Marker.prototype.options.icon = DefaultIcon;
ããããã網èã¢ã€ã³ã³ãå«ããããã«èª¿æŽããããšãã§ããŸãã
誰ããå€æŽãããleaflet.jsãã¡ã€ã«ãéä¿¡ã§ããŸããïŒ
@ ajoslin103ã䜿çšããŠããã³ãŒãïŒ
`` `var customDefault = L.iconïŒ{
iconUrlïŒ 'images / marker-icon.png'ã
shadowUrlïŒ 'images / marker-shadow.png'ã
}ïŒ;
leaflet.jsãã¡ã€ã«ãå€æŽãããããŒã«ãŒç»åããªãŒãã¬ããé åžããéåžžã®ç»åãã©ã«ããŒã«ã³ããŒããæçš¿ãããã©ã°ã¡ã³ããã«ã¹ã¿ã ã¢ã€ã³ã³ãšããŠäœ¿çšããŸããã
crob611ã®ãœãªã¥ãŒã·ã§ã³ã¯ãå ã®cssã§httpãšããŠåç §ãããŠããŠãç§ã®ãµã€ãã¯httpsçµç±ã§æäŸãããŠããããã䜿çšã§ããŸããã§ããã
`` `function onLocationFoundïŒeïŒ{
var radius = e.accuracy / 2;
var customDefault = L.iconïŒ{
iconUrlïŒ 'marker_icon_2x'ã
shadowUrlïŒ 'marker_shadow.png'
}ïŒ;
L.markerïŒe.latlngïŒ.addToïŒmapïŒ
.bindPopupïŒ "ãã®ãã€ã³ããã" +ååŸ+ "ã¡ãŒãã«ä»¥å
ã«ããŸã"ïŒ.openPopupïŒïŒ;
L.circleïŒe.latlngãradiusïŒ.addToïŒmapïŒ;
}
æ°ããã¢ã€ã³ã³ãèšå®ããã«ã¯ã©ãããã°ããã§ããïŒ
ã³ã³ã¹ãã©ã¯ã¿ãŒã§ã«ã¹ã¿ã ã¢ã€ã³ã³ãäœæããŸãïŒAureliaãã¬ãŒã ã¯ãŒã¯ã䜿çšããŠããŸãïŒ
this.customDefault = L.icon({
iconUrl: 'images/marker-icon.png',
shadowUrl: 'images/marker-shadow.png',
});
次ã«ãattachedïŒïŒã¡ãœããã«ããŒã«ãŒãè¿œå ãããšãã«äœ¿çšããŸã
var map = L.map('mapid').setView([latitude, longitude], 13);
let urlTemplate = 'http://{s}.tile.osm.org/{z}/{x}/{y}.png';
map.addLayer(L.tileLayer(urlTemplate, { minZoom: 4 }));
L.marker([latitude, longitude], { icon: this.customDefault }).addTo(map);
åç §ïŒ http ïŒ
ãã®åé¡ã®é©åãªä¿®æ£ãè¡ããããŸã§ã _getIconUrl()
ïŒãŸãã¯ãã®ä»ïŒãäºæããã«ããŒã¿UIã«ééãããšãã«ã console.warn
ãªã©ãä»ããŠGithub IssueURLããã€ã³ãããã©ã³ã¿ã€ã èŠåãè¿œå ããããšããå§ãããŸãããã®ããã«ã
ããã¯åãåé¡ãæ±ããŠãã人ã ãé©åãªå Žæã«é£ããŠè¡ããåé¿çãææ¡ããŸãïŒç§ã®ããã«åãããã®ãããªãã®ã®ããã«ïŒã
ããããReactïŒéçºãã«ãïŒãéçºè ãåé¡ãç¹å®ããã®ã«åœ¹ç«ã€æ¹æ³ã§ãã
åå¿ã®åé¡ããã@ PTihomirã«ããåé¿ç
import L from 'leaflet';
delete L.Icon.Default.prototype._getIconUrl;
L.Icon.Default.mergeOptions({
iconRetinaUrl: require('leaflet/dist/images/marker-icon-2x.png'),
iconUrl: require('leaflet/dist/images/marker-icon.png'),
shadowUrl: require('leaflet/dist/images/marker-shadow.png'),
});
ããã«ããããªãŒãã¬ããã³ã¢ãã¡ã€ã«ãå€æŽããã«åé¡ãä¿®æ£ãããŸãã
@codeofsumit ïŒ
Lefletãåæ§ã®æ¹æ³ã§ä»ã®ã¢ã€ã³ã³ãå¿ èŠãšããïŒãŸãã¯å°æ¥çã«å¿ èŠã«ãªãïŒå Žåã«åããŠãåé¿çã調æŽããå¿ èŠããããŸãïŒããããä»ã®ã³ã³ããŒãã³ãã«ã€ããŠã¯ããããŸããïŒã
Webpackã«æ £ããŠããªãå ŽåïŒWebpackã¯ãããã®ããããã£ã«æ°ããURLãå²ãåœãŠãŸãã
/***/ 5305024559067547:
/***/ function(module, exports, __webpack_require__) {
module.exports = __webpack_require__.p + "d95d69fa8a7dfe391399e22c0c45e203.png";
/***/ },
...
_leaflet2['default'].Icon.Default.mergeOptions({
iconRetinaUrl: __webpack_require__(5305024559067547),
iconUrl: __webpack_require__(6633266380715105),
shadowUrl: __webpack_require__(880063406195787)
});
ïŒè©³çŽ°ã¯ã䜿çšããWebpackæ§æã«ãã£ãŠå€§ããç°ãªããŸãïŒ
@jampyã¯ãããã¡ããã§ãã ãããã£ãŠãããã¯åé¿çã§ãã ãã ãããªãŒãã¬ããã³ã¢ãžã®å€æŽã¯ãæŽæ°ã®ãã³ã«åé€ãããŸãã é©åãªä¿®æ£ãè¡ããããŸã§ãåè¿°ã®åé¿çã䜿çšããŸããããã¯ãæãçã¿ãå°ãªãããã«æãããããã§ãã
ããã§åãåé¡ãçºçããŸãã detectIconPath
é¢æ°ã¯ãã¹url("http://localhost:8080/2273e3d8ad9264b7daa5bdbf8e6b47f8.png")
ã«å¯ŸããŠhttp://localhost:8080/2273e3d8ad9264b7daa5bdbf8e6b47f8.png")
ãè¿ããŸã
çæ³ããã¯ã»ã©é ãã§ãããç§ã¯webpackã䜿çšããŠããããã®åé¿çã䜿çšããŠããŸã
ãããžã§ã¯ãã®ã«ãŒãã«ããç»åãã©ã«ãã«ç»åãã³ããŒããŸãã
次ã«ãpackage.jsonã«postbuild npmã¹ã¯ãªãããè¿œå ããŸããïŒã¹ã¯ãªããã»ã¯ã·ã§ã³ã«ïŒ
" postbuildïŒprod "ïŒ "./Post-Build4Prod.sh"
ç»åãã©ã«ããdistã«ã³ããŒããŸã
#bin/bash
cp -r ./images ./dist/.
次ã«ãã¢ã€ã³ã³ã®customDefaultãå®çŸ©ããŸã
this.customDefault = L.icon({
iconUrl: 'images/marker-icon.png',
shadowUrl: 'images/marker-shadow.png',
});
ã©ãã§ãããã䜿çšããŸã
L.marker([latitude, longitude], { icon: this.customDefault }).addTo(map);
@ ajoslin103 ããã®åé¿çãæ€èšã
Vue Webpackãããžã§ã¯ãã§ãããåé¿ããããã«ã以äžã䜿çšããŸããã
import L from 'leaflet';
L.Icon.Default.imagePath = '/';
L.Icon.Default.mergeOptions({
iconRetinaUrl: require('leaflet/dist/images/marker-icon-2x.png'),
iconUrl: require('leaflet/dist/images/marker-icon.png'),
shadowUrl: require('leaflet/dist/images/marker-shadow.png'),
});
Djangoã®collectstaticãšCachedStaticFilesStorageã§åãåé¡ãçºçããéçãã¡ã€ã«ã®ååã«ãã¡ã€ã«ã³ã³ãã³ãã®ããã·ã¥ãè¿œå ããããããmarker-icon.pngã¯marker-icon.2273e3d8ad92.pngã«ãªãã_detectIconPathã®æåŸã«æ£èŠè¡šçŸãè¿œå ãããŸããäžèŽããŸããã
ç§ã¯ãããreplace(/marker-icon[^"']+\.png[\"\']?\)$/, '')
ã«å€æŽããŸããã
ç§ãçŸåšãã®åé¡ãæ±ããŠããŸãã
Leaflet1.0.3ããã³Angular2ã䜿çšããŸãã
ç§ã¯åçœããŸããç§ã¯ãã®ã¹ã¬ãããäžããããŠããã解決ããæ¹æ³ãããããŸããã
Angular 2ïŒ4ã®å Žå
次ã®ã³ãŒãã䜿çšããŠrequire.d.tsãã¡ã€ã«ãäœæããŸãã
interface WebpackRequire {
<T>(path: string): T;
(paths: string[], callback: (...modules: any[]) => void): void;
ensure: (paths: string[], callback: (require: <T>(path: string) => T) => void) => void;
}
interface NodeRequire extends WebpackRequire {}
declare var require: NodeRequire;
次ã«requireã䜿çšããŸã
this.marker = L.marker(e.latlng, {
icon: L.icon({
iconUrl: require <any>('../../images/marker-icon.png'),
shadowUrl: require <any>('../../images/marker-shadow.png'),
})
Webpackã䜿çšããVue.jsã®åé¿çïŒãµã€ãºãšã¢ã³ã«ãŒã䜿çšïŒïŒ
import L from 'leaflet'
// BUG https://github.com/Leaflet/Leaflet/issues/4968
import iconRetinaUrl from 'leaflet/dist/images/marker-icon-2x.png'
import iconUrl from 'leaflet/dist/images/marker-icon.png'
import shadowUrl from 'leaflet/dist/images/marker-shadow.png'
L.Marker.prototype.options.icon = L.icon({
iconRetinaUrl,
iconUrl,
shadowUrl,
iconSize: [25, 41],
iconAnchor: [12, 41],
popupAnchor: [1, -34],
tooltipAnchor: [16, -28],
shadowSize: [41, 41]
})
å€éšç»åã®URLã䜿çšããã®ã§ã¯ãªããããã©ã«ãã®ã¢ã€ã³ã³ãbase64ãšããŠã€ã³ã©ã€ã³åããããã®ç°¡åãªããã©ãŒãã³ã¹ãã¹ããããã€ãè¡ããŸããã _倧éã®_ããŒã«ãŒïŒç§ã®å Žåã¯1000ïŒãããŒããããšãbase64ã€ã³ã©ã€ã³ç»åã®ããã©ãŒãã³ã¹ãèããäœäžããŸãã
1000åã®ããŒã«ãŒã¢ã€ã³ã³ãå€éšURLãšããŠèªã¿èŸŒãã å Žåã®Chromedevtoolsã®ããã©ãŒãã³ã¹ãã¥ãŒã¯æ¬¡ã®ãšããã§ãã
æ¯èŒãããšãã€ã³ã©ã€ã³base64ãšããŠ1000åã®ããŒã«ãŒã¢ã€ã³ã³ããããŸãïŒã¿ã€ã ã©ã€ã³ã®ã¹ã±ãŒã«ãç°ãªãããšã«æ³šæããŠãã ãããç³ãèš³ãããŸããïŒïŒ
ã芧ã®ããã«ãã€ã³ã©ã€ã³ç»åã䜿çšãããšãäœããã®çç±ã§ã¬ã€ã€ãŒã®æ§æãé ããå šäœã®è² è·ãçŽ1ç§é·ããªããŸãã
ã«ãžã¥ã¢ã«ãªäœ¿çšã®å Žåãããã¯ããããåé¡ã§ã¯ãããŸããããå€ãã®ããŒã«ãŒã䜿çšããå Žåã¯ããããé©åã§ããå¯èœæ§ããããŸãã
ãã®é·æçãªå¯ŸåŠæ¹æ³ã®ææ¡ïŒ
ãã1ã€ã®ãªãã·ã§ã³ã¯ãç»åãã¹ãæ€åºããããã®å€ãïŒ0.7ïŒæ¹æ³ã«æ»ãããšã§ããã解決ã§ããªãä»ã®åé¡ããã£ãããšã¯ããã£ãŠããŸãã
ããã«ã¡ã¯@perliedman ã
çŽ æŽããããããã¡ã€ãªã³ã°ïŒ
ããã¯ãã€ã³ã©ã€ã³ç»åãåå©çšããããšã®æ¬ ç¹ã«é¢ããŠç§ãæã£ãŠããçåã«çããŸãã
å®éãPRïŒ5041ããªãã¡ã¯ã¿ãªã³ã°ããŠãã¢ã€ã³ã³ç»åãCSSã«ã€ã³ã©ã€ã³åããããšãã«Leafletãããã«æ©èœããããã«ããããšãã§ããŸãïŒwebpackãªã©ã®ãã«ããšã³ãžã³ã«ãã£ãŠïŒã
ç§ãèããããšãã§ãã解決çïŒã»ãšãã©åè¿°ã®PRã«äŒŒãŠããŸãïŒã¯ãç»åããšã«1ã€ã®ã¯ã©ã¹ãäœæããããšãæå³ããŸãããããã£ãŠãCSSïŒããã³ããããJSïŒãã¡ã€ã«ãµã€ãºãæ°åãã€ãå¢å ããŸãã
äŸïŒ http ïŒ
ãã ããåè¿°ããããã«ãäºææ§ã®çç±ïŒãã«ããšã³ãžã³ã䜿çšïŒã«ãããã®ãããªå€æŽãããããã®ãã¬ãŒã ã¯ãŒã¯ãšãã«ãããã»ã¹ã䜿çšããªããŠãŒã¶ãŒã«åœ±é¿ãäžããã®ã¯æ®å¿µã§ãã
äžæ¹ã IconDefault
ã¯ã©ã¹ãªãã·ã§ã³ã§ããŒãã³ãŒãããããã¡ã€ã«åãåé€ãããã«ãã¹ïŒãã¡ã€ã«åãå«ãïŒãCSSã«å§ä»»ã§ãããããçµæã¯ãããã¯ãªãŒã³ãã«ãªãå¯èœæ§ããããŸãã
ïŒç§ãæ£ããç解ããŠããã°ïŒãã®è€éãªæ€åºã®å
šäœçãªãã€ã³ãã¯ãç»åã®å ŽæãJSãã¡ã€ã«ããåãé¢ãã代ããã«CSSãã¡ã€ã«ã«å¯Ÿããçžå¯Ÿçãªå Žæã«äŸåããããšã§ãããããããã¯éåžžã«èå³æ·±ããã®ã§ãã ãããã£ãŠããã¡ã€ã«åã§ããCSSã§å®çŸ©ãããŠããããšã¯ç§ã«ã¯çã«ããªã£ãŠããŸãã
ãã ãã imagePath
ãªãã·ã§ã³ãšã®äºææ§ãç¶æããããšãããšã以åã«æ€åºãããã€ã¡ãŒãžãã¹ãäœãçŽããŠãå
é ã®ãã¹ã眮ãæããŠãã¡ã€ã«åãä¿æããå¿
èŠããããããè€éã«ãªãå¯èœæ§ããããŸãã ãããã£ãŠãããã§æ°ããæ£èŠè¡šçŸãå°å
¥ããŸãã
æåŸã«ãããããã¹ãŠã®ã±ãŒã¹ãã«ããŒãããã©ããã¯ããããŸããã
ãã«ãããã»ã¹ã¯é«åºŠã«ã«ã¹ã¿ãã€ãºã§ãããããã¢ã€ã³ã³ã€ã¡ãŒãžãªã©ã®éçã¢ã»ããã«é¢ããŠéåžžã«ç°ãªãç¶æ³ãçºçããŸãã äžèšã§ã倱æããã³ãŒããŒã±ãŒã¹ããŸã ãããããããŸããã
@ghybsç§ã¯ãã®äŸã奜ãã§ãïŒhttp://playground-leaflet.rhcloud.com/dulox/ïŒïŒ
å€åããéããããããŸãããããã®CSSã§ã¢ã€ã³ã³_size_ãæå®ããããšã«ã€ããŠã©ãæããŸããïŒ width
ãšheight
ïŒïŒ 誰ãããããã®CSSã«ãŒã«ããªãŒããŒã©ã€ãããŠããã©ã«ãã®ã¢ã€ã³ã³ãå€æŽããŠããã®ãæ³åã§ããŸãããä»ã§ã¯ééã£ããµã€ãºã«ãªã£ãŠããããšãããããŸãã
CSSã®ãã£ã¡ã³ã·ã§ã³ã®æç¡ã«ããããããããã¯åé²ããããã®è¯ãæ¹æ³ã ãšæããŸãã ããªãã®äŸã«æ²¿ã£ãŠPRãããŠã¿ãŸãããïŒ ããªããä»æéããšãã«ã®ãŒãæã£ãŠããªããªããç§ã¯å ã«é²ãã§ãããããããšãã§ããŸãããã ããªãã奜ããªãã®ãæããŠãã ããã
ç§ã¯å®éã«ãã®åé¡ã«å¶ç¶åºããããã®ã§ããããéããããšæã£ãŠããŸãã
ããã«ã¡ã¯@perliedman ã
CSSã§ã¢ã€ã³ã³ã®ãµã€ãºãæå®ã§ããæ¹ããããšæããŸãã
ãã ãããã®å Žåãäžè²«æ§ãä¿ã€ããã«ãã¢ã³ã«ãŒãã€ã³ããæå®ã§ããå¿ èŠããããŸãã ã©ã®CSSã«ãŒã«ãããã«é©ããŠãããããããŸããïŒããããããŒãžã³ïŒïŒã ãããå¯èœã§ããã°ãçµæã¯éåžžã«è¯ããšæããŸããã¢ã€ã³ã³ã¯å®å šã«CSSã§å®çŸ©ãããŸãã
ããã«ããã·ã¥ãããšãã¢ã€ã³ã³ãå®çŸ©ããè¿œå ã®æ¹æ³ã«ãªãå¯èœæ§ããããŸãã3ã€ã®CSSã¯ã©ã¹ïŒã¢ã€ã³ã³ã網èã圱ïŒãæå®ãããšãLeafletã¯ããããããã¹ãŠã®ã¢ã€ã³ã³ãªãã·ã§ã³ãæœåºããŸãã
ãæ°è»œã«ãçžè«ãã ãããæ®å¿µãªãããã€ã§ãããããããŸãããâŠ
åã®äŸã«åºã¥ããŠã padding
ãšmargin
CSSã«ãŒã«ãèªã¿åã£ãŠpadding
iconAnchor
ïŒ shadowAnchor
ïŒãšpopupAnchor
ã決å®ããæŠå¿µã次ã«ç€ºããŸãããªãã·ã§ã³ïŒ
http://playground-leaflet.rhcloud.com/xuvi/1/edit?htmlãcss,output
padding
ã䜿çšããŠiconAnchor
ã決å®ãããšããäºå®ã¯å¥œãã§ã¯ãããŸãããããã¯ãæçµçã«Leafletãmargin
ã䜿çšããŠã¢ã€ã³ã³ç»åãé
眮ããããã§ãâŠ
ããããCSSã§ç©äºããã°ããæå®ããã¢ã€ã³ã³ãªãã·ã§ã³ãæå®ããæ¹æ³ãšæ¯èŒããŠãå€ãå
ã«æ»ããªãããã«ããã®ãæãç°¡åã§ããããšãããããŸããã
CSSã§ãã¹ãŠãæå®ããçµæã¯æ°ã«å
¥ã£ãŠããŸããã L.Icon.Default.imagePath
ãšã®äžäœäºææ§ãç¶æããããã«å¿
èŠãªäœæ¥ã¯ãŸã ãŸã ãããŸãã
PRãäœæããæéããªãããšããè©«ã³ç³ãäžããŸãã
_detectIconPath
ã倱æããå¥ã®ã±ãŒã¹ã蚺æããŸããïŒFirefoxïŒESRããã³çŸåšã®ããŒãžã§ã³ã§ãã¹ãæžã¿ïŒã䜿çšãã[èšå®]â[ã³ã³ãã³ã]â[è²...]â[äžèšã®éžæã§ããŒãžã§æå®ãããè²ãäžæžããã]ãèšå®ããåžžã«åé€ãããŸãbackground-image
ãã¯ãããããããã£.leaflet-default-icon-path
ã®ã§ãç Žã_detectIconPath
ã
ãã®Firefoxæ©èœã䜿çšããŠãã人ãä»ã«äœäººãããã¯ããããŸããããç§ã¯éåžžã«é·ãé䜿çšããŠããŸãã
url()
ãä»ã®CSSããããã£ã®å€ãšããŠã䜿çšã§ããŸããïŒ æ¬¡ã®CSSã䜿çšããããã«ïŒ .leaflet-default-icon-path { -leaflet-icon: url(images/marker-icon.png); }
ãŸãã¯ãã«ã¹ã¿ã CSSããããã£ãèªåã§å®çŸ©ããŠäœ¿çšããããšã¯äžå¯èœã§ããïŒ ãã©ãŠã¶ã¯-leaflet-icon
ããããã£ã_ç解_ããå¿
èŠã¯ãããŸããããããã§ããã©ãŠã¶ã«ããŒã¿ãå
¥åãããã®å€ãã¹ã¯ãªããã§å©çšã§ããããã«ããå¿
èŠããããŸãã
ããã«ã¡ã¯@roques ã
Firefoxã§ãã®ç¹å®ã®ãªãã·ã§ã³ã䜿çšãããšãã«ããã®åé¡ãå ±åããŠããã ãããããšãããããŸãã
Chromeã«ã¯ãã€ã³ã³ãã©ã¹ãæ¡åŒµæ©èœãããããã«èŠããŸããããªãŒãã¬ããã§äœãå£ããã«è²ãå€æŽããã ãã§ãã
æ®å¿µãªãããFirefoxã¯ç解ã§ããªãCSSããããã£ãåé€ããŸãã
ãã ããç»åã®CSSããŒã¿åã¯ã cursor
ãªã©ãä»ã®ããã€ãã®ã«ãŒã«ã§äœ¿çšã§ããŸããããã¯ãFirefoxã§è²ã®ãªãŒããŒã©ã€ãèšå®ã䜿çšãããŠããå Žåã§ãæ£åžžã«æ©èœããããã«èŠããŸãã
http://playground-leaflet.rhcloud.com/yov/1/edit?htmlãcssãoutput
ç§ã¯ãããããŸããšã¬ã¬ã³ã䜿çšããããšãèŠã€ããcursor
ã®ä»£ããã«background-image
ãã®äœ¿çšéã¯ãæã
ã¯CSSã¹ã¿ã€ãªã³ã°ãéããŠããŒã«ãŒãäœãããã«äœãããã®ãããæŽã«å€ããªãã®ã§ã...ãšã«ãããããã¯ãã§ã«ãã¹ã®ããã¯ã§ãæ€åºã®ã¿ã
Webpackã®åé¡ã«å¯ŸåŠããããã«PRãäœæããããšããŠããŸãããããã®åé¿çãä»ããå«ããŸãã
ãã®å Žåã®èªåãã¹ããã©ã®ããã«è¡ãããšãã§ãããããããŸããããåé¿çã¯ãã§ã«é©åã§ãããšæããŸãã
ãã®åé¡ã®æ確ãªè§£æ±ºçãèŠã€ãã人ã¯ããŸããïŒ
Angular + Angular CLIã䜿çšããŠãã人ã®ããã«ã @ Shiva127ã®åçã«
ãããapp.module.ts
å
¥ããããšãã§ããŸãïŒ
// BUG https://github.com/Leaflet/Leaflet/issues/4968
import {icon, Marker} from 'leaflet';
const iconRetinaUrl = 'assets/marker-icon-2x.png';
const iconUrl = 'assets/marker-icon.png';
const shadowUrl = 'assets/marker-shadow.png';
const iconDefault = icon({
iconRetinaUrl,
iconUrl,
shadowUrl,
iconSize: [25, 41],
iconAnchor: [12, 41],
popupAnchor: [1, -34],
tooltipAnchor: [16, -28],
shadowSize: [41, 41]
});
Marker.prototype.options.icon = iconDefault;
.angular-cli.json
ã°ããã©ã€ã³ãè¿œå ããŸãïŒ
"assets": [
"assets",
"favicon.ico",
{ "glob": "**/*", "input": "../node_modules/leaflet/dist/images/", "output": "./assets/" }
],
ããã«ããããã«ãæã«ã¢ã€ã³ã³ãdistãã©ã«ããŒã®assetsãã©ã«ããŒã«ã³ããŒãããŸãïŒsrc / assetã«ã¯è¡šç€ºãããŸããïŒã ãŸããåé¿çãapp.module.ts
é
眮ããããšã¯ãã°ããŒãã«ãããã¿ã€ãå€æŽã€ã³ããŒãïŒRxJSç£èŠå¯èœããããªã©ïŒãç¶æããã®ã«é©ããå Žæã§ãã ããã§ãã³ãŒãããŒã¹ã®ã©ãã«ããŒã«ãŒãã€ã³ããŒãããŠãæ£ããæ©èœããŸãã
ç§ã¯ãã®åé¡ããã®ããã«ä¿®æ£ããŸããã
ããŒã«ãŒdrawOptionsã«ããã©ã«ãã®ã¢ã€ã³ã³ãæäŸããŸããïŒ
const myIcon = L.icon({
...
...
});
const drawOptions = {
....
marker: {
icon: myIcon
}
};
...
次ã«ãL.Draw.Event.CREATEDã®ã¢ã€ã³ã³ãžã®ãã¹ãä¿åããŸãã
this.map.on(L.Draw.Event.CREATED, (e) => {
const layer: any = (e as L.DrawEvents.Created).layer;
const type = (e as L.DrawEvents.Created).layerType;
// Create a marker.
if (type === 'marker') {
let feature = layer.feature = layer.feature || {};
feature.type = "Feature";
feature.properties = feature.properties || {};
feature.properties["markerIconsPath"] = "/assets/icons/";
}
});
æåŸã«ãã¬ã€ã€ãŒã®è¡šç€ºã«ã€ããŠãimagePathãèšå®ããŸããã
if(layer instanceof L.Marker) {
L.Icon.Default.imagePath = layer.feature.properties.markerIconsPath;
layer.setIcon(greenIcon);
}
@codeofsumitãããã®ä¿®æ£ã¯ææ°ããŒãžã§ã³1.3.1ã«å«ãŸããŠããŸããïŒ é©ããããšã«ãç§ã¯ããŒãžã§ã³1.3.1ã䜿çšããŠããŸããããŸã åãåé¡ã«çŽé¢ããŠããŸãã
@vishalrajoleç§ã®ç¥ãéããããã«å¯ŸåŠããããã«æåºãããå¯äžã®PRã¯ïŒ5041ã§ãããããã¯_é·ã_æéã«ããã£ãŠèŠæ±ãããå€æŽã§éãããŠããŸãã
代æ¿ãœãªã¥ãŒã·ã§ã³ïŒ5771ããããŸããããã¯åªããŠããŸãããããå€ãã®å€æŽãå«ãŸããŠããŸãã
ãããã£ãŠãèŠçŽãããšãããã«å¯ŸåŠããããã«æ¿èªãããPRãæåºãã人ã¯èª°ãããŸãããå©ããæè¿ããŸãïŒ
@perliedmanã®èŠãç®ããã¯ãïŒ5771ã®é¢é£ããå€æŽãå¿ èŠã§ãã ããããªããšãããŸããŸãªç¶æ³ã§ãã®åé¡ãçºçãç¶ããããšã«ãªããŸãã ãªããããããŒãžããªãã®ã§ããïŒ
ããã«ã¡ã¯@ mb21 ã
ïŒ5771ã®é¢é£ããå€æŽãå¿ èŠã§ã
å®éãææ¡ãããå€æŽã«ã¯2ã€ã®ã¿ã€ãããããŸãã
2çªç®ã®ãã€ã³ãã¯ãããªãã®ã³ãŒããè¿œå ããŠãã1çªç®ã®ãã€ã³ããåé¿ã§ããªãå Žåã¯èå³æ·±ããã®ã§ãã
1ã€ç®ã¯ãå®éã«ã¯ãCSSã®URLãããããã«ããšã³ãžã³ã䜿çšããŠããéçºè
ã«å¥œæçã§ãã ããã«ãããéçºè
ãæ§æã®èª¿æŽã«ããªãã®æéãè²»ããæ°ããç°å¢ã§ããLeaflet _zero config spirit_ãç¶æãããŸãïŒwebpackãã¡ã€ã«ããŒããŒã䜿çšããå Žåã¯ããšã«ããã«ã¹ã¿ã æ§æãå¿
èŠã§ãïŒã IMHO _against_ Leaflet spiritã§ãïŒã³ã¢ã§ã®äžè¬çãªäœ¿çšæ³ããµããŒãããä»ã®ãŠãŒã¹ã±ãŒã¹ããã©ã°ã€ã³ã«å§ä»»ããŸãïŒã
äžèšã®å€æ°ã®ã³ã¡ã³ãã«ç€ºãããŠããããã«ãéåžžã¯require(image)
ã䜿çšããŠç»åãã¹ãæå®ããããšã§ãæåã«åé¡ãéåžžã«ç°¡åã«è§£æ±ºã§ããŸãã
ãã®ããããã®PRãäœæãããšããŠããå人çã«ã¯ãããã³ã¢ã«ããŒãžããããšã«äžå¿«æãèŠããŸãã å€æŽã¯_éåæ°ã«ã¯å¿ èŠãããŸãã_ã
圌ãã¯ç¢ºãã«éçºè ã®ç掻ã楜ã«ããã®ã«è¯ãã§ãããåé¡ã¯äž»ã«ãã«ãââãšã³ãžã³/ãã¬ãŒã ã¯ãŒã¯ã©ãããŒã®çžäºäœçšã«ãã£ãŠåŒãèµ·ãããããããããç¬èªã®ç¹æ§ãæã¡ãæ¢åã®ãã®ã䜿çšããŠãªãŒãã¬ããã«çŸåšã®ç»åãç°¡åã«äŒããæ¹æ³ããããŸãAPIã
ãã¶ããããè¯ãããã¥ã¡ã³ãïŒãã«ããšã³ãžã³/ãã¬ãŒã ã¯ãŒã¯ã§ã®äœ¿çšã«ç¹åããã»ã¯ã·ã§ã³ãªã©ïŒããã©ã°ã€ã³ã䜿çšããŠããã®åé¡ã«å¯ŸåŠããå¿ èŠããããŸããïŒ
ãŸããç§ã¯è€éããç解ããŠãããã©ããã¯ããããŸããã ããããCSSã§_all_ã€ã¡ãŒãžãã¹ãæå®ã§ããã°ãããããçš®é¡ã®éçºè ã«ãšã£ãŠã¯ééããªãçŽ æŽãããããšã§ãã WebpackãŠãŒã¶ãŒã ãã§ãªããåéçã¢ã»ããã«ããã·ã¥ãè¿œå ããRailsãŸãã¯Djangoã¢ã»ãããã€ãã©ã€ã³ã䜿çšããŠããç§ã®ãããªäººã ãããŸã...
ç§ã¯ãŸã£ããåãåé¡ãçµéšããŸããïŒ
dataïŒimage / png; base64ãiVBORw0 ... AAAAASUVORK5CYII = "ïŒmarker-shadow.png net :: ERR_INVALID_URL
解決çã¯äº€æããããšã§ãïŒ
getIconUrl: function (name) {
if (!IconDefault.imagePath) { // Deprecated, backwards-compatibility only
IconDefault.imagePath = this._detectIconPath();
}
// <strong i="8">@option</strong> imagePath: String
// `Icon.Default` will try to auto-detect the location of the
// blue icon images. If you are placing these images in a non-standard
// way, set this option to point to the right path.
return (this.options.imagePath || IconDefault.imagePath) + Icon.prototype._getIconUrl.call(this, name);
},
ãšïŒ
// ...
const url = (this.options.imagePath || L.Icon.Default.imagePath);
return url.slice(0, -2);
codeofsumitã«ãã£ãŠææ¡ãããããã«ã
ç§ã¯ãããæ¬åœã«è¿·æã§ããããããä¿®æ£ããããã®PRãããããã倧å€æ°ã«ãšã£ãŠå€æŽã¯å¿ èŠãªãããšãããæèŠãã®ããã«ããŒãžãããªãã£ããšããäºå®ãèŠã€ããŸããã ç³ãèš³ãããŸããããPHPãRoRãPythonïŒDjangoïŒãnode.jsã§èŠåŽããŠãã人ãèŠãããŸãããããããã®ã°ã«ãŒã以å€ã®ã倧å€æ°ãã¯ã©ãã«ãããšæããŸããïŒ ã©ã®äºææ§ã®ãããã¬ãŒã ã¯ãŒã¯ããå§ãããŸããïŒ
@macwisã«åæã
åãåé¡ãããããã®ã¹ã¬ããã¯éåžžã«é·ãã§ãã PRãããŒãžããŠã¿ãŸãããïŒ
ããã¯æèŠã§ã¯ãããŸãããããã¯äºå®ã§ãïŒå€§å€æ°ã¯ãã¬ãŒã ã¯ãŒã¯ã䜿çšããªãããCSSãããããªããã®ã§ãã
ååãã§ãã¯ãããšããLeafletã¯unpkg CDNããããŠã³ããŒãããããã®ã§ã¯ãããŸããã§ãããã€ãŸãããã³ãã«ãããŠãããããããããŠããªãCSSã§ãã
äžèšã®å€ãã®ã¡ãã»ãŒãžã§èª¬æãããŠããããã«ãé©åãªè§£æ±ºçã¯ããã©ã«ãã®ã¢ã€ã³ã³ãªãã·ã§ã³ãå®çŸ©ããããšã§ãã
å€ãã®ãã¬ãŒã ã¯ãŒã¯ã¯ãLeafletçµ±åãã©ã°ã€ã³ã®äžéšãšããŠãããè¡ããŸãã
ããèªååããããœãªã¥ãŒã·ã§ã³ãå¿ èŠãªå Žåã§ãããã©ã°ã€ã³ãå ¬éãããªãã·ã§ã³ããããŸãã
PRãããŒãžããŠã¿ãŸãããïŒ
ã³ã¡ã³ããèªãã§ãã ãããäŸïŒ //github.com/Leaflet/Leaflet/issues/4968#issuecomment -382639119
ã¡ãã£ãšãããã³ãããäŒãããããšæããŸãããã¬ãŒã ã¯ãŒã¯ã䜿çšããå Žåã«ãCDNã䜿çšã§ããŸãã ããã¯ãããšãã°Reactã¢ããªã§è¡ãããšã§ãã CDNãä»ããŠå€§ããªã©ã€ãã©ãªãããŒãããŸãã
@ googol7ã
ç§ãééã£ãŠããå Žåã¯èšæ£ããŠãã ãããCDNãä»ããŠLeafletãããŒãããå ŽåãCSSãå€æŽããªãããšãæå³ããŠããå¯èœæ§ããããŸãã ãããã£ãŠããŠãŒã¶ãŒãéåæ°ãå ããŠããŸãã
@ghybs ïŒç§ãããªããã°ãªããªãã£ãããšã¯æ¬¡ã®ãšããã§ããïŒ
// Workaround: https://github.com/Leaflet/Leaflet/issues/4968#issuecomment-269750768
/* eslint-disable no-underscore-dangle, global-require */
delete L.Icon.Default.prototype._getIconUrl
L.Icon.Default.mergeOptions({
iconRetinaUrl: require("leaflet/dist/images/marker-icon-2x.png"),
iconUrl: require("leaflet/dist/images/marker-icon.png"),
shadowUrl: require("leaflet/dist/images/marker-shadow.png"),
})
/* eslint-enable no-underscore-dangle, global-require */
webpackã®èšå®ã¯æ¬¡ã®ããã«ãªããŸãã
module.exports = {
externals: {
leaflet: "L",
},
}
@ googol7èšå®ã®è©³çŽ°ãããããšãããããŸãã
ã€ãŸããCDNããLeaflet JSãããŒãããŸãããCSSãšç»åãã¢ããªã«ãã³ãã«ããŸãã
@ghybsã¯ãããããããã§èµ·ãã£ãŠããããšã ãšæããŸãã
å¿
ãæåã®2ã€ã®ã¹ãããã«åŸã£ãŠãã ããïŒ //leafletjs.com/examples/quick-start/
ä»ã®äººã®ãã¥ãŒããªã¢ã«ã®CSSã䜿çšããŠãããããåæ§ã®åé¡ãçºçããŸããããããã䜿çšããå¿
èŠããããŸã
<link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/leaflet.css"
integrity="sha512-Rksm5RenBEKSKFjgI3a41vrjkw4EVPlJ3+OiI65vTjIdo9brlAacEuKOiQ5OFh7cOI1bkDwLqdLw3Zg0cRJAAQ=="
crossorigin=""/>
ãããŠãã®çŽåŸã®ãªãŒãã¬ããã¹ã¯ãªãã
<script src="https://unpkg.com/[email protected]/dist/leaflet.js"
integrity="sha512-/Nsx9X4HebavoBvEBuyp3I7od5tA0UzAxs+j83KgC8PU0kgB4XiK4Lfe4y4cgBtaRJQEIFCW+oC506aPT2L1zw=="
crossorigin=""></script>
ããã«ã¡ã¯ãã¿ããªã
PRhttps ïŒ//github.com/Leaflet/Leaflet/pull/5771ããã³ãŒããååŸããLeafletãã©ã°ã€ã³ã leaflet-defaulticon-compatibility ããå
¬éããŸããã
ãã®ãã©ã°ã€ã³ã䜿çšããããšã«ãããLeaflet Default Iconã¯ã¢ã€ã³ã³ã€ã¡ãŒãžãã¹ã®åæ§ç¯ãè©Šã¿ãªããªããŸãããCSSã«å®å
šã«äŸåããŸãã ããããããšã§ãCSSã«åºã¥ããŠã¢ã»ãããèªåçã«ç®¡çããïŒéåžžã¯url()
æžãçŽãïŒãã«ããšã³ãžã³ããã³ãã¬ãŒã ã¯ãŒã¯ãšå®å
šã«äºææ§ããããŸãã
ãã©ã°ã€ã³ïŒCSS + JSïŒ_after_LeafletãããŒãããã ãã§ãã
äŸïŒwebpackïŒ
import 'leaflet/dist/leaflet.css'
import 'leaflet-defaulticon-compatibility/dist/leaflet-defaulticon-compatibility.webpack.css'
import * as L from 'leaflet'
import 'leaflet-defaulticon-compatibility'
ïŒãã¢ïŒ
å€ãã®éçºè ããã®ãããªæ©èœãLeafletã³ã¢ã«çŽæ¥çµã¿èŸŒãããšãæãã§ããããšã¯ç解ã§ããŸãããè¿œå ãããã³ãŒãã¯å€§å€æ°ã®ãšã³ããŠãŒã¶ãŒã«ãšã£ãŠåœ¹ã«ç«ããªããšäž»åŒµãããŠããŸãã ãã®ãããã³ã¢ãã·ã³ãã«ã«ä¿ã€ãšããLeafletã®ç²Ÿç¥ã«æ²¿ã£ãŠããã©ã°ã€ã³ã«ããããšã«ããŸããã
ãã©ã°ã€ã³ãªããžããªã®åäœã«åé¡ãæžå¿µãããå Žåã¯ã
å®éã«ã¯ãwebpackã䜿çšããŠããå Žåããã®åé¡ãçºçããŸãã webpackã䜿çšãããµã€ããå¢ããåŸåã«ãããŸãã ããããã©ã°ã€ã³ãšããŠé
眮ããããšã¯çæ³çã§ã¯ãããŸãããç§èŠã§ãããã®çš®ã®åé¡ãä¿®æ£ãããã©ã°ã€ã³ãæ¢ããŠãã人ãããªãããã§ãïŒdupãéãããšããšåãããã«ïŒã
ããã¯æ©èœãšããããããã°ä¿®æ£ã§ããããããªãŒãã¬ããå
ã§ããã確èªããããšæããŸã...
Angular 6ã§ãã®åé¡ã解決ãããå Žåã¯ã angular.json
æžããŠãã ããïŒ
{
"glob": "**/*",
"input": "./node_modules/leaflet/dist/images/",
"output": "./assets/leaflet/"
}
ãã®åŸã以åã®åçã®ããã€ãã瀺åããŠããããã«ã Marker
ããã©ã«ãã®åäœããªãŒããŒã©ã€ãããŸãã
import { Icon, icon, Marker, marker } from 'leaflet';
@Component({
selector: 'app-something',
templateUrl: './events.component.html',
styleUrls: ['./events.component.scss']
})
export class SomeComponent implements OnInit {
// Override default Icons
private defaultIcon: Icon = icon({
iconUrl: 'assets/leaflet/marker-icon.png',
shadowUrl: 'assets/leaflet/marker-shadow.png'
});
ngOnInit() {
Marker.prototype.options.icon = this.defaultIcon;
}
}
ç§ã䜿çšãããããšåãåé¡ãçºçããAngularããã±ãŒãžã¯æ¬¡ã®ãšããã§ãïŒ ngx-leaflet
ããŒãïŒ
StackOverflowã®_t.animal_ããã®åçã«ãããšãAngular6ã«ã¯å°ããªåé¡ããããŸãã
Angular 6ã§ã¯ãã¢ãŒããã¯ã
build
ãštest
2ã€ã®é¢é£ãããã«ããŒãããããšã«æ³šæããŠãã ããã
å¿
ãbuild
äžã«çœ®ããŠãã ããã
@ marko-jovanovicæ
å ±ã«æè¬ããŸããããããã®ã¢ã»ããã䜿çšããŠããããããã±ãŒãžãµã€ãºãçž®å°ãããå Žåã¯ã©ããªããŸããïŒ
ããªãã®ææ¡ã¯ããŸã ç§ã®åé¿çã®å®çŸ©ã§ããIMOã«è©²åœããŸãã
@HarelMåŠæ ¡ã®ãããžã§ã¯ããæ¥ãã§çµããã®ã§ãä»ã®è§£æ±ºçãæãã€ãããšã¯ã§ããŸããã§ããã ããã¯å®ç§ã§ã¯ãªããããã±ãŒãžãµã€ãºã倧ãããªãããšã¯ããã£ãŠããŸãããç§ã®è§£æ±ºçã¯ç§ã«ãšã£ãŠååã§ãããç§ã®çããä»ã®äººã«ãäœããã®åœ¢ã§åœ¹ç«ã€ããšãé¡ã£ãŠããŸããã
@ marko-jovanovicããªãã®è§£æ±ºçã¯çŽ æŽãããã§ãããããŠç§ããããä»ã®äººãå©ããããšãã§ããããšãé¡ã£ãŠããŸãã åé¿çã§ã¯ãªãã解決çãæãã§ããŸã:-)
@ marko-jovanovicããã«ã¡ã¯ãç§ã¯åŠæ ¡ã®ãããžã§ã¯ãïŒAngular 6ïŒã«åå ããããŠããªãããŸããããªãã®ãç解ã§ããŸããã æ£çŽãªãšãããç§ã¯ããã«ããããããã¹ãŠã®ãã®ã«å®å šã«ç²ŸéããŠããŸãã
ã³ã³ããŒãã³ãã®ngOnInit
-Functionã«ã³ãŒããæ¿å
¥ãããšã iconUrl
ãšshadowUrl
ãèšå®ããéšåã§ãšã©ãŒãã¹ããŒãããŸãã
Argument of type '{ iconUrl: (options: IconOptions) => Icon<IconOptions>; shadowUrl: any; }' is not assignable to parameter of type 'IconOptions'.
Types of property 'iconUrl' are incompatible.
Type '(options: IconOptions) => Icon<IconOptions>' is not assignable to type 'string'.
ç§ã¯äœãã足ããªãã®ã§ããïŒ åãã£ãŠæè¬ããŸãïŒ
@gittikerã€ã³ããŒããã³ã³ããŒãã³ããããã³ngOnInitã®äŸã䜿çšããŠåçãæŽæ°ããŸããã ãã¹ãŠãããŸããã£ããã©ããæããŠãã ããã :)
@gittikerã€ã³ããŒããã³ã³ããŒãã³ããããã³ngOnInitã®äŸã䜿çšããŠåçãæŽæ°ããŸããã ãã¹ãŠãããŸããã£ããã©ããæããŠãã ããã :)
ã¯ããã©ããããããšãããããŸãããããã¯æçµçã«åäœããŸãã ç§ã¯ããªãã®URLãå°ãæäœããªããã°ãªããªãã£ãã®ã§ããã¯
'assets/leaflet/images/marker-icon.png
代ããã«'assets/leaflet/marker-icon.png',
ã 圱ã®ç»åãåæ§ã§ãã
@ crob611ããããšãããããŸããããã®æ¹æ³ã§åé¡ã解決ããããšããŸããã
@ marko-jovanovicããªãã¯ç§ãæã£ãïŒ ãããã @ HarelMãèšãããã«ã解決çã¯ãããŸãããïŒ
ã©ããããããšãããããŸããããç§ã«ãšã£ãŠã¯æ¬¡ã®ã³ãŒããæäŸããŸããïŒïŒAngular 6ããã³leaflet1.3.4ïŒ
æåã®äžæ©
ïŒhttps://codehandbook.org/use-leaflet-in-angular/ïŒ
ãããããã®åŸãã¢ã€ã³ã³ã¯è¡šç€ºãããŸããã§ãã
ãšã©ãŒååŸã¢ã€ã³ã³ç»å
net :: ERR_INVALID_URL
ã³ã³ããŒãã³ãã«æ¬¡ã®ã³ãŒããæ¿å
¥ããŠè§£æ±ºããŸã
L.Icon.Default.prototype._getIconUrl; `ãåé€ããŸã
L.Icon.Default.mergeOptions({
iconRetinaUrl: '/assets/leaflet/dist/images/marker-icon-2x.png',
iconUrl: '/assets/leaflet/dist/images/marker-icon.png',
shadowUrl: '/assets/leaflet/dist/images/marker-shadow.png',
});`
ãªãŒãã¬ãã1.3.4ãšvue2-leaflet1.2.3ã䜿çšãããœãªã¥ãŒã·ã§ã³ïŒ
import { L, LControlAttribution, LMap, LTileLayer, LMarker, LGeoJson, LPopup } from 'vue2-leaflet'
delete L.Icon.Default.prototype._getIconUrl
L.Icon.Default.mergeOptions({
iconRetinaUrl: require('leaflet/dist/images/marker-icon-2x.png'),
iconUrl: require('leaflet/dist/images/marker-icon.png'),
shadowUrl: require('leaflet/dist/images/marker-shadow.png')
})
ç§ã®2ã»ã³ãïŒwebpackã®åé¡ã¯ãããã·ã¥ããããã¡ã€ã«åãåå ã ã£ãã®ã§ããªãŒãã¬ããã®ç»åãããã·ã¥ããªãããã«file-loader
ãæ§æããŸããã
use: [{
loader: 'file-loader',
options:
{
name(file) {
console.log(file)
if (file.match(/(layers-2x\.png|layers\.png|marker-icon\.png|marker-icon-2x\.png|marker-shadow\.png)/)) {
return '[name].[ext]'
}
return '[name]-[hash].[ext]'
},
context: 'app/frontend' // <-- project specific
}
}]
倱瀌ã ãå¹ççãªAFAIKã
@ghybsããããã£ãã¯ã¹ã«æè¬ããŸãã ç§ã¯ããŸããŸãªãããžã§ã¯ãã§ãã®ãã°ã«æ°åééããŸããã ãã®ã¹ã¬ããå šäœã¯ãä¿®æ£ãããŠããªãããåé¡ãšèŠãªãããŠããªããšããã®ã¯ã°ãããŠããããã§ãã
Webpackã§ã©ã€ãã©ãªã䜿çšãããšãã®ãšã©ãŒãçºçãããããgoogleãç§ãããã«é£ããŠããŸããã
ãããã®ç»åãsvgãšããŠã€ã³ã©ã€ã³åãããªãçç±ã誰ããç¥ã£ãŠããŸããïŒ
ããã¯postcss
ãšpostcss-inline-svgã§ç°¡åã«è§£æ±ºã§ãããšæããŸãã ã¢ã€ã³ã³ã¯ãå€éšã®png
ã§ã¯ãªããã€ã³ã©ã€ã³ã®svg
ãã¡ã€ã«ã«ãªããŸãã ãã®åé¡ããªããªããšãã¢ã€ã³ã³ã¯ããé®®æã«ãªããŸãã
ãããã®ç»åãsvgãšããŠã€ã³ã©ã€ã³åãããªãçç±ã誰ããç¥ã£ãŠããŸããïŒ
ã¬ã¬ã·ãŒãã©ãŠã¶ã®ãµããŒãã
ããããšã@IvanSanchez
次ã«ã2ã€ã®è§£æ±ºçãèããããŸãã 1ã€ã¯ãbase64ã§ãšã³ã³ãŒãããã.png
ãšããŠç»åãã€ã³ã©ã€ã³åããããšã§ãã ãã1ã€ã®æ¹æ³ã¯ã .svg
ã¢ã€ã³ã³ãã€ã³ã©ã€ã³åããã¬ã¬ã·ãŒãã©ãããã©ãŒã ãã¿ãŒã²ãããšããéçºè
ãäœæããŠããã©ã«ãã®ã¢ã€ã³ã³ãäžæžãããããšã§ãã
ãããã®ãœãªã¥ãŒã·ã§ã³ã®ããããããã«ãªã¯ãšã¹ããã䟡å€ããããŸããïŒ
ãªãŒãã¬ããã§ãµããŒããããŠãããã¹ãŠã®ãã©ãŠã¶ã®ãã¡ã以äžã¯svgïŒ caniuse ïŒããµããŒãããŠããŸããã
ç»åãbase64ãšããŠã€ã³ã©ã€ã³åããŸã
https://github.com/Leaflet/Leaflet/issues/4968#issuecomment-322422045ãåç §ããŠ
ãããæ©èœãããã«ã¯ãã¢ã³ã«ãŒãšãµã€ãºãè¿œå ããå¿ èŠããããŸããã
import icon from 'leaflet/dist/images/marker-icon.png';
import iconShadow from 'leaflet/dist/images/marker-shadow.png';
let DefaultIcon = L.icon({
iconUrl: icon,
shadowUrl: iconShadow,
iconSize: [24,36],
iconAnchor: [12,36]
});
L.Marker.prototype.options.icon = DefaultIcon;
ç§ãåãåé¡ãæ±ããŠããŸãïŒFlaskã䜿çšããŠããwebpackãªã®ã§ããã¹ãŠã®èŠçŽ ã¯éçãã©ã«ããŒã«ããã¯ãã§ãïŒãããexports is read-onlyããšã©ãŒãçºçããããã@ giorgi-mã®ä¿®æ£ã§ã¯äžååã§ãïŒ Firefoxãpngã€ã³ããŒãã«ãªã³ã¯ãããŠããããã§ããïŒïŒ
åé¡ã¯è§£æ±ºãããããã§ããã1.4.0ã§ãåé¡ãçºçããŠããã®ã§ãä¿®æ£æ¹æ³ã¯äœã§ããããã
vue2-leaflet2.0.2ããã³leaflet1.4.0ã§ãã®åé¡ãçºçããŠããŸãã
ããã¯ããªãåããååšããŠããããã§ãããæ瀺ããããœãªã¥ãŒã·ã§ã³ã®ååã¯æ©èœããŠããªãããã§ãã
誰ãããã®åé¡ã®æ ¹æ¬ãç解ããŸãããïŒ
ããŒãžã§ã³ãvue2-leafletãïŒã2.0.3ããªãŒãã¬ãããleafletãïŒã1.4.0ãã§ãåãåé¡ãçºçããŸãã
webpackãå®è¡ããŠããŸãã
ãã®åãåé¡ã§èŠã€ãã£ã解決çã䜿çšããŠãvue2-leaflet2.0.3ãšleaflet1.4.0ãæ£åžžã«äœ¿çšããŠããŸãã
import L from 'leaflet'
require('../../node_modules/leaflet/dist/leaflet.css')
// FIX leaflet's default icon path problems with webpack
delete L.Icon.Default.prototype._getIconUrl
L.Icon.Default.mergeOptions({
iconRetinaUrl: require('leaflet/dist/images/marker-icon-2x.png'),
iconUrl: require('leaflet/dist/images/marker-icon.png'),
shadowUrl: require('leaflet/dist/images/marker-shadow.png')
})
質åããå¿ èŠãããããè¯ã質åã¯ããªããããåé¡ã解決ããåå ãšãªã£ãããŒãžãããã³ãŒãã§ä¿®æ£ãããªãã£ãã®ããšããããšã ãšæããŸãã ããŸãããåé¿çã¯çŽ æŽãããã§ãããããã¯ç®±ããåºããŠããã«æ©èœããã¯ãã§ãããããã§ãæªè§£æ±ºã®åé¡ã§ããå¿ èŠããããŸãã
芪æãªãã¿ããªã
ãªãŒãã¬ããã¯ããã«äœ¿çšã§ããŸãã
Leafletãšçµã¿åãããWebpackïŒããã³ãã®ä»ã®ãã«ããšã³ãžã³ïŒã¯ããã®ãŸãŸã§ã¯æ©èœããŸããã
https://github.com/Leaflet/Leaflet/issues/4968#issuecomment -399857656ã§ææ¡ãããŠãããœãªã¥ãŒã·ã§ã³ãåç §ããŠãã ããïŒ leaflet-defaulticon-compatibility
å€ãã®éçºè ããã®ãããªæ©èœãLeafletã³ã¢ã«çŽæ¥çµã¿èŸŒãããšãæãã§ããããšã¯ç解ã§ããŸãããè¿œå ãããã³ãŒãã¯å€§å€æ°ã®ãšã³ããŠãŒã¶ãŒã«ãšã£ãŠåœ¹ã«ç«ããªããšäž»åŒµãããŠããŸãã ãã®ãããã³ã¢ãã·ã³ãã«ã«ä¿ã€ãšããLeafletã®ç²Ÿç¥ã«æ²¿ã£ãŠããã©ã°ã€ã³ã«ããããšã«ããŸããã
ããŒããŒãæ§æãããããã1ã€ã®å žåçãªãœãªã¥ãŒã·ã§ã³ã§ããwebpackã䜿çšããŸãã
import L from 'leaflet';
delete L.Icon.Default.prototype._getIconUrl;
L.Icon.Default.mergeOptions({
iconRetinaUrl: require('leaflet/dist/images/marker-icon-2x.png'),
iconUrl: require('leaflet/dist/images/marker-icon.png'),
shadowUrl: require('leaflet/dist/images/marker-shadow.png'),
});
ä»ã®ãã«ããšã³ãžã³ãšãã¬ãŒã ã¯ãŒã¯ã®çµã¿åããã«ã€ããŠããã®ã¹ã¬ããã®äžäœã§ææ¡ãããŠããä»ã®ãœãªã¥ãŒã·ã§ã³ããããŸãã
ãããã®ãœãªã¥ãŒã·ã§ã³ãã³ã¡ã³ãã«åãããã®ãé²ãããã«ããã®ã¹ã¬ãããããã¯ããŸãã
å ±æãœãªã¥ãŒã·ã§ã³ãããããšãããããŸããïŒ ïŒ+1ïŒ
æãåèã«ãªãã³ã¡ã³ã
ç¡å¹ãªdataïŒurlã®åé¡ãåé¿ããããã«ç§ãè¡ã£ãããšãå ±æãããã£ãã åºæ¬çã«ãããã©ã«ãã®ã¢ã€ã³ã³ããæäŸãããããŒã«ãŒã¢ã€ã³ã³ãšåœ±ã䜿çšããæ°ããã¢ã€ã³ã³ã«èšå®ããŸãããwebpackããããã®ç»åã®ããŒã¿ãšã³ã³ãŒãã£ã³ã°ãåå¥ã«åŠçã§ããããã«ããŸãã ãã®ãããªãã¡ã€ã«ãã©ããã«å«ããã ãã§ãã
ããããã網èã¢ã€ã³ã³ãå«ããããã«èª¿æŽããããšãã§ããŸãã