Leaflet: L.Icon.Defaultは間違った画像URLをもたらしたす

䜜成日 2016幎09月28日  Â·  90コメント  Â·  ゜ヌス: Leaflet/Leaflet

  • [x]助けを求めるのではなく、バグを報告しおいたす
  • []動䜜が文曞化され、期埅されおいるこずを確認するために
  • [x]これはLeafletコヌドの問題であり、自分のコヌドや䜿甚しおいるフレヌムワヌクCordova、Ionic、Angular、React の問題ではないず確信しおいたす。
  • []ただ報告されおいないこずを確認するために、問題を怜玢したした

画像の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犁止

compatibility

最も参考になるコメント

無効な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;

おそらく、網膜アむコンも含めるように調敎するこずができたす。

党おのコメント90件

  • サヌバヌにアクセスできる公開Webペヌゞがあるので、問題を自分で再珟できたすか
  • どのOSずWebブラりザを䜿甚しおいたすか

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぀のたったく異なるプロゞェクトで突然同じ問題が発生したした。
マップにマヌカヌを远加するず、画像が芋぀かりたせん。 ブラりザはこの゚ラヌをスロヌしたす
image

わかりたした、䜕かを手に入れたした。

したがっお、画像アむコンず圱が芋぀からないため、マヌカヌは珟圚このように芋えたす。
image

リヌフレットのこの関数

_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パスはすでに間違っおいたす。理由はただわかりたせん。 したがっお、マヌカヌは次のようになりたす。

image

@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が蚭定されおいるので、マヌカヌの画像を䜿甚しお䌞びおいたす
image

マヌカヌ画像をハヌドコヌディングするこのコミットに関連しおいる可胜性がありたすか
https://github.com/Leaflet/Leaflet/commit/837d19093307eb5eeb1fca6536962a1ab1573dd5

@ Radu-Filip私はあなたのPRにこれらの倉曎を加えるこずでそれを修正するこずができたした-これが他にどのような圱響を䞎える可胜性があるかはわかりたせん
image

問題は、あなたが蚀ったように、基本的にすべおのアむコンのデフォルト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のパフォヌマンスビュヌは次のずおりです。

1000 markers icons as external URLs

比范するず、むンラむンbase64ずしお1000個のマヌカヌアむコンがありたすタむムラむンのスケヌルが異なるこずに泚意しおください、申し蚳ありたせん

1000 markers icons as inlined base64 URLs

ご芧のように、むンラむン画像を䜿甚するず、䜕らかの理由でレむダヌの構成が遅れ、党䜓の負荷が玄1秒長くなりたす。

カゞュアルな䜿甚の堎合、これはおそらく問題ではありたせんが、倚くのマヌカヌを䜿甚する堎合は、これが適切である可胜性がありたす。

この長期的な察凊方法の提案

  • コヌドレビュヌに蚘茉されおいる問題に察凊するために5041を修正したす。 これにより、むンラむンアむコンがすぐに機胜するようになりたす
  • むンラむンアむコンが䜿甚されおいる堎合は、これが理想的ではない可胜性があるこずを瀺すために譊告をログに蚘録したす

もう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぀のタむプがありたす。

  • 画像フォルダの堎所だけでなく、各画像パスを読み取るため、ビルド゚ンゞンwebpackファむルロヌダヌなどによっお倉曎されたURLは、再構築/掚枬されるのではなく、そのたた読み取られたす。
  • CSSから他のすべおのデフォルトアむコンオプションを読み取り、すべおの構成が1か所に集められるようにしたす。

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 をサポヌトしおいたせん。

  • IE7および8
  • Androidブラりザ2. *

画像を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

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡