質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

7610閲覧

Open Street Mapにカテゴリ毎に違ったアイコンを表示したい

capella

総合スコア45

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2016/04/29 16:55

###前提・実現したいこと
OSMにGeojsonデータを読み込んで、カテゴリ毎に違ったアイコンを表示したいと思っています(Leaflet.js使用)。

Geojsonを読み込んでマーカーを立てて、ポップアップさせるところまでは出来たのですが、Javascriptを理解していないせいか、チュートリアルを見てもどうもその後がちんぷんかんぷんです。

###該当のソースコード

Javascript

1$.getJSON("geojson.php", function (data) { 2 3 var geojson = L.geoJson(data, { 4 onEachFeature: function (feature, layer) { 5 layer.bindPopup('<b>' + feature.properties.name + '</b><br />' + feature.properties.address); 6 } 7 8 }); 9 10 geojson.addTo(map); 11 12});

json

1{ 2 "type": "FeatureCollection", 3 "features": [{ 4 "type": "Feature", 5 "geometry": { 6 "type": "Point", 7 "coordinates": ["140.10", "39.60"] 8 }, 9 "properties": { 10 "name": "鈴木商店", 11 "address": "宮城県仙台市青葉区", 12 "category": "1" 13 } 14 }, { 15 "type": "Feature", 16 "geometry": { 17 "type": "Point", 18 "coordinates": ["140.00", "39.40"] 19 }, 20 "properties": { 21 "name": "佐藤水産", 22 "address": "宮城県名取市", 23 "category": "2" 24 } 25 }

###試したこと
IF分岐を考える前に、とりあえずカスタムマーカーに変えてみようと、Leaflet.jsのチュートリアルを参考にしてみましたが、早くもこの段階でつまずいてしまいました。

Leaflet.jsチュートリアル

Javascript

1var greenIcon = L.icon({ 2 iconUrl: 'leaf-green.png', 3 shadowUrl: 'leaf-shadow.png', 4 5 iconSize: [38, 95], // size of the icon 6 shadowSize: [50, 64], // size of the shadow 7 iconAnchor: [22, 94], // point of the icon which will correspond to marker's location 8 shadowAnchor: [4, 62], // the same for the shadow 9 popupAnchor: [-3, -76] // point from which the popup should open relative to the iconAnchor 10});

を定義し、

Javascript

1L.marker([51.5, -0.09], {icon: greenIcon}).addTo(map).bindPopup("I am a green leaf.");

を、前述した「geojson.addTo(map);」の前に差し込もうにも、どこをどう置き換えたらいいか分かりません。また、カテゴリ別にアイコンを表示するためのIF分岐もこのブロックの中でやるのでしょうか。

OSMのカスタマイズについては、GoogleMapsと違ってなかなか目的の情報に辿り着かず、書籍も見当たらないため、かなり苦戦しておりました。ご指導いただけたら幸いです。よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

多分こんな感じかなと思う。

JavaScript

1$.getJSON( 'geojson.php', function ( data ) { 2 var geojson = L.geoJson( data, { 3 onEachFeature: function ( feature, layer ) { 4 if ( feature.properties && feature.properties.popupContent ) { 5 layer.bindPopup( '<b>' + feature.properties.name + '</b><br />' + feature.properties.address ); 6 } 7 } 8 , pointToLayer: function( feature, latlng ) { 9 var icn = greenIcon; // デフォルトアイコンを指定 10 if ( feature.properties && feature.properties.category === '1' ) { // "category": "1" の場合。 "category": 1 の場合 === 1 とする 11 icn = redIcon; 12 } 13 return L.marker( latlng, { icon: icn }); 14 } 15 }); 16 geojson.addTo(map); 17}); 18

リファレンスを見ながら、それが何を表すかを考え、そのあたりをキーワードに検索すれば、案外答えに辿り着けることが多い。

【Documentation - Leaflet - a JavaScript library for interactive maps】
http://leafletjs.com/reference.html#geojson

【Leaflet.js geoJson marker - Google 検索】
https://www.google.co.jp/search?num=100&safe=off&hl=ja&q=Leaflet.js+geoJson+marker



これが応用を含めて書いてある気がする(英語)。

【Creating a Leaflet.js mapping app from the ground up | Technical Tidbits From Spatial Analysis & Data Science】
http://zevross.com/blog/2014/10/28/tips-for-creating-leafleft-js-maps/

アイコンを使った書き方の例(×2)。(質問文と回答をあわせてみれば正解が見えるはず)

【Leaflet: how to use a custom marker on a geojson layer? - Geographic Information Systems Stack Exchange】
http://gis.stackexchange.com/questions/121424/leaflet-how-to-use-a-custom-marker-on-a-geojson-layer

【How can I change the style of marker in leaflet (from GeoJSON)? - Geographic Information Systems Stack Exchange】
http://gis.stackexchange.com/questions/65964/how-can-i-change-the-style-of-marker-in-leaflet-from-geojson

投稿2016/04/29 17:51

編集2016/04/29 17:52
kei344

総合スコア69400

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

capella

2016/04/29 18:19

解決しました!まだやりたい事を実現するまでには程遠いのですが… ありがとうございました!
kei344

2016/04/29 18:27

解決できたようで良かったです。 > まだやりたい事を実現するまでには程遠いのですが… がんばってください!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問