10

だから、GoogleマップAPIを使用するための次のスクリプトがありますが、すべて問題ありませんが、複数のマーカー(何かを指している風船の形をしたアイコン)を持つマップを作成する必要があり、それらのマーカーのそれぞれを指す必要がありますマップの別のエリア (つまり、別の座標)、どうすればいいですか?

<script type="text/javascript">

         function load() {

        var map = new GMap2(document.getElementById("map"));
        var marker = new GMarker(new GLatLng(<%=coordinates%>));

        var html="<img src='simplemap_logo.jpg' width='20' height='20'/> " +
             "<%=maptitle%><br/>" +
             "<%=text%>";



        map.setCenter(new GLatLng(<%=coordinates%>), <%=zoom%>)
        map.setMapType(G_HYBRID_MAP);
        map.addOverlay(marker);
        map.addControl(new GLargeMapControl());
        map.addControl(new GScaleControl());
        map.addControl(new GMapTypeControl());


        marker.openInfoWindowHtml(html);
        }

        //]]>
        </script>

もう 1 つの質問です。スクリプト テキストを変数として渡す場合、次のように言いましょう。

<script type="text/javascript">
<%=ScriptText%>
</script>

私の <%=ScriptText%> は、私が作成してその値を Friend または Public 変数の ScriptText に割り当てる文字列になります。それでも実行され、正しく動作しますか? (私はこれを行って、スクリプトを動的で、STRING として構築する方法に基づいて異なるものにしています。これは、javascripting の文盲のためです;P)

4

4 に答える 4

21

obeattie と gregers はどちらも正しいです。一般に、後で少なくとも 2 回使用するある種の配列にマーカー パラメータを格納する必要があります。

  1. 地図にオーバーレイを追加するとき
  2. 中心点とズームレベルを計算するためにGLatLngBoundsオブジェクトに追加するとき

配列またはマーカーは、次のようなオブジェクトの配列のように見えます。

var latlng1 = [
    new GLatLng( 48.1234, -120.1234 ),
    new GLatLng( 48.5678, -120.5678 ),
    new GLatLng( 48.9101, -120.9112 ),
    new GLatLng( 48.1121, -120.1314 ),
    new GLatLng( 48.3145, -120.1516 ),
    new GLatLng( 48.1617, -120.1718 ),
    new GLatLng( 48.1819, -120.1920 ),
    new GLatLng( 48.2021, -120.2122 )
];

マーカーを追加するコードは次のようになります。

  // assume that map1 is an instance of a GMap2 object

  // #0 -- google maps api requires us to call setCenter first before calling any other operation on the map
  map1.setCenter( new GLatLng( 0, 0 ), 0 );

  // #1 -- add markers
  for ( var i = 0; i < latlng1.length; i++ )
  {
    var marker = new GMarker( latlng1[ i ] );
    map1.addOverlay( marker );
  }

  // #2a -- calculate center
  var latlngbounds = new GLatLngBounds( );
  for ( var i = 0; i < latlng1.length; i++ )
  {
    latlngbounds.extend( latlng1[ i ] );
  }

  // #2b -- set center using the calculated values
  map1.setCenter( latlngbounds.getCenter( ), map1.getBoundsZoomLevel( latlngbounds ) );

クライアント側の JavaScript 内でサーバー側のスクリプトを使用することについての質問については、はい、それらを混在させることができます。あなたの説明から判断すると、これがあなたがする必要があることだと思います:

<script type="text/javascript">
    var latlng1 = new Array( );
</script>
<script type="text/javascript">
    <%
        do until rs.eof
            %>
            latlng1.push( new GLatLng( parseFloat( '<%= rs( "Lat" ) %>' ), parseFloat( '<%= rs( "Lng" ) %>' ) ) );
            <%
            rs.movenext
        loop
    %>
</script>

http://salman-w.blogspot.com/2009/03/zoom-to-fit-all-markers-polylines-or.htmlに記事を投稿しました。

于 2009-03-31T06:06:40.427 に答える
5

GMarkerマップ上にマークする場所ごとに、新しい を作成する必要があります。s については、ここで入手できる非常に優れたドキュメントがありますGMarker

を作成するには、ドキュメントから、マーカーをドロップする場所を表すGMarkerを最初に作成する必要があることがわかります。GLatLngバルーンにコンテンツが欲しいとは言っていないので、それはあなたが求めている単なるマーカーだと思います. あなたの場合、コードはおそらく次のようになります。

var markerCoords = [
    new GLatLng(<latitude>, <longitude>),
    new GLatLng(<latitude>, <longitude>),
    [...]
];

for (coord in markerCoords){
    map.addOverlay(new GMarker(coord));
};

おそらくここで何が起こっているのか正確にわかると思いますが、念のため、GLatLngオブジェクトの配列を作成し (これは [境界内で任意の長さにすることができます])、それを反復処理して、マップにマーカーを追加しますGLatLng配列で定義されたそれぞれに対して。

多数のマーカーを作成することを計画している場合は、マーカー マネージャーを使用すると便利です。これにより、多数のマーカーを同時にレンダリングする速度が向上します (オフスクリーン マーカーをレンダリングせず、オンスクリーン マーカーがある場合はそれらを圧縮することにより)。画面の 1 つの領域に多数あります)。

于 2009-03-03T10:09:18.440 に答える
1

私はこのようなものを持っていますが、イベントは機能しません。オブジェクトのコンストラクター内にリスナーを追加できますか?

//Localization object onstructor
function Localization(width, height, description, img_source){
    this.point = new GLatLng(width, height);
    this.marker = new GMarker(this.point);
    this.description = description;
    this.img_source = img_source;
    GEvent.addListener(this.marker, "click", function(){marker.openInfoWindowHtml(this.description);});
}

//map localizations to show on map
var localizations = [
    new Localization( 52.9015797, 15.2602200, 'Poznań1', 'eye1' ),
    new Localization( 52.9025797, 15.1602200, 'Poznań2', 'eye2' ),
    new Localization( 52.9035797, 15.2702200, 'Poznań3', 'eye3' ),
    new Localization( 52.9045797, 15.2102200, 'Poznań4', 'eye4' ),
]

var map = new GMap2(document.getElementById("mapa"));
map.setCenter(localizations[3].point, 13);
map.setUIToDefault();


for(i=0; i < localizations.length; i++){
    localization=localizations[i];
    map.addOverlay(localization.marker);
    localization.marker.openInfoWindowHtml(localization.description);
}
于 2010-08-11T13:19:16.383 に答える