JavaFXでさわるGoogleMap
はじめに
この記事は JavaFX Advent Calendar 2016 - Qiita
の二十三日目の記事です。
- 昨日は id:skrb さんのJavaFXのGUI構築ツール、Scene BuilderでFXML編集 - JavaFX in the Boxのお話です
- 明日は masanori-_-msl - QiitaさんのJavaFX + Apache POIでSpreadsheet操作 - JavaFX Advent Calendar 2016 - vaguelyのお話です
記事を書くに当たったキッカケ
2016 JJUG-CCC でJavaFXで地図を表示するお話があり、
もっと手軽にさわれないかなーと思って調べてみました
今回触ったLibrary
GoogleMapv3 Javascript API をラップしてJavaFXで使えるようにしたLibraryです*1
http://rterp.github.io/GMapsFX/
gradleで使う場合は
compile 'com.lynden:GMapsFX:2.0.9'
の指定で利用可能です。
Manifest-Version: 1.0 Archiver-Version: Plexus Archiver Built-By: RobTerpilowski Created-By: Apache Maven Build-Jdk: 1.8.0_05 Main-Class: com.lynden.gmapsfx.MainApp
な 記述があるため
一応java8環境であれば、ダブルクリックで動作サンプルが見れます
一応もう一個サンプルは同梱されているようで
#MANIFEST.MFに指定されているサンプル java -cp .:GMapsFX-2.0.9.jar com.lynden.gmapsfx.MainApp java -cp .:GMapsFX-2.0.9.jar com.lynden.gmapsfx.MainApp2
あたりで動作は確認できます
試しにサンプルコード動かしてみたんですが
一応GoogleMapのコードを書いた事がある人であれば、似たような記述で書けるようです。
ただなんか解説記載が古いようでコンパイルエラーになったので ★ の箇所を修正
- MainApp.java
import com.lynden.gmapsfx.GoogleMapView; import com.lynden.gmapsfx.MapComponentInitializedListener; import com.lynden.gmapsfx.javascript.object.GoogleMap; import com.lynden.gmapsfx.javascript.object.LatLong; import com.lynden.gmapsfx.javascript.object.MapOptions; import com.lynden.gmapsfx.javascript.object.MapTypeIdEnum;//★ import com.lynden.gmapsfx.javascript.object.Marker; import com.lynden.gmapsfx.javascript.object.MarkerOptions; import javafx.application.Application; import static javafx.application.Application.launch; import javafx.scene.Scene; import javafx.stage.Stage; public class MainApp extends Application implements MapComponentInitializedListener { GoogleMapView mapView; GoogleMap map; @Override public void start(Stage stage) throws Exception { //Create the JavaFX component and set this as a listener so we know when //the map has been initialized, at which point we can then begin manipulating it. mapView = new GoogleMapView(); mapView.addMapInializedListener(this); Scene scene = new Scene(mapView); stage.setTitle("JavaFX and Google Maps"); stage.setScene(scene); stage.show(); } @Override public void mapInitialized() { //Set the initial properties of the map. MapOptions mapOptions = new MapOptions(); LatLong lat = new LatLong(35.4748634, 139.6352027); mapOptions.center(lat) .mapType(MapTypeIdEnum.ROADMAP) //★ .overviewMapControl(false) .panControl(false) .rotateControl(false) .scaleControl(false) .streetViewControl(false) .zoomControl(false) .zoom(12); map = mapView.createMap(mapOptions); //Add a marker to the map MarkerOptions markerOptions = new MarkerOptions(); markerOptions.position(lat) .visible(Boolean.TRUE) .title("My Marker"); Marker marker = new Marker( markerOptions ); map.addMarker(marker); } public static void main(String[] args) { launch(args); } }
今更ながらコンパイル環境的な話
気軽に職場でお昼休憩とかに試そうと思ってたんですけど
せっかくAS環境が標準になってJava8が開発端末に普通に入れられるのはいいですが、
- AS2.2あたりから
- IDEA CE的な感じで JavaFX Pluginが導入できない
- Groovy Consoleとかもどっか消えた><
で、今更ながらローカルjarの参照がフルパス参照でしか認識しなくて何故かハマると。。
昔からそうだったかな・・・と
でコンパイルできていた認識が有るんですけど、なんでなんだろう??
もちろん環境パスは
export PATH=$PATH:.
で直下は参照できているんですけど・・
- cmp.sh
javac -cp $CLASSPATH:`pwd`/GMapsFX-2.0.9.jar MainApp.java # pause # read Wait java -cp .:GMapsFX-2.0.9.jar MainApp
という感じで、今回はタイムアウトです。。。
実際使うならGeoCodingとか現在地とかも出来るかも調べてみたいですね
あとで試したい記事
- fxml を使ったサンプル
Mapping Directions with JavaFX using the GMapsFX Directions API | Rob's Blog
Mapping an Address with JavaFX using the GMapsFX Geocoding API | Rob's Blog
*1:キーとか指定するところがないんですがどこで指定してるんでしょう??