2015-01-27 3 views
0

Я пытаюсь создать карту с Latitude & Долгота, я извлекаю эти латы & lon из базы данных MYSQL. У меня есть класс java, который будет подключаться к базе данных & retrieve lat, lon, поэтому мне нужно передать эти значения JavaScript, который имеет код для создания карты.Как передать переменные из класса java в Java Script

В сценарии Java у меня есть функция addmarker(), которая имеет lat & lon.The Фактическое требование - мне нужно передать lat, lon из класса java в Java-скрипт.

Вот мой Java-код:

  Connection conn = null; 
      PreparedStatement pst = null; 
      ResultSet rs = null; 

      String url = "jdbc:mysql://localhost:3306/"; 
      String dbName = "db5"; 
      String driver = "com.mysql.jdbc.Driver"; 
      String userName = "root"; 
      String password = "root"; 



      try { 
        Class.forName(driver).newInstance(); 
        conn = DriverManager.getConnection(url + dbName, userName, password); 



       pst = conn.prepareStatement("select latitude,longitude from nidgis where nidevid=?"); 
       pst.setString(1, n); 
       rs = pst.executeQuery(); 

       while(rs.next()) 
       { 
         rs.getInt("latitude"); 
         rs.getInt("longitude"); 
       } 

      } 
      catch (Exception e) 
      { 
       System.out.println(e); 
      } 

Вот мой JS код:

 <script> 
      function addMarker() 
      { 


       var vehicle = new MQA.Poi({ 
       lat: vehicle_lat, 
       lng: vehicle_lng, 
      }); 
       var icon = new MQA.Icon(
      'https://cdn2.iconfinder.com/data/icons/gpsmapicons /blue/gpsmapicons07.png', 
       35, 42); 
      vehicle.setIcon(icon); 
      vehicle.setKey("abc"); 
      map.addShape(vehicle); 
      vehicle.setRolloverContent("Vehicle # KA05 9999"); 
     } 

       MQA.EventUtil.observe(window, 'load', function() { 

       /*Create an object for options*/ 
      var options={ 
        elt:document.getElementById('map'),  /*ID of element on the page where you want the map added*/ 
        zoom:10,         /*initial zoom level of map*/ 
        latLng:{lat:39.743943, lng:-105.020089}, /*center of map in latitude/longitude*/ 
        mtype:'map'        /*map type (map)*/ 
       }; 

       /*Construct an instance of MQA.TileMap with the options object*/ 
       window.map = new MQA.TileMap(options); 

       MQA.withModule('geocoder', function() { 
       /*Executes a geocode and adds result to the map*/ 
      map.geocodeAndAddLocations("Denver CO"); 
      }); 
      }); 
       </script> 
       <body> 

       <div id='map' style='width:1560px; height:730px;'></div> 
       <button id="getBasicSample" onclick="addMarker();">show veh1</button> 

      </body> 
+0

есть ли что-нибудь, что вы пробовали? ваш код не дает никакого контекста. то есть где java-класс, сервлет? – epoch

+0

Нет, я не знаю, как пройти лат лаон из java-класса в javascript, мой код java, о котором я упомянул выше, который будет подключаться к записям db & fetch –

ответ

1

Ваш код Java должен быть в сервлет, то вы должны добавить свои lat/lng результаты в контейнер и сериализации в JSON, например, с GSON:

class Result { 
    double lat; 
    double lng; 

    Result(double l, double ll) { 
     this.lat = l; 
     this.lng = ll; 
    } 
} 

List<Result> results = new ArrayList<>(); 
while (rs.next()) { 
    results.add(new Result(rs.getInt("latitude"), rs.getInt("longitude"))); 
} 

final TypeToken<List<Result>> resultsType = new TypeToken<List<Result>>() {}; 
response.getWriter().write(new Gson().toJson(results, resultsType.getType())) 

, а затем в Ваш JavaScript, предполагает, что это было вызван с помощью Ajax, вы можете потреблять JSON:

var markers = []; 
for (var i = 0; i < responseJSON.length) { 
    markers.push(responseJSON[i].lat + ', ' + responseJSON[i].lng) 
} 
0

С вашим вопросом, то кажется, что вы пытаетесь добавить маркер в карте. Во всяком случае, вот решение в шагах:

Шаг 1: В контроллере установите строку:

String data = "{\"lat\":" + Lattitude + ",\"Longitude\":" + Longitude+ "}"; 
request.getSession(false).setAttribute("latLong", data); 

Шаг 2: На странице JSP, вы можете получить ту же строку,

<script> 
var latLon = <%=session.getAttribute("latLong") %>; 

// Вы готовы.

В случае, если вы пытаетесь получить lat-long после загрузки JSP. Затем вы должны пойти с запросом на вызов Ajax и извлечь вышеупомянутый «latLong» в качестве ответа в JSON. Обновлено: Если вы хотите добавить маркер, то ниже будет логика.

Предположим, что пользователь нажал в одном месте на карте, и у вас уже есть карта и слои для одного и того же. В следующем примере есть map, являющийся объектом OpenLayers.Map.

map.events.register("click", map, function(e) { 

          var positionN = this.events.getMousePosition(e); 

          var lonlat = map.getLonLatFromPixel(positionN); 
          var TempPoint = new OpenLayers.Geometry.Point(lonlat.lon, lonlat.lat); 
          var iconAnnotation = new OpenLayers.Icon(OpenLayers.ImgPath + '../../css/img/icon.png'); 
          var feature = new OpenLayers.Feature.Vector(TempPoint,{icon:iconAnnotation,labelText: "",markerId:"r", labelColor:"red"}); 
          AnnotationLayer.addFeatures([feature]); 

        }); 
+0

Да, я хочу отображать маркеры после загрузки карты, поэтому, как это сделать Я новичок в JSON –

+0

Я обновил свое решение, а также вам нужно посетить сайт Stackoverflow http://gis.stackexchange.com/ –

+0

Сэр. Я не хочу никакой позиции lat, lon. Я хочу передать lat lon, которые удалены из DB и я хочу передать их JAVA SCRIPT, у которого есть функция, называемая add marker, После того, как карта загружена. Пользователь нажимает кнопку showveh1. Затем все Lat Lon должны быть переданы этому JS –

Смежные вопросы