3

Jvectormap でもう 1 つイライラする問題があります。lngLat を介してページ/マップの読み込み時にマーカーに注目したいのですが、どうすればよいですか? 理想的には、このマーカーに注目するか、latlng に注目するとよいでしょう。マップごとに 1 つのマーカーのみを表示しますが、x/y は lngLat または国コードだけではわかりません。これを行うためのより簡単な方法があるかもしれないので、提案を歓迎します。高度なご協力ありがとうございます

  var markers = [ {latLng: [47.774099, -52.793427], name: "loc 1", label: "This blahblah"}]
   $(function(){
    $('#map1').vectorMap({
                  map: 'world_mill_en',
                  scale: ['#C8EEFF', '#0071A4'],
                  normalizeFunction: 'polynomial',
                  hoverOpacity: 0.7,
                  hoverColor: false,
                  markerStyle: {
                    initial: {
                          fill: '#F8E23B',
                          stroke: '#383f47'
                    }
                  },
                  backgroundColor: '#383f47',
                  markers: markers,
                  focusOn:{
                    latLng: [47.774099, -52.793427],
                    scale: 5
                  },
                  onMarkerLabelShow: function(event, label, index) {
                       label.html( ''+markers[index].label+'');            
                   }
            });
});
4

1 に答える 1

9

私はあなたと同じものが必要で、あなたの未回答の質問に出くわしました。これは、自分で問題を解決するために私が書いたコードです (jVectorMap ソースからコピー、貼り付け、および変更されたスラッシュ)。あなたと他の人が参考になることを願っています。

縮尺、経度、緯度を setFocusLatLng に渡すだけです。

これまたは類似のものを GitHub の jVectorMap プロジェクトに受け入れさせようとするかもしれないので、後でこれを行うためのより良い方法があるかもしれません。

免責事項: マップの端にあるポイントは中央に配置されません。ただし、それらはビューにある必要があります。

編集: リクエストに応じて、jsfiddle のすべてを以下に示します: http://jsfiddle.net/BryanTheScott/rs7H5/

編集:以下の残りのJSも追加しました:

$(function(){
    var smallMap = $('#my_map_container').vectorMap({
        map: 'world_mill_en',
        zoomOnScroll: true,
        zoomMax:5,
        zoomMin:5,
        regionStyle: {
            initial: {
                fill: '#222222',
                "fill-opacity": 1,
                stroke: '#444444',
                "stroke-width": 1,
                "stroke-opacity": 0.7
            },
            hover: {
                "fill-opacity": 0.8,
                fill: '#333333'
            }
        },
        markerStyle: {
            initial: {
                fill: "#000000",
                "stroke": "#7FC556",
                "stroke-width": 2,
                r: 3
            }
        },
        markers: [[37.770172,-122.422771]]
    });

    var mapObj = $('#my_map_container').vectorMap('get', 'mapObject');

    mapObj.setFocusLatLng = function(scale, lat, lng){
        var point,
            proj = jvm.WorldMap.maps[this.params.map].projection,
            centralMeridian = proj.centralMeridian,
            width = this.width - this.baseTransX * 2 * this.baseScale,
            height = this.height - this.baseTransY * 2 * this.baseScale,
            inset,
            bbox,
            scaleFactor = this.scale / this.baseScale,
            centerX,
            centerY;

        if (lng < (-180 + centralMeridian)) {
            lng += 360;
        }

        point = jvm.Proj[proj.type](lat, lng, centralMeridian);

        inset = this.getInsetForPoint(point.x, point.y);
        if (inset) {
            bbox = inset.bbox;

            centerX = (point.x - bbox[0].x) / (bbox[1].x - bbox[0].x);
            centerY = (point.y - bbox[0].y) / (bbox[1].y - bbox[0].y);

            this.setFocus(scale, centerX, centerY);
        }
    }

    mapObj.setFocusLatLng(5, 37.770172,-122.422771);
});
于 2013-02-14T03:26:58.787 に答える