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

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

ただいまの
回答率

90.37%

  • JavaScript

    18786questions

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

OpenStreetMapに検索機能を付けたい

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 862

oyatsu8

score 70

前提・実現したいこと

OpenStreetMapの初心者です。
WEBページにOpenStreetMapを埋め込み、
レイヤーをiframeの外から操作(表示、非表示)したり、
検索機能を付けて、自分が読み込ませているCSV内の検索が出来るようにしたいです。

発生している問題・エラーメッセージ

該当のソースコード

試したこと

課題に対してアプローチしたことを記載してください

現在umapを使っており、レイヤー操作は出来るのですが、
検索や、外部操作が出来るかどうかがわかりません(自分が今まで調べた中には情報がありませんでした)。

leafletは少し触り、簡単なものであれば動かす事ができました。

補足情報(言語/FW/ツール等のバージョンなど)

より詳細な情報

データベースはほとんど使用したことが無いのですが、
必要であればどのように使えばいいのか、
leaflet + ○○
のような形で教えて頂けると助かります。

どうぞよろしくお願いします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

本格的な検索というわけではありませんが、マーカーから検索をするものなら下記のようなものがあるようです。

【GitHub - stefanocudini/leaflet-search: Search stuff in a Leaflet map】
https://github.com/stefanocudini/leaflet-search#examples

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/09/29 10:15

    回答ありがとうございます、遅くなってしまい申し訳ありません。
    今から試してみます。

    キャンセル

  • 2016/09/30 17:35

    ありがとうございます。教えて頂いた物の中に自分がやりたいことに近いものがあったのですが、複数表示したい場合にどうしたらいいかがわかりませんでした。例えば下記のjsのコードでblackをblueにした場合で、blueを検索窓に入力した場合、2つ表示されてほしいのですが、下記のコードでは出来ませんでした。単純にjsの理解かと思うのですが、アドバイス頂けたら幸いです。

    http://labs.easyblog.it/maps/leaflet-search/examples/methods.html

    <script>

    //sample data values for populate map
    var data = [
    {"loc":[41.575330,13.102411], "title":"aquamarine"},
    {"loc":[41.575730,13.002411], "title":"black"},
    {"loc":[41.807149,13.162994], "title":"blue"},
    {"loc":[41.507149,13.172994], "title":"chocolate"},
    {"loc":[41.847149,14.132994], "title":"coral"},
    {"loc":[41.219190,13.062145], "title":"cyan"},
    {"loc":[41.344190,13.242145], "title":"darkblue"},
    {"loc":[41.679190,13.122145], "title":"darkred"},
    {"loc":[41.329190,13.192145], "title":"darkgray"},
    {"loc":[41.379290,13.122545], "title":"dodgerblue"},
    {"loc":[41.409190,13.362145], "title":"gray"},
    {"loc":[41.794008,12.583884], "title":"green"},
    {"loc":[41.805008,12.982884], "title":"greenyellow"},
    {"loc":[41.536175,13.273590], "title":"red"},
    {"loc":[41.516175,13.373590], "title":"rosybrown"},
    {"loc":[41.506175,13.173590], "title":"royalblue"},
    {"loc":[41.836175,13.673590], "title":"salmon"},
    {"loc":[41.796175,13.570590], "title":"seagreen"},
    {"loc":[41.436175,13.573590], "title":"seashell"},
    {"loc":[41.336175,13.973590], "title":"silver"},
    {"loc":[41.236175,13.273590], "title":"skyblue"},
    {"loc":[41.546175,13.473590], "title":"yellow"},
    {"loc":[41.239190,13.032145], "title":"white"}
    ];

    var map = new L.Map('map', {zoom: 9, center: new L.latLng(data[0].loc) }); //set center from first location

    map.addLayer(new L.TileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png')); //base layer

    var markersLayer = new L.LayerGroup(); //layer contain searched elements
    map.addLayer(markersLayer);

    var controlSearch = new L.Control.Search({layer: markersLayer, initial: false, position:'topright'});

    map.addControl( controlSearch );

    ////////////populate map with markers from sample data
    for(i in data) {
    var title = data[i].title, //value searched
    loc = data[i].loc, //position found
    marker = new L.Marker(new L.latLng(loc), {title: title} );//se property searched
    marker.bindPopup('title: '+ title );
    markersLayer.addLayer(marker);
    }

    $('#textsearch').on('keyup', function(e) {

    controlSearch.searchText( e.target.value );

    })

    </script>

    キャンセル

  • 2016/09/30 17:49

    ダウンロードしたファイルの中に、「/examples/multiple-results.html」というものがあるのでそれを確認してみてください。

    キャンセル

  • 2016/10/03 01:27

    ありがとうございます!LayerGroupというものがあることすら知らず、、 http://leafletjs.com/reference-1.0.0.html#layergroup 更に可能だったら質問させてください、例えば /examples/multiple-results.html のようなコードにgeojsonを読み込ませて、そのjsonの中のproperties の内容ごとにLayer分けするようなことがしたいのですが、それは無理でしょうか?  {
    "type": "Feature",
    "properties": {
    "Prefecture": "山形県",
    "Prefectural capital": "山形市",
    "Place": "スキー場"
    },
    "geometry": {
    "type": "Point",
    "coordinates": [
    140.3803719,
    38.4833438
    ]
    }
    },


    例えば、スキー場というレイヤーがあって、geojsonの propertiesの中に「スキー場」があるものは全てピンが立つようなことがしたいと考えています

    キャンセル

  • 2016/10/05 02:04

    > それは無理でしょうか?
    出来るとは思いますよ。コメント欄に書いておられたコードの「var data = [/*内容*/];」のような感じで処理すれば出来ると思います。JavaScript の知識が無ければ難しいとは思いますが、比較的簡単だと思います。

    キャンセル

  • 2016/10/08 02:42

    ありがとうございます、まだ解決はしていないのですが、これからがんばってみようと思います。

    キャンセル

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

  • ただいまの回答率 90.37%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • JavaScript

    18786questions

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