0

给定一个“地址”列表(字符串),我可以在我的 Java 代码(协调类)中获取地理编码(纬度和经度)。

有了地理编码结果,我的目标是将坐标放在 HTML 页面中。使用 bing 地图,我正在写这样的东西:

     function GetMap()
     {
        // Initialize the map
        map = new Microsoft.Maps.Map(document.getElementById("myMap"), {credentials:"MY_KEY_COMES_HERE"}); 

        // Retrieve the location of the map center 
        var center = map.getCenter();

        var pins = new Microsoft.Maps.EntityCollection();

         //[PASTE] this code is outputed by my java business code and later copy-paste here
        var position = new Microsoft.Maps.Location(21.1833927,-71.147288);
        var pin = new Microsoft.Maps.Pushpin(position);
        pins.push(pin)

        var position = new Microsoft.Maps.Location(21.1822191,-71.182732);
        var pin = new Microsoft.Maps.Pushpin(position);
        pins.push(pin)

        var position = new Microsoft.Maps.Location(22.1188265,-73.1515302);
        var pin = new Microsoft.Maps.Pushpin(position);
        pins.push(pin)

        var position = new Microsoft.Maps.Location(22.1901809,-72.9447259);
        var pin = new Microsoft.Maps.Pushpin(position);
        pins.push(pin)

        var position = new Microsoft.Maps.Location(21.1194505,-71.92582259999999);
        var pin = new Microsoft.Maps.Pushpin(position);
        pins.push(pin)

          //..rest of code comes here 
      }

javascript中的代码区域是手动完成的;也就是我system.out这个词下的代码[PASTE]。此刻,我这样做只是为了看看我的坐标是正确的(我知道,效率低下而且是假的)。

这让我想到了我的问题:如何在没有上述手动工作的情况下直接写入 HTML 页面(或 javascript)。或者,如何将我的 java 业务代码与 javascript 结合起来?

4

2 回答 2

1

最简单的解决方案是使用将 for 循环从 javascript 移动到 java(在 jsp 页面中),它会吐出评估的位置。myLocations此示例假设您有一个预先填充了所有位置数据的数组。

<% for (int i=0; i < myLocations.length; i++) { %>
       ///...get the coordinates (l1,l2)
       var position = new Microsoft.Maps.Location(<%= myLocations[i].l1 %>, <%= myLocations[i].l2 %>);

       // Creates a Pushpin
       var pin = new Microsoft.Maps.Pushpin(position);
       pins.push(pin);
<% } %>

这种方法的缺点是,由于生成的 javascript 不断变化,您无法将其缓存在客户端浏览器中,从而导致效率低下。为避免这种情况,您可以向提供当前需要添加的位置的 jsp 页面创建 AJAX 请求。

于 2012-11-11T19:46:29.600 回答
1

如果 java 业务代码可以在浏览器中运行并从客户端浏览器访问它需要的所有资源,您可以将您的 java 代码部署为小程序:Javascript 到 Java Applet 通信

您的用例看起来更像是您希望它在后端服务器上的应用程序服务器中运行,并让您的浏览器通过 http 调用与其通信。在 JavaScript 中,最好使用 JavaEE6 的 JAX-RS 功能来完成,Jersey 是其参考实现: Access Jersey based RESTful service using jQuery

在您的应用程序服务器中,您有:

class Result{
    public List<Pair<Long,Long>> getList();
    ...
}

@Path("/coordinates")
public class CoordinatesResource {

    @GET
    @Produces
    public Result getCoordinates(String location){
        return ...;
    }
}

在 html 页面中,您有类似的内容:

$.getJSON("http://my.server.com/coordinates/?location=" + location,
  function(json) {
    for(var i = 0; i < json.list.length; i++){
      position = new Microsoft.Maps.Location(json.list[i].left,json.list[i].right);
      var pin = new Microsoft.Maps.Pushpin(position);
      pins.push(pin)
    }
}
于 2012-11-11T19:49:28.733 回答