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 内のコード領域は手動で行います。つまり、[PASTE] という単語の下のコードを system.out します。現時点では、座標が正しいことを確認するためだけにこのようにしています (私は知っていますが、非効率的でダミーです)。

それで、私の質問に行き着きます: 上記の手動作業なしで、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 アプレットへの通信

あなたのユースケースは、バックエンドサーバー上のアプリケーションサーバーで実行し、ブラウザーが http 呼び出しを介して通信できるようにしたいように見えます。JavaScript からは、Jersey が参照実装である JavaEE6 の JAX-RS 機能を使用してこれを行うのが最適です: jQuery を使用して Jersey ベースの RESTful サービスにアクセスする

アプリケーション サーバーには次のものがあります。

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 に答える