RailsでOpenStreetMapを扱う
5517 ワード
概要
Railsで地点を登録する時、緯度経度を入力させるのはUX的にもどうかと思う。
そこで、マップから地点を登録することができればイイ感じになりそう。
今回はOpenStreetMapを使って実装してみる。
実装
今回は登録画面で地図を表示し、クリックした地点にマーカーを立てて、緯度経度を取得する。
事前準備
- scaffoldで簡単に登録画面等を準備する。モデル生成時に緯度経度を忘れないようにする。
- rails sでサーバーが起動できていることを確認する。
- leaflet - Downloadから安定版をダウンロードする。
本編
上記のサイトからダウンロードしたものを下記のディレクトリに移動する。
- leaflet.js => /vendor/assets/javascripts
- leaflet.css => /vendor/assets/stylesheets
- Imageについては/vendor/assets/にimagesディレクトリを作成し、中身を移動する。
スクリプトファイルとスタイルシートの読み込み
app/assets/javascripts/application.js
//= require jquery
//= require jquery_ujs
# 以下を追加
//= require leaflet
app/assets/stylesheets/application.css
*= require_self
# 以下を追加
*= require leaflet
*= require_tree .
地図を表示する
app/views/maps/_form.html.erb
<div id="map"></div>
<style type="text/css">
#map {
height:400px;
}
</style>
<script type="text/javascript">
L.Icon.Default.imagePath = "/assets";
var map = L.map('map').setView([緯度, 経度],17);
var osmUrl = "http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png";
var osmAttrib = "Map data OpenstreetMap contributors";
L.tileLayer(osmUrl,{
attribution: osmAttrib,
maxZoom: 20,
}).addTo(map);
</script>
ここまで、終わったら実際に登録画面で地図が表示されるか確認する。
まだ、マーカーを立てることや緯度経度の取得はできない。
クリックした地点にマーカを設置&緯度経度の取得
続きに入力していく
app/views/maps/_form.html.erb
var marker = L.marker([緯度, 経度]).addTo(map);
map.on("click",function(e){
marker.setLatLng(e.latlng);
$('#map_latitude').val(e.latlng.lat);
$('#map_longitude').val(e.latlng.lng);
});
このとき、フォーム中に緯度経度表示欄があり、表示させたい場合は、フォームにidを設定する必要がある。
下記は例であるが、:id =>'id名 'でidを割り振ることができる。
<div class="field">
<%= f.label :latitude %><br>
<%= f.text_field :latitude, :id => 'map_latitude'%>
</div>
<div class="field">
<%= f.label :longitude %><br>
<%= f.text_field :longitude, :id => 'map_longitude'%>
</div>
Google Mapもいいけど、たまにはOSMでもいいじゃないかという記事でした
参考サイト
Author And Source
この問題について(RailsでOpenStreetMapを扱う), 我々は、より多くの情報をここで見つけました https://qiita.com/msk6252/items/d3b436f96028d66fa028著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .