1

BingMapsAPIに関して簡単な質問がありました。APIをアプリケーションにロードすると、ワールドがロードされ、タイルを何度も繰り返し無限にスクロールします。私が知りたいのは、マップを繰り返さずに完全なマップのみを表示するように設定し、場合によってはそのビューを誰でもズームアウトできる最大値として設定する方法があるかどうかです。

言い換えれば、繰り返しのタイルを見たくなく、完全なマップを表示するだけです。マップ全体が表示されたら、スクロール機能をロックして、何も繰り返されないようにし、ズームアウト機能をロックします。

違いがあれば、WPFを使用してこれを実行しようとしています。

4

1 に答える 1

2

以下は、マップの表示を制限するためのカスタムマップモードです。フィールドとメソッドを調整して、マップを希望どおりに制限することができます。

public class CustomMapMode : MercatorMode {

    // The latitude value range (From = bottom most latitude, To = top most latitude)
    protected static Range<double> validLatitudeRange = new Range<double>(39.479665, 39.486985);
    // The longitude value range (From = left most longitude, To = right most longitude)
    protected static Range<double> validLongitudeRange = new Range<double>(-87.333154, -87.314100);
    // Restricts the map view.

    protected override Range<double> GetZoomRange(Location center) {
        // The allowable zoom levels - 14 to 25.
        return new Range<double>(14, 25);
    }

    // This method is called when the map view changes on Keyboard and Navigation Bar events.
    public override bool ConstrainView(Location center, ref double zoomLevel, ref double heading, ref double pitch) {
        bool isChanged = base.ConstrainView(center, ref zoomLevel, ref heading, ref pitch);

        double newLatitude = center.Latitude;
        double newLongitude = center.Longitude;

        // If the map view is outside the valid longitude range,
        // move the map back within range.
        if(center.Longitude > validLongitudeRange.To) {
            newLongitude = validLongitudeRange.To;
        } else if(center.Longitude < validLongitudeRange.From) {
            newLongitude = validLongitudeRange.From;
        }

        // If the map view is outside the valid latitude range,
        // move the map back within range.
        if(center.Latitude > validLatitudeRange.To) {
            newLatitude = validLatitudeRange.To;
        } else if(center.Latitude < validLatitudeRange.From) {
            newLatitude = validLatitudeRange.From;
        }

        // The new map view location.
        if(newLatitude != center.Latitude || newLongitude != center.Longitude) {
            center.Latitude = newLatitude;
            center.Longitude = newLongitude;
            isChanged = true;
        }

        // The new zoom level.
        Range<double> range = GetZoomRange(center);
        if(zoomLevel > range.To) {
            zoomLevel = range.To;
            isChanged = true;
        } else if(zoomLevel < range.From) {
            zoomLevel = range.From;
            isChanged = true;
        }

        return isChanged;
    }
}
于 2012-06-15T20:33:29.280 に答える