2016-11-18 12 views
1

リーフレットがSQLデータを使用してカスタムアイコンを使用するのに苦労しています。リーフレットのMysqlとカスタムアイコン

私はSQL定義された色を使用するポリゴンを得ているが、私は{icon: }と同じ方法を使用しようとするたびに、私はvarが働いていないとSQLデータを設定しようと
jQuery.Deferred exception: t.icon.createIcon is not a function TypeError: t.icon.createIcon is not a function

で終わります
var myicon = companies[i]['type']

ただし、ポップアップでcompanies[i]['type']を呼び出すと正常に動作し、データが表示されます。

データベースでは、フィールドはtypeと呼ばれ、gasIconまたはdefaIconなどの文字列としてフォーマットされているため、呼び出されると異なるアイコンに一致します。

ここにマーカーコードがあります。

function addCompanies() { 
    var TypeIcon = L.Icon.extend({ 
    options: { 
     shadowUrl: './images/type-shadow.png', 
     iconSize: [33, 44], 
     shadowSize: [36, 39], 
     iconAnchor: [17, 44], 
     shadowAnchor: [0, 50], 
     popupAnchor: [-3, -50] 
    } 
    }); 
    var gasIcon = new TypeIcon({ 
     iconUrl: './images/gasIcon.png' 
     }), 
     ammuIcon = new TypeIcon({ 
     iconUrl: './images/ammuIcon.png' 
     }), 
     copsIcon = new TypeIcon({ 
     iconUrl: './images/copsIcon.png' 
     }), 
     carsIcon = new TypeIcon({ 
     iconUrl: './images/carsIcon.png' 
     }), 
     bankIcon = new TypeIcon({ 
     iconUrl: './images/bankIcon.png' 
     }), 
     defaIcon = new TypeIcon({ 
     iconUrl: './images/defaIcon.png' 
     }), 
     hospIcon = new TypeIcon({ 
     iconUrl: './images/hospIcon.png' 
     }); 

    for (var i = 0; i < companies.length; i++) { 
    var marker = L.marker([ 
     companies[i]['latitude'], 
     companies[i]['longitude'] 
    ],{ 
     icon: companies[i]['type'] 
    }).addTo(map); 

    marker.bindPopup("<b>" + 
        companies[i]['company'] + "-" + 
        companies[i]['type'] + 
        "</b><br>Details:" + 
        companies[i]['details'] + 
        "<br />Telephone: " + 
        companies[i]['telephone']); 
    } 
} 

icon: companies[i]['type']が動作しない理由を理解するが、color: areas[i]['color']しないでください。

多くの方に感謝しておりますが、これは初めての質問ですので、回答を見つけるのに十分な情報を残しておかないと謝罪しますが、必要に応じてさらに投稿します。

+0

何その後、あなたは、このような作業アイコンの参照を取得することができます

var icons = { gasIcon: new TypeIcon({iconUrl: './images/gasIcon.png'}), ammuIcon: new TypeIcon({iconUrl: './images/ammuIcon.png'}), copsIcon: new TypeIcon({iconUrl: './images/copsIcon.png'}) } 

:あなたがそうのようなオブジェクトにあなたのアイコンを置くことができ、この問題を解決するには

'companies [i] ['type']'の値は? isは文字列か 'L.Icon'のインスタンスですか? – IvanSanchez

+0

DBに追加するときに選択どのラジオボタンに応じて、 'gasIcon ammuIcon copsIcon carsIcon文字列として格納されているすべてが defaIcon' bankIcon hospIconすることができます。 – Vance

答えて

0

コメントにヒントがあるので、companies[i]['type']の値は文字列です。これは変数にはなりません。この場合は、いずれかのアイコンへの参照になります。これがポップアップテキストでも機能するのは、ポップアップテキストにアイコン参照を入れて、[object Object]と書かれているものを得るのであればあまり役に立ちません。

この結果はicon: "gasIcon"であり、icon: gasIconではありません。

icon: icons[companies[i]['type']] 

デモ:https://plnkr.co/edit/Gyjl3MFmsC8g4yPS8n5V?p=preview

+0

魅力的に働き、何かを教えてくれました。ありがとうございました。 – Vance