구글링했을 때 나오는 자바 Swing에서 JTextPane 기반으로 웹을 띄우는 방식은 정말 텍스트 형태로만 화면을 불러오게 된다. 이미지나 플래시가 존재하는 화면을 읽어오는 방식이 아니었음.
구글 맵을 띄워야하기 때문에 JTextPane을 사용할 수는 없고 더 구글링을 해보니까 나오는 방식이 자바FX의 WebView를 이용하는 것이었다.
https://gist.github.com/skrb/2333689
여기를 참고해서 engine.load 부분에 원하는 주소를 입력하면 자바에서도 웹을 호출할 수 있다.
import java.io.IOException;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
public class test extends Application {
@Override
public void start(Stage stage) throws Exception {
StackPane root = new StackPane();
WebView view = new WebView();
WebEngine engine = view.getEngine();
engine.load("https://www.google.co.kr/maps/@45.2000678,17.2800773,5z?hl=ko");
root.getChildren().add(view);
Scene scene = new Scene(root, 800, 600);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) throws IOException {
Application.launch(args);
}
}
그런데 실제로 해야하는건 자바 스크립트 파일을 읽어서 맵을 띄우는 방식이라 이 방식도 다 맞는건 아니었다.
http://fxexperience.com/2011/05/maps-in-javafx-2-0/
Maps in JavaFX 2.0
Something that you see more and more with client applications at the moment is embedded map components. This blog will show you how to embed Google, Yahoo or Bing maps in your JavaFX application. D…
fxexperience.com
http://javatutorialsx.blogspot.com/2012/03/embed-google-maps-in-javafx-webview.html
Embed Google Maps in JavaFX WebView
The Google Maps Javascript API lets you embed Google Maps in your own web pages. With WebView in JavaFX 2.0, you can easy embed Google Maps...
javatutorialsx.blogspot.com
이걸 하려고 자바스크립트용으로 VSCode도 새로 깔았는데 문제는...
VSCode에서는 지도까지 제대로 실행되고 자바에서도 Java-Buddy : Google Maps라는 문자까지는 제대로 떴다.
그런데 지도부분만 그냥 텅 비어서 로드가 안됨....
다른 예제들을 찾아봐도 구글맵만 화면에서 안뜬다.
자바FX도 자바스크립트도 예제 찾아서 실행만 시키고 있는데 오류 찾아서 해결하는건 시간이 너무 오래걸릴 것 같아서 혹시하는 마음에 네이버 지도 api를 불렀는데 한번에 실행이 됐다!!
https://navermaps.github.io/maps.js.ncp/docs/tutorial-2-Getting-Started.html
NAVER Maps API v3
NAVER Maps API v3로 여러분의 지도를 만들어 보세요. 유용한 기술문서와 다양한 예제 코드를 제공합니다.
navermaps.github.io
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
<title>간단한 지도 표시하기</title>
<script type="text/javascript" src="https://openapi.map.naver.com/openapi/v3/maps.js?ncpClientId=YOUR_CLIENT_ID"></script>
</head>
<body>
<div id="map" style="width:100%;height:400px;"></div>
<script>
var mapOptions = {
center: new naver.maps.LatLng(37.3595704, 127.105399),
zoom: 10
};
var map = new naver.maps.Map('map', mapOptions);
</script>
</body>
</html>
import java.net.URL;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.HPos;
import javafx.geometry.Insets;
import javafx.geometry.VPos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Region;
import javafx.scene.layout.StackPane;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebEvent;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
/**
*
* @web http://java-buddy.blogspot.com/
*/
public class test extends Application {
private Scene scene;
MyBrowser myBrowser;
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("네이버 지도");
myBrowser = new MyBrowser();
scene = new Scene(myBrowser, 640, 480);
primaryStage.setScene(scene);
primaryStage.show();
}
class MyBrowser extends Region{
HBox toolbar;
WebView webView = new WebView();
WebEngine webEngine = webView.getEngine();
public MyBrowser(){
final URL urlGoogleMaps = getClass().getResource("naverMaps.html");
webEngine.load(urlGoogleMaps.toExternalForm());
getChildren().add(webView);
}
}
}
구글맵 예제 중 두 번째 예제를 참고해서 html을 네이버 지도 html 호출하는 부분으로만 바꿨더니 바로 성공!
문제는 사용자 인증때문에 지도가 안뜨는 거지만 그건 네이버 지도 API 들어가서 발급받으면 바로 해결됨.
인증 과정에서 Web 서비스 URL을 등록해야하는데 난 사이트가 없어서 고민하다가 질문했더니 바로 답변와서 감동 ㅠ
file:///C:/Users/evermore/IdeaProjects/ 처럼 html 파일이 위치한 폴더 주소를 입력해도 잘 작동한다.
여기까지 5월 7일 진행사항 끝
'JAVA > 지도 프로젝트' 카테고리의 다른 글
네이버 지도 다중마커 - 참고 (0) | 2019.05.10 |
---|---|
자바스크립트 구글맵 예제 (0) | 2019.05.06 |
JOSM - JmapViewer (0) | 2019.05.01 |
JOSM 사용하기 (0) | 2019.04.26 |